2015-08-08 117 views
3

我试图首次安装NetBeans 8.1 Beta来运行我的C代码。看来我无法解决未知的标识符问题!该版本如下:无法解析NetBeans中的标识符问题

enter image description here

下面的截图是从主代码:

enter image description here

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

enter image description here

我重新解析为劝here和手动添加include目录到我的项目属性的项目。

enter image description here

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

回答

2

这实际上是一个相当迷人的C历史怪癖,我怀疑你遇到过。基本上,Netbeans只通过包含的头文件来分析已经声明了哪些函数。由于你没有包含睡眠头文件(unistd.h),Netbeans并不知道它,因此感到困惑。

这现在提示如何在编译世界的问题。那么,这就是它变得有趣的地方。原来在C中,有implicit function declarations。换句话说,如果你在没有声明的情况下使用函数,编译器将继续进行卡车运算,并假定它接受你给它的任何类型的参数,并返回一个int。

幸运的是,事实证明,真正的睡眠版本与此隐式版本链接是兼容的,因此,当与默认库链接发生时,您会越来越幸运,它会发现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;博士:添加#include <unistd.h>和杀青你的警告(类似-Wall -Wextra至少),不管这样做的Netbeans的方式是。

相关问题