【问题标题】:Can we execute comment in C/CPP? [closed]我们可以在 C/CPP 中执行评论吗? [关闭]
【发布时间】:2021-07-22 07:32:45
【问题描述】:
//Printing something from comment
#include <stdio.h>

int main()
{
  //This is a comment line \r printf("I am printed from comment");
  return 0;
}

我试图通过添加 C 中存在的各种转义序列来提出解决方案,但它不起作用。

【问题讨论】:

  • 评论不被解析为代码。为什么需要这样做?
  • 他们在为 Answers 添加最小尺寸要求时没有想到这样的问题
  • 这一定是个 XY 问题。问题背后的问题是什么?
  • @HimanshuShekhar:因为 C 和 Java 以及 C++ 是不同的语言。跳过注释内容使编译器编写更容易。
  • 您可以转义以/* 开头的评论,方法是使用*/ 转义它并使用/* 恢复它。您可以使用换行符转义以// 开头的注释,然后使用// 恢复它。

标签: c++ c


【解决方案1】:

注释只是用来记住函数做了什么,编译器不编译它。

【讨论】:

    【解决方案2】:

    我们可以在 C/CPP 中执行注释吗?

    不,我们不能——至少不能以任何标准方式。 cmets 的内容在翻译阶段被删除,因此无法从程序内访问该内容。

    C++ 标准说(最新草案):

    [lex.phases]

    翻译语法规则的优先级由以下阶段指定。

    ...

    1. 源文件被分解为预处理标记 ([lex.pptoken]) 和空白字符序列(包括 cmets)。 源文件不应以部分预处理标记或部分注释结尾。 每条评论都替换为一个空格字符。 保留换行符。 未指定除换行符以外的每个非空空白字符序列是保留还是替换为一个空格字符。 将源文件的字符划分为预处理标记的过程取决于上下文。

    ...

    【讨论】:

    • "预处理器删除所有 cmets" 实际上,预处理器并不知道 cmets。在解析开始之前,它们就被词法分析器删除了。
    • 我也很好奇。什么是词法分析器?
    • @SaifeddineBenSalem Here's a good discussion.
    • @DarkAtom 够公平的。我会在一分钟内添加标准中的引号。
    【解决方案3】:

    正如其他人所说的无法执行cmets,预处理器将双斜杠后的行删除。

    但是,您可以使用 /* */ 注释样式以伪方式执行此操作

    所以,而不是

    // 这是注释行 \r printf("我是从注释中打印出来的");

    /* 这是注释行 */ printf("我是从注释中打印出来的");

    它不是从注释中直接打印出来的,但您可以在视觉上将 printf 与注释放在同一行。

    【讨论】:

      猜你喜欢
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 2011-11-26
      相关资源
      最近更新 更多