c - 如何在 C 预处理期间用索引交换字符串

标签 c string indexing c-preprocessor

我有几个 C 源跟踪语句,例如

TRACE(23, "abc"); 
TRACE(24, "def");

数字 23 和 24 是从自动生成的列表中计数的标识符,每行包含一个字符串

...
"abc"
"def"
...

“abc”位于第 23 行,因此我在相应的跟踪语句中写入 23。

预处理器生成我想要的输出

trace(23);
trace(24);

我认为应该可以以我只写的方式自动化它

TRACE("abc"); 
TRACE("def");

在 C 预处理期间,我想自动将字符串与生成的文件的相应行号交换,以便进入预处理器输出

trace(23);
trace(24);

我可以编写一个函数,返回字符串“abc”的第 23 行,但我需要在预处理过程中激活它。有任何预处理器钩子(Hook)或其他想法吗?

最佳答案

<小时/>

预处理器提供了 automagic 宏 __FILE____LINE__ (以及其他一些),您可以使用它们:

<小时/>
#include <stdio.h>

#define TRACE(m) fprintf(stderr, "%s,%d: %s\n", __FILE__ , __LINE__, m)

int main(void)
{
int a;

if(a) TRACE("a");
else TRACE("no");

TRACE("returning");

return 0;
}

关于c - 如何在 C 预处理期间用索引交换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53637440/

相关文章:

c - OpenMP:并行工作负载中无加速

c - printf() 函数中的参数列表是什么?

java - 删除引号内的文本

python - Numpy 从矩阵中提取行、列和值

sql-server - 哪些列通常是好的索引?

xml - 随机访问大型 XML 文件

c - 如何对 C 中的所有命令行参数求和?

C: printf() 和 putchar() 问题

Javascript: replace() all 但仅在 html 标签之外

vb.net - 我的列表(字符串)被保存为 system.string (空)