zoukankan      html  css  js  c++  java
  • extern "C" 回顾

    引入:在测试"extern "C" 与gcc, g++无关"时,使用到了extern "C"的概念,网上找篇文章回顾一下。

    试验如下:  

    test.h:

    extern "C" void CppPrintf(void);  

    test.cpp:
    #include <iostream>  

    #include "test.h"  

    using namespace std;  

    void  CppPrintf( void )  {  cout << "Hellon";  }  

    main.cpp:

    #include <stdlib.h>

     #include <stdio.h>

     #include "test.h"

     int  main( void ) {      CppPrintf();     return 0;  }  

    1. 先给 test.h 里的 void CppPrintf(void); 加上 extern "C",看用 gcc 和 g++ 命名有什么不同。

    $ g++ -S test.cpp  

    $ less test.s

     .globl  CppPrintf   <-- 注意此函数的命名

     .type  CppPrintf , @function  

    $ gcc -S test.cpp  

    $ less test.s  

    .globl  CppPrintf   <-- 注意此函数的命名

     .type  CppPrintf , @function  

    完全相同!

    2. 去掉 test.h 里 void CppPrintf(void); 前面的 extern "C",看用 gcc 和 g++ 命名有什么不同。

     $g++ -S test.cpp

     $ less test.s  

    .globl  _Z9CppPrintfv   <-- 注意此函数的命名

     .type  _Z9CppPrintfv , @function  

    $ gcc -S test.cpp  

    $ less test.s

     .globl  _Z9CppPrintfv   <-- 注意此函数的命名  

    .type  _Z9CppPrintfv , @function  

    完全相同!

    测试结论:  完全相同,可见 extern "C" 与采用 gcc 或 g++ 并无关系,  以上的试验还间接的印证了前面的说法:在编译阶段,g++ 是调用 gcc 的。

    这里注意,使用extern "C" 必须加在c++文件中才起作用(包括通过include 头文件的方式间接包含)。

    进入正题:

    extern "C" 的含义使用参考如下链接:

    http://blog.chinaunix.net/uid-21411227-id-1826909.html

    关于extern "C"总结两条:

    1、C++和C对产生的函数名字的处理是不一样的. 通过查看汇编文件(.s),可以看出区别。

    2、为了在C++代码中调用用C写成的库文件,就需要用extern "C"来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。

  • 相关阅读:
    JS的匿名函数和递归应用
    sql server中分布式查询随笔
    Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句梳理
    db2相关问题及解决方法
    DB2命令大全
    作用域和作用域链浅解析
    css居中的几个实现方法
    选择排序
    ... 语法记录
    call() 与 apply() 和 bind()
  • 原文地址:https://www.cnblogs.com/qingxinlangjing/p/3228023.html
Copyright © 2011-2022 走看看