Как отметил Аби, ваш код успешно собирается без включения stdio.h, поскольку компоновщик по умолчанию использует системную библиотеку std для неопределенного символа (printf
).GCC обычно предупреждает вас о таких случаях.
Пусть test.c будет:
1: int main()
2: {
3: printf("test\n");
4: return 0;
5: }
Сборка test.c с GCC 4.2.1 на Mac OSX:
$ gcc test.c
test.c: In function ‘main’:
test.c:3: warning: incompatible implicit declaration of built-in function ‘printf’
$ ./a.out
test
Вы можете отключить это связывание по умолчанию, выполнивуказание опции компоновщика GCC -nostdlib
(или -nodefaultlibs
) вместе с -lgcc
(как рекомендует руководство GCC):
$ gcc -nostdlib -lgcc test.c
test.c: In function ‘main’:
test.c:3: warning: incompatible implicit declaration of built-in function ‘printf’
Undefined symbols:
"_puts", referenced from:
_main in cc3bvzuM.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
$