为什么 Name mangling 不会发生?

why the Name mangling not happens?

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

我通过 gcc -c -o test.o test.c 构建代码,当我 运行 nm test.o 时,我发现没有名称重整。 nm 输出 test 但不输出 _test

我的环境是ubuntu 16.04gcc 5.4.0

C 程序中不会发生名称重整。它发生在 C++ 程序中。

这就是为什么不能在 C 中重载函数但可以在 C++ 中重载的原因。

main函数returns调用函数test后,test的return值再赋给return main.

的值

不需要名称修改。

您似乎希望全局符号前面有一个下划线。这是 linux 使用的对象格式 ELF 中没有的事情。 a.out 或 coff 等较旧的二进制格式要求,ELF 不需要。

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