功能的隐式定义

问题描述

首先,我要说的是,由于这个问题,我的大脑被烧了。我需要编写一个函数来检查第3个参数是否是第1个和第2个参数的交错。我写了它,但是当我运行它时,它给了我这个错误。 “警告:函数“ interleaved”的隐式声明”这是我的代码

void main()
{
    char str1[100] = "ABC";
    char str2[100] = "XYZ";
    char str3[100] = "XAYZBC";

    printf(interleaved(str1,str2,str3));
}
bool interleaved(char str1[],char str2[],char str3[])
{
    int i = 0,j = 0,k = 0;

    if (strlen(str1) + strlen(str2) != strlen(str3))
        return false;

    while (k < strlen(str3))
    {
        if (i < strlen(str1) && str1[i] == str3[k])
            i++;

        else if (j < strlen(str2) && str2[j] == str3[k])
            j++;
        else
            return false;

        k++;
    }

    if (!(i == strlen(str1) && j == strlen(str2) && k == strlen(str3)))
        return false;

    return true;
}

我找到了有问题的部分,并尝试按以下步骤修复它:

void main()
{
    char str1[100] = "ABC";
    char str2[100] = "XYZ";
    char str3[100] = "XAYZBC";

    bool result = interleaved(str1[100],str2[100],str3[100]);
    printf(result);
}

有人可以帮我吗?

解决方法

“隐式声明”通常意味着,当您尝试使用(调用)函数时,编译器不知道函数签名/原型,因此无法确定返回类型,也无法对参数进行任何检查过去。

大多数情况下,两者之一可以解决

也就是说,您的函数调用和printf()的用法不正确。您可以做类似的事情

bool result = interleaved(str1[100],str2[100],str3[100]);
printf("%s",result?"yes":"no");

该函数返回true时打印“ yes”,否则返回“ no”。

,

使用它们之前,您必须声明或定义要使用的函数。

此外,bool也不是作为printf()的第一个参数传递的正确数据。

尝试一下:

bool interleaved(char str1[],char str2[],char str3[]); /* declare the function */

int main(void) /* use standard type for main() */
{
    char str1[100] = "ABC";
    char str2[100] = "XYZ";
    char str3[100] = "XAYZBC";

    printf("%s\n",interleaved(str1,str2,str3) ? "true" : "false"); /* correctly use printf() */
}
,

您正尝试将interleaved(即bool)的结果用作printf的格式字符串,这是不允许的。

相反,您需要执行以下操作:

printf("%d",str3));

此外,在调用该函数之前,您至少需要声明interleaved