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

+ Recent posts