C语言Clion函数报错

#C语言

请教大家,这样的应该怎么解决,刚刚开始学用Clion,这段代码明明在CB上运行是没有问题的。

报错为:
Call to undeclared function 'yearkind'; ISO C99 and later do not support implicit function declarations
Parameter 'year' was not declared, defaults to 'int'; ISO C99 and later do not support implicit int

以下为完整代码:

#include<stdio.h>


int main()
{
    int ret, year, month, flag;

    ret = scanf("%d %d", &year, &month);
    if (ret != 2)
    {
        printf("ERROR!");
        fflush(stdin);
    }
    else
    {
        flag = yearkind(year);

        if (flag == 1)           //闰年
        {
            switch(month)
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    printf("这个月有31天。");
                    break;
                case 2:
                    printf("这个月有29天。");
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    printf("这个月有30天。");
                    break;

            }
        }
        else
        {
            switch(month)
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    printf("这个月有31天。");
                    break;
                case 2:
                    printf("这个月有28天。");
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    printf("这个月有30天。");
                    break;
            }
        }
    }

    return 0;
}

int yearkind(year)
{
    return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 1 : 0;
}


我还想问一嘴,似乎CB的编码跟Clion不一样,怎么解决?

你的代码在Clion中报错是因为你使用的编译器遵循了C99标准,而C99标准不支持隐式函数声明和隐式int。在你的代码中,函数yearkind并没有在调用前声明,同时year参数也没有明确声明类型,因此编译器给出了错误信息。

解决这个问题的方法是在调用yearkind函数前进行函数声明,并明确声明year参数的类型。可以将代码修改为如下形式:

#include<stdio.h>

// 函数声明
int yearkind(int year);

int main()
{
    int ret, year, month, flag;
 
    ret = scanf("%d %d", &year, &month);
    if (ret != 2)
    {
        printf("ERROR!");
        fflush(stdin);
    }
    else
    {
        flag = yearkind(year);
 
        if (flag == 1)           //闰年
        {
            switch(month)
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    printf("这个月有31天。");
                    break;
                case 2:
                    printf("这个月有29天。");
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    printf("这个月有30天。");
                    break;
            }
        }
        else
        {
            switch(month)
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    printf("这个月有31天。");
                    break;
                case 2:
                    printf("这个月有28天。");
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    printf("这个月有30天。");
                    break;
            }
        }
    }
 
    return 0;
}
 
// 函数定义,此处已将year参数的类型明确为int
int yearkind(int year)
{
    return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 1 : 0;
}

这样修改后,代码应该可以在Clion中正常运行。

C标准不一样。
72行缺参数类型,72行在main前需要声明一下,或者移到main前面。

声明都不对

【以下回答由 GPT 生成】

根据错误信息,问题出在yearkind函数的调用上,以及year参数的使用上。

首先,错误信息提示"Call to undeclared function 'yearkind'",说明在代码中没有声明yearkind函数。这就是报错的原因。解决这个问题的方法有两种:

  1. 在代码中添加yearkind函数的声明或定义。
  2. 检查代码,可能是函数名错误或者函数没有正确命名。

接下来,错误信息还提示"Parameter 'year' was not declared, defaults to 'int'",说明year参数没有被声明,默认被视为int类型。这是因为C99标准之后不再支持隐式函数声明,所以要求在调用函数之前先声明或定义函数。

针对这个问题,我推荐先尝试解决第一个问题,即添加yearkind函数的声明或定义。

如果你可以提供yearkind函数的代码,我可以给出更具体的解决方案。如果你没有yearkind函数的代码,你可以尝试按照以下步骤解决问题:

  1. 在你的代码文件中找到main函数上方的位置,添加以下声明(如果yearkind函数返回类型不是int,请根据实际情况修改):
int yearkind(int year); 
  1. 如果你有yearkind函数的定义,将其定义代码粘贴到声明的下面。

  2. 编译并运行代码,查看问题是否解决。

如果以上解决方法都不能解决问题,可能是由于Clion和Code Blocks之间的编译器差异导致。Clion默认使用的是CMake来管理项目和构建过程,而Code Blocks使用的是自带的GCC编译器。

这个问题的具体原因需要更深入的调查,可能涉及到编译器的设置和代码的特定细节。如果你希望进一步解决这个问题,我建议你提供yearkind函数的代码和详细的Clion和Code Blocks的版本信息,以便我更好地帮助你解决这个问题。如果你无法提供这些信息,也可以尝试在Clion中创建一个新的CMake项目,重新导入代码并运行,看看问题是否仍然存在。如果问题仍然存在,可能需要进一步排查代码和项目配置的问题,或者尝试更换编译器来解决问题。

总结起来,要解决这个问题,你可以尝试以下步骤:

  1. main函数上方添加yearkind函数的声明。
  2. 如果有yearkind函数的定义,将定义代码粘贴到声明的下面。
  3. 编译并运行代码,查看问题是否解决。
  4. 如果问题仍然存在,可以尝试创建一个新的CMake项目,重新导入代码并运行,看看问题是否仍然存在。
  5. 提供更多的信息,如yearkind函数的代码和Clion、Code Blocks的版本信息,以便进一步解决问题。


【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^