【问题标题】:How to escape backslash in // comment如何在 // 注释中转义反斜杠
【发布时间】:2015-07-28 22:58:18
【问题描述】:

我有一条以反斜杠结尾的评论。类似的东西

...

// use \

..

Clang(++) 警告我,这是多行注释

warning: multi-line // comment [-Wcomment]
    // use \
           ^

所以我尝试在最后添加一些空格,但没有帮助。我可以以某种方式逃避反斜杠吗?

【问题讨论】:

  • 注释必须以反斜杠结尾有什么特别的原因吗?
  • 当我尝试在评论中使用:\ 面孔时遇到了这个问题:\
  • 旧帖子,但对我来说,只是在反斜杠之后添加一个(空白)空格似乎有效......

标签: c++ escaping comments c-preprocessor clang++


【解决方案1】:

问题的基础是续行的定义。

当一行以backslash-newline 组合或<backslash><whitespace><newline> 组合结尾时,编译器会将下一行文本附加到当前文本行。这可以用宏来演示:

#define ME {\
cout << "me\n" \
}

以上将被视为单行:

#define ME {cout << "me\n"}

编译器正在抱怨,因为您的“//”注释由于 '\' 连续字符而延伸到下一行。

解决方案:
将其他字符放在“\”之后。
示例:

  '\'
  \ ending character

【讨论】:

    【解决方案2】:

    也许你有这样的代码:

    #define foo {int x = 123; \
    cout << x << endl; \
    }
    

    你想把它注释掉:

    //#define foo {int x = 123; \
    //cout << x << endl; \
    //}
    

    上面的代码应该可以正常工作。另一方面,如果你写:

    #define foo {int x = 123; \
    cout << x << endl; \
    } \
    

    然后 foo 可能会起作用(如果下一行是空的),但如果你把它注释掉,你会遇到麻烦。只需删除最后一个反斜杠。否则不要以反斜杠结束该行,除非它是为了连接......

    【讨论】:

      【解决方案3】:

      您可以使用重音 (`)

      #include<iostream>
      
      using namespace std;
      
      int main()
      {
      
          // print `\`
          cout << "DONE" << endl;
      
          return 0;
      }
      

      【讨论】:

      • 常规引号或双引号应该可以。反斜杠之后的任何内容,除了空格和换行符,都应该有效。
      【解决方案4】:

      虽然这不是一个技术解决方案,但我会以此为提示写一个更好的评论:

      // use \ (backslash) instead of the normal slash here, because ...
      

      【讨论】:

        猜你喜欢
        • 2012-10-03
        • 2015-03-29
        • 1970-01-01
        • 2013-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多