我一直在使用 C++ 并使用 clang++ 进行编译。我想包括
我一直在使用 C++ 并使用 clang++ 进行编译。我想包括 <xcb/xkb.h>
不幸的是,这个标题使用了 explicit
一些字段名称(例如第 727 行),而这是 C++ 中的一个关键字。
有没有什么办法可以解决这个问题?
xcb/xkb.h :
// ...
#ifdef __cplusplus
extern "C" {
#endif
// ...
typedef struct xcb_xkb_set_explicit_t {
xcb_keycode_t keycode;
uint8_t explicit;
} xcb_xkb_set_explicit_t;
// ...
#ifdef __cplusplus
}
#endif
// ...
一个解决方案是向您的 makefile 添加一个生成步骤,复制标题并重命名字段,并包含所述自动生成的标题。
(在一般情况下,这很难甚至不可能做到,但在这种情况下,考虑到标题不太可能用于 explicit
其他任何用途,即使只是一个简单的( gnu ) sed
( s/\bexplicit\b/explicit_field/g
或类似的东西)也可以。棘手的部分是找出要复制的正确文件。)
确保复制的标题的位置在包含路径中位于 之前 ,以防包含中的其他内容间接包含该标题。
仅更改字段名称不会对 ABI 等产生任何影响,至少对于名义上与 C 兼容的标头而言。(在 C++ 中,重命名字段有时会产生影响。)