为什么你会在C中的main()函数之前使用数据类型?
很多人都熟悉C语言中的hello world程序:
#include main () { printf ("hello world"); return 0; }
为什么有一些在main()
函数之前使用int
如:
int main()
另外,我在()
看到了输入的单词void
,如下所示:
int main(void)
这似乎是额外打字,但也许这是一种在其他情况下支付红利的最佳做法?
另外,如果你要返回一个字符串,为什么在main()
之前加一个int? 如果有的话,人们会期望:
char main(void)
关于为什么我们在函数结束时返回0,我也很模糊。
以下内容在C89中有效
main() { return 0; }
但是在现代C(C99)中,这是不允许的,因为你需要明确地告诉变量的类型和函数的返回类型,所以它变成了
int main() { return 0; }
此外,在现代C中省略return 0
是合法的,因此写入是合法的
int main() { }
行为就像它返回0一样。
人们在括号之间放空,因为它确保了函数调用的正确类型检查。 C中的一组空括号表示没有关于参数的数量和类型的信息暴露在函数外部,并且调用者必须完全知道这些。
void f(); /* defined as void f(int a) { } later in a different unit */ int main() { f("foo"); }
对f
的调用会导致未定义的行为,因为编译器无法根据f
在其他模块中所期望的内容来validation参数的类型。 如果您使用void
或int
编写它,编译器就会知道
void f(int); /* only int arguments accepted! */ int main(void) { f("foo"); /* 'char*' isn't 'int'! */ }
因此,对于main
来说,将void
放在那里只是一个好习惯,因为在其他地方做这件事很好。 在C中,您可以递归调用main
在这种情况下,这种差异甚至可能很重要。
遗憾的是,只有少数编译器支持现代C,因此在许多C编译器上,您仍然可能会收到使用现代Cfunction的警告。
此外,您可能会看到声明main
程序返回与int
不同的东西。 如果这些程序使用独立的 C实现,则可以这样做。 这样的C实现不对main
施加任何限制,因为它们甚至不知道或者首先需要这样的function。 但是为了拥有程序入口点的通用和可移植接口,C规范要求严格符合程序以使用返回类型int
声明main,并要求托管 C实现接受此类程序。
main
函数返回一个整数状态代码,告诉操作系统程序是否成功退出。
return 0
表示成功; 返回任何其他值表示失败。
由于这是一个整数而不是字符串,因此它返回int
,而不是char
或char*
。 (调用printf
与从函数返回没有任何关系)
旧版本的C允许默认返回类型为int
。
但是,最好明确指定返回类型。
在C(与C ++不同)中,不带任何参数的函数声明为int myFunc( void )
它被称为退出状态 。 程序完成后,您希望让被调用者知道您的程序是如何退出的。 如果它正常退出,你将返回0
等。
在这里 ,您可以了解有关退出状态的更多信息。
为什么有一些在main()函数之前使用int,如:
在C(C 89,无论如何,这是你似乎指的那个),函数默认返回int
,当它们没有任何数据类型。 在它之前使用int
最终只是一个偏好问题。
另外,我在()中输入了“void”这个词,如下所示:
这也是一个偏好的问题,但是这两者是完全不同的 :
f(void)
表示函数f
接受zero
参数,而f()
表示函数f
接受an unspecified number of arguments
。
f(void)
是声明一个在C中不带参数的函数的正确方法。
这似乎是额外打字,但也许这是一种在其他情况下支付红利的最佳做法?
好处是清晰度。 如果你打算认为减少输入是好的,那么你如何考虑用尽可能少的字符命名所有函数和变量以及文件和所有内容?
另外,如果你要返回一个字符串,为什么在main()之前加一个int? 如果有的话,人们会期望:
char main(void)
什么? 为什么在世界上你会从main
返回一个字符串? 绝对没有理由这样做……
此外,您的main
声明返回一个字符,而不是字符串。
关于为什么我们在函数结束时返回0,我也很模糊。
程序结束时会向操作系统返回一个值。 该值可用于向操作系统通知某些事情。 例如,如果发现病毒,您的病毒扫描程序可能返回1
,如果未找到病毒,则返回0
如果发生某些错误,则返回2
。 通常, 0
表示没有错误,一切顺利。
这背后的原因是提供某种forms的错误报告机制。 因此,只要程序返回零值,通常意味着它认为它成功完成了任务。 对于非零值,程序由于某种原因失败。 时不时地,该数字可能对应于某个错误消息。 C中的几个系统API调用返回返回代码以指示处理是否成功。 由于C中没有exception概念,因此最好的方法是判断您的呼叫是否成功。
main函数声明之前的“int”是函数的返回类型 。 也就是说,该函数返回一个整数。
从该function,您可以返回一段数据。 如果function成功完成,通常返回“0”。 如果程序未成功执行,则返回任何其他数字,最多255,以显示发生的错误。
也就是说,返回0,使用int数据类型,以显示程序正确执行。
传统上使用int main(int argc, char * argv[])
因为整数返回可以指示程序是如何执行的。 返回0表示程序成功执行,而-1表示它有某种失败。 通常,退出代码将非常具体,并且将用作调试方法,因为C中不存在exception(在C ++意义上)。
大多数操作系统使用退出代码进行应用。 通常, 0
是成功的退出代码(例如,应用程序成功完成)。 main()
的返回值是返回给OS的,这就是main()
通常返回一个整数的原因(因为0
成功,大多数C程序将return 0;
最后)。