Если следующий код скомпилирован с gcc lfs.c -o lfs, он ничего не печатает. Однако, если он скомпилирован с g ++ lfs.c -o lfs, он печатает «_LARGEFILE_SOURCE, определяемый stdio.h!».Почему _LARGEFILE_SOURCE определен в stdio.h при компиляции с g ++, но не gcc?
#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
Почему stdio.h определение _LARGEFILE_SOURCE когда GCC вызывается через внешний интерфейс г ++?
На какой платформе вы программируете? Вы программируете против glibc? – fuz
'_LARGEFILE_SOURCE' устарел в любом случае, почему, по-вашему, он вам нужен? Устаревший код? –
@BaummitAugen Это не устарело. Если вы компилируете программу на i386 Linux, по умолчанию вы получаете 32-битный 'off_t'. '_LARGEFILE_SOURCE' является необходимым. – fuz