环境考量(二)
二、字符显示语义
活动位置(active position)是显示设备上fputc函数输出下一个字符将出现的位置。将打印字符写入显示设备的目的是在活动位置显示该字符的图形表示(graphic representation),然后将活动位置前进至当前行的下一个位置。写入方向与当前语言环境有关。如果活动位置位于行末尾,显示设备的行为是未指定的。
字母转义序列(alphabetic escape sequences)表示执行字符集中的非图形字符(nongraphic characters),旨在显示设备上产生某种动作。
| 转义序列 | 描述 | ASCII编码值 |
| \a | 警报(alert):在不改变活动位置的情况下产生可听的或者可见的警报。 | 0x07 |
| \b | 退格符(backspace):将活动位置移动至当前行的前一个位置。如果活动位置位于行的初始位置,则显示设备的行为是未指定的。 | 0x08 |
| \f | 换页符(form feed):将活动位置移动至下一个逻辑页开始的初始位置。 | 0x0C |
| \n | 换行符(new line):将活动位置移动至下一行的初始位置。 | 0x0A |
| \r | 回车符(carriage return):将活动位置移动至当前行的初始位置。 | 0x0D |
| \t | 水平制表符(horizontal tab):将活动位置移动至当前行的下一个水平制表位置。如果活动位置位于或者超过最后定义的水平制表位置,则显示设备的行为是未指定的。 | 0x09 |
| \v | 垂直制表符(vertical tab):将活动位置移动至下一个垂直制表位置的初始位置。如果活动位置位于或者超过最后定义的垂直制表位置,则显示设备的行为是未指定的。 | 0x0B |
每个字母转义序列都应具有唯一的实现定义值,该值可以使用单个char类型对象存储;文本文件中的外部表示(external representations)不需要与内部表示(internal representations)相同。
三、信号和中断
函数的实现应使其可随时被信号中断,或者被信号处理程序调用,或者两者兼而有之;而无需修改先前但仍处于活动状态的调用控制流(中断后)、函数返回值或者具有自动存储期限的对象。所有这些对象都应根据每次调用在函数映像(函数映像(function image)是组成函数可执行表示的指令。)外进行维护。
四、环境限制
编译环境和执行环境对C语言编译器和C语言库的实现都有限制。对C语言标准库的环境限制(environmental limits)详见C语言标准库;以下概述了对符合ISO/IEC 9899:2024标准要求的实现实施的与C语言有关的环境限制。
1、编译限制
由于底层机器架构和操作系统的差异,不同平台的编译限制(translation limits)可能存在差异。
实现应能编译和执行一个使用但不超出以下限制的程序(在可能的情况下,实现应避免施加固定的编译限制。):
-- 127个嵌套级别的块。
-- 63个嵌套级别的条件包含(conditional inclusion)。
-- 12个指针、数组和函数声明符(任意组合)修改声明中的算术、结构、联合或者void类型。
-- 在一个完整声明符中存在63个嵌套级别的括号声明符。
-- 在一个完整表达式中存在63个嵌套级别的括号表达式。
-- 内部标识符或者宏名存在63个有效初始字符(每个通用字符名或者扩展源字符都视为一个字符。)。
-- 外部标识符存在31个有效初始字符(表示00FFFF或者更小短标识符的每个通用字符名视为6个字符;表示010000或者更大短标识符的每个通用字符名视为10个字符);扩展源字符如果存在对应的通用字符名,则扩展源字符视为与对应通用字符名相同数量的字符。
-- 一个编译单元中存在4095个外部标识符。
-- 一个块中声明511个具有块作用域(block scope)的标识符。
-- 一个预处理编译单元中同时定义4095个宏标识符。
-- 一个函数定义包含127个形式参数。
-- 一个函数调用包含127个实际参数。
-- 一个宏定义包含127个形式参数。
-- 一个宏调用包含127个实际参数。
-- 一个逻辑源行包含4095个字符。
-- 一个字符串字面量包含4095个字符(串联后)。
-- 一个对象存在32767个字节(仅限宿主环境)。(注:ISO/IEC 9899:2018标准中是65535个字节。)
-- #included文件存在15个嵌套级别。
-- 一个switch语句存在1023个case标签(不包括嵌套switch语句中的case标签。)。
-- 单个结构或者联合存在1023个成员。
-- 单个枚举存在1023个枚举常量。
-- 单个成员声明列表中存在63个嵌套级别的结构定义或者联合定义。
2、数值限制
C语言整数类型的数值限制详见<limits.h>头文件;浮点类型的数值限制详见<float.h>头文件;数值附加限制详见<stdint.h>头文件。
主要参考资料:
4、ibm.com : Multibyte Characters
5、cppreference.com : Escape sequences