我有一个代码生成器,它将获取一些用户编写的代码并将其 block 嵌入到一个更大的生成文件中。我希望底层编译器在用户代码中存在缺陷时提供良好的诊断,但我也不希望生成的代码中的缺陷在不应该的情况下被错误归因于源代码。
我打算在每个用户编写的代码块的开头发出 #line lineNum "sourceFile"
指令。但是,我找不到 #line
指令的任何文档,其中提到了将 __LINE__
和 __FILE__
重置为实际的技术一旦我离开用户提供的代码,就在生成的文件中添加一行。理想的解决方案类似于 C# 预处理器的 #line default
指令。
我是否只需要跟踪我写了多少行并自己手动重置?或者是否有更好的方法,我可以将某种重置指令或标记值传递给 #line
以消除与用户代码的关联?
看起来这可能是 posed before ,尽管那里没有可靠的答案。为了区分这个和那个,我会另外询问 C++11 是否改变了缺少答案的问题。
最佳答案
我以前使用过的一种技术是让我的代码生成器在它想要重置行指令时在一行上自行输出一个 #
,然后使用一个简单的 awk 脚本来后处理文件并将其更改为正确的行指令:
#!/bin/awk -f
/^#$/ { printf "#line %d \"%s\"\n", NR+1, FILENAME; next; }
{ print; }
关于c++ - 重置 C/C++ 预处理器 #line 物理文件/行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823996/