【问题标题】:vfork() implicit declarationvfork() 隐式声明
【发布时间】:2014-10-29 17:09:53
【问题描述】:

我在 C 中使用 vfork() 工作。我的程序运行良好,但我有关于隐式声明的警告。

我的代码:

if(vfork()==0){
...
}

我的警告是:

函数“vfork”的隐式声明 [-Wimplicit-function-declaration] if(vfork()==0){^

我包括那些:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/wait.h>
#include <stdlib.h>

如果我使用 fork() 而不是 vfork() 警告消失了。 Soo 问题只是我程序中的 vfork() 。 我不知道这是什么意思或我如何解决这个问题。

【问题讨论】:

  • #include 声明了vfork 的任何文件。(看起来像&lt;unistd.h&gt;
  • @ColonelThirtyTwo 我有这个包括
  • 尝试man vfork获取最准确的信息。
  • 请原谅,但如果您不知道您引用的警告是什么意思,那么尝试使用vfork() 不会让您开心... - 这只是一个友好的提示...

标签: c vfork


【解决方案1】:

您需要包含以下 2 个标题:

#include <sys/types.h>
#include <unistd.h> 

另外,在程序的开头添加这一行:

#define _BSD_SOURCE 

【讨论】:

  • @NejcGalof 什么版本的 gcc?我没有收到那个警告。
  • 我有4.8.2版本。
  • @NejcGalof 尝试添加#define _BSD_SOURCE
  • vfork 已弃用(已从 POSIX 规范中删除。)
  • 如果我使用 fork() 而不是 vfork() 警告消失了。 Soo 问题只是我的程序中的 vfork() 。
【解决方案2】:

如果您已经拥有所需的包含文件,那么根据您的系统版本,您可能需要定义一些功能测试宏。请参阅您系统的文档(man vfork 在类 unix 系统上)

【讨论】:

    【解决方案3】:

    添加到 Igor 的答案,确保您没有为 C99 编译。 clang 给了我错误“函数 'vfork' 的隐式声明在 C99 中无效”,并从参数中删除 -std=c99 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-21
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 2021-01-20
      相关资源
      最近更新 更多