在编译过程中替换宏
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 调用——否则简单地编辑程序可能更有意义。
我的项目使用日志记录机制,基本上是在我的每个组件中调用一个宏。
宏后面是一个函数调用,用于使用像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 调用——否则简单地编辑程序可能更有意义。