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

完全无法理解这种语法,请问这是怎么用的呢?
示例程序段如下:
#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 */

首先明确一点,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"限定。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-12
C++ 和 C 机制有差异,#ifdef __cplusplus 用于判断是否 C ++ 编译器。

参考百度百科 extern "c":
http://baike.baidu.com/link?url=mdbedaNXhQV2q7HySqFaL2BQSMZ8URnS2CMuEgRiNjqM8lD2FX3eoH-pO0GXKW-z34cc27hvhj15NzOQPzrGSq#1

单片机C语言头文件 extern "C" 问题
首先明确一点,extern "C" 这一句是C++的语法,C编译器是无法理解的,所以在使用C进行编译时,这一句是要被跳过的。由于C++支持重载,在生成符号表时,使用与C不同的方法,以区别重载。比如 void fun( int i );void fun( float f );为了区别两个fun,可能会生成 fun_int 与 fun_float 两个...

看很多单片机的头文件里写着 extern "c",这是什么意思?另外,51单片机...
extern "C" { } 这句话意思是,如果你定义了“__cplusplus”这个宏,说明你的意图是想在C++文件中调用这个头文件,我前头说了,C语言的头文件C++是不认识的,怎么办呢,就加上 extern "C" {。。。} 告诉C++文件,大括号里面的东西是用C语言写的,然后C++文件就认识了,就能调用这个头文件里...

extern c作用
externc作用如下:1、被extern“C”限定的函数或变量是extern类型的;extern是C,C加加语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器。其声明的函数和变量可以在本模块或其它模块中使用。2、被extern“C”修饰的变量和函数是按照C语言方式编译和连接的。

在C语言中头文件的extern是什么意思呢?
是一个修饰符,在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量\/函数是在别处定义的,要在此处引用”。extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。另外,extern也可用来进行链接指定。在头文件中声明...

C语言关键字extern详解
问题一:extern修饰全局变量的正确用法和链接错误解决。extern用于声明全局变量,声明可以有无限次,但定义仅需一次。若仅声明未定义,将导致链接错误。定义extern修饰变量时需确保作用域匹配,即在头文件声明后,定义只能在函数外部,否则会报错。在函数外部定义extern修饰变量,避免变量被多次声明的错误。问题...

externc用法
答:在C语言中,"externc"是一种链接修饰符,用于声明一个变量或函数在别的文件中存在,但在这个文件中使用。它告诉编译器在其他地方查找这个变量或函数的定义。这种用法通常用于模块化编程,使得代码更易于维护和复用。需要注意的是,"externc"仅用于在同一编译单元内的外部链接,也就是说,在同一编译...

extern "c"是什么意思
extern是C\/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。记住,下列语句:extern int a;仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会...

c语言中的extern是什么,有什么作用啊?
在C语言中,extern是一个关键字,它的主要作用是标识函数或变量的定义在当前编译单元之外。具体来说,它有以下两个应用场景:首先,当你在某个C文件中声明一个函数,如:extern void add(int x, int y);,这意味着这个函数的实现并不在这个文件里,而是在另一个文件中定义。这样做有助于代码的...

c语言中extern的意思是什么?
在C语言中,`extern`是一个关键字,主要用于声明一个变量或函数是在其他文件中定义的。通过使用`extern`关键字,我们可以告诉编译器该变量或函数在其他地方已经定义,这里只是引用。这样,在编译时,编译器会确保链接到正确的位置以获取其实际的值或实现。二、变量声明与外部引用 当我们在一个文件中声明...

单片机C语言中的全局变量和中断问题,大神进
简单点:在需要使用a的文件里面,在最前面加一行:extern char a;在那个文件里面就可以直接用了。如果多个文件会用到,就多个文件都写这么一行。也可以了解一下头文件。新建main.h, 内容如下:ifndef _MAIN_H_define _MAIN_H_extern char a;endif _MAIN_H_之后在需要用到a变量的文件内在最前面 ...

相似回答
大家正在搜