Этот простой .c файл:
#include <unistd.h>
void test() {
char string[40];
gethostname(string,40);
}
... при нормальной компиляции работает нормально:
$ cc -Wall -c -o tmp.o tmp.c
$
... но при компиляции в режиме C99 выдает предупреждение:
$ cc -Wall -std=c99 -c -o tmp.o tmp.c
tmp.c: In function `test':
tmp.c:5: warning: implicit declaration of function `gethostname'
$
Результирующий .o файл в порядке, и связывание работает. Я просто хотел бы избавиться от предупреждения. Я могу добиться этого хакерским способом, помещая объявления в свой собственный файл .h.
Что в C99 означает, что объявления в unistd.h не включаются?
Можно ли это преодолеть, не отказавшись от милости C99?
Я вижу ту же проблему для других стандартных библиотек.