首页 文章

注释是否与预处理器指令在同一行上允许,在这种情况下它们的含义是什么?

提问于
浏览
6

我在考虑这样的事情:

#include <iostream> // Comment

那么,cppreference.com(http://en.cppreference.com/w/cpp/preprocessor)声称:

预处理指令控制预处理器的行为 . 每个指令占用一行并具有以下格式:#字符预处理指令(define,undef,include,if,ifdef,ifndef,else,elif,endif,line,error,pragma之一)参数(取决于指令)行打破

这么好,给出了整条 生产环境 线的完整规范,并且没有地方可以在那里发表评论 . 在这些方面不允许建议评论 .

然而,即使用-Wall -Wextra -Wpedantic,g和clang都接受这样的输入 . 此外,cplusplus.com提供了此类评论的示例:http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/

更让我感到困惑的是,有人告诉我“在#行中发表评论仍然有效,但它们可能并不意味着你想要的东西” . 我不确定这是怎么回事,因为根据http://en.cppreference.com/w/cpp/language/translation_phases注释在启动预处理器之前被空格字符替换 - 所以如果它们被允许在#行上,它们怎么会干扰这种#行的语义?

1 回答

  • 11

    如您链接到的翻译阶段文档中所述:在第3阶段的步骤3中,注释被替换为空格 . 预处理器在阶段4中执行 .

    因此,当预处理器处理 # 行时,注释已转换为空格,这通常不会影响预处理指令的行为 .

相关问题