首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归注释的语言支持

递归注释的语言支持
EN

Stack Overflow用户
提问于 2011-10-24 08:30:41
回答 4查看 305关注 0票数 3

我使用过的大多数语言都不支持递归注释。

  1. 有什么理由让语言设计者选择不去实现这一点呢?
  2. 这看起来很复杂吗?
  3. 会不会产生意想不到的结果?

递归注释示例:

代码语言:javascript
复制
/*
for (int j = 0; j <= SourceTexture.Height; j += SampleSize)
{
    ...
}

// Comment within comment below:
/*for (int i = 0; i < TextureColour.Length; i++)
{
    ...
}*/


sourceTexture.SetData<Color>(TextureColour);
*/

编辑:到目前为止,我理解答案的论点(当您在字符串中有注释标记时会出现问题)。然而,我困惑的原因是你现在有了这个问题。

例如,我知道下面的代码不会给出预期的结果。

代码语言:javascript
复制
/*
    char *str = "/* string";
    // Are we now 1 level inside a comment or 2 levels?

*/

printf("Hello world");

/*
    char *str2 = "string */";
*/

但在我看来,这与以下情况下的意外结果并无不同:

代码语言:javascript
复制
/*
CODE "*/";
*/

这也会产生意想不到的/不希望的结果。

因此,虽然这可能是递归注释的一个问题,但我认为这并不是不这样做的原因,因为它已经成为非递归注释的一个问题。作为一名程序员,我知道编译器的行为是这样的,我就是这样做的。我不认为用递归注释来解决相同的问题需要付出更多的努力。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-24 09:09:01

有什么理由让语言设计者选择不去实现这一点呢?

这就使得词法分析更难实现。

这看起来很复杂吗?

IMHO,不,但这是主观的

会不会产生意想不到的结果?

很难说。您已经发现,即使是正常的块注释也会产生问题:

代码语言:javascript
复制
/* print ("*/");    */

我知道有嵌套块注释的两种语言:Haskell弗雷格

票数 2
EN

Stack Overflow用户

发布于 2011-10-24 08:42:09

我会举一个例子,也许会更清楚:

代码语言:javascript
复制
/*
    char *str = "/* string";
    // Are we now 1 level inside a comment or 2 levels?    
*/

printf("Hello world. Will this be printed? Or is it a comment?");

/*
    char *str2 = "string */";
*/

如果不解释注释中的内容,就无法解析注释中的注释。但是你不能解释评论里面的内容,因为它是一种评论,所以从定义上来说,“人类文本”而不是“语言”。

票数 2
EN

Stack Overflow用户

发布于 2011-10-24 10:02:09

虽然C的多行注释不能嵌套,但递归注释的效果可以或多或少地在C中使用#if 0 ... #endif实现(为此,我强烈建议您在禁用代码块时使用它)。

即使是设计成像post一样愚蠢的C预处理器,也完全能够处理嵌套的注释,就像它必须能够处理带有假条件的嵌套#if指令一样。因此,这与任何很难定义或解析的东西并没有什么关系,因为尽管它使注释更加复杂,但是它们仍然不会比在预处理中完成的其他事情更复杂。

但是,使用#if 0 ... #endif当然要求在您试图排除的代码中不存在任何不匹配的#endif

从根本上说,注释不能同时是(a)完全非结构化的和(b)递归的。不管是偶然的还是深思熟虑的选择,C已经与(a) -注释文本一起走了,除了不包含注释-终止符序列(或类似于*??/<newline>/的三角图)之外,不需要遵守任何语法约束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7872981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档