首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在Gnu gcc/g++中对三角图序列进行字串分析?

为什么在Gnu gcc/g++中对三角图序列进行字串分析?
EN

Stack Overflow用户
提问于 2017-12-20 10:46:40
回答 1查看 423关注 0票数 1

考虑一下这个无害的C++程序:

代码语言:javascript
复制
#include <iostream>
int main() {
  std::cout << "(Is this a trigraph??)" << std::endl;
  return 0;
}

当我使用g++版本5.4.0编译它时,我得到以下诊断:

代码语言:javascript
复制
me@my-laptop:~/code/C++$ g++ -c test_trigraph.cpp
test_trigraph.cpp:4:36: warning: trigraph ??) ignored, use -trigraphs to enable [-Wtrigraphs]
   std::cout << "(Is this a trigraph??)" << std::endl;
                                     ^

该程序正在运行,其输出与预期的相同:

代码语言:javascript
复制
(Is this a trigraph??)

为什么字符串文字会被解析成三角图呢?

其他编译器也会这么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-20 10:52:34

曲线图是在翻译阶段1处理的(然而,它们在C++17中被删除)。字符串文字相关的处理发生在后续阶段。正如C++14标准指定的(n4140) [lex.phases]/1.1

翻译的语法规则之间的优先级由以下阶段指定。

  1. 物理源文件字符以实现定义的方式映射到基本源字符集(必要时引入行尾指示符的新行字符)。所接受的物理源文件字符集是实现定义的。三元序列(lex.trigraph)被相应的单字符内部表示所代替,中没有包含在基本源字符集(lex.charset)中的任何源文件字符都被指定该字符的通用字符名称所取代。(实现可以使用任何内部编码,只要在源文件中遇到实际的扩展字符,以及在源文件中表示为通用字符名称(即使用\uXXXX符号)的相同扩展字符,则此替换将在原始字符串文本中恢复。)

这是首先发生的,因为正如你在评论中被告知的那样,曲线图所代表的字符也必须是可打印的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47904259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档