C “接收”;错误:';功能'&引用;
我正在创建一个程序,将二进制、十进制、十六进制和oct转换为这些选项中的任何一个。对于十六进制,我需要一种方法将大于9的值格式化为a、B、C、D、E、F中的一个。由于这将在几个函数中重复,我决定使用以下函数:C “接收”;错误:';功能'&引用;,c,function,compiler-errors,C,Function,Compiler Errors,我正在创建一个程序,将二进制、十进制、十六进制和oct转换为这些选项中的任何一个。对于十六进制,我需要一种方法将大于9的值格式化为a、B、C、D、E、F中的一个。由于这将在几个函数中重复,我决定使用以下函数: char hexRepresentation(double n){ if(n > 9){ if(n==10) return 'A'; if(n==11) return 'B'; if(n==12) return 'C';
char hexRepresentation(double n){
if(n > 9){
if(n==10) return 'A';
if(n==11) return 'B';
if(n==12) return 'C';
if(n==13) return 'D';
if(n==14) return 'E';
if(n==15) return 'F';
}
return (char)n;
}
然而,当我试图编译时,我收到了错误
“hexRepresentation”的冲突类型
我是C语言的新手,来自Java,我正在为最简单的实现方法而头痛不已。任何帮助都将不胜感激 只需创建一个具有push和pop功能的堆栈(用于char)。我没有返回值,只是在同一个函数中打印它。(仅适用于整数值)
#定义最大值100
字符a[max];
无效十六进制(整数n)
{
而(n>0)
{
int rem=n%16;
如果(rem=10&&rem-1)
a[i++]=pop();
i=0;
而(a[i]!='\0')
printf(“%c”,a[i++]);
}
这有帮助吗?您不会得到声明类错误,因为在C中,当您不正向声明函数时,大多数编译器会假定一个返回int类型的外部函数。实际上,编译器应该警告您这一点(大多数会)。然后,当编译器实际到达函数实现时,它会找到一个不同的返回类型,在本例中为char,然后抛出“冲突类型”错误。只需向前声明所有函数,以避免此类错误 关于以下代码产生类似结果的最佳方式:
if (n > 9)
{
return('A' + (n - 10));
}
无论您在发布的代码中做什么,您都没有在函数中使用
double
数据类型。从函数返回类型来看,您似乎永远不会看到返回值>127
这段代码强调了一些问题:(这只是说明性的)
即使修复了编译器错误,也可能无法始终获得所需的结果,因为函数中使用了如此危险的数据类型
要知道为什么它不好,请看这里:
我将使用fabs(n)
而不是n
函数体中的任何地方
以及错误“hexRepresentation的冲突类型”当在此函数定义之前存在相同命名函数的先前声明或定义时,将显示此函数。此外,如果未声明函数且函数仅在被调用后出现,编译器会自动假定它为int
因此,在main()之前声明并定义函数
或者在main()之前声明,并使用相同的函数原型在文件中的任何其他位置定义函数
做:
或
如果传入5.6?或甚至是小于10的整数值,它将返回什么5不是
'5'
。除了让它接受double
s这个有问题的决定之外,你在使用之前声明过这个函数吗?如果你来自Java,你可能已经忘记了。我现在甚至都不关心这个问题。我从其他函数中得到了n作为double-特别是从math.h的pow()中得到的)。到目前为止,我只处理整数。@DanielFischer,请原谅;正如我所说,这是全新的。我想我知道你的意思。你指的是在main()之前命名其他函数,对吗?我还有其他函数,但我没有这样做。没有必要为新函数而道歉。至于缺少声明,在旧版本的C(C99之前)中,使用以前未声明的函数提供了返回类型为int
的函数的隐式声明。默认情况下,许多编译器仍在某种C99之前的模式下工作,并接受隐式函数声明。但是如果以后声明和定义返回类型与int
不兼容的函数,则会得到恰恰是这样一个不兼容类型
错误。使用gcc,在-std=c99
模式下,您将收到隐式声明函数的警告,如果添加-pedantic errors
,则会收到错误。
if (n > 9)
{
return('A' + (n - 10));
}
char hexRepresentation(double n){
if(n > 9){//comparing (double>int). Bad.
if(n==10) return 'A';
if(n==11) return 'B';
if(n==12) return 'C';//You wrote if(double == int). Bad.
if(n==13) return 'D';
if(n==14) return 'E';
if(n==15) return 'F';
}
return (char)n; //again unsafe downgrade from 8 bytes double to 1 byte char.
}
char hexRepresentation(double); //Declaration before main
main()
{
...
}
char hexRepresentation(double n){//Definition after main
...
}
char hexRepresentation(double n){ //Declaration and definition before main
...
}
main()
{
...
}