我在c ++ 11模式下编译应用程序时遇到问题,只需在dbus库的标题中添加空白字符即可解决。
如果我这样做 - 当我尝试构建的库(带有空格标题)将尝试链接到dbus(在标题中没有空格构建)时,它会破坏东西吗?
特别是,dbus-protocol.h包含以下行:
#define DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE "<!DOCTYPE node PUBLIC \""DBUS_INTROSPECT_1_0_XML_PUBLIC_IDENTIFIER"\"\n\""DBUS_INTROSPECT_1_0_XML_SYSTEM_IDENTIFIER"\">\n"
其中,为了在c ++ 11模式下成功编译,必须插入空格,如下所示:
...PUBLIC \"" DBUS_INTROSPECT...
在不破坏兼容性的情况下,我们可以在头文件中真正改变多少? (我知道qt ABI兼容性指南,但我不认为它解决了我的特定问题)
答案 0 :(得分:1)
这看起来像那个标题中的错误。除了一些真正的病态案例,添加空格不会导致不兼容,除了避免某些编译器上的错误。
我假设DBUS_
...标识符扩展为引号分隔的字符串,然后该字符串应该与该宏的其余部分自动连接。这是一个非常安全的假设。