• cpp extern 关键字用法


    语法说明:

    extern 可以置于变量或者函数前,以标示变量或者函数的在别的文件中定义,提示编译器遇到此变量和函数后,在其他模块中寻找其定义。此外extern也可用来进行链接指定。

    即 extern 有两个作用:

    一、与 ”C” 一起连用,如: extern “C” void fun(int a, int b);

    此时编译器在编译 fun 这个函数名时,按着 C 的规则去翻译相应的函数名而不是 C++ 的。

    C++的规则在编译这个函数名时会把 fun 这个名字变类似 fun@aBc_int_int#%$ 的格式。(注意:C++ 支持函数的重载)

    二、当 extern 不与 ”C” 在一起修饰变量或函数时,如在头文件中: extern int g_Int;

    它的作用就是 声明 函数或全局变量。其声明的函数和变量可以在本模块(编译单元,如 .cpp 文件)或其他模块中使用(注意:这里是声明,不是定义)

    也就是说 B 模块要是引用 A 模块中定义的全局变量或函数时,它只要包含 A 模块的头文件即可。

    在编译阶段,模块 B 虽然找不到该函数或变量,但它不会报错,它会在链接时从模块 A 生成的目标代码中找到此函数。

    //fileA.cpp
    int i = 42; // declaration and definition
    
    //fileB.cpp
    extern int i;  // declaration only. same as i in FileA
    
    //fileC.cpp
    extern int i;  // declaration only. same as i in FileA
    
    //fileD.cpp
    int i = 43; // LNK2005! 'i' already has a definition.
    extern int i = 43; // same error (extern is ignored on definitions)

    声明与定义的区别:

    extern int a; //声明
    
    int a; //定义 
    int a = 0; //定义 
    extern int a =0; //定义

    一般在头文件中申明,用 extern, 在 cpp 中定义。 如果在头文件中定义,如果这个头文件被多个 cpp 引用,编译时会报重复定义的错误。

    另外在 .h 文件中通过 static 来声明变量,这样可以被其他文件引用,但程序运行时会在每个模块中都创建一个相同的变量。

    如果在 .cpp 文件中声明 static 变量,其他 .cpp 文件是无法访问该变量的。

    参考资源:

    https://blog.csdn.net/u012611878/article/details/78697971

    https://docs.microsoft.com/en-us/cpp/cpp/extern-cpp?view=vs-2019

  • 相关阅读:
    Storm 中drpc调用
    yarn下资源配置
    java 中 Stringbuff append源代码浅析
    总结的MR中连接操作
    hive中使用rcfile
    MapFile
    HDFS副本存放读取
    zoj 1967 Fiber Network/poj 2570
    zoj 2027 Travelling Fee
    poj 1742 Coins
  • 原文地址:https://www.cnblogs.com/hellowzl/p/10917462.html
Copyright © 2020-2023  润新知