预处理源文件后。例如,这样的
int main()
{
return 0;
}
事实证明
# 1 "main.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.cpp"
int main()
{
return 0;
}
那么,,,,# 1 "main.cpp"是# 1 "<built-in>"什么# 1 "<command-line>"意思# 1 "main.cpp"?我阅读了有关预处理器的信息,但没有找到任何关于它的信息。
PS:底线是我想写自己的C++编译器,自然要从预处理器入手,因为这本身就是最简单的部分。超出任务的东西是不值得的,只是为了娱乐。当然,我想立即检查预处理器。在我写完所有内容之前。因此,关于预处理器的奇怪问题。好吧,当然,我不打算实现编译器中的所有内容。只有最低限度。
这不在 C++ 标准中。
据我所知,GCC 仅使用这些标志来确保错误(和警告)消息具有正确的行号和文件名。
也就是说,使行号对应于预处理之前的代码,而不是之后。如果错误发生在包含的文件中,则在错误消息中指出。
例子:
在此代码上,GCC 发出:
看,他拿的文件名和行号不是真实的,而是如后面所示
#。