为什么我不能创建一个名为pow()的函数

时间:2014-05-13 12:52:33

标签: c

这是我的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但我仍然得到错误。怎么样?

4 个答案:

答案 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 );    
}