C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[108] [팁] BCC32.EXE Option 정리 #2
박지훈.임프 [cbuilder] 10677 읽음    2001-07-26 14:47
이 팁은 담비님(천리안 FREKBS)님이 98년 12월 28일에 천리안 프로그래머포럼에 올리신 것입니다.
담비님으로부터는 전제하여 올리는 데 대해 허락을 받았습니다.
좋은 정보를 공유하도록 허락해주신 담비님께 감사드립니다.

-----------------------------------------------------------------------
안녕하세요! 담비입니다.

본 문서의 내용은 BCC32.EXE에 사용되는 Option들을 기능별로 묶어 정리한 두번째
내용입니다. 본 문서는 C++ Builder와 함께 제공되어지는 도움말 파일을 기초로
작성되었으며 내용상의 오류 혹은 추가 및 변경되어져야 할 사항을 발견하시면
메일 주시면 감사하겠습니다. 보내주신 내용은 검토 후 반영하여 다시 올리도록
하겠습니다.
이 문서를 보시면서 IDE와 비교하여 보시면 재미있을 것입니다.

  frekbs@chollian.net

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   . Compiler options : Debugging
    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -k                     ┃standard stack frame을 on시킨다. (Default)
    ┗━━━━━━━━━━━━┛
    이 옵션을 사용하면 컴파일러는 표준 스택 프래임을 생성한다(표준 함수의 시작과
    탈출 코드 - entry and exit code) 이것은 디버거를 사용하여 호출된 서부루틴의
    스택을 역추적할 때 유용하다. 이 옵션이 off되면 지역 변수를 사용하지 않거나
    매개변수를 갖지 않은 모든 함수는 축약된 엔트리 코드와 리턴 코드를 가지고
    컴파일한다. 이것은 코드를 더 작고 빠르게 만든다.  표준 스택 프래임 옵션은
    디버깅을 위해 소스 파일을 컴파일할때는 항상 켜져있어야만 한다.

    Default = ON

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -vi                    ┃인라인 함수의 확장을 조절한다.
    ┗━━━━━━━━━━━━┛
    이 옵션이 on 되면 C++ 인라인 함수가 인라인으로 확장된다. 인라인 함수의 확장
    을 제어하기 위해서 OBJ 옵션의 Debug Information (-v)의 연산은 C++와 약간
    다르다. 인라인 함수 확장이 enable 되어있지 않을 때, 함수는 다른 함수와 같이
    생성되고 호출된다.
    인라인 확장이 있는 상태에서 디버깅은 매우 달라지므로 다음 옵션을 제공한다.
    -v      디버깅을 on하고 인라인 확장을 off시킨다.
    -v-     디버깅을 off하고 인라인 확장을 on시킨다.
    -vi     인라인 확장을 on시킨다.
    -vi-    인라인 확장을 off시킨다.
    예를들어, 디버깅과 인라인 확장을 on시키고 싶으면 -v -vi를 사용한다.

    Default = OFF

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -y                     ┃라인 번호를 포함한다.
    ┗━━━━━━━━━━━━┛
    이 옵션이 on 되면 컴파일러는 오브젝트와 오브젝트 맵 화일에 라인 번호를 자동
    적으로 추가한다. 라인 번호는 통합 디버거나 터보 디버거에서 사용되어진다.
    OBJ 옵션의 Debug Information (-v)이 자동적으로 라인 번호에 관한 정보를 만든
    다고 하더라도 생성된 디버그 정보의 크기를 줄이기 위해 Line Number
    information option(-y)을 on시키고 Debug Information option(-v-)을 off시킬수
    있다. 이 셑업으로 디버그시 step 기능은 사용할 수 있지만 데이타 아이템들에
    대한 watch나 inspect기능은 사용할 수 없게 되어질것이다.
    라인 번호를 포함함으로서 오브젝트나 맵 파일의 크기는 증가하게 되지만
    프로그램을 실행할 수 있는 속도에 영향을 미치지는 않는다.
    Line Number가 on인 겨우, 컴파일러 옵션의 Pentium 스케쥴을 확실하게 off시켜야
    한다. 이 옵션이 설정되면, 소스 코드는 곧바로 일치하는 기계 명령으로 생성되지
    는 않을 것이다.

    Default = OFF

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -v                     ┃소스 디버깅을 on 시킨다.
    ┗━━━━━━━━━━━━┛
    Debug Info In OBJs Option이 on 이면 디버깅 정보는 .OBJ 파일들에 포함되어진다
    컴파일러는 또한 이 옵션을 링커에게도 전달하므로 디버깅 정보를 .EXE 파일에도
    포함시킬 수 있다. 디버깅을 위해서 이 옵션은 일반적인 함수처럼 C++ 인라인
    함수를 취급한다.  독립형 터보 디버거나 통합환경을 사용하려면 디버깅 정보가
    필요하다.
    이 옵션이 off(-v-)이면 큰 오브젝트 화일을 생성하거나 링크 시킬수 있다.
    이 옵션은 실행속도에는 영향을 미치지 않고 편집과 링크시간에만 영향을 미친다.

    Line Number가 on인 겨우, 컴파일러 옵션의 Pentium 스케쥴을 확실하게 off시켜야
    한다. 이 옵션이 설정되면, 소스 코드는 곧바로 일치하는 기계 명령으로 생성되지
    는 않을 것이다.(-y 옵션의 설명에 들어 있는 내용이 동일하게 들어가 있군요..)

    Default = ON

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -R                     ┃생성된 .OBJ 파일에 브라우저 정보를 포함한다.
    ┗━━━━━━━━━━━━┛
    주) 방금 알아낸 사실인데 이 옵션은 빌더에서는 제공되지 않는듯 합니다.
        계속해서 "In OBJs"라는 단어가 나와 이상하게 생각하고 있었는데
        알고 보니 Borland C++에서만 제공되더군요. 이 기능은 Borland C++의
        4.x 이상의 버젼에서부터 지원되는 것으로 알고 있습니다. Borlad C++에는
        Object Browser라는 기능이 있는데 이 기능에 필요한 정보가 .OBJ에 포함되는
        지의 여부를 제어합니다. Borland C++을 사용해보신 경험이 있으신 분은
        쉽게 이해가 가실겁니다. 보다 자세한 내용은 Borland C++의 도움말을 참조
        하세요. 혹 Object Inspector에서 사용하는지도 모르겠군요.. 이 옵션에
        관련한 도움말이 더 이상 없네요..

   . Compiler options : Precompiled headers
     프리컴파일드 헤더 파일은 디스크상의 파일에 심볼 테이블의 이미지를 저장하고
     나중에 모든 헤더파일을 다시 검사하는 대신에 디스크에서 그 파일을 다시
     로딩하여 편집물의 속도를 극적으로 증가시킬수있다.  디스크로부터의 심볼
     테이블을 직접 로딩하는것은 헤더파일의 텍스트를 구문검사하는것보다 훨씬
     빠르며, 특히 몇몇 소스파일에 동일한 헤더파일을 포함하는경우가 그렇다.
     프리컴파일드 헤더는 많은 양의 디스크 공간을 차지하기는 하지만 극적으로
     편집속도를 증가시킬 수 있다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -H                     ┃프리컴파일드 헤더를 생성하고 사용한다. (Default)
    ┗━━━━━━━━━━━━┛
    이 옵션을 설정하면 IDE는 프리컴파일드 헤더를 생성한다. IDE 프로젝트를 위한
    기본 파일 이름은 <projectname>.CSM이고 명령라인(command-line)을 위한 기본
    이름은 BC32DEF.CSM이다.

    Do not generate or use
    (Command-line switch: -H-)
    이 옵션이 설정되면 컴파일러는 프리컴파일드 헤더 파일을 생성하거나 사용하지
    않는다.

    Default = Do not generate or use  (-H-)

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Hu                    ┃프리컴파일드 헤더를 생성하지만 만들지는 않는다.
    ┗━━━━━━━━━━━━┛
    이 옵션이 설정되면 컴파일러는 기존하는 프리컴파일드 헤더파일을 사용하며,
    새로운 프리컴파일드 해더파일을 생성하지는 않는다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Hc                    ┃프리컴파일드 헤더를 케쉬한다.
    ┗━━━━━━━━━━━━┛
    이 옵션을 enable하면 컴파일러는 프리컴파일드 헤더를 생성하고 캐쉬한다.
    이것은 하나 이상의 파일을 프리컴파일링 할 경우 유용하다. 이 옵션은 Generate
    and Use(-H) precompiled heer option이 반드시 enable되어있어야만 한다.

    Default = OFF

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -He                    ┃외부형식 파일로 프리컴파일드 헤더가 가능하게한다
    ┗━━━━━━━━━━━━┛
    이 옵션은 컴파일러가 프리컴파일드 헤더에 가지고있는 모든 심볼들에 관한
    디버그 형태의 정보를 가지는 하나 또는 그이상의 파일들을 생성하도록 한다.
    파일은 .#xx 로 끝나는 확장자를 가지며, xx는 첫번째 생성딘 파일의 경우 00이고
    필요로하는 각각의 형정보 파일들이 추가될때마다 증가한다.
    이 옵션은 각각의 .OBJ 파일에 중복되지 않게 디버그 형정보를 집중시키기때문에
    .OBJ파일의 크기를 극적으로 감소시킨다.

    Default = ON (in C++Builder); OFF (on the command line)

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Hs                    ┃프리컴파일드 헤더를 스마트 케쉬한다.
    ┗━━━━━━━━━━━━┛
    이 옵션은 컴파일러가 생성된 프리컴파일드 헤더를 스마트 케쉬하게 한다.(스마트
    케쉬는 보통의 케쉬 옵션(-Hc)을 사용하는것보다 더 적은 메모리를 사용한다.)
    메모리에서 헤더파일을 케쉬하는것은 하나 이상의 헤더파일을 프리컴파일링할
    경우 유용하다.

    Default = ON

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -H=filename            ┃프리컴라일드 헤더로 사용될 파일의 이름을 지정한
    ┗━━━━━━━━━━━━┛다.
    이 옵션은 프리컴파일드 헤더 파일의 이름을 지정한다. 컴파일러는 프리컴파일드
    헤더의 파일 이름으로 filename을 설정한다. 이 옵션이 설정되면 컴파일러는 지정
    한 프리컴파일드 헤더를 생성하고 사용한다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -H\"xxx\"              ┃헤더파일 xxxx 이후에 프리컴파일링을 멈춘다.
    ┗━━━━━━━━━━━━┛
    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Hh=xxx                ┃헤더파일 xxxx 이후에 프리컴파일링을 멈춘다.
    ┗━━━━━━━━━━━━┛
    이 옵션은 xxx로 지정되어진 파일에 대한 과정을 수행한 후에 프리컴파일드 헤더
    의 컴파일링을 끝낸다. 이 옵션을 프리컴파일드 헤더에 필요한 디스크 공간을
    감소시킨다. 일반적으로 -Hh 문법은 -H 문법보다 사용하기가 더 쉽다.
    어느 버젼을 선택하던지, 긴파일이름을 사용하기 위해서는 quote를 사용해야한다.
    예를 들면,

        -Hh=mycsm.csm
        -H\"mycsm.csm\"
        -Hh="c:\program files\mycsm.csm"
        -H\"c:\program files\mycsm.csm\"

    이 옵션을 사용할때 .CSM파일을 생성하기 위해 컴파일을 하려면 소스파일에
    지정한 파일이 포함되어야만한다. 또한 프리컴파일드 헤더의 생성을 멈추려고할때
    지정할 파일을 .CPP 파일에 #pragma hdrstop으로 사용할 수 있다.
    다른 헤더파일에 포함된 헤더파일은 지정할 수 없다. 예를 들어, windows.h의
    편집이 완전하기 전에 프리컴파일드 헤더 파일이 닫혀지기 때문에 windows.h 파일
    에 포함되어진 헤더파일을 지정할 수 없다.

   . Compiler options : Processor
     Instruction Set Option은 컴파일러가 생성할 코드의 CPU명령을 정의한다.

    Default = 80386  (-3)

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -3                     ┃80386명령어를 생성한다.(Default)
    ┗━━━━━━━━━━━━┛
    컴파일러가 Window 95/NT상에서 실행할 80386 프로텍티드 모드와 호환되는
    명령어를 생성하기를 원한다면 80386 옵션을 선택한다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -4                     ┃80486명령어를 생성한다.
    ┗━━━━━━━━━━━━┛
    컴파일러가 Window 95/NT상에서 실행할 80346 프로텍티드 모드와 호환되는
    명령어를 생성하기를 원한다면 80346 옵션을 선택한다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -5                     ┃Pentium명령어를 생성한다.
    ┗━━━━━━━━━━━━┛
    컴파일러가 Window 95/NT상에서 실행할 Pentium 명령어를 생성하기를 원한다면
    Pentium 옵션을 선택한다. 이 옵션이 Pentium 기계에서 응용프로그램이 실행되어
    속도를 높이는 동안, 프로그램은 80386 이나 i486 옵션으로 컴파일된것보다 큰
    비트(bit)가 되어질것을 예상한다. 추가로 Pentium 으로 컴파일된 코드는
    펜티엄이 아닌 시스템에서는 성능에 피해를 받을것이다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -6                     ┃Pentium Pro명령어를 생성한다.
    ┗━━━━━━━━━━━━┛
    컴파일러가 Window 95/NT상에서 실행할 Pentium Pro 명령어를 생성하기 원한다면
    Pentium Pro 옵션을 선택한다.

   . Compiler options : Calling convention
     Calling convention Option은 컴파일러에게 함수 호출을 생성할경우 순서에 입각
     하여 호출할것을 지시한다. C, Pascal, Register 키워드는 글로벌 변수의 프리픽
     스, 대/소 구분, 인수의 순서, 사용한 스택의 소거등을 다루는 각각의 방법에
     차이가 있다.
     함수 정의의 기본 호출 규약에 중첩되는(override) __cdel,__pascal,__fastcall,
     __stdcall 키워드를 사용할 수도 있다.
     C++ Builder 코드에서는 기본적으로 C 호출규약을 보통 사용한다.

     Default = C  (-pc)

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -p                     ┃Pascal호출을 사용한다.
    ┗━━━━━━━━━━━━┛
    이 옵션은 컴파일러에게 파스칼이 함수를 호출하는 순서로 함수나 서브 루틴을
    호출하라고 지시한다.(언더바(_)를 만들지 않고 모두 대문자이며 호출하는 함수가
    스택을 청소하고, 좌에서 우로 파라미터를 전달한다.) 이것은 모든 함수나 서브루
    틴을 __pascal 키워드를 사용하여 선언하는것과 동일하다. 결과인 함수 호출은
    보통 C 호출규약(-pc)에 의하여 만들어진것보다 작고 빠르다. 함수는 반드시
    정확한 인수의 형과 수를 넘겨주어야만 한다. 다른 호출 규약을 사용하여 함수나
    서브루틴을 특별하게 선언하기 위하여 __cdecl, __fastcall, __stdcall 키워드를
    사용할 수도 있다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -pc                    ┃C호출 규약을 사용한다. (Default: -pc, -p-)
    ┗━━━━━━━━━━━━┛
    이 옵션은 컴파일러에게 C가 함수를 호출하는 순서로 함수나 서브루틴을 호출하라
    고 지시한다.(언더바(_)를 생성하고, 대/소문자를 구별하며 인수를 우에서 좌로
    전달한다.) 이것은 모든 함수나 서브루틴에 __cdecl 키워드를 사용하여 선언하는
    것과 동일하다. 함수가 선언되면 인수의 리스트를 가질수 C 호출규약을 사용한다.
    (인수의 수가 고정적이어야 할 필요는 없다.) 다른 호출 규약을 사용하여 함수나
    서브루틴을 특별하게 선언하기 위하여 __pascl, _fastcall, __stdcall 키워드를
    사용할 수도 있다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -po                    ┃레지스터에 이 함수의 전달을 위해 fastthis
    ┗━━━━━━━━━━━━┛호출 규약을 사용한다.
    주) fastthis라는 호출 방식은 세부적인 도움말이 더이상 존재하지 않습니다.
        Borland C++ 5.2의 도움말에는 이런 옵션이 거론조차 되지 않았더군요.
        새로이 추가된 옵션인듯 한데.. IDE상의 프로젝트 옵션 대화상자에도
        지원되지 않는것이 현재의 버젼에서는 지원이 되지 않는 옵션이어서 그런가..
        음.. 인프라이즈에 물어봐야겠습니다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -pr                    ┃레지스터에 함수를 전달하기 위해 fastcall
    ┗━━━━━━━━━━━━┛호출규약을 사용한다.
    이 옵션은 강제로 컴파일러에게 모든 서브루틴과 함수들이 __fastcall을 사용하여
    모든 함수들과 서브루틴을 선언한것과 동일한 Register 파라미터전달을 사용할것
    을 지시한다. 이 옵션이 선택되어지면 함수나 루틴들은 레지스터에 전달되어졌을
    파라미터들을 기대다. 다른 호출 규약을 사용하여 함수나 서브루틴을 특별하게
    선언하기 위하여 __pascal, __cdecl, __stdcall 키워드를 사용할 수도 있다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -ps                    ┃stdcall 호출규약을 사용한다.
    ┗━━━━━━━━━━━━┛
    이 옵션은 컴파일러에게 함수를 호출을 위하여 Stdcall 호출 순서로 생성할것을
    지시한다. (언더스코어(_)를 만들지 않으며 대/소문자를 구분하고, 함수는 스택을
    팝(pop)하여 호출되고, 인수를 우에서 좌로 전달한다.) 이것은 모든 함수나 서브
    루틴에 __stdcall 키워드를 사용하여 선언하는것과 동일하다. 함수는 반드시 정확
    한 수와 형의 인수를 넘겨주어야 한다. 다른 호출 규약을 사용하여 함수나 서브
    루틴을 특별하게 선언하기 위하여 __cdecl, __pascal, __fastcall 키워드를 사용
    할 수도 있다.

   . Compiler options : Assembler-code options

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -B                     ┃.ASM을 컴파일하고 (-S), .OBJ를 어셈블한다.
    ┗━━━━━━━━━━━━┛
    이 옵션은 C/C++ 소스코드로부터 먼저 .ASM 파일을 생성할것을 컴파일러에게 주장
    한다. (명령라인의 -S와 동일하다.) 컴파일러는 그리고 .ASM파일로부터 .OBJ 파일
    을 생성하기 위하여 TASM32를 호출한다.(또는 -E 옵션으로 정의되어진 컴파일러
    를 호출한다.) .ASM 파일은 그런후 지워진다. 이 32bit 어셈블러를 사용하기
    위해서는 TASM32.EXE와 같은 설치한 후 -E옵션으로 이 어셈블러를 지정해야만한다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -E<filename>           ┃어셈블러를 지정한다.
    ┗━━━━━━━━━━━━┛
    filename을 어셈블러의 이름으로 사용한다. 기본 어셈블러로 32bit 컴파일러는
    TASM32를 사용한다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -S                     ┃어셈 러를 위해 컴파일한다.
    ┗━━━━━━━━━━━━┛
    이 옵션은 컴파일러가 C/C++ 소스 코드로부터 .ASM 파일을 생성하도록 한다.
    생성된 .ASM 파일은 원래의 C/C++ 소스코드의 내용을 파일에 코멘트로서 포함한다

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Tx                    ┃어셈블러의 옵션 x를 지정한다.
    ┗━━━━━━━━━━━━┛
    -E 옵션으로 지정된 어셈블러에게 옵션(들) x를 전달하기 위하여 이 명령라인
    옵션을 사용한다. 이전에 사용된 모든 어셈블러 옵션을 제거하기 위해서는 -T-
    명령라인 옵션을 사용한다.

   . C++ options : C++ compatibility
     char 형을 다룬다거나, 숨겨진 포인터들에 관한 옵션을 지정하기, 클래스 인수
     전달하기, 클래스에서 도출된 숨겨진 코드와 멤버들을 추가하기, Pascal 멤버
     함수에 this 포인터 전달하기, 클래스의 레이아웃을 변경하기 클래스 인스탄스가
     Borland C++의 이전버젼으로 컴파일된 코드 또는 C++이 아닌것과 공유할경우
     호환성의 보장등과 같은 C++의 호환성에 관한 문제를 다루는데
     C++ Compatibility 옵션을 사용한다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -VC                    ┃호출방식의 호환성
    ┗━━━━━━━━━━━━┛
    이 옵션이 설정되면 컴파일러가 유일하게 가능한 차이점인 호환되지 않는 코드
    생성 옵션을 가지는 함수 이름의  구분이 불가능하게 한다.
    예를 들어 이 옵션이 설정된다면 링커는 호출이 cdecl 호출방식으로된 __fastcall
    멤버함수로 만들어짐을 판단하지 않을 것이다.
    이 옵션은 오직 이전버젼과의 호환성을 위하여 제공되어졌으며 과거의 라이브러리
    파일들을 다시 컴파일하지 않고 링크할수 있게해준다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Vd                    ┃for 루프변수의 범위 제한
    ┗━━━━━━━━━━━━┛
    이 옵션은 for 루프문에서 선언된 변수의 범위를 지정한다. 다음 코드의 출력은
    이 옵션의 설정에 의존한다.

    int main(void)

    {

        for(int i=0; i<10; i++)
        {
              cout << "Inside for loop, i = " << i << endl;
        }     //end of for-loop block

        cout << "Outside for loop, i = " << i << endl;  //error without -Vd


    }      //end of block containing for loop

    만일 이 옵션이 제한되었다면(기본값이다.) 변수 i는 프로세스가 for 루프의
    마지막에 도달할때까지의 범위가 될것이다. 이러한 이유로 이 옵션을 제한한
    상태에서 컴파일을 한다면 'Undefined Symbol compilation error "를 얻게된다.
    만일 이 옵션이(-Vd) 설정된다면 프로세스가 for 루프를 내포하고 있는
    블럭의 마지막에 도달하때까지가 변수 i의 범위가 된다. 이 경우 코드의 출력은
    다음과 같을 것이다.

    Inside for loop, i = 0
    ...
    Outside for loop, i = 10

    Default = OFF

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Ve                    ┃길이가 0인 비어있는 베이스 클래스.
    ┗━━━━━━━━━━━━┛
    만일 클래스에 어떤 데이타 멤버도 정의하지 않았다 하더라도 보통은 클래스의
    크기가 적어도 1 바이트이다. 이 옵션을 설정하면, 컴파일러는 클래스로부터
    도출된 어떤것의 전체 크기 그리고 메모리 레이아웃을 위해 사용되지 않은
    바이트를 무시한다.
    비어있는 베이스 클레스는 도출된 클래스내에서 공간을 사용하지 않을 것이다.

    Default = OFF

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Vl                    ┃예전 형태의 Borland C++ 스트럭쳐 레이아웃을 사용
    ┗━━━━━━━━━━━━┛한다 (BCC32.EXE의 구버젼과의 호환성을 위해서)
    이것은 Borland C++의 구버젼에서 사용되었던 클래스가 도출되어진 동일한
    방법으로 Bcc32 C++ 컴파일러가 구버젼에 대해 호환성을 갖도록하는 스위치이다.
    만일 Borland C++의 구버젼을 사용하여 컴파일할 필요가 있는 소스파일이 있다면
    이 옵션을 사용한다.(예를 들자면, 다시 컴파일 필요가 없는 .DLL과 작업할
    필요가 있거나 하드와이어드 클래스 레이아웃(hardwired class layouts)을 가지는
    예전의 데이타 파일을 가지고 있는 경우이다.)

    Default = OFF

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    명시된 캐스트를 컴파일러가 취급하는 방법에 영향을 주고 멤버 포인터를 감독
    하기위하여 Member Pointers Optin을 사용한다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Vmd                   ┃멤버 포인터를 위한 가장 작은 가능한 표시를 사용
    ┗━━━━━━━━━━━━┛한다.
    이 옵션이 유효한 경우 선언된 멤버포인터는 멤버 포인터가 그 클래스의 모든
    멤버를 지시할 수 있도록 허용된 최소의 표시를 사용한다. 멤버 포인터 형이
    선언된 지점에서 클래스가 완전히 정의되어 있지 않을 경우, 컴파일러는 가장
    일반적인 표시를 선택해야 하고 이에 대한 경고문이 발생하게 된다.

    Default = OFF

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Vmm                   ┃멤버 포인터를 위한 다중상속을 지원한다.
    ┗━━━━━━━━━━━━┛
    이 옵션이 유효한 경우 멤버 포인터는 다중상속 클래스의 멤버를 가르킬 수 있다.
    (가상 베이스 클래스를 제외하고서)

    Default = OFF

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Vmp                   ┃Honor declared precision of member pointers
    ┗━━━━━━━━━━━━┛
    이 옵션이 유효한 경우 컴파일러는 멤버 포인터형을 위한 선언된 정밀도를 사용
    한다. 이 옵션은 파생클래스의 포인터는 (포인터가 파생클래스 멤버를 실질적으로
    지정하게 될때) 더 간단한 베이스 클래스의 포인트멤버(멤버에 관한 포인터)처럼
    명백하게 캐스트된다.

    Default = OFF

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Vms                   ┃멤버 포인터의 단일 상속만을 지원한다.
    ┗━━━━━━━━━━━━┛
    이 옵션이 유효한 경우 멤버포인터는 오직 단일 상속을 사용한 베이스 클래스의
    멤버만을 가르킬수 있다.

    Default = OFF

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Vmv                   ┃멤버 포인터가 가르킬수 있는 제한이 없는곳에
    ┗━━━━━━━━━━━━┛배치시킨다.(Default)
    이 옵션이 유효한 경우 컴파일러는 멤버 포인터가 지시할 수 있는 제한이 없는
    장소에 배치시킨다. 멤버포인터는 가장 일반적인(그러나 항상 가장 효과적인것은
    아니다.) 표시를 사용한다.

    Default = ON

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Vx                    ┃길이가 0인 클래스 맴버 펑션
    ┗━━━━━━━━━━━━┛
    클래스 정의에서 보통 데이타 멤버의 크기는 적어도 1 바이트이다. 이 옵션이
    유요한 겨우 컴파일러의 길이가 0인 빈 스트럭쳐를 허락한다.

    Default = OFF

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -xdg                   ┃global destructor count를 사용한다.
    ┗━━━━━━━━━━━━┛(구버젼의 BCC32.EXE와의 호환성을 위해서)

   . C++ options : Virtual tables
     Virtual talbes 옵션은 디버깅을 할 경우 C++의 가상테이블과 인라인 함수의
     확장을 조절한다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -V                     ┃smart C++ virtual table을 사용한다. (Default)
    ┗━━━━━━━━━━━━┛
    이 옵션은 주어진 가상 테이블이나 인라인 함수의 한 사례만이 프로그램에
    포함되도록 C++ 가상 테이블(및 인라인을 확장하지 않는 인라인 함수)를 생성
    하고자 할 때에 사용한다. 이것은 가장 작고 가장 능률적인 실행을 생성하지만
    TLINK, ILINK, TASM과 함께 사용할 수 있는 .OBJ 및 .ASM확장자만을 사용한다.

    Default = ON

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -V0                    ┃External C++ virtual table을 사용한다.
    ┗━━━━━━━━━━━━┛
    가상 테이블에 대한 외부 참조를 생성하기 위하여 External 옵션을 사용한다.
    만일 Smart 또는 Local 옵션을 사용하고 싶지 않다면, External 과 Public 옵션을
    사용하고 글로벌 가상 테이블을 참조한다.
    이 옵션을 사용한 경우, 하나나 그 이상의 모듈들을 포함하는 프로그램은 반드시
    가상테이블을 위한 정의를 제공하기 위하여 Public 옵션을 사용하여 컴파일되어
    져야만한다.

    Default = OFF

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -V1                    ┃Public C++ virtual table을 사용한다.
    ┗━━━━━━━━━━━━┛
    Public은 가상테이블을 위한 공용 정의를 생산해낸다. External 옵션(-V0)을 사용
    한 경우, 적어도 프로그램에서 하나의 모듈은 가상테이블을 위한 정의를 제공하기
    위하여 Public옵션을 사용하여 컴파일되어져야만 한다.  다른 모든 모듈들은 가상
    테이블의 Public 사본을 참조하기 위하여 External 옵션을 사용하여 컴파일
    되어져야만 할것이다.

    Default = OFF

  . C++ options : Templates
    Template 옵션은 C++에서 템플릿 인스탄수를 생성하는 방법을 컴파일러에게
    지시한다.

    ┏━━━━━━━━━━━  ┏━━━━━━━━━━━━━━━━━━━━━━━
    ┃ -Ja                    ┃모든 템플릿 멤버들을 확장한다.
    ┗━━━━━━━━━━━━┛(사용되지 안은 멤버들을 포함한다.)

    ┏━

+ -

관련 글 리스트
108 [팁] BCC32.EXE Option 정리 #2 박지훈.임프 10677 2001/07/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.