查看原文
其他

extern怎么用?

正念君 嵌入式大杂烩 2021-01-31


伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了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关键字的三种用法。希望对大家有帮助!


历史文章精选:

01 二维数组作为函数参数

02 小学生都在使用手机学习编程了,你还在吃鸡打王者?

03 别用Visua C++6.0来开发C程序了,用……

04 使用Notepad++来开发C程序

05 关于main()

06 一份通俗易懂的C语言内存总结

07 数组问题:a与&a有什么不同

08 C语言函数参数压栈的顺序是?

09 getchar()、getche()、getch()的区别?

10 【校招编程01】级数求和

11 【校招编程02】优雅的点

12 【校招编程03】整数翻转

13 【校招编程04】懂二进制

14 【校招编程05】找符合条件的数

15 程序员的桌面,好酷!!!

16 static有几种用法?



每日一句

人生不过如此,且行且珍惜。自己永远是自己的主角,不要总在别人的戏剧里充当配角!


我是肥胖的正念君

觉得正念君很胖的话

就来给我点个赞吧

↓     ↓     ↓     ↓     ↓     ↓

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存