C语言 字符常量

C语言 字符常量,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/717133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存