预处理器用&#34;#<number> <filename>&#34;?</filename> </number>做什么

时间:2012-11-01 14:59:17

标签: c c-preprocessor

我刚刚遇到一个 C 文件,其中包含预处理程序指令和如下所示的行:

# 9 "filename"

我之前从未见过这样的台词。他们的意思是什么?我猜这些是预处理器指令,但预处理器对它们做了什么?

此外,对于某些行,字符串甚至不代表现有的文件名...

1 个答案:

答案 0 :(得分:4)

我认为这是使用#line预处理程序指令的另一种方式。

例如你可以写:

// you could write #line 7 "filename"  or
// # 7 "filename"  or
// # 7  or
#line 7
int main(void)
{
      printf("%d\n", __LINE__);

所有这些都会在10上给你(在这种情况下)stdout

关于“文件名”部分的说明是可选的和未经验证的(这就是为什么它可以是任何东西,甚至是不存在的文件)。它的用途在我提供的链接中解释 -
If you specify a file name, the compiler views the next line as part of the specified file. If you do not specify a file name, the compiler views the next line as part of the current source file.