编译报错: implicit declaration of function ‘m’ is invalid in C99
即 函数 “m” 的隐式声明在C99中无效
原因:
C语言是过程化的编程语言,程序执行顺序是从上到下。函数调用需要先声明后调用。 C99 默认不允许隐式声明(1999年推出的c语言标准)。
在之前的版本中,在C语言函数在调用前不声明,编译器会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码。
没有在头文件那里提前声明自定义函数,所以提前声明之后再进行编译。
这种声明称为函数原型,作用是让编译器在编译时对程序中的函数调用检查合法性。非法的函数调用将导致编译失败,即出现语法错误,用户可以根据错误信息来调试程序。
解决办法:
在 main 函数调用前声明一下该函数。
(1)直接放到 main 函数前。
(2)或者定义在 .h 头文件中,在main函数前引入该头文件。
(3)使用老版本编译。 【不推荐】
方法1:
1 #include <stdio.h> 2 3 int m(int x, int y); // 在这里提前进行声明 4 int main(int argc, char const *argv[]) 5 {}
方法2:
1 #include <stdio.h> 2 3 int m(int x, int y) { //自定义函数在上,main 函数在下 4 int z; 5 z = x > y ? x : y; 6 return z; 7 } 8 9 int main(int argc, char const *argv[]) 10 {}