【发布时间】:2014-07-28 08:30:10
【问题描述】:
鉴于以下宏以函数调用方式访问编译器属性,例如spec(section(".mysection")) void foo(void);:
#define spec(_H_) spec_##_H_
#define spec_section(_S_) attribute ((section (_S_)))
我现在想在其他宏中使用这些定义,例如 spec(namespace(unmanaged)) int x;:
#define spec_namespace(_H_) spec_namespace_##_H_
#define spec_namespace_unmanaged spec(section(".unmanaged"))
但这根本不会扩展,使其工作的唯一方法是自己编写扩展的 spec() 宏:
#define spec_namespace_unmanaged spec_section(".unmanaged")
知道发生了什么吗? gcc -E on spec(namespace(unmanaged)) 导致spec(namespace(unmanaged))。
【问题讨论】:
标签: c macros c-preprocessor