#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
函数。这就是报错的原因。解决这个问题的方法有两种:
yearkind
函数的声明或定义。接下来,错误信息还提示"Parameter 'year' was not declared, defaults to 'int'",说明year
参数没有被声明,默认被视为int
类型。这是因为C99标准之后不再支持隐式函数声明,所以要求在调用函数之前先声明或定义函数。
针对这个问题,我推荐先尝试解决第一个问题,即添加yearkind
函数的声明或定义。
如果你可以提供yearkind
函数的代码,我可以给出更具体的解决方案。如果你没有yearkind
函数的代码,你可以尝试按照以下步骤解决问题:
main
函数上方的位置,添加以下声明(如果yearkind
函数返回类型不是int
,请根据实际情况修改):int yearkind(int year);
如果你有yearkind
函数的定义,将其定义代码粘贴到声明的下面。
编译并运行代码,查看问题是否解决。
如果以上解决方法都不能解决问题,可能是由于Clion和Code Blocks之间的编译器差异导致。Clion默认使用的是CMake来管理项目和构建过程,而Code Blocks使用的是自带的GCC编译器。
这个问题的具体原因需要更深入的调查,可能涉及到编译器的设置和代码的特定细节。如果你希望进一步解决这个问题,我建议你提供yearkind
函数的代码和详细的Clion和Code Blocks的版本信息,以便我更好地帮助你解决这个问题。如果你无法提供这些信息,也可以尝试在Clion中创建一个新的CMake项目,重新导入代码并运行,看看问题是否仍然存在。如果问题仍然存在,可能需要进一步排查代码和项目配置的问题,或者尝试更换编译器来解决问题。
总结起来,要解决这个问题,你可以尝试以下步骤:
main
函数上方添加yearkind
函数的声明。yearkind
函数的定义,将定义代码粘贴到声明的下面。yearkind
函数的代码和Clion、Code Blocks的版本信息,以便进一步解决问题。【相关推荐】