형식 한정자Type Qualifiers

형식 한정자는 두 속성 중 하나를 식별자에 제공합니다.Type qualifiers give one of two properties to an identifier. const 형식 한정자는 개체를 수정할 수 없는 것으로 선언합니다.The const type qualifier declares an object to be nonmodifiable. volatile 형식 한정자가 선언하는 항목의 값은 해당 항목이 나타나는 프로그램의 제어를 벗어난 요소(예: 동시에 실행되는 스레드)가 올바르게 변경할 수 있습니다.The volatile type qualifier declares an item whose value can legitimately be changed by something beyond the control of the program in which it appears, such as a concurrently executing thread.

constvolatile이라는 두 형식 한정자는 선언에서 한 번만 나타날 수 있습니다.The two type qualifiers, const and volatile, can appear only once in a declaration. 형식 한정자는 모든 형식 지정자와 함께 나타날 수 있지만, 여러 항목 선언에서 첫 번째 쉼표 뒤에는 나타날 수 없습니다.Type qualifiers can appear with any type specifier; however, they cannot appear after the first comma in a multiple item declaration. 예를 들어 다음 선언은 올바릅니다.For example, the following declarations are legal:

typedef volatile int VI;  
const int ci;  

다음 선언은 올바르지 않습니다.These declarations are not legal:

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

형식 한정자는 식에서 l-value로 식별자에 액세스하는 경우에만 관련이 있습니다.Type qualifiers are relevant only when accessing identifiers as l-values in expressions. l-value와 식에 대한 자세한 내용은 L-Value 및 R-Value 식을 참조하세요.See L-Value and R-Value Expressions for information about l-values and expressions.

구문Syntax

type-qualifier:type-qualifier:
constvolatileconstvolatile

다음은 올바른 constvolatile 선언입니다.The following are legal const and volatile declarations:

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        */  

배열 형식의 지정에 형식 한정자가 포함된 경우 배열 형식이 아니라 요소가 한정됩니다.If the specification of an array type includes type qualifiers, the element is qualified, not the array type. 함수 형식의 지정에 한정자가 포함된 경우에는 동작이 정의되어 있지 않습니다.If the specification of the function type includes qualifiers, the behavior is undefined. volatileconst는 값의 범위와 개체의 산술 속성에 영향을 미치지 않습니다.Neither volatile nor const affects the range of values or arithmetic properties of the object.

다음 목록에서는 constvolatile을 사용하는 방법을 설명합니다.This list describes how to use const and volatile.

  • const 키워드를 사용하여 모든 기본 또는 집계 형식을 수정하거나 모든 형식의 개체에 대한 포인터 또는 typedef를 수정할 수 있습니다.The const keyword can be used to modify any fundamental or aggregate type, or a pointer to an object of any type, or a typedef. 항목이 const 형식 한정자만 사용하여 선언되는 경우 형식은 const int로 간주됩니다. const 변수는 초기화되거나 저장소의 읽기 전용 영역에 배치될 수 있습니다.If an item is declared with only the const type qualifier, its type is taken to be const int. A const variable can be initialized or can be placed in a read-only region of storage. const 키워드를 사용하여 포인터를 const로 선언하면 함수가 어떤 식으로든 포인터를 변경하지 못하게 되므로 유용합니다.The const keyword is useful for declaring pointers to const since this requires the function not to change the pointer in any way.

  • 컴파일러는 프로그램의 어떠한 지점에서도 volatile 변수의 값을 사용하거나 수정하는 알 수 없는 프로세스에 의해 해당 변수가 액세스될 수 있다고 가정합니다.The compiler assumes that, at any point in the program, a volatile variable can be accessed by an unknown process that uses or modifies its value. 따라서 명령줄에 지정된 최적화와 관계없이 각각의 volatile 변수 할당 또는 참조에 대한 코드가 아무런 영향을 주지 않는 것처럼 보이는 경우에도 생성되어야 합니다.Therefore, regardless of the optimizations specified on the command line, the code for each assignment to or reference of a volatile variable must be generated even if it appears to have no effect.

    volatile만 사용되는 경우에는 int가 가정됩니다.If volatile is used alone, int is assumed. volatile 형식 지정자를 사용하여 특별한 메모리 위치에 대한 안정적인 액세스를 제공할 수 있습니다.The volatile type specifier can be used to provide reliable access to special memory locations. 신호 처리기, 동시에 실행되는 프로그램 또는 메모리 매핑된 I/O 제어 레지스터와 같은 특수 하드웨어가 액세스하거나 변경할 수 있는 데이터 개체와 함께 volatile을 사용하십시오.Use volatile with data objects that may be accessed or altered by signal handlers, by concurrently executing programs, or by special hardware such as memory-mapped I/O control registers. 변수의 수명 동안 변수를 volatile로 선언하거나 단일 참조를 volatile로 캐스팅할 수 있습니다.You can declare a variable as volatile for its lifetime, or you can cast a single reference to be volatile.

  • 항목이 const이면서 volatile일 수도 있습니다. 이 경우 항목은 자체 프로그램에서 올바르게 수정될 수 없지만 비동기 프로세스에서 수정될 수 있습니다.An item can be both const and volatile, in which case the item could not be legitimately modified by its own program, but could be modified by some asynchronous process.

참고 항목See Also

선언 및 형식Declarations and Types