C和指针(一)

2016-12-17 09:02:13来源:作者:人点击

第七城市

C和指针(一):一、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;

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台