const
변수에 적용
const는 영어로 constant 상수를 뜻한다
변수에 해당 키워드가 붙으면 값의 변경이 불가능하다.
int main()
{
const int var1 = 1;
var1 = 2; // 불가능: const가 붙으면 값의 변경이 불가능하다
return 0;
}
포인터에 적용
포인터에 사용되면 위치에 따라 의미가 달라짐
포인터가 가리키는 값이 변경 불가능한 경우
const int *ptr = &x; // ptr은 x를 가리킬 수 있지만, 값을 변경할 수 없음
*ptr = 20; // 오류! 가리키는 값 변경 불가
ptr = &y; // OK! ptr이 다른 변수를 가리키는 것은 가능
포인터 자체가 변경 불가능한 경우
int *const ptr = &x; // ptr은 x를 가리키며, 포인터의 주소를 변경할 수 없음
*ptr = 20; // OK! 가리키는 값 변경 가능
ptr = &y; // 오류! ptr의 주소 변경 불가
포인터와 가리키는 값 모두 변경 불가능한 경우
const int *const ptr = &x; // ptr이 가리키는 값과 주소 모두 변경 불가
*ptr = 20; // 오류! 값 변경 불가
ptr = &y; // 오류! 주소 변경 불가
volatile
최적화를 방해하는 키워드이다.
컴파일러는 사용하지 않는 쓸모 없는 코드들을 정리한다.
volatile 용도
- 메모리 주소를 가진 IO 레지스터
- H/W가 연결된 메모리 주소값은 사용자가 값을 수정하지 않아도 H/W에 의해 변경될 수 있는데, 컴파일러가 최적화 한다고 주소값을 없애버릴 수 있음
- 인터럽트 핸들러가 값을 변경하는 전역 변수
- 인터럽트 핸들러가 값을 변경할 수 있다는 것을 컴파일러가 인지 못할 수 있음
- 최적화에 의해 오류가 발생할 가능성이 있는 변수
'C language' 카테고리의 다른 글
main argument (1) | 2024.12.14 |
---|---|
함수포인터 (0) | 2024.12.14 |
변수 키워드 static과 extern (1) | 2024.12.14 |
전처리지시문, Header Guard (1) | 2024.12.14 |
c 구조체, 유니온, typedef, 패딩, 비트필드 (0) | 2024.12.13 |