当前位置:首页 C++ > 正文

详细讲解C++中extern的作用,extern变量在哪个数据段,为什么要extern C?

作者:野牛程序员:2023-05-18 16:16:25 C++阅读 2480

在C++中,extern关键字用于声明外部变量或函数。它告诉编译器某个标识符是在其他地方定义的,而不是当前文件中定义的。这样可以在一个文件中引用另一个文件中定义的变量或函数。

extern关键字可以用于两种情况:

1、声明全局变量:在一个文件中使用extern关键字声明一个全局变量,表示该变量在其他文件中定义。这样,多个文件就可以共享同一个全局变量。

示例:

// File1.cpp
extern int globalVariable;  // 声明全局变量

// File2.cpp
int globalVariable = 10;  // 定义全局变量

// File3.cpp
extern int globalVariable;  // 引用全局变量

在上面的示例中,File1.cppFile3.cpp声明了同一个全局变量globalVariable,而File2.cpp定义了该全局变量的实际值。

2、声明外部函数:在一个文件中使用extern关键字声明一个函数,表示该函数在其他文件中定义。这样可以在当前文件中使用该函数,而无需了解其实际实现。

示例:

// File1.cpp
extern void externalFunction();  // 声明外部函数

// File2.cpp
#include <iostream>

void externalFunction() {  // 定义外部函数
    std::cout << "This is an external function." << std::endl;
}

// File3.cpp
extern void externalFunction();  // 引用外部函数

int main() {
    externalFunction();  // 调用外部函数
    return 0;
}

在上面的示例中,File1.cppFile3.cpp声明了同一个外部函数externalFunction,而File2.cpp定义了该外部函数的实际实现。在main函数中,可以直接调用externalFunction(),而不需要了解其具体实现。

关于extern变量存储在哪个数据段,具体取决于变量的定义位置和作用域。在C++中,全局变量和静态变量(在函数内部使用static修饰)存储在静态数据段(静态存储区)。而局部变量(函数内部定义的非静态变量)存储在栈上。

关于为什么要使用extern C,主要是为了处理C++代码与C代码的兼容性问题。C++编译器会对函数名进行名称修饰(name mangling),以支持函数重载和其他C++特性。而C编译器不会进行名称修饰。当C++代码需要调用C语言编写的函数时,需要使用extern "C"指定以C语言方式进行编译和链接,以避免名称修饰导致的链接错误。

示例:

// C code
#ifdef __cplusplus
extern "C" {
#endif

void cFunction() {
    // C function implementation
}

#ifdef __cplusplus
}
#endif

// C++ code
extern "C" void cFunction();  // 声明C函数

int main() {
    cFunction();  // 调用C函数
    return 0;
}

在上面的示例中,C函数cFunction使用了extern "C"进行声明,以告诉C++编译器以C语言方式进行链接。这样,C++代码就可以正确地调用C函数。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击