术语和定义(一)
访问(access)
解释:访问是指程序执行时读取或者修改对象值。
一次访问中,读取和修改这两种操作只使用其中一个。修改操作包括存储的新值和旧值相同的情况。如果表达式不被评估(evaluated),则不会访问对象。
a = b + 5; //对b执行读取操作,对a执行修改操作。 int c = 8; c = 8; //对c执行修改操作。 if(1 || c++) //对象c不会被访问。
对齐(alignment)
解释:对齐要求特定类型的对象位于地址是字节地址整数倍的存储边界上。
int a; printf("%zu\n", sizeof(a)); //输出4。 printf("%p\n", &a); //输出0xffffcc3c。
测试条件下,对象a占4个字节,对象a的首地址是0xffffcc3c,是4的整数倍。
应用(application)
解释:应用是执行某些期望功能的计算机程序。
实参,也称实际参数(argument或者actual argument)
解释:实参是函数调用表达式()内逗号分隔列表中的表达式,或者函数式宏调用()内逗号分隔列表中的预处理标记序列。
#define sqr(x) ((x)*(x)) int sum(int, int); ... m = sum(a, b); //a和b都是实参。 n = sqr(y); //y是实参。
算术取负(arithmetically negate)
解释:算术取负将生成指定数的负数。
对于浮点数,将改变符号;对于整数,等价于0减去指定数。
行为(behavior)
解释:行为是指外在表现或者操作。
实现定义行为(implementation-defined behavior)
解释:实现定义行为是一种未指定行为,由实现决定如何作出选择。
例如:char类型对象是与signed char类型对象,还是与unsigned char类型对象具有相同的范围、表示形式和行为。
特定语言环境行为(locale-specific behavior)
解释:特定语言环境行为是指取决于实现文档记录的当地民族、文化和语言惯例的行为。
例如:连续打印字符的书写方向,中文从左往右,阿拉伯文从右往左。
未定义行为(undefined behavior)
解释:未定义行为是指使用不可移植或者错误的程序结构或者错误数据的行为。
例如:有符号整数的溢出是一种未定义行为。
未指定行为(unspecified behavior)
解释:未指定行为是指由于使用未指定的值而产生的行为,或者是存在两种以上可能性的情况下,没有施加进一步要求的其它行为。
例如:子表达式的计算顺序是一种未指定行为。
m = f(a) + g(b) + h(c); //f(a)、g(b)、h(c)计算的先后顺序是未指定的。
二进制位,也称位(bit)
解释:位是执行环境中的数据存储单元,其大小足以容纳具有两个值之一的对象。
实现不需要表示一个对象每个位的地址。
广播(broadcast)
解释:广播是从一个端点到多个端点的数据传输。
字节(byte)
解释:字节是数据存储的可寻址单元,其大小足以容纳执行环境基本字符集的任何成员。
一个对象每个单独字节的地址都可以唯一地表示。字节由连续的位构成,构成一个字节的位数量由实现定义。最低有效位称为低阶位(low-order bit);最高有效位称为高阶位(high-order bit)。
int a; printf("%zu\n", sizeof(a)); //输出4。 printf("%p\n", &a); //输出0xffffcc3c。
测试条件下,对象a占4个字节,4个字节的地址分别是:0xffffcc3c、0xffffcc3d、0xffffcc3e、0xffffcc3f。
字符(character)
解释:字符是用于组织、控制或者表示数据的一组元素的成员。
单字节字符(single-byte character)
解释:单字节字符是适合一个字节的位表示(bit representation)。
例如:'a'
多字节字符(multibyte character)
解释:多字节字符是一个或者多个字节的序列,表示源或者执行环境的扩展字符集(extended character set)成员。
扩展字符集是基本字符集的超集。
例如:"中华儿女"是一个多字节字符串。
宽字符(wide character)
解释:宽字符能够表示当前语言环境中的任何字符,其值可用wchar_t类型的对象表示。
例如:L'国'
CPU时钟(CPU-time clock)
解释:CPU时钟是一种测量特定进程或者线程执行时间的时钟。
限制(constraint)
解释:限制可能是句法上的,也可能是语义上的,据此解释语言要素的阐述。
int *ptr = &5;
编译时给出类似error:lvalue required as unary '&' operand的出错信息。
ISO/IEC 9899:2024标准要求:&运算符的操作数应为函数指示符、[ ]或者*一元运算符的结果、或者表示对象的左值(表示的对象不能是位字段对象,且未使用register存储类说明符声明。)。
运行时限制(runtime-constraint)
解释:运行时限制是调用库函数时对程序的要求。
运行时限制不同于限制,限制在程序编译时进行诊断,运行时限制不需要在编译时进行诊断。
例如:tmpfile_s函数,其函数原型为errno_t tmpfile_s(FILE * restrict * restrict streamptr);,ISO/IEC 9899:2024标准要求参数streamptr不能是空指针。