您的位置:

C++ extern关键字的详细阐述

一、定义extern关键字

extern关键字是C++中一个非常关键的概念,它用于表示变量或函数是在其他文件或模块中定义的。extern关键字告诉编译器,在程序的其他位置存在一个符号的定义。例如,在一个文件中定义了一个全局变量,而在另一个文件中需要使用这个变量,则需要在使用的文件中声明该变量是extern的。

二、全局变量和函数声明

在C++中,声明全局变量时可以使用extern关键字进行修饰。例如:

    extern int g_var;

这样可以告诉编译器,g_var变量不是当前这个文件所定义的,而是在其他文件中定义的。声明全局函数时也可以使用extern关键字:

    extern void hello();

三、extern的用法

extern关键字有以下用法:

1. 引用全局变量或函数

如果需要在一个文件中使用另一个文件中定义的全局变量或函数,可以使用extern关键字进行声明。例如:

    //File1.cpp
    int g_var = 1;
    void hello() {
        std::cout << "Hello World!" << std::endl;
    }

    //File2.cpp
    extern int g_var;
    extern void hello();
    int main() {
        std::cout << g_var << std::endl; //输出 1
        hello(); //输出 "Hello World!"
        return 0;
    }

2. 定义全局变量

如果在一个文件中定义了一个全局变量,那么在其他文件中使用该变量时,需要使用extern关键字进行声明。例如:

    //File1.cpp
    int g_var = 1;

    //File2.cpp
    extern int g_var;
    int main() {
        std::cout << g_var << std::endl; //输出 1
        return 0;
    }

3. 定义全局函数

如果在一个文件中定义了一个全局函数,那么在其他文件中使用该函数时,需要使用extern关键字进行声明。例如:

    //File1.cpp
    void hello() {
        std::cout << "Hello World!" << std::endl;
    }

    //File2.cpp
    extern void hello();
    int main() {
        hello(); //输出 "Hello World!"
        return 0;
    }

四、extern的注意事项

在使用extern关键字时,需要注意以下几点:

1. 定义和声明的类型必须完全一致

在定义和声明变量或函数时,它们的类型必须完全一致,否则会导致编译错误。例如:

    //File1.cpp
    int g_var = 1;

    //File2.cpp
    extern float g_var; //错误:类型不匹配
    extern int hello();
    double hello(); //错误:类型不匹配

2. 多次定义一个变量会导致编译错误

如果在程序中多次定义同一个变量,会导致编译错误。例如:

    //File1.cpp
    int g_var = 1;

    //File2.cpp
    int g_var = 2; //错误:重复定义

如果需要在多个文件中使用同一个变量,只需要在一个文件中定义,并在其他文件中使用extern进行声明即可。

五、代码示例

下面是一个完整的示例:

    //File1.cpp
    #include <iostream>
    extern int g_var;
    extern void hello();

    int main() {
        std::cout << g_var << std::endl; //输出 1
        hello(); //输出 "Hello World!"
        return 0;
    }

    //File2.cpp
    int g_var = 1;
    void hello() {
        std::cout << "Hello World!" << std::endl;
    }