【问题标题】:Including */ in a C-style block comment在 C 风格的块注释中包含 */
【发布时间】:2010-10-26 00:26:35
【问题描述】:

有没有办法在 C 风格的块注释中包含 */?在这种情况下,不能将块注释更改为一系列行 cmets (//)。

下面是导致问题的注释类型的示例:

/**
 * perl -pe 's/(?<=.{6}).*//g' : Limit to PID
 */

【问题讨论】:

  • 在这个特定的示例中,当然还有许多其他方法可以编写不需要字符组合的等效正则表达式或等效命令。
  • @Reb Kennedy:你是对的,但修改功能以使其适合评论似乎很愚蠢。
  • 感谢您提出这个问题;被接受的答案真是令人大开眼界。
  • 为什么不能将块注释更改为一系列行 cmets?
  • bk1e,嘿,我想你有个好主意。如果 / 导致问题,那么为什么不在有问题的行之前关闭,然后使用“//”,然后重新引入 / ... */ test

标签: c# c++ c comments block-comments


【解决方案1】:

通常 cmets 不需要是字面的,所以这不会经常出现。

您可以将其全部包装在 #if 块中:

#if 0
whatever you want can go here, comments or not
#endif

【讨论】:

  • 这似乎是对预处理器命令的滥用,但它确实完成了工作。
  • 它是随领土而来的。 C 是为了被滥用。
  • 可能是鬼鬼祟祟,但这种情况非常普遍!
  • 很常见,以至于一些编辑理解了这个符号并将#if 0 和#endif 之间的所有内容作为注释突出显示。
  • 我使用#if 0 注释掉代码块。 #if 0 中的内容必须是有效的预处理器标记。不太容易找到违规,因为预处理器会吃掉很多东西,这些东西只是在“真实”阶段的后期被拒绝或接受。但是尝试在它们之间加上“\”。使用 gcc 出错(“反斜杠和换行符由空格分隔”),同时使用 comeau 出错(“注释未在文件末尾关闭”)。但是对于注释掉代码,这是 imo 的最佳选择。
【解决方案2】:

不!没有。

【讨论】:

  • 有时简单的答案是最好的
【解决方案3】:

您可以通过修改您的正则表达式以不包含有问题的字符序列来回避这个问题。从你正在做的事情来看,这应该可以工作(使 * 不贪婪):

/**
 * perl -pe 's/(?<=.{6}).*?//g' : Limit to PID
 */

【讨论】:

  • 这个 C 问题会变成 JAPH 会话吗? ;-)
【解决方案4】:

在一般情况下,您不能。

这是一个在这种情况下碰巧有效的棘手答案:

/**
 * perl -pe 's/(?<=.{6}).* //gx' : Limit to PID
 */

这是(或者应该是,我实际上没有测试 perl 命令)一个与原始匹配相同的正则表达式,因为 x 修饰符允许在表达式中使用空格以使表达式清晰,这允许 */分开。

你可以使用更多的空格,我只包含了打破评论块标记结尾的单个空格。

一些编译器支持打开允许嵌套 cmets 的非标准功能的选项。这通常是个坏主意,但在这种特殊情况下,您也可以这样做

/** 
 * /* perl -pe 's/(?<=.{6}).*//g' : Limit to PID
 */

仅对该源文件启用该选项。当然,正如上面片段中时髦的颜色所证明的那样,您的其他工具可能不知道您在做什么,并且会做出错误的猜测。

【讨论】:

    【解决方案5】:

    对于这种特殊情况,您可以在您的 perl 正则表达式中使用change the delimiter。您可以使用任何非字母数字、非空白分隔符。这里我切换到#

    /** 
     * perl -pe 's#(?<=.{6}).*##g' : Limit to PID
     */
    

    常见的选择是#%

    像括号或大括号这样的“括号字符”的语法略有不同,因为它们应该是匹配的对:

    /** 
     * perl -pe 's[(?<=.{6}).*][]g' : Limit to PID
     */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-17
      • 2014-11-12
      • 2014-12-11
      • 2018-09-06
      • 1970-01-01
      • 2011-02-02
      • 2011-01-08
      • 1970-01-01
      相关资源
      最近更新 更多