次のコードをgcc lfs.c -o lfsでコンパイルすると、何も出力されません。しかし、g ++ lfs.c -o lfsでコンパイルされている場合は、 "stdio.h!で定義された_LARGEFILE_SOURCE"が出力されます。いずれの場合においてもg ++でコンパイルするとstdio.hで_LARGEFILE_SOURCEが定義されるのはなぜですか?
#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 ++フロントエンドを介して呼び出されたとき_LARGEFILE_SOURCEを規定stdio.hのですか?
どのプラットフォームでプログラミングしていますか?あなたはglibcに対してプログラミングしていますか? – fuz
'_LARGEFILE_SOURCE'はとにかく時代遅れですが、なぜあなたはそれが必要だと思いますか?レガシーコード? –
@BaummitAugenこれは廃止されていません。 i386 Linux上でCプログラムをコンパイルすると、デフォルトで32ビットの 'off_t'が得られます。 '_LARGEFILE_SOURCE'はちょっと必要です。 – fuz