C언어

[C언어] 타입 한정자(type qualifiers)란?

_minit 2024. 10. 18. 15:45

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