zoukankan      html  css  js  c++  java
  • 符号修饰与函数签名

    p_87

    Linux下的GCC编译器中,默认情况下已经去掉了在C语言符号前加"_"的方式,但是Windows平台下的编译器还保持着在符号前加"_"的习惯。


    函数签名使得函数在目标文件中的符号变成与其源文件的函数名、函数参数、所在的类和名称空间及其它信息关联了起来。
    函数签名经名称修饰变成修饰后名称目标文件中的符号名,变量亦如此。
    c++filt工具可以用来解析被修饰过的名称,比如:
    c++filt _ZN1N1C4funcEi
    输出:N::C::func(int)


    C++为了与C兼容,在符号管理上,C++有一个用来声明或定义一个C符号的"extern "C""关键字用法:
    例如:
    extern "C" {
        int function(int);
        int var;
    }
    extern "C" int func(int);

    C++编译器会将在extern "C" 的大括号内部的代码当作C语言代码处理,此时C++的名称修饰机制将不会起作用。

    为了C 与 C++兼容性,可以使用条件宏判断当前编译单元是不是C++代码:
    #ifdef __cplusplus
    extern "C" {
    #endif

    void *memset (void *, int size_t);

    #ifdef __cplusplus
    }
    #endif

  • 相关阅读:
    TP实例化模型的两种方式 M() D()
    implode 函数 把数组拼接成字符串
    用array_search 数组中查找是否存在这个 值
    SVN-001
    PHP-006
    Access数据操作-02
    Access数据操作-01
    Html解析
    浏览器Chrome对WebGL支持判断
    浏览器渲染模式设置
  • 原文地址:https://www.cnblogs.com/openix/p/2834530.html
Copyright © 2011-2022 走看看