này đơn giản tập tin c:unistd.h và c99 trên Linux
#include <unistd.h>
void test() {
char string[40];
gethostname(string,40);
}
... khi biên dịch bình thường, hoạt động tốt:
$ cc -Wall -c -o tmp.o tmp.c
$
... nhưng khi biên soạn trong chế độ C99, đưa ra cảnh báo:
$ cc -Wall -std=c99 -c -o tmp.o tmp.c
tmp.c: In function `test':
tmp.c:5: warning: implicit declaration of function `gethostname'
$
Tệp kết quả .o là tốt và liên kết hoạt động. Tôi chỉ muốn thoát khỏi cảnh báo. Tôi có thể đạt được điều này một cách hacky, bằng cách đặt tờ khai trong tập tin .h của riêng tôi.
Điều gì về C99 có nghĩa là các khai báo trong unistd.h không được bao gồm? Điều này có thể khắc phục, mà không từ bỏ sự độc đáo của C99?
Tôi thấy cùng một vấn đề với các libs chuẩn khác.
+1 Điều trị rất kỹ lưỡng. –
+1 để có câu trả lời. -10 cho '#define _BSD_SOURCE'. Vui lòng sử dụng '#define _XOPEN_SOURCE 500' hoặc tốt hơn trong chuỗi xây dựng:' cc -D_XOPEN_SOURCE = 500 ... '. Vâng, rằng nếu bất kỳ loại di động là mong muốn. – Dummy00001
Như với câu trả lời của tôi cho Luther - 'man gethostname' trên hệ thống Red Hat của tôi không đề cập đến các yêu cầu về tính năng Macro thử nghiệm. Bất cứ ai có bất kỳ ý tưởng tại sao? – slim