跳至正文

求注释更优雅一些

我在WordPress上安装了Dewplayer插件,在文章中可以通过以下代码嵌入mp3:

[Dewplayer:mp3-url]

同时我设置首页显示文章摘要,则嵌入mp3的文章的摘要显示不正常。我为该文章添加人工摘要,并且在人工摘要中不嵌入mp3,效果依然诡异。这就不得不查看一下WordPress首页的显示原理了,在首页上通过浏览器查看源代码,发现该文章摘要处的结构如下:

1
2
3
4
<!--
    Post
-->
    Summary

也就是说,首页仍把每篇文章的全文列出,并将其注释掉,其后再接上人工摘要。因此一般情况下,只有人工摘要才会显示出来。然而当嵌入mp3时,这部分代码被解释成了:

1
2
3
<!-- Dewplayer Begin-->
    Dewplayer Code
<!-- Dewplayer End-->

合起来看:

1
2
3
4
5
6
7
8
<!--
    Post
    <!-- Dewplayer Begin-->
        Dewplayer Code
    <!-- Dewplayer End-->
    Post
-->
    Summary

Html的注释是不支持嵌套的,所以不可预料的错误就发生了。修改WorePress首页摘要显示的方式显然不是很容易的事情,将Dewplayer代码前后的注释去除则毫不费力:

$ grep -r "Dewplayer Begin" *

发现在dewplayer.php文件中存在以下语句:

1
2
3
$dewp_tag = '<!-- Dewplayer Begin-->';
...
$dewp_tag .= '<!-- Dewplayer End-->';

把这两个作为解释语的注释去掉,问题果然就消失了。

1
2
3
$dewp_tag = '';
...
$dewp_tag .= '';

但是这样做牺牲了代码的可读性。回到最熟悉的C语言,要解决上述问题,在C99标准下,因为支持了单行注释,可以采用如下的代码结构:

1
2
3
4
5
6
7
8
9
// C99
/*
    Post
    // Dewplayer Begin
    Dewplayer Code
    // Dewplayer End
    Post
*/
    Summary

然而,ANSI C标准并未支持单行注释,虽然大多数编译器支持,但毕竟非标准的使用不具有良好的可移植性。多行注释同样不支持嵌套。如果坚持不想牺牲代码可读性的话,就想到了注释对于代码的作用:解释和说明一段代码。并非屏蔽一段代码!因此以上的做法,用多行注释屏蔽代码,本就是一个歪着。正确的做法依赖于条件编译:

1
2
3
4
5
6
7
8
9
/* ANSI C */
#if 0
    Post
    /* Dewplayer Begin */
    Dewplayer Code
    /* Dewplayer End */
    Post
#endif
    Summary

在现代编辑器下,比如我所用的VIM,以上代码中由条件编译移除的部分,会全部高亮为注释的颜色。这样来看,通过预处理命令的条件编译,即使在ANSI C标准下,C语言的注释依然是这般的优雅。至于在C99标准下,以及C++下,有了单行注释,则就更为自由了。而Html的注释,也是否会出现更为优雅的方式呢?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注