C 语言编译出现 implicit declaration of function 错误
在学习 c 语言的过程中,手动使用 clang 进行编译的时候,碰到自定义函数会报出下面的错误:
error: implicit declaration of function 'm' is invalid in C99
[-Werror,-Wimplicit-function-declaration]
(gcc 中会报出 warning,而不是 error)
经过排查,发现是没有在头文件那里提前声明自定义函数,所以提前声明之后再进行编译就 OK 了.
这种声明称为函数原型,作用是让编译器在编译时对程序中的函数调用检查合法性.非法的函数调用将导致编译失败,即出现语法错误,用户可以根据错误信息来调试程序.
同时在函数原型中,可以省略各个形参的名称,而只写出形参类型:
1 | int m( int , int ); |
简单举例:
1 #include <stdio.h> 2 3 int m(int x, int y); // 在这里提前进行声明 4 int main(int argc, char const *argv[]) 5 { 6 int a, b, c; 7 printf(" 输入两个整数:\n"); 8 scanf("%d%d", &a, &b); 9 c = m(a, b); 10 printf("%d\n", c); 11 return 0; 12 } 13 14 int m(int x, int y) { 15 int z; 16 z = x > y ? x : y; 17 return z; 18 }
或者是把 main 函数写在文件最下面,也就是自定义函数在上,main 函数在下:
1 #include <stdio.h> 2 3 int m(int x, int y) { 4 int z; 5 z = x > y ? x : y; 6 return z; 7 } 8 9 int main(int argc, char const *argv[]) 10 { 11 //int m(int x, int y); 12 int a, b, c; 13 printf(" 输入两个整数:\n"); 14 scanf("%d%d", &a, &b); 15 c = m(a, b); 16 printf("%d\n", c); 17 return 0; 18 }
本文作者:喵酱的花椒
本文链接:https://www.cnblogs.com/sashuishui/p/14346661.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步