gpt4 book ai didi

c - 如何获取 __LINE__ 报告的整个字符串

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:21 25 4
gpt4 key购买 nike

是否有可能通过LINE 宏获取在线报告的整个字符串。示例代码:

#include <stdio.h>

#define LOG(lvl) pLog(lvl, __LINE__, __FILE__)

pLog(const char *str, int line, const char *file)
{
printf("Line [%u]: File [%s]", line, file);
}

int main ()
{
LOG("Hello"
"world");
return 0;
}

输出是:第[13]行:文件[macro.c]

现在在大型代码库中,我想搜索此文件并打印报告行中出现的字符串“Hello world”(在本例中为 13)

我想的一种方法是搜索此文件,首先使用 gcc -E 为 pLog 执行 grep 生成输出文件并保存它们的字符串,然后在实际代码文件中为 LOG grep 并保存行号与行号匹配结果中存在数字,然后进行索引匹配并打印字符串。

由于字符串可以分布在多行中(在代码中 Hello 在一行中,world 在另一行中)所以也需要注意这一点。

有没有其他最好和最快的方法,或者 gcc 提供了一些选项来将回行和文件转换为实际代码

最佳答案

使用 Clang 很容易做到这一点.以下命令将文件 test.c 的抽象语法树 (AST) 转储到文件 out:

clang -cc1 -ast-dump test.c > out

查看生成文件中的 AST,您可以轻松找到所需的信息:

(StringLiteral 0x1376cd8 <line:12:9, line:13:13> 'char [11]' lvalue "Helloworld")))

Clang 给出字符串第一个标记的开始(第 12:9 行)、字符串最后一个标记的开始(第 13:13 行)和完整字符串(“Helloworld”)。

您可以解析 AST 转储或使用 Clang API 来获取相同的信息。如果这不是一次性任务,我会选择 API,因为 AST 转储格式将来更有可能发生变化。

只有当您有理由不在 pLog 本身中打印字符串时,所有这些当然才有意义。

关于c - 如何获取 __LINE__ 报告的整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11312641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com