Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C “接收”;错误:';功能'&引用;_C_Function_Compiler Errors - Fatal编程技术网

C “接收”;错误:';功能'&引用;

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

我正在创建一个程序,将二进制、十进制、十六进制和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';
        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()
 {
    ...
 }