在下面的代码片段中,主函数调用没有任何参数和圆括号的foo函数。奇怪的是,这个代码可以由gcc编译。我实际上检查了汇编代码,发现编译器忽略了这一行。所以我的问题是在哪种情况下使用这种代码?或者gcc的支持只是一个巧合,实际上它完全没用。通过objdump的甩不带参数和括号的调用函数
int foo(int a,int b)
{
return a+b;
}
int main()
{
foo; // call foo without parameter and parenthesis
return 0;
}
它的汇编代码-d
00000000004004c0 <main>:
4004c0: 55 push %rbp
4004c1: 48 89 e5 mov %rsp,%rbp
4004c4: b8 00 00 00 00 mov $0x0,%eax
4004c9: 5d pop %rbp
4004ca: c3 retq
4004cb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
没有函数在没有括号的情况下被调用。但是,[REBOL编程语言](https://en.wikipedia.org/wiki/REBOL)实际上允许您在没有括号的情况下调用函数。 –