게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
전처리기로 제외시킨 코드는 바이너리로 변환되지 않습니다.
게시물ID : programmer_1131짧은주소 복사하기
작성자 : RedPain
추천 : 4
조회수 : 604회
댓글수 : 7개
등록시간 : 2014/02/10 16:40:47
C언어 컴파일러 만드는 사람 마음이긴 하지만 전처리기로 제외시킨 코드를 굳이 바이너리로 변환할 이유도 없고 최적화하기 위해서는 당연히 그래야 합니다. 제가 아는 C언어 컴파일러 중에 전처리기로 제외시킨 코드를 바이너리로 기본적으로 변환하는 컴파일러는 없습니다.

당연한 문제인데 직접 해보라는 분이 계셔서 제가 직접 해봤습니다. 컴파일러는 GCC입니다.

위에서부터 test1.c, test2.c, test3.c입니다.

source.PNG

보시다시피, test2.c는 test1.c의 일부를 전처리기(#if 0)로 제외한 소스이고, test3.c는 같은 부분을 삭제한 소스입니다.

각각의 바이너리를 디어셈블링한 정보입니다.

test1.c

test1.PNG

test2.c

test2.PNG

test3.c

test3.PNG

보시다시피, test2.c는 test1.c에서 상당부분이 없어진 것을 볼 수 있고, test2.c와 test3.c는 완전히 동일하다는 것을 알 수 있습니다. 즉,  전처리기로 제외시킨 부분은 컴파일러가 바이너리로 변환하지 않았습니다.
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호