如果以下代码使用 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
当通过 g++ 前端调用 GCC 时,为什么 stdio.h 会定义 _LARGEFILE_SOURCE?