C语言中的三字母词(trigraph)
在ANSI C标准中,定义了9三字母词(trigraph),三字母词就是几个字符的序列,合起来表示另一个字符。三字母词使C语言环境可以在缺少一些必需字符的字符集(比如,一些非常老式的键盘上没有[]{}#\^~|)上实现。也许是由于这些字符集我们基本上用不到,所以在大多数C语言的书籍中,我们都看不到对三字母词的讲解。下图列出了9个三字母词以及它们所代表的的字符。
源代码中的“三字母词”,在编译阶段会被替换为“对应的字符”。对于以“?”开头的字符序列,如果不能与上面9个匹配,编译器将保持原状;一旦匹配,编译器就会做替换。 下面是我们很容易犯的一个错误(摘自《C和指针》):
1
2
3
4
5
6
#include <stdio.h>
 
int main(int argc,char **argv)
{
printf("Delete file (are you really sure??):");
}

1
main.c|5|warning: trigraph ??) ignored, use -trigraphs to enable [-Wtrigraphs]|

添加编译选项后

注意:由于编译器的种类各样,对ANSI C的支持也不一样,所以可能会有些C编译器不处理“三字母词”,会将它们当做普通的字符串来处理。 以上测试是在VC++ 6.0下进行的,对于GCC编译器,需要在编译的时候添加选择"-ansi"或者"-trigraphs"。 

C语言中的三字母词的更多相关文章

  1. C和C指针小记(二)-注释,三字母词,编译选项

    课后的几个问题: 1) int x/*blah blah*/y; 会有什么问题? 答:编译器报错,语句中不应该有多行注释 单行注释也应该放到语句后面或者独自占一行. 2)打出下面一行字符串(包括引号) ...

  2. C语言中的三值合一

    在学习C语言中我们会发现这样一种情况: #include<stdio.h> Int main() { Int ar[10]; printf(“%p\n”,ar); printf(“%p\n ...

  3. [Swift实际操作]八、实用进阶-(2)Swift语言中的三种消息传递模式

    本文将通过响应按钮的点击事件,来演示Target-Action消息传递机制,该机制主要用于响应用户的界面操作.打开创建的空白项目.然后在左侧的项目导航区,打开视图控制器的代码文件:ViewContro ...

  4. 常量的三种定义方式和static在c语言中的三种修饰

    c语言的常量在执行期间为固定值,在定义后无法被修改常量可以是任何的数据基本类型,可以为整形,浮点常量,字符和字符串常量1,使用const关键字2, 使用宏定义3,使用枚举常量 枚举: #include ...

  5. C语言中类型转换#大写字母转小写字母和小写字母转大写字母案例。

    先让我们来看个很重要的东西,还是ASCII码. 十进制:A-Z:65-90十进制:a-z:97-122 了解这个很重要. 现在我们先举例子大写字母转小写字母案例: #include <stdio ...

  6. C语言中最常用的三种输入输出函数scanf()、printf()、getchar()和putchar()

    本文给大家介绍C语言中最常用的三种输入输出函数scanf().printf().getchar()和putchar(). 一.scanf()函数格式化输入函数scanf()的功能是从键盘上输入数据,该 ...

  7. C语言中可变参数的函数(三个点,“...”)

    C语言中可变参数的函数(三个点,“...”) 本文主要介绍va_start和va_end的使用及原理. 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end ...

  8. c语言中字符串数组初始化的一点总结&& c++访问控制的三种方式

    char *c[]={"ONE","TWO","THREE","FOUR"}; // c语言中定义了一个字符串数组(也称 ...

  9. Go语言参数中的三个点是干什么的

    Go语言函数中有三个点...表示为可变参数,可以接受任意个数的参数. 示例代码: package main import "fmt" func Greeting(prefix st ...

随机推荐

  1. json数组,随便测试

    Pid := '1001411225514227,926792194654225'; json := SA([]); json.AsArray.Add(SO(pid)); ShowMessage( j ...

  2. iOS APP提交上架最新流程

          时隔1年又让我鼓捣iOS,刚接手就是上架,经验值为0的我,虽然内心是拒绝的,但还是要接受这项任务滴!也就是在被拒后重新审核,再改在提交...这样反复的过程中也对上架流程熟悉了好多,写篇帖子 ...

  3. DDOS攻击原理及防护方法论

      从 07年的爱沙尼亚DDOS信息战,到今年广西南宁30个网吧遭受到DDOS勒索,再到新浪网遭受DDOS攻击无法提供对外服务500多分钟. DDOS愈演愈烈,攻击事件明显增多,攻击流量也明显增大,形 ...

  4. MySQL中like的使用方法

    Like的运用场合主要在模糊查询的时候,一般以查询字符串居多,这里据一些例子来说他的一般用法: <1>查询name字段中包含有“明”字的:例 select * from table1 wh ...

  5. hdu 2052

    PS:竟然一次AC....惊喜...注意每个实例后跟一个空行.. 学到一个快速清空数组的用法...memst函数.  memst(void *s,char a,sizeof n)  把 s里面的前n个 ...

  6. Osmocom-BB 相关资源、知识分享

    1.在layer1层添加了解析sniffer的代码 参考http://git.osmocom.org/osmocom-bb/log/?h=luca/gsmmap)osmocom-bb/src/targ ...

  7. Python OpenCV ——Matplotlib显示图片

    Color image loaded by OpenCV is in BGR mode.But Matplotlib displays in RGB mode.So color images will ...

  8. Windows系统定时重开或者关机

    at 6:00 /every:M,T,W,Th,F,S,Su cmd /c shutdown -r -t 60 (每天早上6点自动重启一次) at 0:00 /every:M,T,W,Th,F,S,S ...

  9. GIT之二 基础篇(2)

    远程仓库的使用 要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库.远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写.同他人协作开发某个项目时,需要管 ...

  10. cannot find -lgcc_s

    在64位centos6上编译32位的汇编程序,如果程序中使用了C库,比如printf.因为是编译32位的目标程序,所以使用gcc编译的时候需要加上-m32选项,但是如果编译的话会报错,以print.s ...