【发布时间】:2021-03-02 02:31:26
【问题描述】:
为什么有人想要使用#line 指令在程序中重置/更改当前行号或文件名的示例用法是什么,例如:
#line 10000 "somefile.c"
printf("File: %s, Line: %d", __FILE__, __LINE__)
什么是有用的例子?
【问题讨论】:
-
“某人”:通常不会。它旨在供从其他代码生成 C 代码的脚本或程序使用——这样,错误消息可以引用原始代码。 (此外,曾几何时,C 预处理器本身是一个单独的程序,它使用
#line的等价物在#include处理之前将原始行号传递给编译器本身。) -
在自动生成的 c 代码中,将代码从一个源文件转换为另一个源文件时。当生成的文件中有错误时,您通常想知道原始源文件中的哪一行创建了错误。它通常由 c 预处理器生成。
-
无论好坏,我从事的项目的一部分有一个由
cat file1.c file2.c … file9.c > code.c创建的源文件。每个组件文件的顶部都有#line 2 "file1.c"或等效项,因此来自复合code.c的编译错误将错误归因于正确的源文件。我必须通过创建code.c作为包含#include "file1.c"#include "file2.c"...#include "file9.c"的普通签入文件来改进这一点,因此不再需要#line指令,尽管它们也没有害处(除了碰撞文件中的行号减 1)。
标签: c c-preprocessor