我正在使用Code :: Blocks将Python(包含Mosquitto MQTT)脚本重写为C.作为测试,我使用了Mosquitto存储库中提供的以下代码:
但是,这会导致以下警告:
||=== 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
是否有快速解决方法使其有效?
答案 0 :(得分:2)
确切地说,包括警卫不是问题。
问题在于mosquitto.h
包含宏bool
的重新定义,该定义已由<stdbool.h>
定义。
这似乎只在Win32上触发。这可能是某人假设“如果我们在Win32上构建,那么我们不使用符合C99的编译器,因此我们必须替换我们自己的stdbool.h
- 兼容声明”的结果。
这当然是不正确的假设;你可以在Win32中使用非Microsoft编译器构建就好了。那可能就是你在做的事情; Code :: Blocks可以使用GCC。
我会说mosquitto.h
中的逻辑需要修复。