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 *
指针:这些指针是“通用”指针,并且可以在没有显式强制转换的情况下转换为其他指针类型。 标准内存分配函数malloc
, calloc
和realloc
都返回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
的合法签名, 但它必须明确地记录在某处 。