【问题标题】:Why compilation still work when inverting the main function argument position为什么在反转主函数参数位置时编译仍然有效
【发布时间】:2013-10-26 15:08:45
【问题描述】:

为什么当我这样声明主函数时我的 C 程序不起作用(我颠倒了参数位置):

int main(char * argv, int argc){
}

我编译它没有问题,但运行它时出现错误。

谢谢。

【问题讨论】:

  • 另一个供您尝试:int main(int argv, char **argc) — 有人不小心写到,在 C 编译器完全支持原型之前的日子里,我正在教课。花了几分钟才发现问题。如答案中所述,如果您启用适当的警告,GCC 和其他现代编译器将为您识别此问题。

标签: c main


【解决方案1】:

由于main()签名不正确,这不是一个有效的C程序。

尝试启用编译器警告。我的编译器告诉我这个问题:

$ gcc -Wall test.c 
test.c:1:5: warning: first argument of 'main' should be 'int' [-Wmain]
test.c:1:5: warning: second argument of 'main' should be 'char **' [-Wmain]

What are the valid signatures for C's main() function?

【讨论】:

  • 谢谢我忘了-Wall。
【解决方案2】:

与 C++ 不同,C 中的函数仅通过名称来标识,而不是参数。例如。链接器在看到“主”函数时会非常高兴。

尽管如此,还是有一些假设 main() 是如何被操作系统调用的。运行时环境。当您的参数错误时,您的程序将看到意外的值并可能崩溃。

顺便说一句,当您在构建程序时启用诊断(例如“-Wall -W”)时,您可能会看到错误或警告。

【讨论】:

    【解决方案3】:

    这是一个不正确的 main() 签名。您可以查看main function

    参数argc,参数计数,argv,参数向量,1 分别给出程序命令行的个数和值 论据。 argc 和 argv 的名称可以是任何有效的标识符 C,但使用这些名称是常见的约定。

    同时检查What should main() return in C and C++?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2019-01-11
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多