djs*_*djs 5 c gcc c-preprocessor
我的代码有很多复杂的#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)
Run Code Online (Sandbox Code Playgroud)
我会有大量类似的#defines匹配ERROR _ [\ _ W _] +,我想枚举,以便我总是有一个程序可以输出的错误代码的当前列表.我需要数值,因为这是所有程序将打印出来的(不,它不是打印出字符串的选项).
对gcc或任何其他编译器的建议会有所帮助.
我认为解决方案是@nmichaels 和@aschepler 答案的组合。
使用 gcc 的 -dM 选项获取宏列表。使用 perl 或 awk 或其他任何工具从此列表中创建 2 个文件:
1) Macros.h,仅包含#defines。
2)Codes.c,其中包含
#include "Macros.h"
ERROR_FOO = "ERROR_FOO"
ERROR_BAR = "ERROR_BAR"
Run Code Online (Sandbox Code Playgroud)
(即:将每个内容提取#define ERROR_x到带有宏和字符串的行中。
现在运行gcc -E Codes.c。这应该创建一个扩展了所有宏的文件。输出应该类似于
1 = "ERROR_FOO"
2 = "ERROR_BAR"
Run Code Online (Sandbox Code Playgroud)
我手头没有 gcc,所以没有测试过......
| 归档时间: |
|
| 查看次数: |
5048 次 |
| 最近记录: |