zoukankan      html  css  js  c++  java
  • 关于extern "C" 的用法

    而在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。
    笔者编写的C++引用C函数例子工程中包含的三个文件的源代码如下:
    /* c语言头文件:cExample.h */
    #ifndef C_EXAMPLE_H
    #define C_EXAMPLE_H
    extern int add(int x,int y);     //注:写成extern "C" int add(int , int ); 也可以
    #endif
    /* c语言实现文件:cExample.c */
    #include "cExample.h"
    int add( int x, int y )
    {
     return x + y;
    }
    // c++实现文件,调用add:cppFile.cpp
    extern "C"
    {
     #include "cExample.h"        //注:此处不妥,如果这样编译通不过,换成 extern "C" int add(int , int ); 可以通过
    }
    int main(int argc, char* argv[])
    {
     add(2,3);
     return 0;
    }
      如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函数时,应加extern "C" { }。
      其实目的就是告诉编译器,要用c的方式去链接所要引用的函数(不要改变它的名字映射),这样我们就能调用它;如果不声明的话,它就会以c++的形式做映射,这样的话,去obj文件中查找相应函数进度,是没有的。主要是因为c和c++的函数在编译的时候形成的中间函数名字是不一样的,所以我们要在c++中用extern来声明函数,这样的话,就可以调用c中的函数,dll调用一样的。
  • 相关阅读:
    复杂对象类型的WebService高级部分
    linux 免输入密码脚本
    查看端口是否被占用
    shell将脚本输出结果记录到日志文件
    多线程注意点
    apache Tomcat配置SSL(https)步骤
    常用的web安全处理
    SQL 中的 UNION 和UNION ALL 的区别
    数据库和数据仓库区别
    Oracle数据库创建表是有两个约束带有默认索引
  • 原文地址:https://www.cnblogs.com/hitwhhw09/p/4732972.html
Copyright © 2011-2022 走看看