评论会被翻译成机器代码吗? C++

Do comments get translated to machine code? C++

当一个用 C++ 编写的程序有注释时,这些注释是被翻译成机器语言还是永远不会那么远?如果我编写的 C++ 程序在两个命令之间有整本书的注释,我的程序会花费更长的时间来编译还是 运行 更慢?

不,它们只是被编译器忽略了。评论的唯一目的是供人阅读,而不是机器。

注释通常在预处理过程中被删除,因此编译器本身根本看不到它们。

虽然它们可以(并且通常会)稍微减慢编译速度——预处理器必须通读整个注释才能找到它的结尾(因此后续代码将传递给编译器。除非你包含真正庞大的注释(例如,兆字节)差异可能不会很明显。

尽管我从未见过(或听说过)执行此操作的 C 或 C++ 编译器,但有些编译器(例如,对于 Pascal)使用特殊格式的注释将指令传递给编译器。例如,Turbo Pascal 允许(其继任者可能仍然允许)用户在注释中使用编译器指令打开和关闭范围检查。在这种情况下,评论本身并没有(至少在我所知道的情况下)生成任何机器代码,但它可能并且确实影响了为评论之外的代码生成的机器代码。

预处理器消除了注释。为什么编译器仍然要读取它们?它们的存在是为了让人们更容易理解代码。 你没听过这个笑话吗 "It's hard to be a comment, you always get ignored" :p

第三个翻译阶段

  • 源文件被分解为注释、白色space字符序列(space、水平制表符、换行符、垂直制表符和换页) 和预处理标记。

  • 每条评论由一个space个字符代替。

有关翻译阶段的更多信息,请参阅此cpprefference article

否,它们已被 preprocessor 删除。您可以使用 cpp: The C Preprocessor 进行检查。只需编写一个带注释的简单 C 程序,然后使用 cpp comment.c | grep "your comment" .