IETF RFC 1662 的第 20 页显示了一些用于检查 FCS(帧检查序列)的简单代码。
https://www.rfc-editor.org/rfc/rfc1662
C 是区分大小写的语言。我很好奇为什么函数 assert 显示为大写?
ASSERT(sizeof (u16) == 2);
最佳答案
这只是 RFC 作者的一个(有点奇怪的)选择。
有一个约定,宏名称全部大写。 ASSERT
在 RFC 中的代码中使用的可能是一个宏。
C 确实有一个标准 assert()
宏,在 <assert.h>
中定义(这违反了上述约定——哦,好吧)。如果宏 NDEBUG is defined when
被禁用(什么都不做) ` 包括在内。也许 RFC 的作者不想处理这种复杂情况。
我不知道 RFC 的完整历史,但代码可能基于 ANSI C 编译器广泛可用之前编写的代码。作者避免使用 1989 标准引入的原型(prototype)。
RFC 是为人类读者准备的。例如,
ASSERT(sizeof (u16) == 2);
对人类读者来说足够清楚,这才是真正重要的。 RFC 中的源代码不一定要在不修改的情况下使用。该代码显然至少类似于 C,但也可以将其视为一种伪代码。想要使用该代码的人可以轻松定义 ASSERT()
宏,或修改代码以使用标准 assert()
.
纯粹的猜测:也有可能代码最初是为提供预定义 ASSERT()
的实现而编写的。宏,并且没有发现缺乏可移植性。
关于c - 为什么这个函数以大写形式显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38626302/