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

sam*_*ion 2 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; 
}
Run Code Online (Sandbox Code Playgroud)

我的程序中没有包含math.h.我正在使用gcc编译器.我收到以下错误

ex22.c:在函数`main'中:

ex22.c:6:错误:`pow'的冲突类型

搜索后我发现math.h中有一个pow函数.但我不包括math.h但我仍然得到错误.怎么样 ?

Fre*_*Foo 5

您不应该为自己的函数使用标识符,该标识符也是C标准库函数的名称,无论您是否包含该标准函数的标头.除非声明了函数static,否则C标准禁止显式,并且编译器可以特别处理这些函数(例如pow(x, 2),通过发出代码x*x而不是函数调用).

  • 狡辩:标准说"标准库中所有带外部链接的标识符总是保留用作外部链接的标识符." 和"标准库中具有文件范围的每个标识符"保留用作宏名称,并且如果包含任何相关标题,则保留为具有相同名称空间的文件范围的标识符." 这似乎意味着如果`pow`被声明为`static`,那么一切都会好的,因为`math.h`不包括在内.另外,如果指定`-fno-builtin-pow`,gcc就可以了. (2认同)