可能是重复问题:
为什么 C 和 C++ 中 main 函数的类型由用户定义?
void 是什么?能否提供一些示例,适当使用 void ? 当我们编写void main(void)
或 main()
时有什么区别?
可能是重复问题:
为什么 C 和 C++ 中 main 函数的类型由用户定义?
void 是什么?能否提供一些示例,适当使用 void ? 当我们编写void main(void)
或 main()
时有什么区别?
(void)
表示函数调用时不需要参数,而()
则表示参数数量未指定。void foo(void)
{
// body
}
void bar()
{
//body
}
在调用环境中,
foo(); // Correct
foo(1); // Incorrect
bar(); // Correct
bar(1); // Also correct
这是一般性的解释。
但对于您的情况,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
。
void bar()
和 void bar(...)
是一样的吗? - anishsanemain()
应该只有两种类型的定义,并且The implementation declares no prototype for this function
。 - Omkant到达终止main函数的}返回值为0.
。因此,main()是一个特殊情况,不遵循其他函数的逻辑。 - Lundin在主函数中排除返回类型,如下:
main(){
}
这并不意味着它是一个 void
类型,这取决于编译器。我认为可以说它通常被解释为
int main(){
}
void
类型告诉编译器没有“实体”(没有“存储”),因此
void func(int i)
接受一个整数但不返回任何值。对于参数来说,它是这样的:
void func()
等同于这个:
void func(void)
这更明确地表明它不需要参数。但void *
类型则不同,它是一种类型,指向一个无量纲的指针。
int myFunc(void)
-- 此函数不需要任何参数。void myFunc(int)
-- 此函数不返回任何值。void* data;
-- 'data' 是指向未知类型数据的指针,不能被解引用。Void的意思是“空虚”。在void main()的例子中,它意味着函数main()不返回任何值。我觉得有必要告诉你应该尽量避免使用void main()(无恶意),而是使用int main()。int main()确保您的程序可以在关闭时向操作系统返回int类型的值。Void还有许多其他用途,如果您想了解更多信息,请查看this website。
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
的合法签名,但必须明确地在某个地方记录下来。