C和指针(一)
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;
上一篇: Execel文件插入到ASP页面
下一篇: 眼含热泪