void main(void)vs main()

可能重复:
为什么C和c ++中的main函数的类型留给用户定义?

什么是虚空 ? 有人提供一些例子,正确使用虚空吗? 当我们写void main (void)main()时有什么区别?

在C中,通常, (void)表示函数调用中不需要参数,而()表示未指定数量的参数。

例如

 void foo(void) { // body } void bar() { //body } 

在呼唤环境时,

 foo(); // Correct foo(1); // Incorrect bar(); // Correct bar(1); // Also correct 

这是一般性的解释。

但是对于main()的情况,C99标准说,

5.1.2.2.1程序启动

程序启动时调用的函数名为main。 该实现声明此函数没有原型。 它应该使用返回类型int并且没有参数来定义: int main(void) { /* ... */ }

要么

有两个参数(这里称为argc和argv,虽然可以使用任何名称,因为它们是声明它们的函数的本地名称): int main(int argc, char *argv[]) { /* ... */ }或同等的;

要么

在其他一些实现定义的方式。

所以,在这个void main(void)返回类型应该是int

最后,对于main() ,没有给出返回类型,因此隐式返回类型为int

排除主要的返回类型

 main(){ } 

并不意味着它是一个void类型,它取决于编译器。 我认为可以说它一般被解释为

 int main(){ } 

void类型告诉编译器没有’entity’(没有’storage’),所以

 void func(int i) 

接受一个int但什么都不返回。 在参数的情况下:

 void func() 

相当于:

 void func(void) 

这更明确地表明它不接受参数。 不同的故事是类型void * ,它一种类型,指向无量纲的东西。

基本上, void是一种数据类型,基本上与方法声明一起使用。 它意味着什么都没有没有类型 例如:

1) int myFunc(void) – 该函数不需要任何操作。

2) void myFunc(int) – 函数不返回任何内容

3) void* data; – ‘data’是指向未知类型数据的指针,不能解除引用

虚空意味着“空虚”。 在你的void main()示例中,它表示函数main()不返回值。 我觉得有必要不惜一切代价告诉你void main()应该避免(没有双关语),而是使用int main()。 int main()确保您的程序可以在关闭时向OS返回int类型的值。 虚空还有许多其他用途,如果您想了解更多有关此内容,请查看此网站 。

void是没有值的数据类型。 它也是一种无法完成的不完整数据类型。 当用作函数的返回类型时,它表示该函数不返回值:

 void foo(int x); 

当用作参数列表时,它表示该函数不带参数:

 void bar(void); 

这与空参数列表不同,后者表示该函数采用未指定数量的参数(在C中;在C ++中,空参数列表与使用void相同):

 void bletch(); 

没有对象(变量)可以键入void 。 但是,您可以声明类型为void *指针:这些指针是“通用”指针,并且可以在没有显式强制转换的情况下转换为其他指针类型。 标准内存分配函数malloccallocrealloc都返回void *

 double *darr = malloc(sizeof *darr * rows); 

在托管实现中(基本上,任何具有操作系统的实现), main必须声明为

 int main(void) 

要么

 int main(int argc, char **argv) // the parameter names can be whatever you want, // but argc and argv are the usual convention; // char **argv is equivalent to char *argv[] 

或以其他一些实施方式 ; 实施可以接受

 void main() 

作为main的合法签名, 但它必须明确地记录在某处