代码块中的奇怪警告 - C.

时间:2013-12-12 00:47:23

标签: c warnings codeblocks compiler-warnings

编译程序时,我在CodeBlocks中收到以下警告: “| 5 |:警告:内置函数'gamma'的冲突类型[默认启用] |” 我知道这意味着我在宣布我的职能时做错了什么,但这不是我想要的。

如果我将“gamma”替换为程序中出现的“Gamma”,则不会给出任何警告。该程序在两种情况下都能完美运行,但我想知道我有谁能告诉我为什么“gamma”会出现问题而“Gamma”却没有。

我的节目:

#include <stdio.h>

void lee_datos(int *,int *);
double gamma(int);

main()
{
    int x,y,z,opcion=1;
    double a,b,c,Beta;

    while(1)
    {
        lee_datos(&x,&y);

        a=gamma(x);
                    printf("\n");
        b=gamma(y);
                    printf("\n");
        z=x+y;
        c=gamma(z);
                    printf("\n");

        [...]
    }
    printf("\nFin del programa\n");
}

void lee_datos(int *p_x,int *p_y)
{
   [...]
}

double gamma(int n)
{
    int i;
    double factorial=1;

    n=n-1;

    for(i=1;i<=n;i++)
    {
        factorial*=i;
        printf("%lf\n",factorial);
    }
    return(factorial);
}

非常感谢你!

爱德华

1 个答案:

答案 0 :(得分:1)

gamma不是标准C函数,ISO C标准库中没有名为gamma的函数。但是一些数学库(math.h)默认使用它。原型是:

double gamma(double x);

因此它与您自己的gamma函数冲突,该函数具有int参数。

由于gamma不是标准C函数,也许您可​​以使用gcc -std=c99 -pedanticgcc -std=c11 -pedanticgcc -ansi进行编译,以使编译器符合C标准,因此库的gamma函数将不包括在内。