• extern c


    C++程序有时候需要调用其他程序设计语言编写的函数,最常见的语言是C语言。像任何名字一样,必须声明其他语言编写的函数
    名字,该声明必须指定返回类型和参数表。编译器按处理普通c++函数一样的方式检查对外部语言函数的调用,但是,编译器一般
     
    必须产生不同的代码来调用其他语言编写的函数。c++链接指示(linkage directive)指出任意非c++函数所用的语言。
     
    1.声明非C++函数
     
    链接指示有两种形式,单个的或复合的
     
    extern "C" size_t strlen(const char*)
     
    extern"C" {
     
      int strcmp(const char*, const char*);
     
      char* strcat(char*, const char*);
     
    }
     
    2, 链接指示与头文件
     
    可以将多重声明形式应用于整个头文件
     
    extern “C" {
     
         // 链接指示可以嵌套,头文件中即使有链接指示也不会受影响
     
      #include <string.h>
     
    }
     
    3. 导出c++函数到其他语言
     
    //通过链接指示,使得其他语言编写的程序可以使用c++函数
    //用链接指示定义的函数的每个声明都必须用相同的链接指示
    extern "C" double calc(double dparam);
    4. 支持链接指示的语言
    exter "Ada"  extern "FORTRAN" 支持什么语言随编译器而变。
     
    对链接到C的预处理支持
        #ifdef __cplusplus
        extern "C" 
        #endif
        it strcmp(const char*, const char*);
     
    5, 重载函数与链接指示
       重载函数依赖于目标语言,C语言不支持重载函数。
       extern "C" calc(double);
       extern SmallInt calc(const SmallInt&);
       extern BigNum calc(const bigNum&);
    6, extern "C" 函数的指针
       // pf points to a C function returning void taking an int
       extern "C" void (* pf) (int);
       C函数指针与C++函数的指针具有不同的类型,不能将C函数的指针初始化或赋值为C++函数指针
       反之亦然。
     
    7,用与整个声明的链接指示
       使用链接指示的时候,它应用于函数和任何函数指针,作为返回类型或参数类型使用。
       // f1 is a C function, accepting a pointer to a C function.
       extern "C" void f1(void (*)(int));
     
  • 相关阅读:
    数据库表结构变动发邮件脚本
    .net程序打包部署
    无法登陆GitHub解决方法
    netbeans 打包生成 jar
    第一次值班
    RHEL6 纯命令行文本界面下安装桌面
    C语言中格式化输出,四舍五入类型问题
    I'm up to my ears
    How to boot ubuntu in text mode instead of graphical(X) mode
    the IP routing table under linux@school
  • 原文地址:https://www.cnblogs.com/zhoug2020/p/5136781.html
Copyright © 2020-2023  润新知