我写了一个在标准输出上打印文本的函数。在编译时(使用gcc exemple.c
),我得到一个warning : implicit declaration of function 'write'
。这是一个例子:
exemple.c :
#include <unistd.h>
int main(void){
write(1, "Hello World !", 13);
return (0);
}
输出:
exemple.c: In function ‘main’:
exemple.c:4:2: warning: implicit declaration of function ‘write’ [-Wimplicit-function-declaration]
write(1, "Hello World !", 13);
我添加了 unistd.h
标题,这就是为什么我不理解警告的原因。
我设法通过添加
来“修复”警告#include <sys/types.h>
//The real prototype, from unistd.h
extern ssize_t write(int __fd, void *__buf, size_t __n)__wur;
但是this告诉我这可能是一个坏主意。
在these例子中,unistd.h
不应该如此吗?或者有更好的方法来使用/编译write
?
注意:我正在使用gcc 5.3.1
进行编译 修改:以下是运行.i
创建的gcc exemple.c -save-temps
文件的链接:exemple.i
答案 0 :(得分:0)
我包含了 <unistd.h>
,但我仍然收到警告。我设法通过在标题中添加 #define _GNU_SOURCE
来消除警告,所以现在是:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
我在编译时使用 brk()
和 sbrk()
时遇到了类似的问题:
gcc -std=c99