C中多行注释警告的含义是什么?

sup*_*t12 16 c gcc warnings comments

我正在为一个家庭作业分配一个C文件,我认为如果我的答案可见,我可能会帮助评分者:

//**********|ANSWER|************\\
//blah blah blah, answering the
//questions, etc etc
Run Code Online (Sandbox Code Playgroud)

并且在使用gcc编译时发现第一行末尾的反斜杠字符似乎触发了"多行注释"警告.当我删除它们时,警告消失了.所以我的问题是双重的:

a)反斜杠字符的存在究竟是如何使其成为"多行注释",以及
b)为什么多行注释仍然是一个问题?

Kei*_*son 23

C(自1999年标准以来)有两种形式的评论.

旧式注释由一条线,一条完整线或多条线引入/*并终止*/,并且可以跨越一条线,一条完整线或多条线.

C++ - 样式注释//由行尾引入并终止.

但是一行末尾的反斜杠会导致该行拼接到下一行.因此,您可以合法地引入注释//,在行的末尾添加反斜杠,并使注释跨越多个物理行(但只有一个逻辑行).

这就是你在第一行做的事情:

//**********|ANSWER|************\\
Run Code Online (Sandbox Code Playgroud)

只需在行尾使用反斜杠以外的其他内容,例如:

//**********|ANSWER|************//
Run Code Online (Sandbox Code Playgroud)

虽然这甚至可能会产生误导,因为它几乎看起来像是旧式的/* .. */评论.您可能会考虑一些更简单的事情:

/////////// |ANSWER| ////////////
Run Code Online (Sandbox Code Playgroud)

要么:

/**********|ANSWER|************/
Run Code Online (Sandbox Code Playgroud)


AnT*_*AnT 9

编译器只是告诉您,您可能通过结束前一个注释行来无意中注释掉下一行代码\,这是C中的行继续符.这会导致第二行与第一行连接.这反过来使//评论实际上注释掉两个原始行.在你的情况下,它不是一个问题,因为下一行也是一个注释.

但如果下一行不打算成为评论,那么你可能最终会遇到"奇怪的行为":编译器忽略第二行没有明显的原因.由于某些语法突出显示的代码编辑器未检测到这种情况并且未能将下一行突出显示为注释,因此情况通常很复杂.

通常,出于这个特定原因,将\字符滥用为代码级别并不是一个好主意.只有当你真的需要时才使用它,即只有你真的想要将几条线拼接成一条线时才使用它.


小智 9

没有人问,但这是谷歌的最佳答案,所以

可以通过选项来抑制此特定警告-Wno-comment