隐式声明函数'write'(包括unistd)

时间:2017-11-05 20:51:22

标签: c prototype posix gcc-warning

我写了一个在标准输出上打印文本的函数。在编译时(使用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

1 个答案:

答案 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