在编译过程中替换宏

Replacing macros during compile process

我的项目使用日志记录机制,基本上是在我的每个组件中调用一个宏。

宏后面是一个函数调用,用于使用像UART这样的慢线来写日志。

示例:

LOG("An error has occurred. Please check XYZ. Code: %d", errorcode) 

我不想将整个文本写入 UART,而是想像这样替换每次出现的 LOG:

LOG("12345 %d", errorcode) 

每次调用 LOG 都必须替换为简短版本,其中文本替换为唯一编号。动态部分可能不会被替换。唯一编号到原始文本的映射必须放入文件中。 像这样:

12345:"An error has occurred. Please check XYZ. Code:"

在 UART 的另一端,日志 reader 必须读取此映射文件以使其可读。

优点是这非常适合低带宽。

我的问题: 编译代码时如何做到这一点?我正在使用 gcc 并在 Linux 环境中工作。 我假设预处理器必须处理这个。还是一种预先脚本? 或者有更好的方法吗?

您肯定需要一个 pre-processing 脚本。 C 预处理器的能力非常有限——它几乎仅限于简单的文本替换。如果您所有的 LOG 调用都在 1 行上,并且它们的 none 消息包含括号,那么您可能可以使用相当简单的文本处理工具来完成它,也许是 awk。如果没有,我会使用一种编程语言(也许是 perl)来构建它。

我假设您的程序中有大量这样的 LOG 调用——否则简单地编辑程序可能更有意义。