单片机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 */ 展开
示例程序段如下:
#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 */ 展开
2个回答
展开全部
首先明确一点,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"限定。
由于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"限定。
展开全部
C++ 和 C 机制有差异,#ifdef __cplusplus 用于判断是否 C ++ 编译器。
参考百度百科 extern "c":
http://baike.baidu.com/link?url=mdbedaNXhQV2q7HySqFaL2BQSMZ8URnS2CMuEgRiNjqM8lD2FX3eoH-pO0GXKW-z34cc27hvhj15NzOQPzrGSq#1
参考百度百科 extern "c":
http://baike.baidu.com/link?url=mdbedaNXhQV2q7HySqFaL2BQSMZ8URnS2CMuEgRiNjqM8lD2FX3eoH-pO0GXKW-z34cc27hvhj15NzOQPzrGSq#1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询