编译程序时,我在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);
}
非常感谢你!
爱德华
答案 0 :(得分:1)
gamma
不是标准C函数,ISO C标准库中没有名为gamma的函数。但是一些数学库(math.h)默认使用它。原型是:
double gamma(double x);
因此它与您自己的gamma
函数冲突,该函数具有int
参数。
由于gamma
不是标准C函数,也许您可以使用gcc -std=c99 -pedantic
或gcc -std=c11 -pedantic
或gcc -ansi
进行编译,以使编译器符合C标准,因此库的gamma函数将不包括在内。