Ada语言Hashed_Maps插入希腊宽字符触发双引号分隔编译错误求助
问题根因
报错是源文件编码与编译器默认字符解析规则不匹配导致的字面量识别错误:
α属于Unicode非ASCII字符,UTF-8编码下占2个字节- 你的Ada编译器默认按单字节字符集解析源文件,扫描到
'α'时,判定单引号内部包含多字节内容,误以为你用单引号包裹字符串,因此抛出strings are delimited by double quote character错误 - 换成单字节ASCII的
'b'时,单引号内部只有1个字节,符合普通Character字面量规则,所以可以编译通过,但你定义的Map需要Wide_Character类型,这里还存在隐性的类型匹配问题。
修复方案
二选一即可:
- 方案1:显式声明Wide_Character字面量,用类型转换语法明确指定类型,不需要修改编译参数:
-- 16#03B1# 是字符α对应的Unicode码点 encoding.insert(Wide_Character'('a'), Wide_Character'Val(16#03B1#)); - 方案2:指定编译器用UTF-8编码解析源文件,如果你用GNAT编译器,给编译命令加上
-gnatW8参数即可,此时单引号包裹的UTF-8单字符会被自动识别为Wide_Character类型,原有代码不需要修改就能正常编译。
内容的提问来源于stack exchange,提问作者Tom Hosker
相关产品推荐
相关产品推荐

