1
#define RAND_MAX 10
#include<stdio.h>
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);
^

冲突类型中的错误??我检查了返回类型。

4

4 回答 4

5

您需要在调用它的点上方声明该函数。

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

于 2013-10-07T15:57:49.483 回答
1

这是因为您randRange在定义之前使用。要么将定义移到你使用它的上面,要么在之前创建一个原型(声明)。

调用时未声明的函数默认为 return int。此默认声明是错误消息中“隐式声明”的含义。

于 2013-10-07T15:58:12.037 回答
1

您的隐式声明将randRange其声明为int (*)(float, float).

始终预先声明函数以避免此类错误。就放

double randRange(double min, double max);

在您的main.

于 2013-10-07T15:58:51.130 回答
0

您必须使用“旧”C 编译器(或在“旧”C89/90 模式下运行现代编译器)。在兼容的现代 C 编译器(C99 及更高版本)中,您的代码通常会在第一次调用时甚至更早地编译失败randRange​​,因为您试图randRange在声明之前使用函数。这在现代 C 中是非法的。

在旧 C (C89/90) 中,调用未声明的函数是合法的。尝试调用randRangeasrandRange(-1.0,1.0)会使编译隐含地得出结论,它必须是一个具有两个double参数并返回的函数int。如果您的函数实际上定义不同,那么您的程序的行为是未定义的。

这正是你的情况。除了您的编译器决定“加倍努力”并为具有这种隐式声明冲突的函数报告错误(而不是悄悄地生成行为未定义的程序)。

于 2013-10-07T16:20:35.400 回答