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

标签 c gcc netbeans header-files netbeans-8.1

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

enter image description here

以下截图来自主要代码:

enter image description here

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

enter image description here

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

enter image description here

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

最佳答案

这实际上是 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/

相关文章:

c - 为什么char指针会被自动清除?

c++ - crc32 哈希默认值/无效值?

c++ - C++ 中 float 据类型的精度

c++ - gdb 退出并显示 : Program received signal SIGILL, 对使用 gcc/intel_mkl/gfortran -mavx 编译的 c c++ 程序的非法指令

c++ - 记忆一下从 C++ 到 C 的结构

c - 如何在 C 中嗅探数据包时查找 TCP 重传

c - C 中调用函数的不合理错误 - 程序对数组进行排序

java - SQLite 和 Java

Java Netbeans 错误

c++ - 使用 netbeans 调试由脚本加载的 C++ 动态库