Writing C main function
我理解为什么C需要一个主函数来开始一个程序的执行,但是在我已经阅读了全部或部分的三本书中,没有一本书解释了为什么程序以声明main为int或以void参数开始:
主(空)
有人能告诉我这是什么目的吗?
如果
参数列表中的
例子
在Linux上,
两个小程序:
1 2 3 4 5 6 7 8 9 10 | $ cat ret0.c int main (void) { return 0; } $ cat ret42.c int main (void) { return 42; } Then in `bash` we can look at $ ./ret0 ; echo $? 0 $ ./ret42 ; echo $? 42 |
所以在调用程序时可以使用这个状态。
和C中的任何其他函数一样,main也是一个函数。因此它有一个返回类型,并且可以接受参数。
1 | int main(void) |
这里,
与其他任何函数一样,main也可以接受参数,但有一个例外,即,在程序执行开始之前,main的参数被给出。这些被称为"命令行参数"。MAIN可以通过两种方式接受参数:
1 2 3 4 5 6 7 | 1. int main(void) or int main() 2. int main(int argc, char *argv[]) or int main(int argc, char **argv) |
第一个声明说main不期望任何参数,其中作为第二个声明符--操作要求用户向main提供命令行参数。
注意:main应该接受0或2个参数。如果你试图给出除这些参数之外的其他参数在编译代码时会发出以下警告
1 | warning: ‘main’ takes only zero or two arguments [-Wmain] |
编辑:如果使用GCC,则会显示上述警告。
首先,让我们忘掉梅因。在C(非C++)中,如果您定义了一个没有这样的参数的函数
1 | int f(){ return 0;} |
使用任意数量的参数调用此类函数是合法的:
1 2 | int a = f(); /* legal */ int a = f("help", 1, 2.0); /* legal */ |
如果您希望函数
1 2 3 | int f(void){return 0;} int a = f(); /* legal */ int a = f("help", 1, 2.0); /* not legal as it has too many parameters */ |
同样的情况也适用于
因此,宣布
1 2 3 | int main() { /* Do a bunch of stuff here */ } |
允许程序中其他地方的代码执行此操作:
1 2 | main(); main(1,2,3,4); |
通过声明
1 2 3 4 | int main() { /* program */ } |
但更明确。
程序可以接受命令行参数,在这种情况下,
1 2 3 4 | int main(int argc /* number of arguments */, char *argv[] /* arguments) { /* program } |
任何关于C的好书都应该解释这一点。