单片机C语言头文件 extern "C" 问题

完全无法理解这种语法,请问这是怎么用的呢?示例程序段如下:#ifndefAAA_H#defineAAA_H#ifdef__cplusplusextern"C"{#endi... 完全无法理解这种语法,请问这是怎么用的呢?
示例程序段如下:
#ifndef AAA_H
#define AAA_H

#ifdef __cplusplus
extern "C"
{
#endif

#define A 0x0001
#define B 0x0002
#define C 0x0004

extern void Init();
extern uint16 Process();

#ifdef __cplusplus
}
#endif

#endif /* AAA_H */
展开
 我来答
linnjing
2014-04-12 · TA获得超过2632个赞
知道大有可为答主
回答量:1230
采纳率:91%
帮助的人:517万
展开全部
首先明确一点,extern "C" 这一句是C++的语法,C编译器是无法理解的,所以在使用C进行编译时,这一句是要被跳过的。

由于C++支持重载,在生成符号表时,使用与C不同的方法,以区别重载。比如
void fun( int i );
void fun( float f );
为了区别两个fun,可能会生成 fun_int 与 fun_float 两个函数。这时在C中是无法直接调用fun的,只能在C++中调用fun。

但如果用 extern "C" 声明,比如
extern "C"
{
void fun(int i );
// void fun(float f );
}
这时则按C的语法生成fun的符号,这样在C中可直接调用fun,当然c++也可以用。

简单点结论,如果你的所有源程序,全都使用c语言,或者全部都使用c++,可以不用管extern "C"。否则,用c语言写的部分不需要特别处理,用c++写的部分也不需要特别处理,但用c++调用c写的函数,这些c写的函数的声明部分需要加extern "C"限定。
cxwtc123
2014-04-12 · TA获得超过160个赞
知道小有建树答主
回答量:152
采纳率:0%
帮助的人:175万
展开全部
C++ 和 C 机制有差异,#ifdef __cplusplus 用于判断是否 C ++ 编译器。

参考百度百科 extern "c":
http://baike.baidu.com/link?url=mdbedaNXhQV2q7HySqFaL2BQSMZ8URnS2CMuEgRiNjqM8lD2FX3eoH-pO0GXKW-z34cc27hvhj15NzOQPzrGSq#1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式