在做C语言词法分析器的时候遇到了字符常量识别的问题。在这里讨论一下一般字符常量的词法规则,不设计宽字符和通用字符。
字符常量
C语言字符常量由单引号包含的一个或多个字符组成,包含多个字符时具体值与编译器有关(比如VS2019的编译器是获取最后一个字符)。 如:‘a’ ‘XY’ ‘0’ ‘*’
所有源代码字符集中的字符都可以成为字符常量,除了单引号、反斜线和换行符,这三个字符必须是用转义符表示:‘\’’ ‘\’ ‘\n’ 。在编译阶段,字符常量和字符串字面量中的字符和转义序列会转换成运行字符集中对应的字符。
字符常量的类型和值
对于所有非宽字符字符常量,类型为int,即C语言中字符常量和整型没有什么区别,可以混用。如下的代码都是可以正常运行的。
int a = 'P';char c = 80;
需注意的是,若采用带符号的char类型,那么字符常量的值可为负,如下:
int c = '\xA3';
printf("%c %d\r\n",c,c);
结果为£ -93 可以采用unsigned char这样值均为正数
转义符
转义序列 | 字符值 | 在输出设备上的动作 |
---|---|---|
\’ | 单引号 | 输出字符 |
\” | 双引号 | 输出字符 |
\? | 问号 | 输出字符 |
\\ | 反斜线 | 输出字符 |
\a | 警告 | 产生声音或者视觉信号 ,windows报错声音 |
\b | 退格 | 前移一个字符 |
\f | 换页 | 移动到下一页的开端 |
\n | 换行 | 移动到下一行开端 |
\r | 回车 | 移动到当前行开始 |
\t | 水平制表符 | 移动到下一个垂直的制表对齐点 |
\v | 垂直制表符 | 移动到下一个垂直的制表对齐点 |
\o,\oo,\ooo o为八进制字符 |
此八进制对应字符 | 输出字符 |
\xh,\xhh h为十六进制字符 |
次十六进制对应字符 | 输出字符 |
参考了C语言规范 第二版
今天的文章C语言 字符常量_c语言常量的正确表示「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/78668.html