用空参数列表主要与void的参数列表不同吗?

时间:2012-12-14 10:29:57

标签: c main void

  

可能重复:
  Why is the type of the main function in C and c++ left to the user to define?

什么是无效?有人提供一些例子,正确使用 void ?当我们写void main (void)main()时会有什么不同?

5 个答案:

答案 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 *malloccalloc都返回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() 的合法签名,但必须明确记录某处