构建期间的警告消息 - >警告:" bool"重新定义

时间:2014-07-07 08:16:55

标签: c gcc-warning mosquitto

我正在使用Code :: Blocks将Python(包含Mosquitto MQTT)脚本重写为C.作为测试,我使用了Mosquitto存储库中提供的以下代码:

https://bitbucket.org/oojah/mosquitto/src/4deedcb49ff50be94166701f21e5c79ff7667d5b/test/lib/c/02-subscribe-qos0.c?at=default

但是,这会导致以下警告:

||=== Build: Debug in test (compiler: GNU GCC Compiler) ===|
..\..\..\..\..\Program Files (x86)\mosquitto\devel\mosquitto.h|56|warning: "bool" redefined|
c:\mingw32-xy\bin\..\lib\gcc\mingw32\4.5.2\include\stdbool.h|33|note: this is the location of the previous definition|
obj\Debug\main.o||In function `on_connect':|

我一直在深入研究这个问题,我认为可以使用包含警卫来解决。我做了一些测试,但显然我不知道如何正确应用它们。

由于我不是一名经验丰富的C程序员,所以我决定寻求帮助。

编辑:我已添加mosquitto.h code的链接。

这是可能出错的部分:

#ifndef _MOSQUITTO_H_
#define _MOSQUITTO_H_

#ifdef __cplusplus
extern "C" {
#endif

#if defined(WIN32) && !defined(WITH_BROKER)
#   ifdef libmosquitto_EXPORTS
#       define libmosq_EXPORT  __declspec(dllexport)
#   else
#       define libmosq_EXPORT  __declspec(dllimport)
#   endif
#else
#   define libmosq_EXPORT
#endif

#ifdef WIN32
#   ifndef __cplusplus
#       define bool char
#       define true 1
#       define false 0
#   endif
#else
#   ifndef __cplusplus
#       include <stdbool.h>
#   endif
#endif

是否有快速解决方法使其有效?

1 个答案:

答案 0 :(得分:2)

确切地说,包括警卫不是问题。

问题在于mosquitto.h包含宏bool的重新定义,该定义已由<stdbool.h>定义。

这似乎只在Win32上触发。这可能是某人假设“如果我们在Win32上构建,那么我们不使用符合C99的编译器,因此我们必须替换我们自己的stdbool.h - 兼容声明”的结果。

这当然是不正确的假设;你可以在Win32中使用非Microsoft编译器构建就好了。那可能就是你在做的事情; Code :: Blocks可以使用GCC。

我会说mosquitto.h中的逻辑需要修复。