写C主要功能
这个问题在这里已经有了答案:
main()
的返回值用于指示其父进程的成功或失败。 更一般地说,它也可以用来反馈特定的状态,尽管C没有定义这些状态。
如果main()
返回0
或EXIT_SUCCESS
,那么程序成功。 EXIT_FAILURE
或非零,则失败。
参数列表中的void
只是表示它不带任何参数。 这是因为C的一个(错误)特征,它允许你声明一个函数而不需要完全指定它所需要的参数。 一个函数声明为int func();
可以用任意数量的参数调用,但是int func(void);
只能用零表示。
例
在linux上,
两个简单的程序:
$ 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
所以在调用你的程序时可以使用这个状态。
int
返回值用于将错误指示符返回给操作系统。 return 0
意味着没有错误,所有其他代码(通常return 1
)表示程序无法成功完成。 其他程序(例如,shell脚本)可以使用此错误代码来确定您的程序是否执行其任务,或遇到问题。
void
只是意味着没有参数。 它和。一样
int main()
{
/* program */
}
但更明确。
程序可以使用命令行参数,在这种情况下main
必须定义为
int main(int argc /* number of arguments */, char *argv[] /* arguments)
{
/* program
}
任何关于C的好书都应该解释这一点。
首先让我们忘掉主力。 在C(而不是C ++)中,如果你定义一个没有像这样的参数的函数
int f(){ return 0;}
用任意数量的参数调用这样的函数是合法的:
int a = f(); /* legal */
int a = f("help", 1, 2.0); /* legal */
如果你希望你的函数f
只能用完全没有参数的方式工作,你可以像这样修改它:
int f(void){return 0;}
int a = f(); /* legal */
int a = f("help", 1, 2.0); /* not legal as it has too many parameters */
main()
和main(void)
同样适用。 在大多数情况下,在合理的世界里,大多数人永远不会在乎,但是我遇到了在程序中称为main
法律代码。
所以声明main
像:
int main() {
/* Do a bunch of stuff here */
}
允许程序中的其他地方执行此操作:
main();
main(1,2,3,4);
通过声明main(void)
可以添加一个编译器检查,以防止编译后者的main(1,2,3,4)
示例。
下一篇: Why would you precede the main() function in C with a data type?