zoukankan      html  css  js  c++  java
  • 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));
     
  • 相关阅读:
    swift MD5 加密方法
    swift 官方获取JSON 数据方法
    LOAD和PigStorage的一些测试例子 (转)
    pig的各种运行模式与运行方式详解
    Hadoop Mapreduce分区、分组、二次排序过程详解[转]
    hdfs 名称节点和数据节点
    MapReduce中的分区方法Partitioner
    hadoop中map和reduce的数量设置问题
    MapReduce工作原理图文详解
    GET请求的请求参数最大长度
  • 原文地址:https://www.cnblogs.com/zhoug2020/p/5136781.html
Copyright © 2011-2022 走看看