zoukankan      html  css  js  c++  java
  • extern用法总结

    一、extern "C"讲解

    extern "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明。__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码。

    main.cpp

    extern void f1();
    
    int main()
    {
        f1();
        return 0;
    }

    a.cpp

    #include <stdio.h>
    
    void f1()
    {
        printf("test\n");
    }

    makefile

    all:
        g++ -o base.o -c base.cpp
        g++ -o main.o -c main.cpp
        g++ -o test main.o base.o

    用UE打开base.o,可以看到base.cpp _Z2f1v puts __gxx_personality_v0,此时编译器将函数定义为_Z2f1v。

    我们再对代码进行修改,将f1()函数的定义用extern "C"定义成c函数,在main中要引用的话,我们就需要加入extern "C"来声明f1()函数。

    main.cpp

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    extern void f1();
    
    #ifdef __cplusplus
    }
    #endif
    
    int main()
    {
        f1();
        return 0;
    }

    a.cpp

    #include <stdio.h>
    
    extern "C"
    {
    void f1()
    {
        printf("test\n");
    }
    }

    此时再次查看base.o,将看到base.cpp f1 puts __gxx_personality_v0,编译器将其编译为c函数f1。

    如果我们将main.cpp中的extern "C"去掉呢?再次编译,将会报main.cpp:(.text+0x12): undefined reference to `f1()',找不到f1()的定义。因为这时候编译器会去寻找函数名为_Z2f1v的c++定义。

    是不是对extern "C"有了一个新的认识呢。在编写c++代码的时候,我们经常要调用一些以前写过的c库,所以在调用的时候,一定要记住使用extern "C"来声明函数。否则会编译不过的哦。

    二、extern用法

    对于c

    1、函数名之前加extern作用是声明该函数,可能在别的源文件中定义。其实不使用extern效果是一样的。

    2、extern修饰变量时,表明该变量在别处定义过了,这里将使用那个变量。

    对于c++

    1、养成良好的编程习惯,变量的定义放在cpp中。这样只需要引用.h就完成了变量的声明啦。我在写c++代码的时候真的好少用extern。

    2、对于c库一定要记得使用extern "C"

  • 相关阅读:
    lambda表达式
    切片操作
    小样本学习(Few-shot Learning)
    TensorFlow Eager 模式
    tensorflow读入数据集的方式
    综述类解读
    pyCharm永久激活
    shell脚本教程
    GNN
    Tomcat配置优化
  • 原文地址:https://www.cnblogs.com/osyun/p/2645200.html
Copyright © 2011-2022 走看看