写下注释以便以后更好地理解程序
编写好的代码很大程度上是以一致的方式编写代码。 一致性使读者(或您)以后更容易理解代码。 一致性通常是一件好事。 然而,在编写代码时,在某些情况下,当我们编写的代码变得特别扭曲或晦涩时,出于某些充分的原因,我们可能需要摆脱这种一致性。 或者,我们可能会以一种可能不明显或可能不理想的方式编写代码,这也是有充分理由的。 在这些情况下,我们应该评论我们的代码 – 不是为了编译器,而是为了我们自己和其他人,他们可能会在很晚之后阅读我们的代码,并挠头思考,“什么?我/他们要在这里做什么?”
代码注释是解释为什么以某种方式编写特定代码的一种方式。 让我们探讨一下用 C 语言编写代码注释的一些不同方法。
如果使用正确,代码中的注释会被编译器忽略。 他们只是为了理解。 考虑以下代码注释:
/* (1) 单行 C 风格注释。*/
/* (2) 多行
C 风格注释。*/
/*
* (3) 很常见的方式来
* 格式化多行
* C 风格注释。
*/
/* (4) C 风格注释可以出现在几乎任何地方。*/
/*(5)*/ printf( /* Say hello. */ "Hello, world!n" );
/*(6)*/ printf( "Hello, world!n" ); /* Yay! */
// (7) C++ 风格注释(由行尾结束)。
printf( "Hello, world!n" ); // (8) Say hello; yay!
//
// (9) 一种更常见的多行注释方式
//
// (10) 任何东西都可以出现在 // 后面,包括 /* ... */ 和
// 即使是第一个 // 后面还有更多 //,它们也会被忽略,因为它们都在注释中。
前面代码中的注释并不是特别有用的注释,但是它们说明了C语言中注释的各种用法。
代码中的注释,如果正确完成,编译器会忽略它们,它们的存在只是为了人类理解。 以下是一些注释示例:
/* (1) 单行 C 风格注释。 /
/* (2) 多行C风格注释。
这是第一行。 */
这是第二行。 */
/*
(3) 多行C风格注释的通用格式。
*这是第一行。
*这是第二行。
/ (4) C 风格的注释几乎可以出现在任何地方。 /
/(5)/ ( / 说你好。/“你好,世界!n”);
/(6)/ (“你好,世界!n”); / 耶! /
// (7) C++风格的注释(在行尾结束)。
(“你好,世界!n”); // (8) 打个招呼; 耶!
//
// (9) 比较常用的方式
// 使用多行C++风格注释
//
// (10) // 后面可以出现任何内容,甚至是 /…*/ 等等,但它们都会被忽略,因为它们都在注释中。
上面代码中的注释并不是特别有用的注释,但它们演示了在 C 中使用注释的各种方式。
标记为 (1)-(6) 的注释是旧式 C 注释。 这些注释的规则很简单 – 当遇到 / 时,它就是注释,直到遇到后续 /,无论它出现在同一行还是稍后的几行。 /(中间有一个空格)和/(中间有一个空格)不是有效的注释指示符。
标记(7)到(10)表示从C++采用的C注释。 当遇到 // 时,它是注释,直到遇到行尾 (EOL)。 因此,这些注释不能像C注释那样随机出现。 另外,//(中间有空格)不是有效的注释指示符。
C 注释更加灵活,而 C++ 风格的注释更加明确。 两种风格都很有用。 在本书中,我们将使用两种注释风格。
现在我们知道了格式化注释的各种方法,让我们考虑一些有效的方法来使用它们。
代码注释的一些准则
代码注释的最佳指导原则之一与生活中遵循的原则相同。 这有时被称为原则,也称为三只熊原则,以童话故事“和三只熊”命名。 这个指导原则的本质是不多不少,恰到好处。然而,恰到好处是主观的,取决于几个因素。
• 高级注释:描述代码的意图及其尝试解决问题的方式。 这条格言与我们提到的第一条格言密切相关。 描述注释的级别越高,随着代码的变化,它们需要修改的可能性就越小。 • 传达您的意图:通过您的评论,努力传达您所编写的代码的意图、为什么需要该代码以及该代码试图实现的目标。 代码实际执行的操作应该来自代码本身。 我经常惊讶地发现我 6 个月前编写的代码现在回想起来看起来很混乱。 很多时候,我会挠头问自己为什么要这样做? 或者我在想什么? (这两种情况都是由于评论太少造成的)。 我还发现,当我更改代码时,我必须删除许多不再需要的注释(这是注释太多的情况)。
当我专注于代码的意图(我在这里试图做什么)时,我很少发现自己评论太多。 在我的职业生涯中,我曾经遇到过一位程序员,他的注释与实际代码完全脱节。 我得出的结论是,这位程序员最初想让他们的算法以某种方式工作,但后来修改了代码,使得注释不再与实际代码匹配。
当我在以后的代码中看到该程序员的名字时,经过仔细检查,我删除了代码注释,因为我发现它们不相关。 除非您完全确定您理解代码并且注释与代码不匹配,否则不要这样做。 学习如何有效地注释代码是一个终生的挑战。 我认为你不会很快学会这个。 你需要多年的时间审查你的代码,让你的代码更清晰,让你自己更清晰,并更清晰地向他人展示你的代码。 当我们一起完成各种 C 示例程序时,我打算演示各种有用且顽强的注释技术。 向“Hello, world!”添加评论现在我们已经探索了注释代码的各种方式和注释样式,让我们将 .c 复制到 .c 并添加适当的注释。
您可以使用命令解释器将 .c 复制到 .c,也可以在编辑器中打开 .c 并立即将其另存为 .c。 不管你怎么做,你都应该把.c和.c都放在目录中。 在编辑器中修改.c,使其显示如下:
/*
。C
我的第一个 C 与 .
经过
年/月/日
*/
#
int main()
(“你好,世界!n”);
0;
/* 结束符 */
请注意,注释在每行开头带有 * 字符,表示该组有多行注释。 该组以 / 开始,以 / 结束。 编译、运行并验证程序。 确保您没有意外地在这里或那里引入字符,这是一个常见的错误,应该始终进行验证。
注意,每行开头带有注释的 * 字符表示这是一组多行注释; 该集合以 /* 开始,以 */ 结束。 编译、运行并验证程序。 这是可能的,并且应该始终进行验证,以确保您没有引入任何意外的字符。
现在,这是一个完整的程序。 从 .c 提供的证据来看,该程序是正确的 – 它以我们期望的方式显示我们的信息。 前六行注释提供了有关程序作者及其编写日期的最少信息。 该程序的标头信息可以是简单的,也可以是更详细的。 现在,我们将保持此标头信息简单。
该程序本身非常简单,任何了解 C 的人都知道它会打印一条简单的消息。 这里不需要进一步注释。
最后,我们用注释标记文件的结尾; 这种标记的唯一好处是当打开多个编辑器窗口和/或程序变得很长时。 这个简单的划分让我们知道我们已经到达了 EOF。 最终的 EOF 指标完全是可选的,更多的是一种风格偏好,而不是严格的理性实践。
我发现,在我使用过的每种编程语言中,我的评论风格都会适应给定语言的简单或晦涩程度。 当我在大学或后来使用 4 的早期版本编写汇编语言程序时,我几乎在每一行都添加了注释。 然而,对于 C++ 或 -C,我发现我只是零星地或在解释概念或编程解决方案的注释块中进行注释。
此外,即使在给定的语言中,当要解决的问题不寻常或者我正在使用新的方法来解决问题时,也需要更多注释。
在本书的其余部分中,我们将根据代码示例探索各种有用的注释实践,即使代码可能发生变化,这些实践也仍然有效。
好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。