打印

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

[复制链接]
1772|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++

使用特权

评论回复
5
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

使用特权

评论回复
6
Tinnal| | 2012-11-1 08:21 | 只看该作者
1# entepino
关于你的第二个问题,也给你搜了一个贴,去看看吧。
http://blog.csdn.net/dotphoenix/article/details/4345174

BTW:这个特殊符号搜索引擎都会过虑掉,我也觉得挺不爽的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

203

主题

629

帖子

1

粉丝