extern用于声明跨文件全局变量,需在一处定义(如int x=10;),他处用extern int x;声明;extern “c”则禁用c++名字修饰以兼容c函数,二者用途不同。
extern 怎么声明一个跨文件的全局变量
在 C++ 里,extern 不是用来定义变量的,而是告诉编译器:“这个变量在别处定义了,我这里只是用一下”。常见错误是写成 extern int x = 10; —— 这会变成定义(且违反 ODR),不是声明。
正确做法分两步:
- 在一个 .cpp 文件里「定义」一次:
int global_counter = 42; - 在其他所有需要访问它的 .cpp 或头文件里「声明」:
extern int global_counter;
头文件中放 extern 声明是安全的,但绝不能放带初始化的定义。如果头文件里写了 extern int x = 0;,每个包含它的 .cpp 都会尝试定义一份,链接时报 multiple definition 错误。
extern “C” 是干什么的,和普通 extern 有什么区别
extern "C" 和变量共享无关,它只影响函数名修饰(name mangling)。C++ 编译器默认会对函数名加参数类型信息做修饰,而 C 编译器不会。所以当你要调用 C 写的库(比如 libc 或自己写的 .c 文件),必须用 extern "C" 告诉 C++:“按 C 的方式找这个符号”。
立即学习“C++免费学习笔记(深入)”;
典型用法: