嵌入式C语言几个基本语法疑问

[复制链接]
2727|5
 楼主| entepino 发表于 2012-10-30 19:13 | 显示全部楼层 |阅读模式
嵌入式C语言几个基本语法疑问
1
#ifdef __cplusplus
extern
"C" {
#endif
什么意思?
2,位操作:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
#define bmMCDR2_ADDRESS BIT_MASK
(MCDR2_ADDRESS)
#define BIT_MASK(_bf)(((1U<<(bw##_bf))-1)<<
(bs##_bf)
#define SET_BITS(_dst,_bf,_val)\
((_dst)=((_dst)&~(BIT_MASK(_bf)))I
(((_val)<<(bs##_bf))&(BIT_MASK(_bf))))
SET_BITS(MCDR2,MCDR2_ADDRESS,RegisterNumb
er);

其中,##是什么用法?查不到。
airwill 发表于 2012-10-30 19:19 | 显示全部楼层
##是连接的意思.
就是文本字符的直接相连
syp_hust 发表于 2012-10-30 21:48 | 显示全部楼层
非常感谢楼上
赤铸 发表于 2012-10-31 22:54 | 显示全部楼层
#ifdef __cplusplus
extern
"C" {
#endif

是为了兼容C++
Tinnal 发表于 2012-11-1 08:17 | 显示全部楼层
#ifdef __cplusplus
extern
"C" {
#endif

是为了兼容C++
赤铸 发表于 2012-10-31 22:54

对。我再补充一下,这种情况一般是在C、C++混合编程时使用。因为你在C语言里写了一个函数C_NAME,编译出来的汇编标号就是C_NAME,而如果你在C++里头写了一个函数CPLUGPLUG_NAME,编译出来的汇编标号是CPLUGPLUG_NAME_XXX,这里的XXX跟你的函数的参数相关。因此C++里直接调用C的函数,连接器会说找到不函数。但如果你加了上述的宏,那么C++进行调用的代码在编译时,编译器就会按C语言函数汇编标号的规定去生成函数调用,这样就能正确的调用了。

多说一句,C++这么特殊的做法是因为要支持函数重载。
不想给你多说,给你搜了一个贴,你自己去看吧。
http://blog.csdn.net/csm120224267/article/details/6866688
Tinnal 发表于 2012-11-1 08:21 | 显示全部楼层
1# entepino
关于你的第二个问题,也给你搜了一个贴,去看看吧。
http://blog.csdn.net/dotphoenix/article/details/4345174

BTW:这个特殊符号搜索引擎都会过虑掉,我也觉得挺不爽的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

214

主题

653

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部