Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要在C中的main()函数前面加一个数据类型?_C_Main - Fatal编程技术网

为什么要在C中的main()函数前面加一个数据类型?

为什么要在C中的main()函数前面加一个数据类型?,c,main,C,Main,很多人都熟悉C语言中的hello world程序: #include <stdio.h> main () { printf ("hello world"); return 0; } 此外,我还看到在()中输入的单词void,如: int main() int main(void) 这看起来像是免费的额外输入,但也许这是一种在其他情况下也能带来回报的最佳实践 另外,如果返回字符串,为什么要在main()前面加一个int?如果有的话,人们会期望: char mai

很多人都熟悉C语言中的hello world程序:

#include <stdio.h>

main ()
{
    printf ("hello world");
    return 0;
}
此外,我还看到在
()
中输入的单词
void
,如:

int main()
int main(void)
这看起来像是免费的额外输入,但也许这是一种在其他情况下也能带来回报的最佳实践

另外,如果返回字符串,为什么要在
main()
前面加一个int?如果有的话,人们会期望:

char main(void)

我也不明白为什么在函数末尾返回0。函数返回一个整数状态代码,告诉操作系统程序是否成功退出。
返回0
表示成功;返回任何其他值表示失败

因为这是一个整数而不是字符串,所以它返回
int
,而不是
char
char*
。(调用
printf
与从函数返回无关)

旧版本的C允许默认返回类型为
int

但是,最好显式指定返回类型


在C语言中(与C++不同),不带任何参数的函数被声明为
int-myFunc(void)
它被称为退出状态。当程序完成时,您希望让被调用方知道您的程序是如何退出的。如果它正常退出,您将返回
0
,等等


在这里,您可以了解有关退出状态的更多信息。

大多数操作系统对应用程序使用退出代码。通常,
0
是成功的退出代码(如中所示,应用程序成功完成)。
main()
的返回值就是返回给操作系统的值,这就是为什么
main()
通常返回一个整数(而且由于
0
是成功的,大多数C程序在最后都会有
返回0;

这背后的原因是提供某种形式的错误报告机制。因此,每当程序返回零值时,通常意味着它认为它成功地完成了任务。对于非零值,程序因某种原因失败。偶尔,该数字可能对应于某个错误消息。 C中的几个系统API调用返回代码以指示处理是否成功。由于C中没有异常的概念,因此这是判断调用是否成功的最佳方法。

主函数声明前的“int”是函数的返回类型。也就是说,该函数返回一个整数

从函数中,可以返回一段数据。如果函数成功完成,通常返回“0”。如果程序未成功执行,则返回任何其他数字(最多255),以显示发生的错误


也就是说,返回0,并使用int数据类型,以显示程序正确执行

传统上使用
intmain(intargc,char*argv[])
,因为整数返回可以指示程序的执行方式。返回0表示程序成功执行,而-1表示程序出现某种故障。由于C.</P> < P>中存在异常(C++中没有例外),因此在C89/P>中,退出代码将是非常具体的,并且将被用作调试方法。
main() {
  return 0;
}
但是在现代C语言(C99)中,这是不允许的,因为您需要显式地告诉变量的类型和函数的返回类型,所以它变得

int main() {
  return 0;
}
此外,在现代C语言中省略
返回0
是合法的,因此编写

int main() {

}
该行为就好像它返回了0

人们把
void
放在括号之间,因为它可以确保对函数调用进行正确的类型检查。C中的一组空括号意味着没有关于参数数量和类型的信息暴露在函数之外,调用者必须准确地知道这些信息

void f();
 /* defined as  void f(int a) { } later in a different unit */

int main() {
  f("foo");
}
调用
f
会导致未定义的行为,因为编译器无法对照
f
在其他模块中所期望的验证参数的类型。如果使用
void
int
编写,编译器就会知道

void f(int); /* only int arguments accepted! */

int main(void) {
  f("foo"); /* 'char*' isn't 'int'! */
}
所以对于
main
来说,把
void
放在那里是一个好习惯,因为在其他地方这样做是很好的。在C语言中,您可以递归调用
main
,在这种情况下,这些差异甚至可能很重要

遗憾的是,只有少数编译器支持现代C,因此在许多C编译器上,您可能仍然会收到使用现代C功能的警告

此外,您可能会看到一些程序声明
main
,以返回与
int
不同的内容。如果这些程序使用独立的C实现,它们就可以做到这一点。这样的C实现不会对
main
施加任何限制,因为它们根本不知道或不需要这样的函数。但是为了使程序的入口点有一个通用的、可移植的接口,C规范要求严格一致的程序使用返回类型
int
声明main,并要求托管的C实现接受这样的程序

为什么有些函数在main()函数前面加int,如:

在C语言中(不管怎么说,C 89就是您所指的),函数在前面没有任何数据类型时默认返回
int
。在它前面加上
int
最终只是一个偏好问题

此外,我还看到()中输入了“void”一词,如:

这也是一个偏好的问题,但是这两个非常不同:

f(void)
表示函数
f
接受
0
参数,而
f()
表示函数
f
接受
数量不定的参数

f(void)
是声明在C中不带参数的函数的正确方法。