C编译报错: implicit declaration of function xxx is invalid in C99 [-Wimplicit-function-declaration]

2023-05-16

C编译报错: implicit declaration of function xxx is invalid in C99 [-Wimplicit-function-declaration]

代码文件 test.c,内容如下:

#include <stdio.h>

int main()
{
    // 我的第一个 C 程序
    printf("Hello, World! \n"); 

    int result = 0;
    result = sum(1 , 5);

    printf("result = %d \n", result);
 
    return 0;
}

// 两个整数求和 
int sum(int a, int b) 
{
    printf (" a = %d \n",  a);
    printf (" b = %d \n",  b);
 
    return a + b;
}

当前clang版本如下:

$ clang --version
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target:x86_64-apple-darwin19.0.0
Thread model:posix
InstalledDir:../XcodeDefault.xctoolchain/usr/bin

当前gcc版本如下:

$ gcc --version
Configured with: 
--prefix=/Applications/Xcode.app/Contents/Developer/usr 
--with-gxx-include-dir=../Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin19.0.0
Thread model: posix
InstalledDir: ../XcodeDefault.xctoolchain/usr/bin

执行编译报错

$ clang test.c
test.c:19:14: warning: implicit declaration of function 'sum' is invalid in C99 
  [-Wimplicit-function-declaration]
    result = sum(1 , 5);
             ^
1 warning generated.
Hello, World! 
 a = 1 
 b = 5 
result = 6

错误: implicit declaration of function ‘sum’ is invalid in C99
即 函数 “sum” 的隐式声明在C99中无效

产生原因:

C语言是过程化的编程语言,程序执行顺序是从上到下。函数调用需要先声明后调用。 C99 默认不允许隐式声明(1999年推出的c语言标准)。
在之前的版本中,在C语言函数在调用前不声明,编译器会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码。

解决办法:

在 main 函数调用前声明一下该函数。
(1)直接放到 main 函数前。
(2)或者定义在 .h 头文件中,在main函数前 引入该头文件。
(3)使用老版本编译。 【不推荐】

使用 -std 参数指定c语言版本:

如果是使用 clang 编译:

# 使用 C89 <-- 不报错
$ clang test.c -std=c89

# 使用 C99 <-- 提示不允许隐式声明,报错
$ clang test.c -std=c99

如果是使用 gcc 编译:

# 使用 C89 <-- 不报错
$ gcc test.c -std=c89  

# 使用 C99 <-- 提示不允许隐式声明,报错
$ gcc test.c -std=c99

完整代码:

#include <stdio.h>

// 函数声明 
int sum (int a, int b); // <---- 在main函数前声明

// 主函数入口
int main()
{
    // 我的第一个 C 程序
    printf("Hello, World! \n"); 
    int result = 0;
    result = sum(1 , 5);

    printf("result = %d \n", result);

    return 0;
}

// 添加两个整数的函数 
int sum(int a, int b)
{
    printf (" a = %d \n",  a);
    printf (" b = %d \n",  b);
 
    return a + b;
}

验证:编译执行

使用 clang 编译执行:

$ clang test.c && ./a.out
Hello, World! 
 a = 1 
 b = 5 
result = 6

使用 gcc 编译执行:

$ gcc -o test1 test.c 
$ ./test1 
Hello, World! 
 a = 1 
 b = 5 
result = 6

参考资料:

https://stackoverflow.com/questions/13870227/implicit-declaration-of-function-sum-is-invalid-in-c99
https://blog.csdn.net/passerby_unnamed/article/details/51073296

[END]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C编译报错: implicit declaration of function xxx is invalid in C99 [-Wimplicit-function-declaration] 的相关文章

  • linux 下 常见 知识点

    1 etc resolv conf ping通baidu com DNS 域名解析服务器 xff01 该文件是DNS域名解析的配置文件 xff0c 它的格式很简单 xff0c 每行以一个关键字开头 xff0c 后接配置参数 resolv c
  • 学习51单片机经历

    学习51单片机的记录 文章目录 前言一 所使用的软硬件设备二 学习课程三 学习内容1 软件安装2 单片机基础3 真正开始学习 xff08 一 xff09 LED灯 总结修改日志 前言 提示 xff1a 只是记载本人学习51单片机的经历 xf
  • LED灯系列

    LED灯系列 本系列为stc89c52RC单片机开发板上LED灯相关操作思路和代码 点此链接转到专栏目录链接 http t csdn cn skf2j 文章目录 LED灯系列1 xff09 原理2 xff09 单个LED灯常亮3 xff09
  • Angular CLI的安装报错

    一 安装步骤 angular cli它是angular框架官方的一个构建工具 xff0c 当你使用 ng new xxx 项目名 创建一个项目时 xff0c 会自动生成项目结构 Angular CLI用于简单 xff0c 快速构建Angul
  • 最新Anaconda3的安装配置及使用教程

    安装记录参考链接 出现问题 xff1a 镜像地址无效 不知道 设置Anaconda镜像 那一步我哪里没有操作好 答 步骤错了 正确步骤 xff1a 1 先执行 conda config set show channel urls yes 生
  • Linux 环境变量:DISPLAY

    1 dbvis no x11 display variable was set but this program performed an operation which requires it solution export DISPLA
  • PostgreSQL入门-安装与基本使用(Ubuntu)

    PostgreSQL入门 安装与基本使用 xff08 Ubuntu xff09 PostgreSQL 是一个免费的对象 关系数据库服务器 ORDBMS xff0c 号称是 世界上最先进的开源关系型数据库 PostgreSQL 是以加州大学计
  • windows下的pycharm项目部署同步到Linux下的pycharm开发

    windows下的pycharm项目部署同步到Linux下的pycharm开发 一 运行平台二 SSH连接远程服务器 一 运行平台 项目部署系统 xff1a UOS 项目开发平台 xff1a windows10 IDE xff1a PyCh
  • redhat操作系统升级红帽6升级到红帽7linux升级

    本文档介绍了从 RHEL 6 到 RHEL 7 就地升级的步骤 支持的就地升级路径是从 RHEL 6 10 到 RHEL 7 9 如果您的 RHEL 系统满足以下条件 xff0c 则完全支持此 RHEL 6 到 RHEL 7 升级过程 xf
  • Kubernetes角色访问控制RBAC和权限规则(Role+ClusterRole)---好文

    基于角色的访问控制 xff08 Role Based Access Control 即 RBAC xff09 使用 rbac authorization k8s io API Group实现授权决策 xff0c 允许管理员通过Kuberne
  • 你知道abrt-hook-ccpp吗

    1 什么是abrt hook ccpp abrt也可以叫abrtd xff0c 展开应该是automatically bug report daemon xff0c 也就是自动错误报告守护进程 从字面意义就可以看出 xff0c 他是一个守护
  • Mobaxterm 使用图形界面

    redhat 7 yum install firefox xorg x11 xauth mesa libGLES devel x86 64 mesa dri drivers vi etc ssh sshd config X11Forward
  • Linux ❉ Chronyd时间同步服务器详解

    一 介绍 1 简介 集群中节点之间需要时间同步 xff0c Chronyd不依赖外部的时间服务NTP xff0c 在内部搭建时间服务器 Chrony是网络时间协议 xff08 NTP xff09 的一种实现 xff0c 是一个类Unix系统
  • Linux时间延迟平滑对时方案的分析-Ntp和Chrony的不同表现

    系列文章目录 文章目录 系列文章目录前言一 环境信息二 ntpd模式 2 1 版本信息2 2 配置ntpd对时源 2 2 1 配置ntpd服务配置 xff0c 启动ntpd服务2 3 2 查看对时情况2 3 配置ntpd客户端 2 3 1
  • keepalive实现MGR的自动切换(二)

    10 0 0 7 lemon 10 0 0 8 lemon2 10 0 0 9 lemon3 程序代码里只需写一个VIP连接数据库即可 xff0c 后面是连接在哪一台通过 xff0c keepalived的在服务端实现 xff1b 通过检测
  • mysql MGR配置keepalived

    之前写过一篇mysql8 0搭建MGR 在这里 mysql8 0配置MGR 悠游 博客园 cnblogs com 在此基础上配置keepalived 一 安装keepalived 可能会少些包 xff0c 所以配置了网络yum源 所有节点均
  • UltraVNC 使用方法详细说明

    每次修改uvnc settings exe后 xff0c 都要重启Winvnc或者VNC server的进程 配置 否则会如下图 结束Winvnc进程 重新打开winvnc exe 直接点OK 打开UVNC Launch exe 右键SER
  • Linux(Ubuntu)下升级Nginx服务器软件至nginx-1.17.6

    Linux下升级Nginx服务器软件nginx 1 17 6 Nginx 音engine X 是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器 也是一个 IMAP POP3 SMTP 代理服务器
  • 通过SnmpWalk获取服务器状态信息

    简单网络管理协议SNMP xff08 Simple Network Management Protocol xff09 是网络监控和网络设备管理的统一 协议 xff0c 并被所有主流的操作系统和大量网络应用程序所支持 SNMP广泛用于管理和
  • 聊聊几款文件同步备份工具,你更喜欢哪一款呢?

    文件备份对企业的价值 对于绝大多数人而言 xff0c 电脑中的不少文件对于我们来说都非常重要 xff0c 一旦丢失 xff0c 损失将会难以估量 随着网络威胁的不断发展和变得越来越复杂 xff0c 文件传输和托管文件传输之间的区别对于企业来

随机推荐