作为一名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
- 在调用函数时从
int cmp(buffer,s)
中删除int
- 在
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){
}