2010-08-12 100 views
0

我有这样的代码:这个函数的原型应该如何编译?

void PrintMainParameters(int n, char* array[]) 
{ 
    int i = 0; 
    for(i = 0; i < n; i++) 
    { 
    printf("%s \n", array[i]); 
    } 
} 

int main(int argc, char* argv[]) 
{ 
    PrintMainParameters(argc, argv); 
} 

工作正常。现在我想将PrintMainParameters编写为原型,以便稍后在源文件中声明该函数。

我试过这一个,但它说类型不匹配,第二个参数是一个不兼容的指针类型。我了解编译器错误,但我不知道它为什么会发生。

void PrintMainParameters(int, char*); 


int main(int argc, char* argv[]) 
{ 
PrintMainParameters(argc, argv); 
} 

void PrintMainParameters(int n, char* array[]) 
{ 
    int i = 0; 
    for(i = 0; i < n; i++) 
    { 
    printf("%s \n", array[i]); 
    } 
} 

原型应该如何?为什么我的代码不工作?

回答

4

您可以使用:

void PrintMainParameters(int, char**); 

或:

void PrintMainParameters(int, char *[]); 

或者,如果你愿意,你可以插入一个虚拟参数为原型,如:

void PrintMainParameters(int argc, char *argv[]); 
+1

为最后一个选项+1,这极大地提高了任何人只看原型的可读性。 – 2010-08-12 20:33:16

6

你的函数需要一个char指针数组。你的原型声明它只需要一个字符指针。正确的原型是这样的:

void PrintMainParameters(int, char*[]); 
+0

谢谢,现在我明白了我的问题和它的固定;) – citronas 2010-08-12 19:47:17