GDL 与 GPD 预处理之间的差异

GDL 中有四个新的预处理器指令在 GPD 实现中不存在: #PreCompiled#UndefinePrefix#EnablePPDirective#DisablePPDirective

此外, #Undefine 指令现在也不接受任何参数。 缺少 参数意味着最近定义的符号未定义,这会还原以前定义的符号。

如果 GDL 文件也打算由 GPD 分析程序分析,建议不要使用这些新指令。 如果希望 tp 将新的预处理器指令合并到也供 GPD 分析程序使用的 GDL 文件中,则必须提供备用 (向后兼容性) 路径,使旧预处理器能够避免执行这些新指令。 每个路径都应包含在 #Ifdef:#Else、#Endif 构造中,如以下代码示例所示。

#Ifdef: NewParserVersion
*%   Use new preprocessor directives if the parser supports them.
*%   Lock out this entire code path by changing the prefix.
      #SetPPPrefix: #New_
      #New_PreCompiled: ...
      *%  Actually might use a mixture of old and new directives!
      #New_UndefinePrefix:
#Else:
*%  Otherwise only use the original set of directives.
      #OldDirectives: ...
#Endif:

此外,在运行新指令分叉时,应将预处理器前缀设置为不同的前缀。 如果遇到前缀错误的指令,分析程序将发出警告。