博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[gcc warnings] -Wtrigraph warnings
阅读量:6894 次
发布时间:2019-06-27

本文共 1292 字,大约阅读时间需要 4 分钟。

[gcc warnings] -Wtrigraph warnings

背景

三字符组(trigraph)与双字符组(Digraph)是程序设计语言(如C语言)中3个或者2个字符的序列,在编译器预扫描源程序时被替换为单个字符。以解决某些键盘不能输入某些编程必须的字符问题。

三字符组

为解决上述的C语言源代码输入问题,C语言标准规定预处理器(C preprocessor)在扫描处理C语言源文件时,替换下述的3字符出现为1个字符

三字符组 替换为
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~

sample code

??=include
??=include
int main(int argc, char **argv) ??< char buf??(100??) = ??< 0 ??>; printf("??/ ??' ??( ??) ??! ??< ??> ??-\n"); return 0;??>
  • gcc 默认不支持trigraph,需要编译的时候加上-trigraphs作为编译参数不然会出现下面的类似编译warning
trigraph.c:1:1: warning: trigraph ??= ignored, use -trigraphs to enable [-Wtrigraphs]

二字符组

不同于三字符组在源文件的任何出现都会被预处理器替换,双字符如果出现在字符串字面值(quoted string)、字符常量、程序注释中将不被替换。双字符组的替换发生在编译器对源程序的tokenization阶段(即识别出关键字、标识符等,类似于自然语言的“断词”),仅当双字符组作为一个token或者token的组成部分时(如%:%:被替换为预处理运算符##),双字符组才被替换为单字符。

双字符组 替换为
<: [
:> ]
<% {
%> }
%: #

sample code

%:include 
%:include
%:include
int main(int argc, char**argv) <% char buf<:100:> = <% 0 %>; char *hello = "hello world"; memcpy(buf, hello, strlen(hello)); printf("%s\n", buf); return 0;%>

备考

posted on
2017-08-06 16:55 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/zelos/p/7295259.html

你可能感兴趣的文章
[Usaco2009 Feb]Revamping Trails 道路升级 BZOJ1579
查看>>
在Altium Designer9.0中建造自己的库
查看>>
转:c++ 11 新特性
查看>>
CodeVS 1058 合唱队形(DP--最长子序列问题)
查看>>
陶哲轩实分析引理 11.1.4
查看>>
秩-零化度定理
查看>>
mvc与三层架构终极区别
查看>>
python基础知识~ 函数详解
查看>>
简单几何(线段与直线的位置) POJ 3304 Segments
查看>>
DFS/BFS+思维 HDOJ 5325 Crazy Bobo
查看>>
P2312 解方程
查看>>
P2447 [SDOI2010]外星千足虫
查看>>
uva 796(求割边)
查看>>
铁大Facebook——十天冲刺(7)
查看>>
Oracle连接:TNS出错
查看>>
前端开发中,如何优化图像?图像格式的区别?
查看>>
借助第八代智能英特尔® 酷睿™ i7 处理器和 Unreal Swarm* 的强大性能快速构建光照...
查看>>
java之运算符
查看>>
洛谷 P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers Label:ExWater
查看>>
[K/3Cloud]进度条控件编程接口
查看>>