次のコード スニペットでは、main 関数はパラメーターと括弧なしで foo 関数を呼び出します。このコードが gcc でコンパイルできるのは奇妙です。実際にアセンブリ コードを確認すると、コンパイラがこの行を無視していることがわかります。だから私の質問は、この種のコードがどのような状況で使用されるのですか? または、gcc のサポートは単なる偶然であり、実際にはまったく役に立ちません。
int foo(int a,int b)
{
return a+b;
}
int main()
{
foo; // call foo without parameter and parenthesis
return 0;
}
objdump -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)