类型限定符

类型限定符提供两个属性之一标识符。 const 类型限定符声明对象不能更改。 volatile 类型限定符声明值可能会出现合理地更改在程序控件之外出现,如并行执行的线程的项目。

这两个类型限定符, const 和 volatile,只能出现一次于声明。 类型限定符可以以任何类型说明符;但是,无法在一个多个项目的第一个逗号后面。 例如,下面的声明是合法的:

typedef volatile int VI;
const int ci;

这些声明不是的合法:

typedef int *i, volatile *vi;
float f, const cf;   

类型限定符是关系,仅当访问标识符为表达式的左值。 有关左值和表达式的信息,请参见 左值和 R 值表达式

语法

  • 类型限定符:
    constvolatile

下面是合法的 const 和 volatile 声明:

int const *p_ci;       /* Pointer to constant int */
int const (*p_ci);     /* Pointer to constant int */
int *const cp_i;       /* Constant pointer to int */
int (*const cp_i);     /* Constant pointer to int */
int volatile vint;     /* Volatile integer        */

如果数组类型的规范由类型限定符,元素没有限定,而不是数组类型。 如果函数类型的规范包括限定符,该行为不确定。 volatile 和 const 不影响值或对象的算术属性的范围。

此列表描述如何使用 const 和 volatile。

  • const 关键字可用于修改任何基本或程序集类型或指针转换为任何类型或 typedef对象。 如果项目声明仅 const 类型限定符,其类型将采用 const intconst 变量存储区中的只读区域初始化或可将。 ,因为在所有情况下,需要函数不更改指针 const 关键字作为声明指针很有用。 const

  • 编译器假定,,随时在过程中, volatile 变量可由未知获取进程使用或修改它的值。 因此,无论在命令行上指定的优化,代码为每个分配给或引用 volatile 变量必须生成,即使它不会起作用。

    如果单独使用 volatile , int 假定。 volatile 类型说明符来提供对特定内存位置的可靠的访问。 使用可以获取或修改由通知处理程序,通过并行执行程序,或者由特定硬件例如内存映射 I/O 控件注册的数据对象的 volatile 。 可以将变量声明为其生存期的 volatile ,也可以将单个引用 volatile。

  • 项目是 const 和 volatile,,则该项目不能自己的程序情况下合理地修改,但是,能某些异步修改过程。

请参见

概念

声明和类型