GCC编译器提示power函数隐式声明警告但已在代码中声明该函数的问题咨询
GCC Implicit Declaration Warning for
power Function Even Though It's Defined 嗨,这个问题其实是C语言编译顺序导致的典型坑,我来给你拆解清楚:
为什么会出现这个警告?
C编译器是从上到下逐行解析代码的。当你的main函数里调用power(2,i)和power(-6,i)的时候,编译器还没读到后面的power函数定义——它此时根本不知道power函数的存在,所以会触发「隐式声明」的警告:默认假设这个函数返回int类型,参数列表不确定。虽然你确实写了power函数,但它的位置在main之后,编译器走到main调用处的时候还没识别到它。
怎么解决?
有两种简单的修复方式,选哪种都可以:
方式1:把power函数移到main前面
直接调整代码顺序,让编译器先看到power的定义,再处理main里的调用:
#include <stdio.h> int power(int base, int n){ int i, p; p = 1; for (i=0; i <= n; ++i) p = p * base; return p; } int main(){ int i; printf("%s \t %s \t %s \n", "Powers", "of 2", "of -6"); for (i = 0; i < 10; ++i) printf("%d \t %d \t %d \n", i+1, power(2,i), power(-6,i)); return 0; }
方式2:在main前添加函数原型声明
如果你不想调整函数顺序,可以在代码开头(main之前)声明power的函数原型,提前告诉编译器这个函数的参数和返回值类型:
#include <stdio.h> // 提前声明power函数的原型 int power(int base, int n); int main(){ int i; printf("%s \t %s \t %s \n", "Powers", "of 2", "of -6"); for (i = 0; i < 10; ++i) printf("%d \t %d \t %d \n", i+1, power(2,i), power(-6,i)); return 0; } int power(int base, int n){ int i, p; p = 1; for (i=0; i <= n; ++i) p = p * base; return p; }
额外提醒
隐式声明是C语言的旧特性,从C99标准开始已经被废弃了——现在的编译器不仅会报警告,严格模式下甚至会直接报错。所以养成提前声明函数原型的习惯,能避免很多这类问题哦。
内容的提问来源于stack exchange,提问作者gautam bhuyan
相关产品推荐
相关产品推荐

