struct info _info;
#define INIT(a, b, c, d) \
struct info _info = {a, b, c, d}
这个工作用C的工作,但与G ++我得到:在头初始化宏中的一个结构,必须在C和C++源
error: redefinition of ‘info _info’
INIT
并不总是叫,有时_info会以其他方式初始化,这就是为什么这两种方式都必须坚持。
语境:
我使用INIT中,这是获得与G ++编译的文件,但我还用它了GCC编译的文件。所以问题是:我需要这个头文件代码在两种语言中工作,而不管我是在c库还是在C++库中使用头文件。
Kerrek指出,我可以用#ifdef来,所以我这样做:
#ifndef __cplusplus
struct info _info;
#define INFO(a, b, c, d) \
struct info _info = {a, b, c, d}
#else
struct info _info;
#define INFO(a, b, c, d) \
_info = {a, b, c, d}
#endif
但它仍然是行不通的,我在我使用宏行得到一个error: ‘_info’ does not name a type
我的cpp项目: INFO("Information", 2 ,"again", 4)
请提供您使用'INIT'宏观和它失败的上下文。另外,你是否100%确定你没有忘记宏定义中的反斜杠(这将与错误一致)?请复制并粘贴实际的错误代码。 –
@ AlexandreC.I补充说明我需要它在C++和c中工作 – Blub
注意:以下划线开头的名称在许多情况下都被保留,我邀请您切换到另一个命名约定。 –