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

  • 相关阅读:
    部署Tomcat ----【javaweb-02】
    初步了解web ----【javaweb-01】
    JDBC-02
    JDBC-01
    利用Maven进行导jar包
    ContainerBase.addChild: start 错误问题
    MySQL数据库02
    MySQL数据库01
    简单认识并使用JavaScript【供后端人员作为了解】
    JSP+SSH+Mysql+DBCP实现的租车系统
  • 原文地址:https://www.cnblogs.com/openix/p/2834530.html
Copyright © 2011-2022 走看看