冲突类型中的C错误
#define RAND_MAX 10 #include int main() { double x; x=randRange(-1.0,1.0); printf("x value is %f::",x); return 0; } double randRange(double min, double max) { return rand() * (max - min) / RAND_MAX + min; }
错误::以下片段是生成的错误 –
$gcc main.c -o demo -lm -pthread -lgmp -lreadline 2>&1 main.c:11:8: error: conflicting types for 'randRange' double randRange(double min, double max) { ^ main.c:6:5: note: previous implicit declaration of 'randRange' was here x=randRange(-1.0,1.0); ^
冲突类型出错?我检查了返回类型。
您需要在调用它的位置上方声明该函数。
double randRange(double min, double max); int main() { double x; x=randRange(-1.0,1.0); ... double randRange(double min, double max) {
如果不这样做,ansi C会为返回int
的函数提供隐式声明
这是因为你在定义之前使用randRange
。 将定义移动到您使用它的上方,或者之前创建原型(声明)。
调用它们时未声明的函数默认返回int
。 此默认声明是错误消息中“隐式声明”的含义。
你的randRange
隐式声明将randRange
声明为int (*)(float, float)
。
始终预先声明函数以避免此类错误。 刚刚放
double randRange(double min, double max);
在你的main
之上。
您必须使用“旧”C编译器(或以“旧”C89 / 90模式运行现代编译器)。 在兼容的现代C编译器(C99及更高版本)中,在第一次调用randRange
,您的代码通常甚至无法编译,因为您在声明之前尝试使用randRange
函数。 这在现代C中是非法的。
在旧C(C89 / 90)中调用未声明的函数是合法的。 尝试将randRange
作为randRange(-1.0,1.0)
调用使得编译隐式地得出结论,它必须是一个具有两个double
参数并返回int
的函数。 如果您的函数实际上是以不同方式定义的,那么程序的行为是不确定的。
这正是你案件中发生的事情。 除了你的编译器决定“加倍努力”并报告一个带有这种隐式声明冲突的函数的错误(而不是悄悄地生成一个行为未定义的程序)。