什么是空?有人提供一些例子,正确使用void吗?void main (void)
当我们写or时有什么区别main()
?
5 回答
在 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 的返回类型,如
main(){
}
并不意味着它是一种void
类型,它取决于编译器。我认为可以说它通常被解释为
int main(){
}
该void
类型告诉编译器没有“实体”(没有“存储”),所以
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 的意思是“空”。在您的 void main() 示例中,这意味着函数 main() 不返回值。我觉得有义务告诉你应该不惜一切代价避免使用 void main() (不是双关语),而是使用 int main() 。int main() 确保您的程序可以在关闭时向操作系统返回一个 int 类型的值。void 还有许多其他用途,如果您想了解更多信息,请查看此网站。
void
是没有值的数据类型。它也是一种无法完成的不完整数据类型。当用作函数的返回类型时,表示该函数不返回值:
void foo(int x);
当用作参数列表时,它表示该函数不接受任何参数:
void bar(void);
这与空参数列表不同,空参数列表表示函数接受未指定数量的参数(在 C 中;在 C++ 中,空参数列表与 using 相同void
):
void bletch();
不能键入任何对象(变量)void
。但是,您可以声明 type 的指针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
,但它必须在某处明确记录。