Why does my C program give error : warning: implicit declaration of function ‘palindrome’ [-Wimplicit-function-declaration]
Why does my C program give error : warning: implicit declaration of function ‘palindrome’ [-Wimplicit-function-declaration]
目的:检查字符串是否为回文
错误:
在第 32 行警告:函数“回文”的隐式声明 [-Wimplicit-function-declaration]
代码:
int palindrome(char[] A)
{
int i;
for(i = 0; A[i] != '[=10=]'; i++) { } i = i-1; // Keeping the index pointer at final element rather than null pointer.
int j;
for(j=0; j<i ; i--, j++)
{
if(A[i] != A[j])
return 0;
}
return 1;
}
int main()
{
char A[] = "madam";
if(palindrome(A)) // Line of Error
printf("Yes, Palindrome");
else
printf("No!");
return 0;
}
这个函数的声明
int palindrome(char[] A)
不正确。看来你的意思是
int palindrome(char A[])
此外函数应该声明为
int palindrome( const char A[])
因为传递的字符串在函数内没有改变。
并且不要在标识符名称中使用全部大写字母。我会像
这样声明函数
int palindrome( const char *s )
这个for循环
for(i = 0; A[i] != '\n'; i++) { }
如果传递的字符串不包含换行符 '\n'
.
可以调用未定义的行为
看来你的意思又是
for(i = 0; A[i] != '[=15=]'; i++) { }
最好将此循环替换为 while 循环,例如
int i = 0;
while ( A[i] != '[=16=]' ) i++;
此外,您应该使用类型 size_t
而不是使用类型 int
来确定字符串的长度,因为通常类型 int
可能不够大,无法存储可能的字符串长度。
在不使用标准 C 字符串函数的情况下,可以定义函数,如下面的演示程序所示。
#include <stdio.h>
int palindrome( const char *s )
{
size_t first = 0;
size_t last = 0;
while ( s[last] ) ++last;
if ( first != last )
{
while ( first < --last && s[first] == s[last] ) ++first;
}
return !( first < last );
}
int main( void )
{
const char *s = "A";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "AA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "AB";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "ABA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "ABBA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "ABCA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
return 0;
}
程序输出为
"A" is a palindrome - true
"AA" is a palindrome - true
"AB" is a palindrome - false
"ABA" is a palindrome - true
"ABBA" is a palindrome - true
"ABCA" is a palindrome - false
modify the method parameter declaration i.e. char A[] not char[] A
#include <stdio.h>
#include <string.h>
int palindrome(char A[])
{
int i;
for(i = 0; A[i] != '[=10=]'; i++) { } i = i-1; // Keeping the index pointer at final element rather than null pointer.
int j;
for(j=0; j<i ; i--, j++)
{
if(A[i] != A[j])
return 0;
}
return 1;
}
int main()
{
char A[] = "madam";
if(palindrome(A)) // Line of Error
printf("Yes, Palindrome");
else
printf("No!");
return 0;
}
目的:检查字符串是否为回文
错误: 在第 32 行警告:函数“回文”的隐式声明 [-Wimplicit-function-declaration]
代码:
int palindrome(char[] A)
{
int i;
for(i = 0; A[i] != '[=10=]'; i++) { } i = i-1; // Keeping the index pointer at final element rather than null pointer.
int j;
for(j=0; j<i ; i--, j++)
{
if(A[i] != A[j])
return 0;
}
return 1;
}
int main()
{
char A[] = "madam";
if(palindrome(A)) // Line of Error
printf("Yes, Palindrome");
else
printf("No!");
return 0;
}
这个函数的声明
int palindrome(char[] A)
不正确。看来你的意思是
int palindrome(char A[])
此外函数应该声明为
int palindrome( const char A[])
因为传递的字符串在函数内没有改变。
并且不要在标识符名称中使用全部大写字母。我会像
这样声明函数int palindrome( const char *s )
这个for循环
for(i = 0; A[i] != '\n'; i++) { }
如果传递的字符串不包含换行符 '\n'
.
看来你的意思又是
for(i = 0; A[i] != '[=15=]'; i++) { }
最好将此循环替换为 while 循环,例如
int i = 0;
while ( A[i] != '[=16=]' ) i++;
此外,您应该使用类型 size_t
而不是使用类型 int
来确定字符串的长度,因为通常类型 int
可能不够大,无法存储可能的字符串长度。
在不使用标准 C 字符串函数的情况下,可以定义函数,如下面的演示程序所示。
#include <stdio.h>
int palindrome( const char *s )
{
size_t first = 0;
size_t last = 0;
while ( s[last] ) ++last;
if ( first != last )
{
while ( first < --last && s[first] == s[last] ) ++first;
}
return !( first < last );
}
int main( void )
{
const char *s = "A";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "AA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "AB";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "ABA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "ABBA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
s = "ABCA";
printf( "\"%s\" is a palindrome - %s\n", s, palindrome( s ) ? "true" : "false" );
return 0;
}
程序输出为
"A" is a palindrome - true
"AA" is a palindrome - true
"AB" is a palindrome - false
"ABA" is a palindrome - true
"ABBA" is a palindrome - true
"ABCA" is a palindrome - false
modify the method parameter declaration i.e. char A[] not char[] A
#include <stdio.h>
#include <string.h>
int palindrome(char A[])
{
int i;
for(i = 0; A[i] != '[=10=]'; i++) { } i = i-1; // Keeping the index pointer at final element rather than null pointer.
int j;
for(j=0; j<i ; i--, j++)
{
if(A[i] != A[j])
return 0;
}
return 1;
}
int main()
{
char A[] = "madam";
if(palindrome(A)) // Line of Error
printf("Yes, Palindrome");
else
printf("No!");
return 0;
}