次のコードを gcc lfs.c -o lfs でコンパイルすると、何も出力されません。ただし、g++ lfs.c -o lfs でコンパイルすると、「_LARGEFILE_SOURCE defined by stdio.h!」が出力されます。
#ifdef _LARGEFILE_SOURCE
int largefile_defined_at_start = 1;
#else
int largefile_defined_at_start = 0;
#endif
// This defines _LARGEFILE_SOURCE, but only in C++!
#include <stdio.h>
int main(void) {
#ifdef _LARGEFILE_SOURCE
if (!largefile_defined_at_start)
printf("_LARGEFILE_SOURCE defined by stdio.h!");
#endif
return 0;
}
いずれの場合も、_LARGEFILE_SOURCE はコンパイラによって定義されていません。
gcc -dM -E - < /dev/null |grep _LARGEFILE_SOURCE |wc -l
0
g++ -dM -E - < /dev/null |grep _LARGEFILE_SOURCE |wc -l
0
GCC が g++ フロントエンド経由で呼び出されると、stdio.h が _LARGEFILE_SOURCE を定義するのはなぜですか?