C++ 编程
外观
extern
关键字告诉编译器一个变量是在另一个源模块(当前作用域之外)定义的。然后链接器找到这个实际声明并设置 extern
变量指向正确的位置。由 extern
语句描述的变量不会分配任何空间,因为它们应该在其他地方正确定义。如果一个变量被声明为 extern,而链接器没有找到它的实际声明,它将抛出一个“未解析的外部符号”错误。
示例
extern int i;
- 声明存在一个名为i 的 int 类型的变量,定义在程序的某个地方。
extern int j = 0;
- 定义一个变量j具有外部链接;
extern
关键字在这里是多余的。
extern void f();
- 声明存在一个函数f不带参数且没有返回值,定义在程序的某个地方;
extern
是多余的,但有时被认为是好的风格。
extern void f() {;}
- 定义函数f()在上面声明;同样,
extern
关键字在这里在技术上是多余的,因为外部链接是默认的。
extern const int k = 1;
- 定义一个常量int k值为1,并且具有外部链接;extern是必需的,因为const变量默认具有内部链接。
extern
语句经常用于允许数据跨越多个文件的范围。
当应用于函数声明时,附加的 "C" 或 "C++" 字符串文字将在使用相反语言编译时更改名称修饰。也就是说,extern "C" int plain_c_func(int param);
允许 C++ 代码执行 C 库函数 plain_c_func。