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

  • 相关阅读:
    GUI 之 JDialog弹窗
    GUI Swing 之 JFrame窗体
    GUI 键盘监听事件
    GUI 窗口监听事件
    GUI 鼠标监听事件,模拟画图工具
    shell编程
    Ubuntu20.04 Linux初识
    rlwrap的使用
    5个相见恨晚的Linux命令,每一个都非常实用
    Bash初识与常用命令
  • 原文地址:https://www.cnblogs.com/openix/p/2834530.html
Copyright © 2011-2022 走看看