2013-10-06 41 views
3

我有一个函数,可以用2种方式写。为什么func()和func(void)不同

void function(void) { 
     // operations.... 
} 

void function() { 
     // operations...... 
} 

两个函数是相同的原型的。为什么我们必须在函数定义中提到void作为参数?

+0

有些编译器需要'void'来了解它。 –

+0

@Pazis:有些?所有严格遵守C标准的编译器应该。 – icktoofay

+0

@JEM:'void func()'根本不是*原型。因此,你的断言“两个函数都是相同的原型”简直是错误的。 – AnT

回答

10

不,两者都有不同的原型。

编译下面的程序,你会明白。

void function1(void) 
{ 
    printf("In function1\n"); 
} 

void function2() 
{ 
    printf("In function2\n"); 
} 

int main() 
{ 
    function1(); 
    function2(100); //Won't produce any error 
    return 0; 
} 

方案2:

#include <stdio.h> 
void function1(void) 
{ 
    printf("In function1\n"); 
} 

void function2() 
{ 
    printf("In function2\n"); 
} 

int main() 
{ 
    function1(100); //produces an error 
    function2(); 
    return 0; 
} 
3

正确的做法应该说在C和C “无参数” ++是

void function(void); 

但是,当我们写

void function(); 

它在C和C++中意味着一种不同的方式!这意味着“可以采用任何数量的未知类型的参数”,并且在C++中它意味着与函数(void)相同。

相关问题