c/c++语言中extern的用法(VS编译)
c/c++语言中extern的用法
- 前言:
- 1. 声明外部变量
- 2. 声明外部函数
- 3. 在头文件中使用
- 注意事项
- 效果展示:
前言:
extern
关键字不仅在 C 语言中使用,在 C++ 语言中也同样适用。它主要用于声明一个变量或者函数是在别的文件或翻译单元中定义的,从而告诉编译器在遇到该变量或函数时,不要报错说找不到定义,而是去其他翻译单元中寻找。
以下是一些 extern
关键字的使用场景:
1. 声明外部变量
当你在一个文件中定义了一个全局变量,希望在另一个文件中使用它时,可以在另一个文件中用 extern
关键字声明这个变量。例如:
file1.c
int globalVar = 10;
file2.c
extern int globalVar;
void function() {
printf("%d\n", globalVar); // 可以访问file1.c中定义的globalVar
}
2. 声明外部函数
类似地,当你希望在一个文件中调用另一个文件中定义的函数时,可以使用 extern
声明这个函数(尽管对于函数来说,通常不需要显式使用 extern
,因为函数默认就是外部的,除非声明为 static
)。
file1.c
void myFunction() {
printf("Hello from myFunction!\n");
}
file2.c
extern void myFunction();
void anotherFunction() {
myFunction(); // 调用file1.c中定义的myFunction
}
3. 在头文件中使用
通常,我们会在头文件中声明外部变量和函数,然后在多个源文件中包含这个头文件。头文件中通常会使用 extern
关键字来声明这些外部符号。
myHeader.h
extern int globalVar;
extern void myFunction();
file1.c
#include "myHeader.h"
int globalVar = 10;
void myFunction() {
printf("Hello from myFunction!\n");
}
file2.c
#include "myHeader.h"
void anotherFunction() {
printf("%d\n", globalVar);
myFunction();
}
注意事项
extern
关键字只是声明,不分配内存。实际的内存分配发生在定义的地方。- 如果在多个文件中声明并定义一个全局变量(即使使用了
extern
),链接器会报错,因为它不知道应该使用哪个定义。 - 对于函数,即使不使用
extern
关键字,编译器也会默认认为函数是外部的(除非用static
关键字声明)。
总结来说,extern
关键字在 C 和 C++ 中都非常重要,用于跨文件或翻译单元访问变量和函数。