为什么姓名错位没有发生?

时间:2016-12-09 06:21:35

标签: c gcc name-mangling

extern int test();
int main()
{
    return test();
}

我按gcc -c -o test.o test.c构建代码,发现运行nm test.o时没有名称错误。 nm输出test但不输出_test

我的环境为ubuntu 16.04 gcc 5.4.0

3 个答案:

答案 0 :(得分:3)

您似乎期望全局符号在其前面加上下划线。这是在ELF中完成的,这是linux使用的对象格式。较旧的二进制格式如a.out或coff要求,ELF不会。

顺便说一下。术语" mangling"通常用于C ++符号修改,这是另一回事。

答案 1 :(得分:1)

在C程序中不会发生名称修改。它发生在C ++程序中。

这就是为什么你不能在C中重载函数,但你可以用C ++。

答案 2 :(得分:1)

main函数在调用函数test后返回。test的返回值将被赋予main的返回值。

不需要进行名称修改。