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;
}