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

Can't resolve an identifier issue in NetBeans

我第一次尝试将 NetBeans 8.1 Beta 设置为 运行 我的 C 代码。看来我无法解决未知标识符问题!版本如下:

以下截图来自主要代码:

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

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

但是还是没有成功。我还需要做什么?

这实际上是 C 的一个相当迷人的历史小怪癖,我怀疑您已经 运行 了解它。基本上发生的事情是 Netbeans 仅解析包含的 header 文件以找出已声明的函数。由于您没有包含用于睡眠的 header (unistd.h),Netbeans 不知道它,因此感到困惑。

现在这提示了这个世界上如何编译的问题。好吧,这就是它变得有趣的地方。原来在C里面,有implicit function declarations。换句话说,如果你使用一个函数而不声明它,编译器将继续运输并假设它接受你给它的任何类型的参数并且它 returns 一个 int.

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

注意:来自 Netbeans 的警告是正确的。您遇到了 "it works for you, but it's not guaranteed to work" 情况(欢迎来到 C!),您应该尽力避免这些情况。对于这种情况,您可以采取的最直接的措施是增加警告。

在适当的警告级别下,您会看到如下内容:

test.c: In function 'main':
test.c:4:2: warning: implicit declaration of function 'sleep' [-Wimplicit-function-declaration]
  sleep(5);
  ^

随后会提示您需要 #include <unistd.h>


tl;dr:添加 #include <unistd.h> 并提高警告(至少类似于 -Wall -Wextra),无论 Netbeans 的做法是什么。