《C和指针》读书笔记(1)

声明:该读书笔记摘抄自《C和指针》——Kenneth A.Reek (著)    徐波(译)。为了克服自己走马观花,提高阅读和学习效率,决定将自己在读书过程中遇到的一些知识点加以摘抄和总结备忘,在此感谢原书作者和翻译。

一、ANSI C标准之“三字母词”

三字母词就是三个字符的序列合起来表示另一个字符。ANSI标准并没有规定C环境使用的字符集,但是C编译器所使用的字符集必须包括某些特定的字符,如果你使用的字符集缺少某些字符,可以使用三字母词替代。三字母词以两个“?”开头,后面再接一个字符,例如 :

??(  [       ??)  ]       ??<  { 
??>  }       ??/  \       ??-  ~    
??!  |       ??=  #       ??'  ^


在linux  gcc下验证时发现,gcc编译器默认关闭了三字母词功能,使用-trigraphs可以打开该功能。例如:printf("Delete all the files(are you sure ??) \n"); (注:该例直接引用原文示例)。若没有加编译选项-trigraphs,编译器会提示“忽略了三字母词”,并且输出结果为Delete all the files(are you sure ??) ;若加上-trigraphs,则打印结果为Delete all the files(are you sure ],可以看到??)已被转换为 ] 。

同时,上述九个三字母词中的??/ 要注意一下,例:printf("Delete all the files(are you sure ??/\n"); (注:sure 后面跟了一个三字母词??/ ,然后又跟了一个换行符\n),gcc编译时加上编译选项-trigraphs,打印结果则为Delete all the files(are you sure \n,此时因为三字母词??/被转换为了反斜杠 \ ,而在ANSI C 标准中,两个反斜杠会被识别为转义字符一个反斜杠,此时,换行符\n失效。

最后,同时对两个问号或者只对第二个问号使用转义字符\?可以避免三字母词。注意:只对第一个问号转义无效,输出仍然是三字母词,如例所示:

例1:printf("Delete all the files(are you sure \?\?/\n"); 即两个问号都转义,加上编译选项-trigraphs,输出结果为Delete all the files(are you sure ??/

例2:printf("Delete all the files(are you sure ?\?/\n");只转义第二个问号,加上编译选项-trigraphs,输出结果也是Delete all the files(are you sure ??/

例3:printf("Delete all the files(are you sure \??/\n");只转义第个问号,加上编译选项-trigraphs,输出结果却是Delete all the files(are you sure \


二、ANSI C标准之转义字符,转义字符使某些无法打印的字符得以表达

\?  表示一个? ,在书写连续多个?时使用,防止后接被解释为三字母词

\\  表示一个反斜杠, 防止后接字符被解释为转义字符

\v 垂直制表符 ,换行并缩进前一个对象的宽度

\"  表示一个字符串内部的双引号

\'  表示一个字符串内部的单引号

\b 退格,例:printf("B\n");  结果是B不会被输出

\ddd   ddd代表1~3个八进制数字,表示该八进制数字代表的字符,注意:若该八进制数值超过字符定义范围,则结果是未定义的

\xddd  ddd代表1~3个16进制数字,表示该16进制数字代表的字符,注意:若该16进制数值超过字符定义范围,则结果是未定义的


三、ASNI C之注释

1、以 /* 开始,并以 */ 结束,中间不允许注释嵌套;

2、所有的注释在预处理阶段会被预处理器拿掉,并以一个空格取代;因此,注释可以出现于任何空格可以出现的地方,例如:int  /*comtent*/  x = 0;


以上为第一章和第二章总结,未完待续。。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值