Public/tip & tech

어려운 포인터....( use of cast expressions as lvalues is deprecated )

quantapia 2009. 5. 12. 17:44

프로그램에서 특정 변수가 char형으로 사용했다가 특정 컴파일 조건에서는 unsigned short 형으로 동작을 한다.

 

그래서 이 변수가 사용되는 함수에서는 void *로 변수를 받아서 형변환을 해서 사용한다.

 

그런데 생각했던 것과 다른 값이 나오는 경우가 있었다.

 

unsigned short 형으로 데이터가 동작할때

void 포인터로 받아서 포인터 값을 1만큼 증가시켜 다음 데이터 값을 가리키도록 해야 하는데

 이것이 생각했던 것과는 다른게 동작을 한다. 

쉽게 코드로 하면

((unsigned short*)p)++;

이런식으로 하면 p가 +2( unsigned short 의 크기 )만큼 증가하기를 기대했는데

컴파일은 되는데 "use of cast expression!s as lvalues is deprecated" 이런 경고 메세지가 뜬다.

( 동작도 정상적으로 된다 )

 

이건 모지...

 

이런 메세지를 없애기 위해서는

p = ((unsigned short*)p) + 1;

 

lvalue가 몬가 해서 찾아보니 이런 내용이 있네요(http://chunsinn.egloos.com/1301122)