2014-10-20 2 views

답변

4

const 변수를 수정하면 정의되지 않은 동작입니다. 어떤 일이든 일어날 수있다. GCC와 -Wall를 사용

, 당신은 볼 수 있습니다 :

경고 : (ARG 2)

2

그것은 UB는 일반적으로 상수 객체로 작성.
사례에 캐스팅 결과가 표시 될 수 있습니다. 예를 들어
:

void main(void) 
{ 
    int const x = 100; 
    int *x2 = &x; 
    *x2 = 2; 
} 

내 컴퓨터에 노력하고 있습니다 만,

void main(void) 
{ 
    int const x = 100; 
    x = 2; 
} 

는 (컴파일 에러)가 아닙니다.
어쨌든 const 변수를 변경하지 않는 것이 좋습니다.

2

변경할 수 있지만 동작은 정의되지 않았습니다. 표준에서 언급했듯이! 6.7.3

아래 C11에서

그 시도가 아닌 CONST 수식 유형 좌변의 사용을 통해 CONST 수식 유형 정의 된 객체를 변경하게되면, 동작은 정의되지 . 비 휘발성 한정 유형의 lvalue를 사용하여 volatile 정의 된 유형으로 정의 된 객체를 참조하려고하면 해당 동작은 정의되지 않습니다.

관련 문제