是否可以在系统库头中添加空格?

时间:2014-01-31 12:34:33

标签: c++ linux shared-libraries

我在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兼容性指南,但我不认为它解决了我的特定问题)

1 个答案:

答案 0 :(得分:1)

这看起来像那个标题中的错误。除了一些真正的病态案例,添加空格不会导致不兼容,除了避免某些编译器上的错误。

我假设DBUS_ ...标识符扩展为引号分隔的字符串,然后该字符串应该与该宏的其余部分自动连接。这是一个非常安全的假设。