visual style studio programming guide editorconfig coding code 64bit coding-style standards-compliance

64bit - studio - k&r coding style



__USE_FILE_OFFSET64 vs._FILE_OFFSET_BITS=64 (2)

En features.h , puedes ver la relación entre _FILE_OFFSET_BITS y __USE_FILE_OFFSET64 .

#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64 # define __USE_FILE_OFFSET64 1 #endif

Por lo tanto, solo _FILE_OFFSET_BITS está destinado a los usuarios.

Estoy tratando de mantener el código que compila en muchos sistemas diferentes. He visto una docena de maneras diferentes de pedir un lseek que toma 64 bits. Algunos sistemas usan lseek64 , otros usan lseeko , algunos requieren que defina _FILE_OFFSET_BITS=64 , y ahora acabo de encontrar uno nuevo que requiere que defina __USE_FILE_OFFSET64 .

¿Hay algún estándar para todo esto?


Hay valores de getconf en IEEE Std 1003.1-2004 (y un conjunto más reciente en IEEE Std 1003.1-2008 ; consulte también la sección EJEMPLOS en esos documentos). No se especifican las opciones reales del compilador (que incluso podrían no estar definidas).

Sin embargo, la macro AC_SYS_LARGEFILE en autoconf no intenta usar esto, intenta solo -n32 para IRIX, -D_FILE_OFFSET_BITS=64 (que debería funcionar para la mayoría de los sistemas) y -D_LARGE_FILES=1 (aparentemente para AIX). También hay una referencia a Agregar soporte para tamaños de archivo arbitrarios a la Especificación de UNIX único (un borrador de especificación anterior que luego se incluyó parcialmente en la especificación POSIX.1) en las fuentes de autoconf.

En cuanto a la definición de __USE_FILE_OFFSET64 manual, no estoy seguro de si esta es realmente una solución correcta: las macros de subrayado doble están reservadas para los encabezados del sistema, y ​​lo más probable es que exista alguna definición condicional que dependa de otras definiciones.