>백엔드 개발 >C++ >C의 Const 변수는 어떻게 두 개의 다른 값을 가질 수 있습니까?

C의 Const 변수는 어떻게 두 개의 다른 값을 가질 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-28 21:17:14175검색

How Can a Const Variable in C   Have Two Different Values?

정의되지 않은 동작이 변수에 대한 두 가지 다른 값을 설명하는 방법

역설적으로 보일 수도 있지만 동일한 주소에 있는 변수가 가능합니다. 두 개의 서로 다른 값을 생성합니다. 이 현상은 정의되지 않은 동작으로 인해 발생할 수 있습니다.

제공된 코드 조각에는 상수 정수(a1)가 ​​정의되어 있으며 상수 포인터(b1)에 해당 주소가 할당되어 있습니다. 이어서 char 포인터(c1)가 b1에서 캐스팅됩니다. c1을 수정하면 상수로 선언되었음에도 불구하고 a1의 값이 효과적으로 변경됩니다. c1을 다시 정수 포인터(t)로 캐스팅하면 이 변경된 값이 드러납니다.

이러한 작업은 정의되지 않은 동작을 구성합니다. const 변수를 수정하려는 시도는 C 표준을 위반하기 때문입니다. 섹션 7.1.6.1에 명시된 대로 이러한 행동은 관찰된 것과 같이 불가능해 보이는 결과를 포함하여 예측할 수 없는 결과를 초래할 수 있습니다.

표준에서는 이러한 행동에 대해 명확하게 경고합니다.

  • 섹션 1.3.24(정의되지 않은 동작): "... 정의되지 않은 동작은 상황을 완전히 무시하는 것까지 다양합니다. 예측할 수 없는 결과로 ... 번역 또는 실행을 종료합니다(진단 메시지 발행과 함께)."
  • 섹션 7.1.6.1 CV 한정자(4항): ". .. const 객체를 수정하려고 하면 ... 정의되지 않은 동작이 발생합니다."

따라서 관찰된 동작은 이상하게 보일 수도 있지만 이는 컴파일러 최적화가 아니라 상수 변수를 수정하려는 시도로 인해 발생하는 정의되지 않은 동작의 증상입니다.

위 내용은 C의 Const 변수는 어떻게 두 개의 다른 값을 가질 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.