设为首页 加入收藏

TOP

C语言预处理命令详解(七)
2015-01-22 21:13:20 来源: 作者: 【 】 浏览:152
Tags:语言 处理 命令 详解
定义变量出现的问题(一般不定义在#ifndef中)。
?
1 #ifndef PRECMPL
2 ? ? #define PRECMPL
3 ? ? int var;
4 #endif
? ? ?其中有个变量定义,在VC中链接时会出现变量var重复定义的错误,而在C中成功编译。
?
? ? ?(1) 当第一个使用这个头文件的.cpp文件生成.obj时,var在里面定义;当另一个使用该头文件的.cpp文件再次(单独)生成.obj时,var又被定义;然后两个obj被第三个包含该头文件.cpp连接在一起,会出现重复定义。
?
? ? ?(2) 把源程序文件扩展名改成.c后,VC按照C语言语法对源程序进行编译。在C语言中,遇到多个int var则自动认为其中一个是定义,其他的是声明。
?
? ? ?(3) C语言和C++语言连接结果不同,可能是在进行编译时,C++语言将全局变量默认为强符号,所以连接出错。C语言则依照是否初始化进行强弱的判断的(仅供参考)。
?
? ? ?解决方法:
?
? ? ?(1) 把源程序文件扩展名改成.c。
?
? ? ?(2) .h中只声明 extern int var;,在.cpp中定义(推荐)
?
复制代码
1 //
2 #ifndef ?__X_H
3 ? ? #define ?__X_H
4 ? ? extern int var;
5 #endif
6
7 int var = 0;
复制代码
? ? ?综上,变量一般不要定义在.h文件中。
?
?
?
?
首页 上一页 4 5 6 7 下一页 尾页 7/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Objective-C中常用的结构体NSRang.. 下一篇编程算法 - 和为s的连续正整数序..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: