1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!
伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字。static的用法可以查看:static有几种用法?
这节讲的是extern关键字的用法。
extern关键字可以用来声明变量和函数作为外部变量或者函数供其它文件使用。
extern声明变量
示例程序:
test.h如下:
//声明
extern int a;
extern int b;
test.c如下:
#include "test.h"
//定义
int a = 520;
int b = 1314;
主函数所在的源文件为main.c,其代码如下:
#include <stdio.h>
#include "test.h"
int main(void)
{
printf("a = %d , b = %d\n", a, b);
return 0;
}
其中,a,b的声明也可放在main.c中,代码如下:
#include <stdio.h>
extern int a;
extern int b;
int main(void)
{
printf("a = %d , b = %d\n", a, b);
return 0;
}
此时,就不需要不需要包含test.h这个头文件了。
extern声明函数
示例程序:
test.h如下:
//声明变量
extern int a;
extern int b;
//函数声明
extern int add(int a, int b); //extern关键字可要可不要
test.c如下:
#include "test.h"
//定义
int a = 520;
int b = 1314;
int add(int a, int b)
{
return a + b;
}
main.c如下:
#include <stdio.h>
#include "test.h"
int main(void)
{
printf("a = %d , b = %d\n", a, b);
printf("add(a, b) = %d\n", add(a, b));
return 0;
}
同上,函数的声明也可以放在其被调用的源文件中,即:
#include <stdio.h>
//声明变量
extern int a;
extern int b;
//函数声明
extern int add(int a, int b); //extern关键字可要可不要
int main(void)
{
printf("a = %d , b = %d\n", a, b);
printf("add(a, b) = %d\n", add(a, b));
return 0;
}
程序运行结果为:
extern “C”
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。
因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的支持原来的C代码和已经写好的C语言库,需要在C++中尽可能的支持C,而extern "C"就是其中的一个策略。
示例代码:
#ifndef __TEST_H /*防止该头文件被重复引用*/
#define __TEST_H
#ifdef __cplusplus
extern "C"{
#endif
/*…*/
#ifdef __cplusplus
}
#endif
#endif /*end of __TEST_H*/
__cplusplus为C++定义的一个宏,此时extern “C”后的部分的代码按C语言的格式进行编译,而不是C++。
以上是extern关键字的三种用法。希望对大家有帮助!