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 中国大陆许可协议进行许可。

posted @   喵酱的花椒  阅读(32404)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.