IETF RFC 1662的第20页显示了一些用于检查FCS(帧校验序列)的简单代码。
https://tools.ietf.org/html/rfc1662
C是区分大小写的语言。我很好奇为什么函数断言以大写字母显示?
ASSERT(sizeof (u16) == 2);
答案 0 :(得分:4)
这只是RFC作者的一个(有些奇怪的)选择。
对于宏名称使用全部大写的惯例。 RFC中代码中使用的ASSERT
可能是宏。
C确实有一个标准assert()
宏,在<assert.h>
中定义(违反了上述惯例 - 哦,好吧)。如果包含宏NDEBUG is defined when
`,则禁用该宏(不执行任何操作)。也许RFC的作者并不想处理这种复杂问题。
我不知道RFC的完整历史记录,但代码可能基于在ANSI C编译器广泛使用之前编写的代码。作者避免使用1989年标准引入的原型。
RFC适用于人类读者。例如,
的含义ASSERT(sizeof (u16) == 2);
对于一个人类读者来说已经足够清楚了,这一切都非常重要。 RFC中的源代码不一定要在没有修改的情况下使用。代码显然至少是C类,但它也可以被认为是一种伪代码。想要使用代码的人可以轻松定义ASSERT()
宏,或修改代码以使用标准assert()
。
纯粹猜测:代码最初也可能是为提供预定义ASSERT()
宏的实现而编写的,并且没有可移植性。