【发布时间】:2015-09-13 13:21:54
【问题描述】:
只是想知道为什么
int main(void){}
编译和链接
这也是如此:
int main(int argc, char **argv){}
为什么不要求是其中之一?
gcc 甚至可以用一个参数编译和链接:
int main(int argc){}
但使用 -Wall 发出此警告:
smallest_1.5.c:3:1: warning: ‘main’ takes only zero or two arguments [-Wmain]
我不是在问“他们为什么允许这样做?”但就像“调用者和链接器如何处理 main 的多种可能性?”
【问题讨论】:
-
简短的回答是“因为标准是这样说的”。
-
@JefferyThomas 我的问题不是“他们为什么允许它”而是“它是如何工作的”?调用例程和链接器如何处理任何一种定义?
-
因为调用代码可以,例如,在寄存器或堆栈中传递参数。两个参数 main 使用它们,而零参数 main 不使用它们。就是这么简单。链接甚至没有出现。
-
非常相关question。
标签: c