在编译过程中替换宏

时间:2016-01-19 06:18:39

标签: c gcc logging c-preprocessor uart

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

宏后面是一个函数调用,用于使用像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的另一端,日志阅读器必须读取此映射文件以使其具有人类可读性。

优点是这对于低带宽来说是完美的。

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

1 个答案:

答案 0 :(得分:1)

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

我假设您的程序中有大量的这些LOG调用 - 否则只需编辑程序就可能更有意义了。