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"

  • 相关阅读:
    Entity SQL 初入
    ObjectQuery查询及方法
    Entity Framework 的事务 DbTransaction
    Construct Binary Tree from Preorder and Inorder Traversal
    Reverse Linked List
    Best Time to Buy and Sell Stock
    Remove Duplicates from Sorted Array II
    Reverse Integer
    Implement Stack using Queues
    C++中const限定符的应用
  • 原文地址:https://www.cnblogs.com/osyun/p/2645200.html
Copyright © 2011-2022 走看看