我第一次尝试设置 NetBeans 8.1 Beta 来运行我的 C 代码。看来我无法解决未知标识符问题!版本如下:
以下截图来自主要代码:
尽管有错误,代码还是成功编译了。据我了解,我已将 include
文件夹引入 NetBeans(见下文),但看起来我做错了什么,因为问题仍然存在。
我按照建议重新解析了项目here并手动将 include
目录添加到我的项目属性中。
但是还是没有成功。我还需要做什么?
最佳答案
这实际上是 C 的一个相当迷人的历史小怪癖,我怀疑您已经遇到过。基本上发生的事情是 Netbeans 仅通过包含的头文件进行解析以找出已声明的函数。由于您没有包含 sleep header (unistd.h),Netbeans 不知道它,因此感到困惑。
这现在提出了一个问题,那就是这个世界上是如何编译的。好吧,这就是它变得有趣的地方。原来在C里面,有implicit function declarations .换句话说,如果您在不声明的情况下使用函数,编译器将继续运送并假设它接受您提供的任何类型的参数并返回一个 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);
^
随后会提示您需要 #include <unistd.h>
.
tl;dr:添加 #include <unistd.h>
并提高你的警告(至少类似于 -Wall -Wextra
),无论 Netbeans 的做法是什么。
关于无法解决 NetBeans 中的标识符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31889421/