C语言 字符常量

在做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语言规范 第二版

  • 15
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值