为什么 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.04
gcc 5.4.0
C 程序中不会发生名称重整。它发生在 C++ 程序中。
这就是为什么不能在 C 中重载函数但可以在 C++ 中重载的原因。
main
函数returns调用函数test
后,test
的return值再赋给return main
.
的值
不需要名称修改。
您似乎希望全局符号前面有一个下划线。这是 linux 使用的对象格式 ELF 中没有的事情。 a.out 或 coff 等较旧的二进制格式要求,ELF 不需要。
顺便说一句。术语 "mangling" 通常用于 C++ 符号修饰,这是另一回事。
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
C 程序中不会发生名称重整。它发生在 C++ 程序中。
这就是为什么不能在 C 中重载函数但可以在 C++ 中重载的原因。
main
函数returns调用函数test
后,test
的return值再赋给return main
.
不需要名称修改。
您似乎希望全局符号前面有一个下划线。这是 linux 使用的对象格式 ELF 中没有的事情。 a.out 或 coff 等较旧的二进制格式要求,ELF 不需要。
顺便说一句。术语 "mangling" 通常用于 C++ 符号修饰,这是另一回事。