extern关键字的用法
- 一个c文件需要调用另一个c文件里的变量或者函数,而不能从.h文件中调用变量。
- extern int a=5和int a=5意义是一样的,都是定义。而extern int a是声明。
- 对于函数而言,和引用变量是一样的,如果需要调用其他c文件中的函数,在文件中的函数声明前加extern即可,不加extern而直接声明函数也可以,因为声明全局函数默认前面带又extern。
- 如果不想让其他c文件引用本地文件中的变量,加上static即可。
建议最优用法
例如a.c文件中定义了int a=5和一个函数,在a.h里写extern int a;如果要在其他文件里调用a这个变量和函数,直接#include<a.h>即可。
/*a.h*/
#ifndef _A_H_
#define _A_H_
extern int a;
int func(int a, int b);//注意,函数声明的extern可以省略。
#endif
/*a.c*/
#include "a.h"
int a = 5;
int func(int a, int b)
{
return a + b;
}
但是,个人认为。调用其他c文件中的变量,不如将该变量封装成函数提供其他地方调用,然后将改变了加上static。
/*a.h*/
#ifndef _A_H_
#define _A_H_
int get_a();
int func(int a, int b);//注意,函数声明的extern可以省略。
#endif
/*a.c*/
#include "a.h"
static int a = 5;
int func(int a, int b)
{
return a + b;
}
extern “C”的用法
extern “C”的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern “C”后,回指示编译器这部分代码按C语言的进行编译,而不是C++的。
/*a.h*/
#ifndef _A_H_
#define _A_H_
#ifdef __cplusplus
extern "C"{
#endif
int get_a();
int func(int a, int b);//注意,函数声明的extern可以省略。
#ifdef __cplusplus
}
#endif
#endif