使用K& R样式函数定义时出错

时间:2013-06-19 14:06:32

标签: c compiler-errors kernighan-and-ritchie

我在编译时遇到以下错误。我知道这听起来不对,但是编译器试图传达的确切消息是什么: 错误:有趣的'冲突的类型 错误:以前的趣味性在这里:

 int main( )
 {
    extern int fun(float);
    int a;
    a=fun(3.14F);
    printf("%d\n",a);
    return 0;
}

int fun( aa )
float aa;
{
    return( (int) aa);
}

1 个答案:

答案 0 :(得分:2)

K& R风格的功能声明与现代风格的功能声明并不完全相同。特别是,默认参数促销会发生,使您的float参数不太合法。您有两种方法可以解决您的问题:

  1. 更改fun以接受double参数而非float

  2. fun的定义更改为标准C风格的函数定义:

    int fun(float aa)
    {
        return aa;
    }
    

    我还删除了不必要的演员&括号中。

  3. 顺便说一句,如果您是初学者,您可能会发现clang有用 - 它有时会提供更好的错误消息。对于您的计划,例如:

    example.c:13:7: warning: promoted type 'double' of K&R function parameter is not
          compatible with the parameter type 'float' declared in a previous
          prototype [-Wknr-promoted-parameter]
    float aa;
          ^
    example.c:5:25: note: previous declaration is here
        extern int fun(float);
                            ^