代码注释中的#XXX是什么意思?

197

在代码中我经常看到这个,即使是 vim 也将其标记为特殊情况。#TODO#FIXME 是 vim 高亮显示的两个其他修复标记,但是 #XXX 意味着什么?


13
这个问题询问Python编程中的代码标记或注释最佳实践。关于这个主题有Python增强提案的讨论。这个问题值得在SO上保留。虽然可以将问题措辞更好一些。 - nik
10个回答

193

在注释中出现的XXX通常表示需要注意的地方,可能是:

  • 某些功能没有完全正确地实现。
  • 应该稍后修复的问题。
  • 标记一个潜在的问题点。
  • 您不确定的问题或疑问。

我通常更喜欢使用更具描述性的标签,如FIXMETODOHACKXXX通常用作上述情况的通用标记。

FreeBSD代码交叉引用中搜索“XXX”可以很好地说明其多种用途。有成千上万个...


1
有趣的是我自己也使用这个。XXX或#XXX基本上会触发编译器并提醒我回到某些东西。通常是指针引用或以前未知的值或变量名。 - bobby
6
这证实了我的初始猜测,它只是一个通用标记,用于提示其他程序员将该注释突出显示以供查看。 - Jorge Vargas
1
不想恶意攻击,但“HACK”这个词并不具有描述性。实际上,它非常模糊不清。对我来说,它至少可以有三种含义。 - Ярослав Рахматуллин
4
在源代码中,我总是将其解读为“这是一个丑陋的hack工作,但似乎足够好用”的意思——这是你想稍后清理的东西,但不是紧急的。我没有使用过它(通常我会使用TODOXXX),但这就是我的理解。 - Iiridayn

166
  • NOTE:描述代码如何工作(当不是自我明显时)。
  • XXX:关于可能存在的问题的警告,可以使用NOTE:XXX:
  • HACK:用于绕过问题/错误的不太好编写或格式不正确的代码。应该使用HACK:FIXME:
  • FIXME:虽然可行,但可以更好地完成(通常是匆忙编写需要重写的代码)。
  • BUG:这里有个问题。
  • TODO:没有问题,但需要编写其他代码,通常是在跳过某些内容时。

至少这就是我学习这些标记的方式。基本上前两个标记(NOTEXXX)用于提供信息,不需要采取任何行动。而最后三个标记(FIXMEBUGTODO)需要采取行动。HACK介于两者之间(我认为几乎从未使用?)。


13
好的清单。我还喜欢 LAZY (不像FIXME或HACK那样关键)和 OCD(过分设计)。 - SineSwiper
4
你真的这样使用XXX吗?在Google内部,我们把XXX视为更高优先级的事项,“这是必须在代码提交到版本控制之前修复的问题”。这种用法在Google内部是自动强制执行的,因此在代码审查期间你可能会看到XXXs,但在消除XXX之前是不可能提交代码的。长期的待办事项可以标记为[TODO],只要附加有某个人的名字或缺陷编号,就可以提交。详见:(https://google.github.io/styleguide/cppguide.html#TODO_Comments) - Don Hatch
我的 C 编辑器也知道“智能感知”,我用它来处理我不理解的每一段代码,通常是我很久以前写的代码! - dargaud
设置:在这一行中,我需要手动选择一些选项,例如True/False或数字等,以进行一些测试。 - John
1
DEV: 在开发过程中,这一行是临时设置,例如:我会注释(禁用)命令或更改它等等,以帮助我的调试。完成后,我会将其删除。 - John

29

一些来自2005年6月被拒绝的Python Enhancement Proposal的笔记。

FIXMEXXX之间进行选择很困难。
XXX似乎更常见,但描述性更差。
此外,在代码片段中,XXX是一个有用的占位符
具有未知值。

因此,FIXME是首选拼写方式。
Sun表示XXXFIXME略有不同,将XXX的严重程度提高。
但是,由于数十年来这个主题的混乱,以及太多数量的开发人员不会受到Sun的影响,因此可以正确地称它们为同义词。


PEP的开头是,

这个PEP已被拒绝。虽然社区可能感兴趣,但没有意愿使标准库符合此标准。

...

「什么是Codetags?」 程序员广泛使用临时代码注释标记约定,作为需要更密切检查或审查的代码部分的提醒。标记的示例包括「FIXME」、「TODO」、「XXX」、「BUG」,但在现有软件中还有许多其他标记被广泛使用。这些标记将在此后称为「codetags」。这些「codetags」可能出现在应用程序代码、单元测试、脚本、常规文档或任何适当的地方。

PEP是一份有趣的阅读材料。


20

请查看PEP350,它解释了所有的TODOXXX等。当我记不清其中一个代码标签的含义时,我每天都会使用它。


1
你知道PEP350是否是这些标签的起源吗?你知道有没有描述如何使用这些标签的旧文档(来自Unix时代)吗? - Ярослав Рахматуллин

11

来源于(旧版)Java 代码规范

在注释中使用XXX标记某些看似可行但实际上是错误的事情。使用FIXME标记某些看似可行但实际上是损坏的事情。


这是正确的答案。我认为它起源于 Apache 的早期,但我没有去查证。 - Brill Pappin

6

我使用XXX,因为它比TODO更容易输入。

XXX用于当你匆忙时,会自己回来处理这个任务。

TODO用于当你需要将任务交给别人处理时。


1
XXX 表示“我很忙,稍后会自己处理” TODO 表示“这是未来待办事项清单的正式部分,将被分配给其他人。” 这些是字面意思。 - S.Lott
3
这些“文字含义”在哪个RFC中?还是有其他引用资料? - Randall
7
@Randall: "citation"? 对不起,这只是我在阅读大量代码后的理解。 - S.Lott

5

1
我认为,FIXME 是给开发者用的,HACK 是给维护者用的,而XXX 则是给用户用的。
例如,如果你忽略了 XXX 并在其他地方调用该函数,而不了解它的工作原理,可能会发生意外情况,处理此问题的人会感到不满(至少添加了 XXX 的人是这样认为的)。你可能认为,如果您不使用此函数,则问题将消失。
但是对于 FIXME,您会觉得修复代码以使其正常工作是值得的。对于 HACK,即使您不使用它,可能也没有更好的选择。
如果您在自己的代码中编写了 XXX,而某人使用了它,您可能会因为完全重写了该代码并且它表现出完全不同的方式而感到不满,并且您破坏了别人的代码。但是,如果您使用 FIXMETODO 代替,则不会那么在意。

1

XXX是caveat的缩写,与NOTE略有不同,但与HACK非常相似。它可能是第三方库/代码中的错误,带有// XXX:的代码表示它要么是由于第三方代码中的错误而进行的解决方法,要么是向正在查看/修改代码的人发出“警告”,以说明为什么以某种方式完成某些操作,否则这些操作可能在第一次查看/使用时似乎不正确/不优雅。HACK是一个通用术语,意味着解决问题的解决方法,该问题可能存在于您自己的代码库或第三方库中。


1
我使用 // XXX 来代替记住行号。当我想返回到那段代码时,只需搜索 XXX 即可。

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