词法元素(九)
八、预处理数
预处理数标记(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是预处理数;字符e和E用于十进制浮点常量;字符p和P用于十六进制浮点常量;sign表示符号(+或者-);identifier-continue是后续字符,后续字符可以是十进制数字字符、非十进制数字字符、XID_Continue类字符或者XID_Continue类通用字符名。
预处理数以一个十进制数字开头,该数字前面可以存在一个小数点(可选),后面可以是有效的标识符字符和字符序列(例如:e+、e-、E+、E-、p+、p-、P+或者P-。)。
预处理并不试图验证预处理数是否是有效的C语言数值;事实上预处理数也不一定是有效的C语言数值。
预处理数没有类型和值,成功转换(作为编译第7个步骤的一部分。)为浮点常量标记或者整数常量标记后,才能获得类型和值。
九、注释
C语言存在两种形式的注释(comments):/*...*/和//。
/*...*/可用于单行或者多行注释。
/*这是一个单行注释。*/ /* 这是一个多行注释。 */
除了出现在字符常量、字符串字面量或者注释中,否则字符/*会引入一个注释;检查注释内容只是为了识别多字节字符,并找出终止注释的字符*/;因此/*...*/注释不能嵌套。
//只能用于单行注释。
//这是一个单行注释。
除了出现在字符常量、字符串字面量或者注释中,字符//引入的注释包括下一个换行符之前的所有多字节字符,但不包括下一个换行符。检查这种注释的内容只是为了识别多字节字符,并找到终止换行符。
主要参考资料:
6、gnu.org : Preprocessing Tokens
7、gnu.org : Character Constants
8、unicode.org : UNICODE IDENTIFIERS AND SYNTAX
9、unicode.org : Normalizatoin Charts