函数名冲突导致的C语言“conflicting types”编译错误
快速解答:
啊,看来你也遇到了“conflicting types”——类型冲突编译错误。
如果你不是遇到:
-
循环引用而没有用宏定义来解决。
-
声明或定义在调用后面。
-
声明和定义冲突。
-
.h.gch
未更新。
那么我想告诉你,你可跟我一样忘了C
语言不支持“函数重载”,即你的函数名不能重复。
所以不是你的类型声明(typedef
)冲突了,而是函数名冲突了。
上下文
$ mingw32-make.exe test-program
gcc -finput-charset=UTF-8 -std=c99 -c test_main.c -o test_main.o
In file included from test_main.c:3:
ctzidn.h:98:6: error: conflicting types for 'IsNullCId'; have '_Bool(const Citiz
98 | bool IsNullCId(const CitizenIdZip1 cid);
| ^~~~~~~~~
ctzidn.h:97:6: note: previous declaration of 'IsNullCId' with type '_Bool(const
97 | bool IsNullCId(const CitizenId* const cid);
| ^~~~~~~~~
mingw32-make: *** [makefile:62: test_main.o] Error 1
-std=c99
这个参数是我后加上去。我注意到stdbool.h
中bool
最终指向_Bool
,一想C
语言之前好像没这个东西,就查了一下,是C99
标准中才支持的,所以就加上了,但是错误并不是在这里。
我甚至多次注意到他说的类型冲突所指向的是函数名,甚至有一次开始想“好像C语言是不是不支持函数重名的?”,但是直接否定了,然后兜了一圈回来,才查了一下。这才确定了我C
语言白学了啊。
最近好几个C
语言项目编译不通过大概就是因为这个。(手动笑哭)
原文 2022年10月30日
本文来自博客园,作者:Orange233,转载请注明原文链接:https://www.cnblogs.com/orange233/p/18340643/c-compiler-error-conflicting-types
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库