ModernC++/标记和字符集
标记和字符集
Tokens and character sets
C++程序文本由Tokens(标记)和空格组成。标记是对编译器有用的 C++ 程序的最小元素。 C++ 分析器可识别以下类型的Token:
- Keywords (关键字)
- Identifiers(标识符)
- Numeric, Boolean and Pointer Literals(数字,布尔值,指针文本)
- String and Character Literals(字符串和字符文本)
- User-Defined Literals(用户定义的文本)
- Operators(运算符/操作符)
- Punctuators(标点符号)
译注:
词法分析是编译过程的第一步工作,将字符流转换为单词序列,输出到中间文件中,这个中间文件将会作为语法分析程序的输入,进行下一步工作。
token可翻译为标记,是构成源代码的最小单位,从输入字符流中生成标记的过程叫作标记化( tokenization ),在这个过程中,词法分析器还会对标记进行分类。编译器会从左到右扫描我们的源代码,将其中的字符流分割成一个一个的 token。
Token通常用空格进行切分,可以是一个或多个:
- 空白
- 水平或垂直制表符
- 新行
- 表单源
- 注释
基本源字符集
C++标准指定了基本源字符集用于源文件中,要表示此集合之外的字符,可以使用通用字符名称指定其他字符。MSVC编译器允许实现其他字符。要表示此集合之外的字符,可以使用通用字符名称指定其他字符。a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " '
特用于Microsoft的内容
MSVC 包含 $ 字符作为基本源字符集的成员。MSVC 还允许根据文件编码在源文件中使用一组额外的字符。在默认情况下,Visual Studio使用默认代码页存储资源文件。当资源文件使用特定区域或Unicode代码页保存时,MSVC允许你在源代码中使用该代码页的任何字符,但基本源字符集中不允许的控制代码除外。举个例子,您可以通过日文代码页在注释,标识符或字符串中使用日文。MSVC不允许无法转换成为多字节字符和Unicode位码的字符序列。根据编译器选项,并非所有允许的字符都可能出现在标识符中。有关详细信息,请参阅标识符。
译注
在使用visual studio时如果使用WinAPI例如<Windows.h>便可以遇到LPWSTR等字符类型,这是一种宽字符类型也可称作多字节字符。在MSVC中使用L”xxx”即表示用宽字符输出此字符串,也可在项目设置中设置相关配置,设置默认使用宽字符。
通用字符名称
由于C++程序可以使用比基础字符集更多的字符,您可以使用通用字符名称以可移植的方式指定这些字符。通用字符名称由表示 Unicode 码位的字符序列组成。可以使用两种类型进行表述,使用UNNNNNNNN
来代表为 U+NNNNNNNN的unicode位码字符,NNNNNNNN 是八位的十六进制码位数字。使用四位的 \uNNNN
表示形式为 U+0000NNNN 的 Unicode 码位。
通用字符名称可用于标识符以及字符串和字符文字。通用字符名称不能被用于表示0xD800-0xDFFF之间之内的代理项码位,编译器会自动生成任何所需的代理项。其他限制适用于可在标识符中使用的通用字符名称。详细信息请参阅 Identifiers 和 String and Character Literals。
特用于Microsoft的内容
Microsoft C++ 编译器可互换地处理通用字符名称形式和文字形式的字符。例如,您可以使用通用字符名称形式声明标识符,并以文字形式使用它:
1 |
|
Windows 剪贴板上的扩展字符的格式特用于应用程序区域设置。 从另一个应用程序剪切这些字符并将其粘贴到你的代码中可能会引入意外的字符编码。 这可能会导致您的代码中出现不知原因的代码错误。我们建议在粘贴扩展的字符之前将源文件编码设置为 Unicode 代码页,以及使用 IME 或字符映射应用生成扩展的字符。
执行字符集
执行字符集 表示可在编译的程序中显示的字符和字符串。 这些字符集包括源文件中允许的所有字符,以及表示警报、后空、回车符和 null 字符的控制字符。 执行字符集具有特定于区域设置的表示形式。