在下面的代碼片段中,主函數調用沒有任何參數和圓括號的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)實際上允許您在沒有括號的情況下調用函數。 –