C警告:函数声明中的参数名称(不带类型)

  • 本文关键字:类型 参数 警告 函数 声明 c
  • 更新时间 :
  • 英文 :


作为一名C语言的初学者,我在编译以下代码后刚刚收到这种警告:

#include <stdio.h>
#include <string.h>
int main()
{
char buffer[] = "word";
char s[] = "word";

int cmp(buffer, s);
return 0;
}
int cmp(char *s1, char *buffer1){

size_t l = strlen(s1);

for (size_t n=0; n<l; n++){

if(*s1 == *buffer1){

printf("OK n");

} else {

printf("sth is wrong upn"); 
}
return 0;
}
}

请给我一些特别针对这种警告的建议。我搜索过SO,但只发现了这种性质的更复杂的问题。

问题在于线路

int cmp(buffer, s);

main中,它不是函数调用,而是(格式错误的(函数声明int不应该存在。如果您想在调用main之前在其主体中声明cmp,那么您应该编写

int cmp(char *, char *);  // declaration 
...
cmp( buffer, s );         // call

因此,一个简单的方法是main:之前定义cmp函数

int cmp(char *s1, char *buffer1)
{
... // body of function    
}
int main( void )
{
...   
cmp(buffer, s);
...
}

函数定义也算作函数declaration,因此,如果调用函数(main(和被调用函数(cmp(都在同一源文件中定义,则可以在调用函数之前定义被调用函数,不需要使用单独的声明。

@Wojciech Mierzejewski

  1. 在调用函数时从int cmp(buffer,s)中删除int
  2. int main()之上声明int cmp(char *s1, char *buffer1);函数,这样编译器应该知道该函数存在于源代码中。例如
#include <stdio.h>
#include <string.h>
int cmp(char *s1, char *buffer1);
int main(){
cmp(buffer,s);
}
int cmp(char *s1, char *buffer1){
}

最新更新