컴파일시 not used의 판정범위와 동작
글쓴이: vktod25 / 작성시간: 목, 2018/03/08 - 9:56오전
C 코딩중에 궁금한점이 생겨서 질문을 드립니다.
컴파일 시 변수 a에 대해서 not used라고 판정하는 범위가
a변수에 값을 대입만 하고 그 값을 읽어서 비교를 하거나 다른 변수에 대입하지 않으면 not used가 되는 것은 이해를 하였습니다.
질문 1
한데 만약 a의 주소값을 다른 변수에 쓴다면
int a;
int *b;
b=&a;
면 a는 not used 인가요?
---------------------
질문 2
만약 변수 a가 not used 상태에서
목적 코드 생성시 a와 관련된 명령이 자동으로 제거 되는지 알고 싶습니다.
Forums:
gcc -Wall 해보셔요.
gcc -Wall 해보셔요.
a의 주소를 b에 대입하는데 썼으니 not used 아니겠죠?
세벌 https://sebuls.blogspot.kr/
objdump -d -S
-c 주고 컴파일 해서 objdump -d -S로 보세요. 제거 할 건지 말 건지는 컴파일러에게 달려 있는 것 같고, gcc는 -O0면 내버려 두고 -O1이면 제거하네요. -O0일 때 제거 안 하는 건, 디버깅 할 때, if (0) { some code for debugging } 이런 게 가능하도록 해주려는 것 같습니다.
윗 분들이 말씀하셨듯 컴파일러마다 옵션마다 전부
윗 분들이 말씀하셨듯 컴파일러마다 옵션마다 전부 다릅니다. 이걸 어떻게 구현할지는 컴파일러 개발자 마음입니다. 노파심에 하는 말인데, 컴파일러를 개발하시는 게 아니라면 이러한 Unspecified behavior에 의존하는 코드는 좋은 코드가 아닙니다.
감사합니다
유용한 정보 충고 머릿속에 소중히 새기겠습니다.
댓글 달기