可能重复:
Why is the type of the main function in C and c++ left to the user to define?
什么是无效?有人提供一些例子,正确使用 void ?当我们写void main (void)
或main()
时会有什么不同?
答案 0 :(得分:12)
在C中,一般来说,(void)
表示函数调用中不需要参数,而()
表示未指定数量的参数。
e.g。
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
。
答案 1 :(得分:2)
排除主要的返回类型,如
main(){
}
并不意味着它是void
类型,它取决于编译器。我认为可以说它通常被解释为
int main(){
}
void
类型告诉编译器没有'实体'(没有'存储'),所以
void func(int i)
取一个int但什么都不返回。在参数的情况下:
void func()
相当于:
void func(void)
更明确地表明它不接受参数。
不同的故事是void *
类型,其中是类型,指向无量纲的指针。
答案 2 :(得分:2)
基本上, void 是一种数据类型,基本上与方法声明一起使用。这意味着没有或没有类型。例如:
1)int myFunc(void)
- 函数不需要任何东西。
2)void myFunc(int)
- 函数不返回任何内容
3)void* data;
- 'data'是指向未知类型数据的指针,无法解除引用
答案 3 :(得分:1)
虚空意味着“空虚”。在你的void main()示例中,它表示函数main()不返回值。我觉得有必要不惜一切代价告诉你void main()应该避免(没有双关语),而是使用int main()代替。 int main()确保您的程序可以在关闭时向OS返回int类型的值。虚空还有许多其他用途,如果您想了解更多有关此问题,请查看this website。
答案 4 :(得分:0)
void
是没有值的数据类型。它也是无法完成的不完整数据类型。当用作函数的返回类型时,它表示该函数不返回值:
void foo(int x);
当用作参数列表时,它表示该函数不带参数:
void bar(void);
这与空参数列表不同,后者表示该函数采用未指定个参数(在C中;在C ++中,空参数列表与使用{{1}相同}):
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()
,的合法签名,但必须明确记录某处。