10

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

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

4

5 回答 5

13

在 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

于 2012-12-14T10:32:12.267 回答
2

排除 main 的返回类型,如

main(){
}

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

int main(){
}

void类型告诉编译器没有“实体”(没有“存储”),所以

void func(int i)

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

void func()

相当于:

void func(void)

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

于 2012-12-14T10:49:17.740 回答
2

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

1) int myFunc(void)-- 该函数什么都不带。

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

3) void* data;-- 'data' 是一个指向未知类型数据的指针,不能被取消引用

于 2012-12-14T11:06:47.540 回答
1

Void 的意思是“空”。在您的 void main() 示例中,这意味着函数 main() 不返回值。我觉得有义务告诉你应该不惜一切代价避免使用 void main() (不是双关语),而是使用 int main() 。int main() 确保您的程序可以在关闭时向操作系统返回一个 int 类型的值。void 还有许多其他用途,如果您想了解更多信息,请查看此网站。

于 2012-12-14T10:34:13.457 回答
0

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

void foo(int x);

当用作参数列表时,它表示该函数不接受任何参数:

void bar(void);

这与空参数列表不同,空参数列表表示函数接受未指定数量的参数(在 C 中;在 C++ 中,空参数列表与 using 相同void):

void bletch();

不能键入任何对象(变量)void。但是,您可以声明 type 的指针void *:这些是“通用”指针,并且可以在没有显式转换的情况下与其他指针类型相互转换。标准内存分配函数malloc,callocrealloc所有返回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但它必须在某处明确记录

于 2012-12-14T13:12:25.187 回答