这个Ada字符字面量格式在哪里定义,Ada 2005中有什么变化?

3

我最近发现了类似于这样的代码,在Ada 95模式下编译,但在Ada 2005模式下无法编译:

with Ada.Text_IO;

procedure Test is
  
   Printable_Char : constant Character := '["20"]';
   Non_printable_Char : constant Character := '["00"]';
begin
   
   Ada.Text_IO.Put_Line (Printable_Char & Non_printable_Char);
   
end Test;

使用 FSG GNAT 9.3.0:
test.adb:6:48: (Ada 2005) non-graphic character not permitted in character literal

但是在使用-gnat95标志(Ada 95模式)编译时可以正常编译。

我在GNAT RM的第11.6章“Wide Text IO”中找到了一些关于这种格式的参考。这种格式是GNAT特有的吗?

关于语言版本模式的差异,我在Ada 2005 Rationale中没有找到任何提及。那么,在Ada 2005模式下编译时为什么会出现这种差异呢?


3
这不是任何版本的合法Ada代码。我猜测这是GNAT的扩展。 - Jeffrey R. Carter
1
方括号表示法在GCC ACATS 2.6的c250002.aw中使用,其中它被描述为“由Robert Dewar提出的用于在可传输的7位ASCII中表示Latin-1字符值的方括号方案”(此测试的当前版本使用UTF-8)。我找不到任何官方描述ARM格式的地方(但标准没有指定程序的源表示形式)。我也找不到任何可以证明报告的错误消息中的(Ada 2005)的AI。 - Simon Wright
1个回答

3

这在Ada 2012语言参考手册中有详细说明。

相关引用如下:

 -- The declaration of type Character is based on the standard ISO 8859-1 character set.

  -- There are no character literals corresponding to the positions for control characters.
  -- They are indicated in italics in this definition. See 3.5.2.

同样的注释也在Ada 95参考手册中出现,因此仅凭这一点无法解释为什么非可打印字符的编码在Ada 95中被接受而在Ada 2005中不被接受。 - Gneuromante
1
尝试将空字符常量初始化为“Non_printable_Char:constant Character:= Ada.Characters.Latin_1.NUL;” - Jim Rogers
是的,这就是我所做的,但我想知道更改背后的原因。 - Gneuromante

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接