关于“error: conflicting types for 'function'”编译错误的分析

编译时提示 conflicting types for 错误的解决办法 编译时错误提示: error: conflicting types for xxx error: previous implicit declaration of xxx was here 原因与解决办法: 一、函数使用的位置位于声明之前,或未声明函数原型就使用函数; 这种情况往往出现在函数实现文件中,未在头部声明或声明的位置位于函数使用的位置之后; ... 阅读详情

在使用gcc编译C程序时,有时会碰到“error: conflicting types for 'function'”的编译错误。从字面意义上理解,是说函数的定义和声明不一致。在这篇文章里,我就对这个错误做个简单的分析(使用的gcc版本是4.9.0)。

(一)首先我们看一个函数的定义和声明不一致的例子:

#include <stdio.h>
 
int func(int a);
 
int func(void) {
	return 0;
}
 
int main(void) {
 
	func();
 
	return 0;
}

编译程序:

gcc -g -o a a.c
a.c:5:5: error: conflicting types for ‘func’
 int func(void) {
     ^
a.c:3:5: note: previous declaration of ‘func’ was here
 int func(int a);

可以看到由于“func”的声明和定义不一致(一个有参数,一个没有),所以编译时出现了这个错误。

(二)最近我在把一个老程序从Solaris移植到Linux,编译时也出现了这个错误。但是我发现函数在头文件里的声明和函数定义是完全一样的,这就令我很奇怪。查了将近一天时间,最后得到结论是函数参数类型在函数声明后定义了。简化的代码如下:

#include <stdio.h>

void func(struct A *A);

struct A {
        int a;
};

void func(struct A *A)
{
        printf("%d", A->a);
}

int main(void) {
        // your code goes here
        struct A a = {4};
        func(&a);
        return 0;
}

其中“structure A”的定义放在“func”函数声明之后了,而func函数的参数是“structure A*”类型。编译结果如下:

gcc -g -o a a.c
a.c:3:18: warning: ‘struct A’ declared inside parameter list
 void func(struct A *A);
                  ^
a.c:3:18: warning: its scope is only this definition or declaration, which is probably not what you want
a.c:9:6: error: conflicting types for ‘func’
 void func(struct A *A)
      ^
a.c:3:6: note: previous declaration of ‘func’ was here
 void func(struct A *A);
      ^

可以看到也输出了“error: conflicting types for 'func'”的编译错误,也许编译警告可以给一点提示吧。

我检查了一下程序的Makefile,所有编译警告都关掉了,也许是编译警告太多了吧。

关于Ubuntu18.04LTS编译最新版PX4源码(v1.16)出错的解决办法 最近工作又要开始搞PX4的开发,正好读研时有现成的环境(Ubuntu18.04LTS),本着能不折腾就不折腾的原则,直接下载了最新版本的PX4源码进行编译测试(v1.16.0-alpha2-84-g091974e6c5),随便编了个版本(px4_fmu-v3_default)结果编译报错,报错内容如下:^~~~~~~~试了写老代码(v1.11)编译是ok的,所以怀疑可能是编译器的问题。多方查找解决办法并尝试,终于解决,现把解决办法分享出来以供大家参考。 阅读详情

相关推荐

LeetCode一道最简单的题“两数之和”

其实大一的时候就想每天做一道LeedCode的题目,但是无奈那时候基础太差,被这么一道标签为简单的题目难住了,现在快大二了倒觉得还做得下去。 首先自己还算是第一次做这个,犯了一个很大的错误,你打开一道题的时候是只有一个class,你在里面编辑解决方案,其实就可以了。我之前就连带着把main函数也写在后面了,于是出现了这样的错误: conflicting declaration of C fun...

Judithucococoding的博客 1263

error: conflicting types for 【五大错误原因+解决办法】

目录原因一原因二原因三原因四原因五参考资料 原因一 没有函数声明,且函数定义在主函数之后 原因二 头文件的被循环引用,在引用时考虑清楚包含顺序 或者使用 #ifndef CAPITAL_FILENAME #define CAPITAL_FILENAME // main body #endif /* CAPITAL_FILENAME */ 原因三 头文件函数声明和函数定义参数不同,如 头文件中声明 void test(const char* buf),但在定义时写作 void test(char* bu

Xav Pun的博客 5万+

解决提示“previous definition of...“或者“conflicting types for...“问题方法

我们从上面的错误信息可以看出,**错误的根本原因是因为我定义了两个不同类型的变量:“battery_lod_num”**。

OMGMac的博客 3713

QT报错“conflicting declaration of C function ‘float fabsf(float)‘的解决方案

今天遇到这个情况: “C函数‘float fabsf(float)’的声明冲突” 实验各种操作之后发现可以这么做:把“extern float __cdecl fabsf (float x);”这行注释掉,然后编译,ok。然后取消掉注释,再编译,就解决了这个问题。 后面发现在这一行extern后面多加一个空格,就可以复现这种情况: 朋友猜测应该是编译先后顺序的问题:在更改这个头文件之前,就只编译你写的而不会编译这个头文件;然后更改了这个头文件两个都会被编译。 谨以此文记录这个第一次遇到的bug,如有大佬

qq_38641585的博客 3709

matlab内读取文件目录时斜杠和反斜杠的使用

@matlab内读取文件目录时斜杠和反斜杠的使用TOC matlab内读取文件目录时,斜杠和反斜杠的使用 最近被斜杠和反斜杠弄晕了,于是总结了一下,在此和大家分享一下。 代码 clear; clc; close all; I1= imread('..\zs1.jpg'); %和代码文件夹同目录的图片 (纯反斜杠) I2= imread('../zs2/zs2.j...

weixin_44456694的博客 6575

区块链入门:用账本、乐高和三台旧电脑讲懂分布式账本

区块链是一种去中心化的分布式账本技术,其核心原理是通过密码学哈希、共识机制和链式结构实现数据不可篡改与多方共同验证。它不依赖单一中心,而是将交易记录同步复制到多个节点,依靠数学规则而非人工信任达成一致,从而在数字世界构建可验证的信用基础设施。这种‘集体见证’模式显著提升了系统抗单点故障与人为干预的能力,广泛应用于供应链溯源、数字身份、教育管理及公益透明等需强信任保障的场景。本文以账本类比、乐高拆解和Ganache实操为线索,面向零基础读者通俗解析哈希值、挖矿与智能合约等关键概念。

weixin_30517215的博客 276

conflicting types for 错误问题

函数:serialmsg_t sd_lld_write(SerialDriver *sdp, vuint8_t *buffer,vuint16_t len)在编译过程中,发现报错,可以发现serial.c和serial.h编写的函数存在不一致的问题,只需要修改成一致就不会报错了。怎样编译都会出现一个conflicting types for ’xxx‘的错误。头文件中声明 void Hanlder(const char * buf);出现这个错误的原因: 头文件声明和定义参数稍有不同。

weixin_48867130的博客 3180

PCL 点云八叉树射线相交

PCL 点云八叉树射线相交

dayuhaitang1的博客 850

【编译时提示 conflicting types for 错误的解决办法】

在 C/C++ 编译过程中出现 “conflicting types for” 错误通常是由于类型声明不一致导致的。

weixin_52130677的博客 4594

[27] cuda 应用之 核函数实现图像通道变换

[27] cuda 应用之 核函数实现图像通道变换

yohnyang的博客 202

2023年五一数学建模 | 第二十届五一数学建模C题:“双碳”目标下低碳建筑研究

2023年五一数学建模 | 第二十届五一数学建模C题:“双碳”目标下低碳建筑研究

前程算法屋的博客 1380

C语言--[Error] conflicting types for 'count'--解决方案。

[Error] conflicting types for ‘count’ 目前我发现的可能原因有两个: 你取的函数名称与系统的函数名称相冲突; “func”的声明和定义不一致(参数类型、返回值、参数个数) 解决: 对第一种,没有其它办法,只能改名称。 第二种的出有多类情况,举三类: (1)参数类型不一致: int n10(float x); int n10(int x...

weixin_43641971的博客 7587

【Python机器学习】零基础掌握TweedieRegressor广义线性回归模型

本次文章主要介绍了如何使用Tweedie回归模型预测电动汽车的实际续航里程。基于车速、气温和驾驶习惯等多种因素,模型能够准确地预测出电动汽车的续航里程,从而为生产商和消费者提供有用的信息。优点总结,Tweedie回归模型在处理具有多元性和高度散布的数据方面表现出色,特别适用于需要考虑多种影响因素的预测任务。优点名称对应描述说明多元性强可以同时处理多种类型和维度的数据高度可定制允许用户自定义损失函数和正则项对异常值鲁棒能够较好地处理数据中的异常值易于解释参数和预测结果都相对容易解释。

Mr数据杨 1007

gcc源码编译中的问题处理过程

1.需求是想要gcc可以编译32位程序也可以编译64位程序,机器是64位的 编译过程教程参考:https://www.quyu.net/info/782.html 但是configure配置时不能配置–disable-multilib,如果配置了这个,64位的机器就不能编译32位的程序了。安装成功的gcc查出来如下:(…/configure --prefix=/usr/local/gcc-4.9.4 --enable-threads=posix --disable-checking --enable-mul

u011018840的博客 3108

SAP 的预算控制并非单一功能,而是根据管控的精细度和业务场景,主要通过三个模块实现:CO(成本控制)、FM(基金管理) 和 PS(项目系统)

SAP系统提供三种预算控制模型:基于CO模块的成本中心/内部订单预算管控,适用于日常费用管理;基于FM模块的基金中心/承诺项目预算控制,满足公共部门严格资金管理需求;基于PS模块的WBS元素预算控制,专为项目型企业设计。各模型通过特定配置实现预算编制、审批、控制和分析功能,并配有核心事务代码(T-Code)支持全流程操作。企业可根据业务场景选择适合的预算控制方式,实现从预算编制到执行监控的闭环管理。

金牌架构师 255

SAP SD销售订单的ATP检查简介

如果可用性检查组设置为01(汇总需求),系统将更新销售订单需求到汇总表VBBS,该表中未记录销售订单号码,因此在MD04中不会显示销售订单号码,而是按天汇总显示销售需求。如果物料的可用性检查组设置为02(单个需求),系统将更新销售订单需求到表VBBE,该表中记录了销售订单号码,因此在MD04显示销售订单的号码以及需求,前面的文章中我们解释了PP模块中的ATP检查,也解释了MM模块中的ATP的检查,本文将说明一下SD模块中的ATP检查。可用性检查用的最多的就是02,有兴趣的同学可以测试一下可用性检查01。

我小时候很黑的博客 4297

c语言conflicting types,gcc编译C程序出现”error conflicting types for function”编译错误的分析解决...

今天使用gcc编译C语言程序时出现 ”error conflicting types for function” 编译错误,这个错误的原因是什么?如何解决?以下看正文的讲解。在使用gcc编译C程序时,有时会碰到“error: conflicting types for ‘function’”的编译错误。从字面意义上理解,是说函数的定义和声明不一致。在这篇文章里,我就对这个错误做个简单的分析(使用的...

weixin_30878111的博客 4607

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VScode error: conflicting types for ‘s_gets‘-C语言显示自定义函数类型矛盾

后面还有个提示:previous implicit declaration of ‘s_gets’ was here s_gets。在VScode里面编写C语言自定义函数的时候,出现error: conflicting types for 's_gets’的错误。真是笑死,这都能错,哎,记录一下吧!解决办法:添加函数声明。

qq_42595610的博客 1031

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

error:conflicting types for 'function name'错误原因

在linux编译器运行的时候有时候会出现conflicting types for xxxxx的错误,科能因为以下原因造成: 1.被调用函数在调用函数之后定义,却没在头文件或者c文件(调用函数之前)开头声明。   2.函数声明、定义和引用的时候返回值或者参数定义不一致。   3.头文件反复引用时前后冲突。

rhine1012的博客 2085

C语言报错:error: conflicting types for XXX

报错信息 error: conflicting types for ‘variance’ 报错原因 函数位于main()之后,没有做函数声明。 网上看到可能有其他原因: 1、头文件被循环引用; 2、头文件声明和定义参数不同。 解决方案 在main函数之前进行函数声明,或者将自定义函数移到前面。 ...

Blog of Mark 7434

error: conflicting types for 错误原因及解决办法

error: conflicting types for '***'error: previous implicit declaration of '***' was here 原因一: 没有函数声明,且函数定义在主函数之后; 原因二: 头文件的被循环引用,在引用时考虑清楚包含顺序 原因三: 头文件函数声明...

weixin_34380781的博客 10万+

编译器出现conflicting types for 某某的错误原因总结

直译就是xxxx 发生了一种冲突!比如今天发现的这个错误,实属低级! 本次错误的原因是:函数没有先声明,便写在了主函数后面!应该是先声明,后定义,如果只有定义,则定义必须写在主函数上方。通过查资料,有总结了一些常见引起这类错误的原因: 1、因为没有先做函数声明,而函数位于main()之后。 2、头文件被循环引用,在引用时考虑清楚包含顺序 3、头文件声明和定义参数稍...

diaoyanqin5061的博客 4954

c++出现[Error] conflicting declaration ***之类的问题怎么办?

遇到这种错误,那么一定是说明你的变量被重复定义了,比如说你先定义了一个int a,然后又定义了一个int a[100];那么程序就会报: [Error] conflicting declaration 'int a [100]',就是因为你定义了两个名字相同的数据类型。这个程序中名为sum的变量定义了两个,所以我们应该把int的sum或char的sum中一个的变量名换成不与其他变量名冲突的,就可以很好的解决这一问题了!这个程序把int类型的变量名又sum改为了cnt,变量名不冲突,也就不会报错了!

wangchuha的博客 7025

Keil编译时,提示“error:conflicting types for XXX”错误及处理方法

原因一: 原来是因为没有先做函数声明,而函数位于main()之后。 在main函数前声明了函数原型后,一切ok.   原因二: 头文件的被循环引用,在引用时考虑清楚包含顺序   原因三: 头文件声明和定义参数稍有不同 例:  头文件中声明 void Hanlder(const char * buf);  在定义时写作 void Hanlde

chw_wei009的博客 1万+

C语言-函数

在定义函数的文件内,可省略函数声明(因为函数定义时,相当于声明了函数)。/* 函数返回两个数中较大的那个数 *//* 局部变量声明 */int result;else。

zc58778560的博客 485

冲突声明(conflicting declaration)解决

使用到的2个库文件,重复定义了同名的数据类型。 1、在后一个引用的定义的地方(比如uint64这个类型被重复定义)   #ifdef uint64 #undef uint64 #define unsigned long long uint64 将前一个定义“undefine”,重新定义一个。这个要求冲突的2个定义必须是相同类型(都是unsigned long long),不然前一个文...

Ryan的博客 7万+
上一篇: 为什么gcc在64位Solaris上编译出来的程序默认是32位的?
下一篇: 《Systems Performance: Enterprise and the Cloud》读书笔记系列(一) —— 第一章
一个手艺人
博客等级 码龄16年 20粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值