C언어에서 타입 한정자(type qualifiers)는 변수나 포인터의 특성을 지정해 주는 키워드이다. 이들은 데이터 사용 방법을 더 명확히 하여, 최적화하거나 안전한 코드를 작성하는 데 도움을 준다.
1. const
- const는 변수를 상수로 지정하여 해당 변수의 값을 변경하지 못하도록 한다.
- 변수를 변경하려고 하면 컴파일러가 오류를 발생시킨다. 이 한정자를 사용하면 코드의 안전성을 높일 수 있다.
const int maxValue = 200;
maxValue = 300; // 오류 발생
2. volatile
- volatile는 컴파일러에게 변수가 외부에서 변경될 수 있음을 알리는 한정자이다.
- 컴파일러 최적화가 이러한 변수를 무시하지 않도록 하여 항상 최신 값을 사용하도록 보장한다.
https://tgmalacom.tistory.com/26 <- valatile의 자세한 설명
[C언어] volatile 키워드란?
volatile은 C언어에서 변수의 값이 언제든지 변경될 수 있음을 컴파일러에 알려주는 키워드이다. 주로 MCU의 레지스터, 인터럽트에 의해 변경될 수 있는 변수, 다중 쓰레드 환경에서 사용된다. 최적
tgmalacom.tistory.com
3. restrict (C99 이후)
- restrict는 포인트 한정자로, 해당 포인터가 가리키는 메모리 영역을 접근하는 유일한 방법임을 보장한다.
- 컴파일러가 더 효율적인 최적화를 수행할 수 있게 도와준다.
void addArrays(int *restrict a, int *restrict b, int *restrict result, size_t n) {
for (size_t i = 0; i < n; i++) {
result[i] = a[i] + b[i];
}
}
4. _Atomic
- C11 표준에서 도입된 원자적 변수를 위한 한정자이다. _Atomic을 사용하면 멀티스레드 환경에서 데이터 경합 없이 안전하게 변수에 접근할 수 있다.
- 이 한정자는 데이터가 여러 스레드에서 동시에 읽고 쓰일 때 발생할 수 있는 문제를 방지한다.
#include <stdatomic.h>
_Atomic int counter = 0;
void increment() {
counter++;
}
요약
타입 한정자 | 사용 목적 및 특징 |
const | 변수의 값을 변경하지 못하도록 함 (상수화). 안전한 코드 작성에 도움. |
volatile | 변수의 값을 컴파일러가 최적화하지 않도록 하여, 외부에서 변경될 가능성을 알림. 하드웨어 레지스터나 ISR에서 사용. |
restrict | 포인터가 가리키는 메모리 영역에 대한 유일한 접근 경로임을 보장하여 최적화를 도와줌. |
_Atomic | 멀티스레드 환경에서 원자적 접근을 보장하여 데이터 경합을 방지. |
728x90
'C언어' 카테고리의 다른 글
[C언어] gets()의 결함 (0) | 2024.10.21 |
---|---|
[C언어] 인라인(inline) 함수란? (0) | 2024.10.21 |
GCC(GNU Compiler Collection)란? (0) | 2024.10.18 |
[C언어] 다중 평가 문제 (0) | 2024.10.17 |
[C언어] typedef uint8_t BOOL (2) | 2024.10.17 |