C语言源代码字符集和运行字符集

编译器转换程序源代码时,所处的环境称为翻译环境(translation environment);编译后程序执行时,所处的环境称为运行环境(execution environment)。

对C语言来说,翻译环境和运行环境是不同的。因此,C语言定义了两个字符集(character set):源代码字符集与运行字符集。
  • 源代码字符集(source character set)是用于组成C源代码的字符集合;
  • 而运行字符集(execution character set)是可以被执行程序解释的字符集合。

在许多C语言的实现版本中,这两个字符集是一样的。如果不一样,则编译器会把源代码中的字符常量和字符串字面量转换成运行字符集中的对应元素。

这两种字符集都包含基本字符集(basic character set)和扩展字符(extended character),C语言没有指定扩展字符,这通常由本地语言所决定。扩展字符加上基本字符集,组成扩展字符集(extended character set)。

基本源代码字符集和基本运行字符集都包含了下面的字符类型:
1) 拉丁字母

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

2) 十进制阿拉伯数字

0 1 2 3 4 5 6 7 8 9

3) 下面29个符号

! " # % & ' () * + , -. / :; < = > ? [ \ ] ^ _ { | } ~

4) 5种空白符

空格、水平制表符、垂直制表符、换行、换页

5) 基本运行字符集还包括四个不可打印的字符:

null字符(用做字符串终止符)、警报(alert)、退格(backspace)、回车(carriage return)

为了在字母和字符串中表示这些字符,输入反斜杠\加对应的转义序列(escape sequence)即可,例如,\0表示 null 字符(空字符),\a表示警报,\b表示退格,而\r表示回车。

不同的C实现版本中,字符实际对应的数值(字符码)可能不同。C语言本身仅规定了以下规则:
  • 基本字符集中的每个字符必须用一个字节(byte)表示。
  • 空字符是一个字节,其所有的位(bit)都是0。
  • 0 之后的每个十进制数字,编码都要依次比前者大 1。