【发布时间】:2010-12-30 17:46:17
【问题描述】:
我的代码中有很多复杂的#define 错误代码,由于它们嵌套在多个级别中,因此不容易解码。
有没有什么优雅的方法可以得到一个带有最终数值(或其他任何值)的#defines 列表?
举个例子:
<header1.h>
#define CREATE_ERROR_CODE(class, sc, code) ((class << 16) & (sc << 8) & code)
#define EMI_MAX 16
<header2.h>
#define MI_1 EMI_MAX
<header3.h>
#define MODULE_ERROR_CLASS MI_1
#define MODULE_ERROR_SUBCLASS 1
#define ERROR_FOO CREATE_ERROR_CODE(MODULE_ERROR_CLASS, MODULE_ERROR_SUBCLASS, 1)
我将有大量类似的 #defines 匹配 ERROR_[\w_]+ 我想枚举,以便我始终拥有程序可以输出的当前错误代码列表。我需要数值,因为这就是程序将打印出来的所有内容(不,它不是打印字符串的选项)。
对 gcc 或任何其他编译器的建议会有所帮助。
【问题讨论】:
-
您是否考虑过使用实常数而不是#defines?
-
将代码更改为 const 是不切实际的,因为它是从上游源继承而来的。
标签: c gcc c-preprocessor