c - TLS 上的 RFC 中的这个 `enum` ish 符号是什么?

标签 c enums notation rfc

这是来自 RFC 3749 (传输层安全协议(protocol)压缩方法):

  1. Compression Methods

    TLS [2] includes the following compression method structure in sections 6.1 and 7.4.1.2 and Appendix sections A.4.1 and A.6:

    enum { null(0), (255) } CompressionMethod;
    

我不是很熟悉 C,但我知道的足以将它标记为与 C enum 相似。不过,我无法理解的是 null(0)(255) 部分。我似乎无法在任何地方找到括号和 null 在这种情况下的含义。

(我似乎很难想出一个(谷歌?)搜索模式,它包含比“rfc”、“null”、“c”、“括号”更不普遍的东西,并且会把我带到其他地方而不是关于“空函数指针”或最基本的基础知识的问题。)

那么这些符号在句法上意味着什么?

  • 为什么括号里是 255?

  • 为什么 null 看起来像一个函数调用?

这甚至应该是 C 吗?或者它是跨 RFC 共享的通用符号吗?如果是 C,它是否特定于 enum

这与 enum { 0, 255 } CompressionMethod;enum { NULL, 255 } CompressionMethod; 有何不同?

最佳答案

你可能有点多虑了:)

你应该引用你引文后面的行:

which allows for later specification of up to 256 different
compression methods.

这已经解释了该行的含义。现在,如果您按照 [2] 找到引用列表,您会注意到它引用了 RFC 2246。 .该文档包含以下段落:

4. Presentation language

This document deals with the formatting of data in an external   
representation. The following very basic and somewhat casually   
defined presentation syntax will be used. The syntax draws from   
several sources in its structure. Although it resembles the   
programming language "C" in its syntax and XDR [XDR] in both its   
syntax and intent, it would be risky to draw too many parallels. The  
purpose of this presentation language is to document TLS only, not to 
have general application beyond that particular goal.

因此,该 RFC 的作者似乎从熟悉的元素中编造了一个简单的语法来简化 RFC 主题的表示,即 TLS。对于枚举,它们指定 4.5 中使用的语言:

4.5. Enumerateds

   An additional sparse data type is available called enum. A field of
   type enum can only assume the values declared in the definition.
   Each definition is a different type. Only enumerateds of the same
   type may be assigned or compared. Every element of an enumerated must
   be assigned a value, as demonstrated in the following example.  Since
   the elements of the enumerated are not ordered, they can be assigned
   any unique value, in any order.

       enum { e1(v1), e2(v2), ... , en(vn) [[, (n)]] } Te;

   Enumerateds occupy as much space in the byte stream as would its
   maximal defined ordinal value. The following definition would cause
   one byte to be used to carry fields of type Color.

       enum { red(3), blue(5), white(7) } Color;

   One may optionally specify a value without its associated tag to
   force the width definition without defining a superfluous element.
   In the following example, Taste will consume two bytes in the data
   stream but can only assume the values 1, 2 or 4.

       enum { sweet(1), sour(2), bitter(4), (32000) } Taste;

   The names of the elements of an enumeration are scoped within the
   defined type. In the first example, a fully qualified reference to
   the second element of the enumeration would be Color.blue. Such
   qualification is not required if the target of the assignment is well
   specified.

       Color color = Color.blue;     /* overspecified, legal */
       Color color = blue;           /* correct, type implicit */

   For enumerateds that are never converted to external representation,
   the numerical information may be omitted.

       enum { low, medium, high } Amount;

关于c - TLS 上的 RFC 中的这个 `enum` ish 符号是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19426212/

相关文章:

android - C套接字()问题

java - JPA Hibernate OneToMany 枚举 - 未映射的类错误

gitlab错误从安装指南克隆git@localhost :gitolite-admin. git

java - 这些类和子类静态 block 何时执行(对于枚举)?

c++ - 在Visual Studio中使用枚举的编译错误

Python 符号?

r - 更改剪切函数中的标签符号样式?

c - 循环终止且没有任何错误

c++ - "inline"关键字与 "inlining"概念

c - 使用 PlaySound 播放 wav 文件