Can';无法解决NetBeans中的标识符问题

Can';无法解决NetBeans中的标识符问题,c,gcc,netbeans,header-files,netbeans-8.1,C,Gcc,Netbeans,Header Files,Netbeans 8.1,我第一次尝试安装NetBeans 8.1 Beta来运行我的C代码。似乎我无法解决未知标识符问题!版本如下: 以下屏幕截图来自主代码: 尽管有错误,代码还是编译成功。据我所知,我已经将include文件夹引入了NetBeans(见下文),但看起来我做错了什么,因为问题仍然存在 我按照建议重新解析了项目,并手动将include目录添加到我的项目属性中 但仍然没有成功。我还需要做什么呢?这实际上是C语言中一个非常有趣的小历史怪癖,我想你可能遇到过。基本上,Netbeans只解析包含的头文件,

我第一次尝试安装NetBeans 8.1 Beta来运行我的C代码。似乎我无法解决未知标识符问题!版本如下:

以下屏幕截图来自主代码:

尽管有错误,代码还是编译成功。据我所知,我已经将
include
文件夹引入了NetBeans(见下文),但看起来我做错了什么,因为问题仍然存在

我按照建议重新解析了项目,并手动将
include
目录添加到我的项目属性中


但仍然没有成功。我还需要做什么呢?

这实际上是C语言中一个非常有趣的小历史怪癖,我想你可能遇到过。基本上,Netbeans只解析包含的头文件,以确定声明了哪些函数。由于您没有包含sleep的头(unistd.h),Netbeans没有意识到它,因此感到困惑

这就引出了这样一个问题,即在当时的世界上,它是如何编译的。嗯,这就是它变得有趣的地方。结果在C中,有。换句话说,如果您使用一个函数而不声明它,编译器将继续进行编译,并假设它接受您给定的任何类型的参数,并且它返回一个int

幸运的是,实际版本的sleep与这个隐式版本的链接是兼容的,因此,当链接到默认库时,您很幸运,它找到了
sleep

注意:来自Netbeans的警告是正确的。您碰巧遇到了一种“它对您有用,但不一定能工作”的情况(欢迎使用C!),您应该尽最大努力避免这些情况。在这种情况下,您可以采取的最直接的步骤是增加警告

使用适当的警告级别,您将看到如下内容:

test.c: In function 'main':
test.c:4:2: warning: implicit declaration of function 'sleep' [-Wimplicit-function-declaration]
  sleep(5);
  ^
这将随后提示您需要
#包括


tl;dr:Add
#include
并增加您的警告(至少类似于
-Wall-Wextra
),无论Netbeans的方法是什么