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
答案 0 :(得分:3)
您似乎期望全局符号在其前面加上下划线。这是在ELF中完成的,这是linux使用的对象格式。较旧的二进制格式如a.out或coff要求,ELF不会。
顺便说一下。术语" mangling"通常用于C ++符号修改,这是另一回事。
答案 1 :(得分:1)
在C程序中不会发生名称修改。它发生在C ++程序中。
这就是为什么你不能在C中重载函数,但你可以用C ++。
答案 2 :(得分:1)
main
函数在调用函数test
后返回。test
的返回值将被赋予main
的返回值。
不需要进行名称修改。