CRT如何调用main,具有不同的参数

Pra*_*ari 5 c c++

我们可以用几种方式编写main函数,

  1. int main()
  2. int main(int argc,char *argv[])
  3. int main(int argc,char *argv[],char * environment)

运行时CRT函数如何知道应该调用哪个main.请注意这里,我不是在询问是否支持Unicode.

Han*_*ant 5

接受的答案是不正确的,CRT中没有特殊的代码来识别main()声明的类型.

它的工作原理是因为cdecl调用约定.其中指定参数从右向左推入堆栈,并且调用者调用后清理堆栈.所以CRT只是将所有参数传递给main()并在main()返回时再次弹出它们.您需要做的唯一事情是在main()函数声明中以正确的顺序指定参数.argc参数必须是第一个,它是堆栈顶部的参数.argv必须是第二名,等等.省略一个论点没有区别,只要你省略所有后面的论点.

这也是printf()函数可以工作的原因,它有可变数量的参数.在已知位置有一个参数,第一个参数.

  • 答案的要点仍然是正确的,即使它在技术上是不正确的.当且仅当每个参数唯一地映射到一个存储位置(寄存器或存储器)时,无论其他参数如何,确切的签名都无关紧要. (2认同)