NetBeans运行包含头文件的c程序

最近在看Scott  Stevenson的《Cocoa和Objective-C:构建和运行》,看到第三章结尾“最终的实例”,书中是在Xcode中编写的,在终端下使用gcc编译,我实在不喜欢在Xcode下写c/c++,所以就打开了Netbeans。


按照书上的讲解写了头文件、源文件和主文件,注意,这是个纯c程序,正因为如此,后面出了问题。


我在建立头文件和对应的源文件时,选择了新建C++类,新建的文件中自然有class、public、构造函数、析构函数之类的东西,我就按C++的写法把函数写进去了。结果编译没问题,链接却出现了错误:

clang error: linker command failed with exit code 1 (use -v to see invocation)

我意识到可能是“类”出了问题,于是按书上的写法把class之类的关键字删了,只留函数本身,链接还是通不过。


没办法,我打开Xcode,完全按照书中的做法去做,用终端编译,结果竟编译链接成功了。


后来我决定在Netbeans中重新新建一个工程再做测试,这时候终于发现问题出在哪里了:我新建文件时不应该选择“C++类”,而应该分别选择C头文件和C源文件。

上网查了一下为什么会出现这个问题,原来是gcc和g++的区别导致。新建C++类时,C++源文件的后缀名默认为cpp,即便是选择成C,要注意这里是大写的C,所以系统还是作为C++文件来处理。可以对比一下,如果新建的时候选择c源文件,则后缀名是小写c。

对于C文件,gcc会当做C来处理,g++会当作C++来处理,而对于C++文件,gcc和g++都会当做C++来处理,因此,在编译阶段并不会出现问题,事实上g++在编译C++文件时也是调用的gcc。但是在链接阶段,gcc和g++由于使用的库不同,所以gcc无法直接链接C++文件,这也就是新建的C++类在链接时会出错的原因。


因此,对于c程序,新建的文件一定要选c,而c++程序则要选c++。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值