西城

指尖代码,手上年华

联系 聚合 管理
  20 Posts :: 0 Stories :: 62 Comments :: 0 Trackbacks
这两个是在研究一个开源软件的源码时发现的。之前未见过,所以好好研究了一下。
extern "C":告诉C++编译器,在链接时使用C的方法。

因为C++有可以重载函数,但C没有。所以C++编译器在链接时就不能以函数名作为唯一的
标识去链接实现的代码,它会将函数名与参数混在一块产生一个唯一的标识。而C就不用这样,所以如果声明了extern "C",C++编译器就不会在链接的时候加上参数等信息了。

我碰到的这个char[]初始化的问题其实到现在并没有想明白,期待高手解答。源码是
const char version[] = " version " VERSION "." SUBVERSION "." MINORVERSION;
其中VERSION,SUBVESION,MINOVERSION是在Makefile中定义的,并在gcc编译时加入-D参数指定。值分别为:"0","8","0"
所以,最后的结果是:
const char version[] = " version " "0" "." "8" "." "0";
这种初始化方法我用程序验证过,是可行的。最后的就是一个完整的字符串"version 0.8.0"。不明白这种方法,望指教。
posted on 2012-03-27 21:57 西城 阅读(827) 评论(2)  编辑 收藏 引用 所属分类: C/C++

Feedback

# re: C++的两个小的语法问题:exten "C"以及 char[]的初始化 2012-04-12 11:38 dc
查extern竟跑到这边了,这个你可以看一下gcc的资料,-D参数是调试用的,可以定义宏名,等价于在源文件中:#define VERSION "0"
#define SUBVERSION "8",所以源文件中字符串定义中的是宏名
若不定义而用gcc就可以这样:gcc -D'VERSION="0" SUBVERSION="8" ...
这里没什么特别的  回复  更多评论
  

# re: C++的两个小的语法问题:exten "C"以及 char[]的初始化 2012-04-12 12:27 墨魂
@dc
问题已经解决了。不过你不明白我问的问题所在。我问的是字符串初始化,C/C++默认会将那些分离的字符串合成一个  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理