这是我的C程序:
#include<stdio.h>
main()
{
int a,b;
int pow (int,int);
printf("Enter the values of a and b");
scanf("%d %d",&a,&b);
printf("Value of ab is %d",pow(a,b));
}
pow(int c,int d)
{
return c*d;
}
我的程序中没有包含math.h。我正在使用gcc编译器。我收到以下错误
ex22.c:在函数`main&#39;:
ex22.c:6:错误:“pow&#39;
的冲突类型
搜索后我发现math.h中有一个pow函数。但我不包括math.h但我仍然得到错误。怎么样?
答案 0 :(得分:5)
您不应该为自己的函数使用标识符,该标识符也是C标准库函数的名称,无论您是否包含该标准函数的标头。除非声明函数static
,否则C标准禁止显式,并且编译器可以通过发出pow(x, 2)
的代码而不是函数调用来特别处理这些函数(在例如x*x
的情况下) )。
答案 1 :(得分:0)
这个有效,但有警告:
warning: incompatible redeclaration of library function 'pow' [-Wincompatible-library-redeclaration]
int pow (int,int);
^
test.c:3:5: note: 'pow' is a builtin with type 'double (double, double)'
#include<stdio.h>
int pow (int,int);
int main(void) {
int a,b;
printf("Enter the values of a and b");
scanf("%d %d",&a,&b);
printf("Value of ab is %d", pow(a,b));
}
int pow(int c,int d)
{
return c*d;
}
答案 2 :(得分:0)
试试这个:没有警告,但疯狂编程
#define pow stupidpow
#include<stdio.h>
int main(void) {
int a,b;
printf("Enter the values of a and b\n");
scanf("%d %d",&a,&b);
printf("Value of ab is %d", pow(a,b));
}
int pow(int c,int d)
{
// count c^d
printf("\nAns is \n");
}
答案 3 :(得分:-3)
使用 PowInt 代替 pow。 这样更安全,不会造成任何混乱。
int PowInt (const int m, const int e)
{
int i, r;
r = 1;
for (i = 1; i <= e; i++)
r = r * m;
return( r );
}