当前位置: C语言 -- 基础 -- 词法元素

词法元素(九)

八、预处理数

预处理数标记(preprocessing number tokens)词法上包括所有浮点常量标记(floating constant tokens)和整数常量标记(integer constant tokens)。C语言中预处理数(preprocessing numbers)的语法格式如下所示:

digit
. digit
pp-number identifier-continue
pp-number ' digit
pp-number ' nondigit
pp-number e sign
pp-number E sign
pp-number p sign
pp-number P sign
pp-number .

其中.是小数点;'是数字分隔符;digit是十进制数字字符(0~9);nondigit是非十进制数字字符;pp-number是预处理数;字符eE用于十进制浮点常量;字符pP用于十六进制浮点常量;sign表示符号(+或者-);identifier-continue是后续字符,后续字符可以是十进制数字字符、非十进制数字字符、XID_Continue类字符或者XID_Continue类通用字符名。


预处理数以一个十进制数字开头,该数字前面可以存在一个小数点(可选),后面可以是有效的标识符字符和字符序列(例如:e+e-E+E-p+p-P+或者P-。)。

预处理并不试图验证预处理数是否是有效的C语言数值;事实上预处理数也不一定是有效的C语言数值。

预处理数没有类型和值,成功转换(作为编译第7个步骤的一部分。)为浮点常量标记或者整数常量标记后,才能获得类型和值。



九、注释

C语言存在两种形式的注释(comments):/*...*///


/*...*/可用于单行或者多行注释。

/*这是一个单行注释。*/

/*
这是一个多行注释。
*/

除了出现在字符常量、字符串字面量或者注释中,否则字符/*会引入一个注释;检查注释内容只是为了识别多字节字符,并找出终止注释的字符*/;因此/*...*/注释不能嵌套。


//只能用于单行注释。

//这是一个单行注释。

除了出现在字符常量、字符串字面量或者注释中,字符//引入的注释包括下一个换行符之前的所有多字节字符,但不包括下一个换行符。检查这种注释的内容只是为了识别多字节字符,并找到终止换行符。




主要参考资料:

1、ISO/IEC 9899:2024

2、ISO/IEC 9899:2018

3、ISO/IEC 10646:2020

4、ibm.com : Lexical elements

5、baike.baidu.com : 浮点型常量

6、gnu.org : Preprocessing Tokens

7、gnu.org : Character Constants

8、unicode.org : UNICODE IDENTIFIERS AND SYNTAX

9、unicode.org : Normalizatoin Charts