在ASN.1中,您可以声明值引用,如:
<identifier> <Type Reference> ::= <Value Notation>
例如:
cost INTEGER ::= 123
“类型引用”组件可以是内置类型,也可以是用户定义的类型。我的问题是,当提到用户定义的类型时,ASN.1是否要求必须已经定义了类型? (假设直到稍后才定义)。例如,以下是有效的ASN.1语法:
cost MyIntType ::= 50
MyIntType ::= INTEGER (0..100)
请注意,在类型赋值中声明 之前,值{m>}中会引用MyIntType
。
这有效吗?
答案 0 :(得分:2)
这完全有效。在使用之前没有必要定义。
请注意,有时您无法避免这种情况,例如,如果类型之间存在循环依赖关系:
A ::= some definition involving B
B ::= some definition involving A
答案 1 :(得分:0)
正如@Henry解释的那样,ASN.1允许前向引用;在类型定义中使用之前引用。
在定义相互递归的数据类型时也非常有用(实际上是必要的)。