评论巫术

3

我还不是一个60级的巫师,所以我有一个基于维基百科上魔法文章中以下句子的问题:

任何对代码产生影响的注释都是魔法。

这是怎么回事呢?在哪些语言中可能会出现这种情况?更具体地说,注释可能对代码产生什么影响?

3个回答

4

神奇的注释有各种形式。在Ruby中,可以在文件顶部放置一个注释,指定解释器读取文件时使用的编码:

# -*- coding: UTF-8 -*-

在Unix系统中,第一行可以是shebang。在任何带有八角井符号的语言中,这相当于一个注释,操作系统会读取它来决定如何解释该文件。

更多


#!/bin/bash
echo hello from bash

在Haskell中,可以使用称为"pragma"的某些类型的注释来开启(或关闭)语言功能。

更多


{-# LANGUAGE OverlappingInstances, NoTypeFamilies #-}

more


我对“bash”示例不是很确定。第一行不是先读取,然后正确的程序被生成来执行它吗?也就是说,如果您将第一行更改为“#!/bin/sh”,那么它就不再是相同的语言了。不过,您的最终示例完全正确! - Shahbaz
1
不太确定,因为这个取决于操作系统的处理方式,所以有点模糊。我倾向于将它视为注释,因为在我主要使用的Ruby中是这样的,但你也可以格式化它,使其将标志传递给二进制文件,例如“#!/ usr / bin / env ruby ​​-s”,这将保持相同的语言,但更改它处理ARGV参数的方式。 - Joshua Cheek
Shebang 的作用是当你执行程序时,如 "./myprog",操作系统会读取第一行并启动指定的解释器。然后解释器会将该行忽略为注释(或者如果解释器是 Perl,则读取其中的标志)。如果您将程序作为 "sh myprog" 运行,则 #!/user/bin/bash 仍然被忽略为注释。因此,该行对于解释脚本的 shell 是注释,但对于操作系统而言则有意义,如果将脚本作为程序执行 -- 对于不同的读者来说,是否具有不同的含义是 "魔法",由你自己决定。 - Steve Jessop

2
我不会过于担心维基百科中的那条评论。我认为它的意图只是想说,评论“不应该”影响行为(因为这就是评论的含义),所以如果它确实影响了行为,那么它必须是某种特殊情况,因此根据文章这一部分使用的定义,“神奇”。撰写该文章的作者并没有特定的语言在心中。
如果你喜欢严谨,那么在C语言中,评论可以很容易地影响程序行为(例如通过包含多个换行符)。
#include <stdio.h>

int main() {
    /* If this multi-line comment were deleted, then
       the line-numbers in the remainder of the file
       would be smaller. Boring magic.
    */
    printf("%d\n", __LINE__);
}

我相信作者原意并不是这样,所以这个评论不够准确。只有在特定情况下,注释语法才会产生“魔力”。

好的例子,我没有想到__LINE__ - Shahbaz

0

你也会遇到那些“神奇”的注释……

那些被注释掉的代码段,如果你保留这些注释,一切都能正常工作。但是,如果你删除了它们,噼里啪啦,什么都不起作用了。(通常是由于在注释段中间有一行未被注释)

(注释就是魔法)


你能详细说明一下吗?如果注释中有一行未被注释掉,那么删除它就不再是“注释”魔法了! - Shahbaz
抱歉,我忘记在这里发表评论了。 然后按下回车键进行换行,并提交了(!)看起来像注释魔法的那一行通常是200行疤痕组织中的“x = True”,而在这200行中,唯一没有被注释的行,因此您取消整个注释块并说:“我不知道它是如何修复的,但这些被注释掉的疤痕代码是必不可少的!” - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接