GCC(1)

명칭
gcc, g++ - GNU 프로젝트 C 및 C++ 컴파일러 (gcc-2. 95.3)

서식
gcc [ option | filename ]. . .

주의
이 메뉴얼에 쓰여진 정보는 GNU C 컴파일러의 완전한 다큐멘테이션으로부터의 발췌이며, 옵션의 의미의 기술에 그칩니다.

이 메뉴얼은 자원봉사의 메인트넌스가 행해졌을 때에게만 갱신되고 것으로, 항상 최신의 정보를 나타내고 있는 것은 아닙니다. 만약 이 메뉴얼과 실제의 소프트웨어의 사이에 모순점이 있으면, 정식적 문서인 Info 파일 쪽을 참조해 주세요.

이 메뉴얼중의 낡은 기술이 중대한 혼란이나 불편을 초래하게 되면, 이 메뉴얼 페이지의 배포는 중지합니다. GNU CC의 메인트넌스 작업의 형편상, Info 파일을 갱신했을 때에 메뉴얼 페이지도 아울러 갱신하는 것은 할 수 없습니다. 메뉴얼 페이지는 시대착오이며, 이것에 시간을 들여서는 안되면 GNU 프로젝트에서는 생각하고 있습니다.

완전한 최신의 다큐멘테이션이 필요한 경우는, Info 파일의 `gcc '또는 메뉴얼의 Using and Porting GNU CC (for version 2.0) (을)를 참조해 주세요. 이 쌍방은 Texinfo 의 원시 파일 gcc.texinfo (으)로부터 생성됩니다.

해설
C 와 C++ 의 컴파일러는 통합되고 있습니다. 어느 쪽의 경우도, 입력 파일 (은)는, 프리프로세스, 컴파일, 어셈블(assemble), 링크의 4 개의 처리 스테이지의 우리 1 개 이상의 스테이지를 밟아 처리됩니다. 원시 파일명의 확장자(extension)에 의해 소스의 언어를 식별합니다만, 디폴트의 동작은, 어느 쪽의 이름으로 컴파일러를 사용할까에 의존하고 있습니다:

gcc 프리프로세스 끝난 (.i ) 파일을 C 의 파일과 가정해, C 스타일의 링크를 실시합니다.

g++ 프리프로세스 끝난(.i ) 파일을 C++ 의 파일과 가정해, C++ 스타일의 링크를 실시합니다.

원시 파일명의 확장자(extension)는, 그 언어가 무엇으로 있을까하고, 어떠한 처리를 한다 한가를 나타냅니다:

.c     C언어 소스입니다. 프리프로세서, 컴파일러, 어셈블러에 걸칠 수 있습니다.
.C     C++언어 소스입니다. 프리프로세서, 컴파일러, 어셈블러에 걸칠 수 있습니다.
.cc    C++언어 소스입니다. 프리프로세서, 컴파일러, 어셈블러에 걸칠 수 있습니다.
.cxx   C++언어 소스입니다. 프리프로세서, 컴파일러, 어셈블러에 걸칠 수 있습니다.
.m     Objective-C 언어 소스입니다. 프리프로세서, 컴파일러, 어셈블러에 걸칠 수 있습니다.
.i     프리프로세서에 걸칠 수 있었던 C언어 소스입니다. 컴파일러, 어셈블러에 걸칠 수 있습니다.
.ii    프리프로세서에 걸칠 수 있었던 C++언어 소스입니다. 컴파일러, 어셈블러에 걸칠 수 있습니다.
.s     어셈블리 언어 소스입니다. 어셈블러에 걸칠 수 있습니다.
.S     어셈블리 언어 소스입니다. 프리프로세서, 어셈블러에 걸칠 수 있습니다.
.h     프리프로세서 파일입니다. 통상은 명령행에는 나타나지 않습니다.

그 외의 확장자(extension)를 가지는 파일은 링커에게 건네집니다. 이하의 것이 있습니다.

.o     오브젝트 파일입니다.
.a     archive파일입니다.

링크는, 옵션 -c, -S, -E (을)를 지정해 억제하지 않는 한(혹은 compile error에 의해 모든 처리가 중단 하지 않는 한), 항상 최종 스테이지에서 실행됩니다. 링크의 스테이지에 있어서는, 원시 파일에 대응한 모든 . o 파일과 -l 그리고 지정한 프로그램 라이브러리라고 인식되지 않았던 파일명 (이름에 . o (이)가 붙은 오브젝트 파일이나 . a (이)가 붙은 아카이브(archive)를 포함한다)는, 명령행에 늘어놓을 수 있었던 차례로 링커에게 건네집니다.

옵션
옵션은 분할되어 있지 않으면 안됩니다. 즉 `-dr '는 `-d -r '와는 다른 취급을 받습니다.

대부분의 `-f '와 `-W '형식의 옵션에는, -fname (와)과 -fno-name (또는 -Wname (와)과 -Wno-name )의 형식의, 대조적인 표현이 있습니다. 여기에서는 디폴트가 아닌 형식의 보고를 나타냅니다.

모든 옵션을 종류별로 나누어 정리했습니다. 자세한 해설은 이하의 마디로 행합니다.

FreeBSD 고유의 옵션

-pthread
    thread화 유저 프로세스에 libc 대신에 libc_r 를 링크 합니다. thread화 유저 프로세스에 링크 되는 오브젝트는 -D_THREAD_SAFE 첨부로 컴파일 할 필요가 있습니다.

-kthread
    thread화 커널 프로세스에 libc 에 가세해 libpthread 를 링크 합니다. thread화 커널 프로세스에 링크 되는 오브젝트는 -D_THREAD_SAFE 첨부로 컴파일 할 필요가 있습니다.

전체적인 옵션
    -c -S -E -o file -pipe -v -x language

언어 옵션
    -ansi -fall-virtual -fcond-mismatch -fdollars-in-identifiers -fenum-int-equiv -fexternal-templates -fno-asm -fno-builtin -fhosted -fno-hosted -ffreestanding -fno-freestanding -fno-strict-prototype -fsigned-bitfields -fsigned-char -fthis-is-variable -funsigned-bitfields -funsigned-char -fwritable-strings -traditional -traditional-cpp -trigraphs

경고 옵션
    -fsyntax-only -pedantic -pedantic-errors -w -W -Wall -Waggregate-return -Wcast-align -Wcast-qual -Wchar-subscript -Wcomment -Wconversion -Wenum-clash -Werror -Wformat -Wid-clash-len -Wimplicit -Wimplicit-int -Wimplicit-function-declaration -Winline -Wlong-long -Wmain -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-import -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch -Wtemplate-debugging -Wtraditional -Wtrigraphs -Wuninitialized -Wunused -Wwrite-strings

디버그 옵션
    -a -dletters -fpretend-float -g -glevel -gcoff -gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+ -ggdb -p -pg -save-temps -print-file-name=library -print-libgcc-file-name

최적화 옵션
    -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks -fdelayed-branch -felide-constructors -fexpensive-optimizations -ffast-math -ffloat-store -fforce-addr -fforce-mem -finline-functions -fkeep-inline-functions -fmemoize-lookups -fno-default-inline -fno-defer-pop -fno-function-cse -fno-inline -fno-peephole -fomit-frame-pointer -frerun-cse-after-loop -fschedule-insns -fschedule-insns2 -fstrength-reduce -fthread-jumps -funroll-all-loops -funroll-loops -O -O2 -O3 -O0 -Os

프리프로세서 옵션
    -Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H -idirafter dir -include file -imacros file -iprefix file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P -Umacro -undef

어셈블러 옵션
    -Wa,option

링커 옵션
    -llibrary -nostartfiles -nostdlib -static -shared -symbolic -Xlinker option -Wl,option -u symbol

디렉토리 옵션
    -Bprefix -Idir -I- -Ldir

타겟 옵션
    -b machine -V version

배치 의존 옵션
    M680x0 옵션
    -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881 -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield -mrtd -mshort -msoft-float

    VAX 옵션
    -mg -mgnu -munix

    SPARC 옵션
    -mepilogue -mfpu -mhard-float -mno-fpu -mno-epilogue -msoft-float -msparclite -mv8 -msupersparc -mcypress

    Convex 옵션
    -margcount -mc1 -mc2 -mnoargcount

    AMD29K 옵션
    -m29000 -m29050 -mbw -mdw -mkernel-registers -mlarge -mnbw -mnodw -msmall -mstack-check -muser-registers

    M88K 옵션
    -m88000 -m88100 -m88110 -mbig-pic -mcheck-zero-division -mhandle-large-shift -midentify-revision -mno-check-zero-division -mno-ocs-debug-info -mno-ocs-frame-position -mno-optimize-arg-area -mno-serialize-volatile -mno-underscores -mocs-debug-info -mocs-frame-position -moptimize-arg-area -mserialize-volatile -mshort-data-num -msvr3 -msvr4 -mtrap-large-shift -muse-div-instruction -mversion-03. 00 -mwarn-passed-structs

    RS6000 옵션
    -mfp-in-toc -mno-fop-in-toc

    RT 옵션
    -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs -mfull-fp-blocks -mhc-struct-return -min-line-mul -mminimum-fp-blocks -mnohc-struct-return

    MIPS 옵션
    -mcpu=cpu type -mips2 -mips3 -mint64 -mlong64 -mlonglong128 -mmips-as -mgas -mrnames -mno-rnames -mgpopt -mno-gpopt -mstats -mno-stats -mmemcpy -mno-memcpy -mno-mips-tfile -mmips-tfile -msoft-float -mhard-float -mabicalls -mno-abicalls -mhalf-pic -mno-half-pic -G num -nocpp

    i386 옵션
    -m386 -m486 -mpentium -mpentiumpro -mno-486 -mcpu=cpu type -march=cpu type -msoft-float -mrtd -mregparm -msvr3-shlib -mno-ieee-fp -mno-fp-ret-in-387 -mfancy-math-387 -mno-wide-multiply -mdebug-addr -mno-move -mprofiler-epilogue -reg-alloc=LIST

    HPPA 옵션
    -mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs -mno-shared-libs -mlong-calls -mdisable-fpregs -mdisable-indexing -mtrailing-colon

    i960 옵션
    -mcpu-type -mnumerics -msoft-float -mleaf-procedures -mno-leaf-procedures -mtail-call -mno-tail-call -mcomplex-addr -mno-complex-addr -mcode-align -mno-code-align -mic-compat -mic2. 0-compat -mic3. 0-compat -masm-compat -mintel-asm -mstrict-align -mno-strict-align -mold-align -mno-old-align

    DEC Alpha 옵션
    -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float

    System V 옵션
    -G -Qy -Qn -YP,paths -Ym,dir

코드 생성 옵션
    -fcall-saved-reg -fcall-used-reg -ffixed-reg -finhibit-size-directive -fnonnull-objects -fno-common -fno-ident -fno-gnu-linker -fpcc-struct-return -fpic -fPIC -freg-struct-return -fshared-data -fshort-enums -fshort-double -fvolatile -fvolatile-global -fverbose-asm

전체적인 옵션

-x language
    이 옵션에 계속되는 입력 파일의 언어를 language 이라고 명시적으로 지정합니다 (확장자(extension)에 근거하는 디폴트의 선택보다 우선됩니다). 이 옵션은, 다음의 `-x '옵션이 나올 때까지, 후속 하는 모든 입력 파일에 대해서 적용됩니다. language (으)로서는, `c ', `objective-c ', `c-header ', `c++ ', `cpp-output ', `assembler ', `assembler-with-cpp '를 지정하는 것이 가능합니다.

-x none
    언어의 지정을 해제합니다. 이 옵션의 후에 계속되는 파일은, 그러한 확장자(extension)에 기초를 두어 (마치 무슨 `-x ' 옵션도 사용되었던 적이 없게) 처리됩니다.

만약, 4 개의 스테이지 (프리프로세스, 컴파일, 어셈블(assemble), 링크)의 우리 일부만이 필요한 경우는, `-x '옵션 (또는 파일명의 확장자(extension))을 사용해 gcc 에 대해서 어느 스테이지로부터 개시할까를 전해 한층 더 `-c ', `-S ', `-E '의 옵션 중 어떤 것인지를 사용해 gcc 에 대해서 어디서 처리를 정지시키는지를 지정합니다. 여기서, 몇개의 편성 (예를 들면 `-x cpp-output -E ')는 gcc 에 대해서 어떤 동작도 행하지 않게 지정하게 되는 것에 주의해 주세요.

-c  원시 파일을, 컴파일 또는 어셈블(assemble)까지는 합니다만, 링크는 하지 않습니다. 컴파일러의 출력은, 각각의 원시 파일에 대응한 오브젝트 파일 됩니다.

    디폴트에서는, GCC 는 오브젝트 파일의 파일명으로서 원시 파일의 확장자(extension) `.c ', `.i ', `.s '등을 `.o '로 옮겨놓은 것을 사용합니다. -o 옵션을 사용하는 것에 의해, 다른 이름을 지정하는 일도 가능합니다.

    GCC 는 -c 옵션을 사용했을 경우는, 이해할 수 없는 입력 파일 (컴파일이나 어셈블(assemble) (을)를 필요로 하지 않는 파일)을 무시합니다.

-S  컴파일이 끝난 곳에서 처리를 정지해, 어셈블(assemble)는 실시하지 않습니다. 어셈블러 코드가 아닌 입력 파일이 손가락 정되었을 경우는, 출력은 어셈블러 코드의 파일이 됩니다.

    디폴트에서는, GCC 는 어셈블러 파일의 파일명으로서 원시 파일의 확장자(extension) `.c ', `.i '등을 `.s '로 옮겨놓은 것을 사용합니다. -o 옵션을 사용하는 것에 의해, 다른 이름을 지정하는 일도 가능합니다.

    GCC 는 컴파일을 필요로 하지 않는 입력 파일을 모두 무시합니다.

-E  프리프로세스 처리가 종료했더니 정지합니다. 컴파일은 하지 않습니다. 출력은 프리프로세스 끝난 원시 코드이며, 표준 출력으로 보내집니다.

    GCC 는 프리프로세스를 필요로 하지 않는 입력 파일을 모두 무시합니다.

-o file
    출력처를 file (으)로 지정합니다. 이 옵션은 GCC 가 실행 가능 파일, 오브젝트 파일, 어셈블러 파일, 프리프로세스가 끝난 C 코드등의, 어떠한 종류의 출력을 행하는 경우에도 적용 가능합니다.

    출력 파일은 1 개 밖에 지정할 수 없기 때문에, `-o '를 복수의 입력 파일을 컴파일 할 때에 사용하는 것은, 실행 파 일을 출력할 때 이외는 무의미합니다.

    `-o '옵션을 지정하지 않았던 경우의 디폴트는, 실행 파일을 만드는 장소 합은 `a.out '라는 이름이어, `source . suffix '의 형식의 파일명을 가진 원시 파일의 오브젝트 파일은 `source .o '여, 어셈블러의 파일은 `source .s '입니다. 프리프로세스 끝난 C 언어는, 모두 표준 출력에 보내집니다.

-v  (표준 에러 출력에 대해서) 컴파일의 각 스테이지에서 실행되는 명령을 표시합니다. 컴파일러 드라이버, 프리프로세서 및 본래의 컴파일러의 각 버젼 번호도 표시합니다.

-pipe
    컴파일시의 스테이지의 사이의 데이터의 수수에, 임시 파일은 아니고 파이프를 사용합니다. 몇개의 시스템에서는 어셈블러가 파이프로부터의 입력을 접수 붙일 수가 없기 위해(때문에), 이 옵션을 지정하면(자) 실패합니다. GNU 어셈블러에서는 문제 없게 사용할 수 있습니다.

언어 옵션

이하의 옵션은, 컴파일러가 받아들이는 C 의 방언에 관한 제어를 행합니다:

-ansi
    모든 ANSI 표준의 C 프로그램을 서포트합니다.

    이 옵션은, GNU C 가 가지는 ANSI C 와의 비호환인 기능을 모두 배제합니다. 예를 들면, asm , inline , typeof 등의 키워드나, unix (이)나 vax 등의 현재 사용하고 있는 시스템을 규정하는 정의가 끝난 매크로등이 억제됩니다. 게다가 바람직하지 않고 한편 거의 사용되지 않는 ANSI 의 트라이 그래프의 기능을 사 용가능으로 해, 한층 더 `$ '를 식별자의 일부로서 사용할 수 없게 합니다.

    대체 키워드인 __asm__ , __extension__ , __inline__ , __typeof__ (은)는, `-ansi '가 지정되었을 경우에서도 사용하는 것이 가능합니다. 물론, 이것들을 ANSI C 프로그램으로 사용하는 것이 바람직하지 않은 것은 당연합니다만, `-ansi '를 붙여 컴파일 되는 경우에서도, 인클루드 되는 헤더 파일중에 이것들을 기술할 수 있다고 하는 것은 유용합니다. __unix__ (이)나 __vax__ 등의 대체 정의가 끝난 매크로는, `-ansi '를 지정하는 경우에서도 지정하지 않는 경우에서도, 이용 가능해지고 있습니다.

    `-ansi '옵션은, ANSI 준거가 아닌 프로그램을 불필요하게 거부하는 것은 없습니다. 만약 이러한 동작을 행하게 하고 싶은 경우에는 `-ansi '에 가세해 -pedantic '옵션을 지정할 필요가 있습니다.

    프리프로세서 정의가 끝난 매크로 __STRICT_ANSI__ 하지만 `-ansi ' 옵션을 사용했을 때에는 정의됩니다. 몇개의 헤더 파일은, 이 매크로를 식별해, ANSI 표준이 바라지 않는 함수나 매크로의 정의를 억제합니다. 이것은, 그러한 함수나 매크로와 같은 이름을 다른 목적으로 사용하는 프로그램 (을)를 혼란시키지 않게 하기 (위해)때문입니다.

-fno-asm
    asm , inline , typeof (을)를 키워드로서 해석하지 않습니다. 이러한 단어는 식별자로서 해석되게 됩니다. 이러한 대용으로서 __asm__ , __inline__ , __typeof__ 하지만 사용할 수 있습니다. `-ansi '를 지정하면(자), 암묵중에 `-fno-asm '를 지정한 것으로 간주해집니다.

-fno-builtin
    빌트인 함수 가운데, 2 개의 언더 스코아로 시작되는 것 이외를 인식하지 않게 되어 _exit , abort , abs , alloca , cos , exit , fabs , labs , memcmp , memcpy , sin , sqrt , strcmp , strcpy , strlen 의 함수에 영향을 미칩니다.

    `-ansi '옵션을 지정하면(자), alloca (와)과 _exit (은)는 빌트인 함수로서 다루어지지 않게 됩니다.

-fhosted
    호스트 실행 환경 (hosted environment)용으로 컴파일을 실시합니다. 이것에 의해, `-fbuiltin '옵션이 유효하게 되어, 또, 의심스러운 main 선언에 대해서 경고를 발표하게 됩니다.

-ffreestanding
    프리 스탠딩 실행 환경 (freestanding environment)용으로 컴파일을 실시합니다. 이것에 의해, `-fno-builtin '옵션이 유효하게 되어, 또, main 에 특별한 조건은 불요로 간주합니다.

-fno-strict-prototype
    `int foo () ;'와 같은, 인수를 지정하지 않는 함수 선언을, C 언어와 같이 인수의 수나 형태에 대해 어떤 가정도 하지 않는다고 하는 취급으로 합니다 (C++ 마셔). 통상은 이듯 선언은, C++ 에서는 foo 그렇다고 하는 함수가 1 개나 인수를 취하지 않는 것을 의미합니다.

-trigraphs
    ANSI C 의 트라이 그래프를 사용 가능으로 합니다. `-ansi '옵션을 지정하면(자), 암묵중에 `-trigraphs '를 지정한 것으로 간주해집니다.

-traditional
    전통적인 C 컴파일러의 몇개의 특징을 서포트합니다. 자세하게는 GNU C 의 메뉴얼을 참조해 주세요. 이전에는 여기에 그 리스트의 복제를 싣고 있었습니다만, 그것들이 완전하게 시대에 뒤떨어졌을 때에 우리에게 불평이 오지 않게 삭제해 끝 했다.

    그러나, C++ 의 프로그램인 만큼 붙어 (C 가 아닙니다) 특기 해 두는 것 하지만 1 개 있습니다. `-traditional '옵션은 C++ 에 대해서 1 개만 특별한 효과를 가집니다. 그것은, this 에의 대입을 허가한다고 하는 것입니다. 이것은 `-fthis-is-variable '옵션의 지정이 미치는 효과와 동일한 것입니다.

-traditional-cpp
    전통적인 C 프리프로세서의 몇개의 특징을 서포트합니다. 이것은 위에 거 나막신중에서 특히 프리프로세서에 관계한 것을 포함합니다만, `-traditional '의 지정에 의해 일으켜지는 이외의 효과를 미칠 것은 없습니다.

-fdollars-in-identifiers
    식별자중의 `$ '의 사용을 허가합니다 (C++ 마셔). `-fno-dollars-in-identifiers '를 사용하는 것에 의해, 명시적으로 `$ '의 사용을 금지하는 일도 가능합니다. (GNU C++ 에서는, 디폴트로 `$ '를 허가하고 있는 시스템과 금지하고 있는 시스템이 있습니다).

-fenum-int-equiv
    int (으)로부터 열거형에의 암묵의 변환을 허가합니다 (C++ 마셔). 통상은 GNU C++ 는 enum (으)로부터 int 에의 변환은 허가하고 있습니다만, 역은 허락하고 있지 않습니다.

-fexternal-templates
    템플릿 함수에 대해, 그 함수가 정의된 장소에게만 단일의 카피 (을)를 생성하는 것에 의해, 템플릿 선언에 대해서 보다 작은 코드를 생성 합니다 (C++ 마셔). 이 옵션을 사용해 올바른 코드를 얻기 위해서(때문에)는, 템플릿을 사용하는 모든 파일에 대해, `#pragma implementation ' (정의) 또는 `#pragma interface ' (선언)를 기술해 둘 필요가 있습니다. `-fexternal-templates '를 지정해 컴파일을 행하는 경우에는, 모든 템플릿의 실체는 external 가 됩니다. 모든 사용되는 실체는 임플리멘테이션 파일중에 정리해 기술해 두지 않으면 안됩니다. 이것은 그 필요하게 되고 실체에 대응한 typedef 선언을 행하는 것에 의해 실현될 수 있습니다. 반대로, 디폴트의 옵션 `-fno-external-templates '로 컴파일 했을 경우에는 모든 템플릿의 실체는 internal 와 됩니다.

-fall-virtual
    가능한 한 모든 멤버 함수를 암묵중에 가상 함수로서 취급합니다. 모든 멤버 함수 (constructor　 　 과 new , delete 멤버 연산자를 제외합니다)는, 출현한 시점에서 그 클래스의 가상 함수로 해 (이)라고 다루어집니다.

    이것은, 이러한 멤버 함수에의 모든 호출이 가상 함수를 위한 내부 테이블을 참조해 간접적으로 결정된다고 하는 것을 의미하지 않습니다. 특정의 상황 냄새나서는, 컴파일러는 주어진 가상 함수에의 호출을 직접 결정할 수 있습니다. 이러한 경우에는 그 함수 호출은 항상 직접 호출이 됩니다.

-fcond-mismatch
    조건 연산자의 제 2, 제 3 인수의 형태가 다른 기술을 허락합니다. 이러한 식의 형태는 void 됩니다.

-fthis-is-variable
    this 에의 대입을 허가합니다 (C++ 마셔). 유저 정의에 의한 기억 관리가 가능 노우가 된 현재는, `this '에의 대입은 시대에 뒤떨어진 것이 되었습니다. 따라서 디폴트에서는, 클래스의 멤버 함수로부터의 this 에의 대입은 부당한 것으로 해 다루어지고 있습니다. 그러나, 후방 호환성을 위해서(때문에), `-fthis-is-variable '를 지정하는 것에 의해 이 효과를 얻을 수 있습니다.

-funsigned-char
    char 형태를 unsigned char (와)과 같이 부호 없음으로서 취급합니다.

    각각의 머신에는 char 하지만 어디에서 있어야할 것인가라고 하는 디폴트가 있습니다. 디폴트로 unsigned char 인 일도 있으면, 디폴트로 signed char 인 일도 있습니다.

    이상적이게는, 가반성이 있는 프로그램은, 오브젝트의 부호의 유무에 의 간직하는 기술을 행하는 경우에는 항상 signed char , 혹은 unsigned char (을)를 사용해야 합니다. 그러나 실제로는 많은 프로그램이 단순한 char (을)를 이용해 기술되고 있어 한층 더 그 프로그램을 기술했다 환경에 의존해, 부호 첨부이다, 혹은 부호 없음이다고 하는 암묵의 가정이 행해지고 있습니다. 이 옵션, 혹은 이 반대의 옵션은, 데포르 트와 역의 동작을 행하게 하는 것으로, 이러한 프로그램을 올바르게 동작시키고 일을 가능하게 합니다.

    char 형태는 항상 signed char 혹은 unsigned char (와)과는 구별된 형태로서 다루어집니다. 항상 그러한 행동 들일까하고 완전히 같다라고 말하는 것에 관련되지 않고, 이러한 취급을 실시합니다.

-fsigned-char
    char 형태를 signed char 형태와 같이 부호 첨부로서 취급합니다.

    다만, 이 옵션은 `-fno-unsigned-char '와 등가입니다. 이것은 `-funsigned-char '의 부정형입니다. (와)과 같이 `-fno-signed-char '는 `-funsigned-char '와 등가입니다.

-fsigned-bitfields

-funsigned-bitfields

-fno-signed-bitfields

-fno-unsigned-bitfields
    이러한 옵션은, 명시적으로 `signed '또는 `unsigned '의 지정이 행해지지 않은 비트 필드에 대해서, 부호 서로 돌출할까 있다 있고는 부호없이 있는지를 제어합니다. 디폴트에서는 이러한 비트 필 드는 부호 다하고되고 있습니다. 왜냐하면, int (와)과 같은 기본적인 형태는 부호 서로 돌출한다고 하는 점으로, 정합성이 잡히기 때문입니다.

    다만, `-traditional '를 지정했을 경우는, 비트 필드는 항상 모두 부호 없음이라고 됩니다.

-fwritable-strings
    캐릭터 라인 정수를 기입해 가능한 데이터 세그먼트에 배치해, 동내용의 캐릭터 라인을 1 개의 공유 오브젝트로 하는 처리를 실시하지 않습니다. 이것은, 캐릭터 정수에 기입한다 일이 생기는 것을 가정한 옛 프로그램과의 호환성을 취하기 위해서(때문에) 제공되고 (이)라고 있습니다. `-traditional '옵션도 같은 효과를 포함합니다.

    캐릭터 정수에 기입한다고 하는 생각은 매우 좋지 않은 생각입니다. “정수” (은)는 확실히 정수이며, 변화해야 하지는 않습니다.

프리프로세서 옵션
이러한 옵션은 C 프리프로세서를 제어합니다. 각 C 원시 파일은, 실제로 컴파일 하기 전에, C 프리프로세서에 걸칠 수 있습니다.

`-E '옵션을 사용하면(자), GCC 는 프리프로세스 이외의 처리를 실시하지 않습니다. 이하에 나타내는 옵션 중 몇개인가는, `-E '와 동시에 사용되었을 때 마셔 의미를 가집니다. 왜냐하면, 이러한 옵션 에 의해, 실제의 컴파일에는 부적당한 프리프로세서 출력이 생성되기 (위해)때문입니다.

-include file
    file (을)를, 통상의 입력 파일이 처리되기 전에 처리합니다. 결과적으로 file 에 포함되는 내용은, 제일 최초로 컴파일 되게 됩니다. 코만드라 인으로 지정된 모든 `-D ' (이)나 `-U '옵션은, 그 기술된 차례로 관련되지 않고 항상 `-include file '가 처리되기 전에 처리됩니다. 모든 `-include '나 `-imacros '옵션은, 그것들이 기술된 차례 대로에 처리됩니다.

-imacros file
    통상의 입력 파일을 처리하기 전에 file (을)를 입력으로서 처리합니다만, 그 결과의 출력을 버립니다. file 에 의해 생성된 출력은 버려지기 (위해)때문에, `-imacros file '의 처리 결과의 영향은, file 안에 기술된 매크로가 메인의 입력 파일중에서 사용 가능하게 되는 것 뿐입니다. 프리프로세서는, `-imacros file '가 기술된 차례로 관련되지 않고, 이것을 처리하기 전에, 명령행으로부터 주어진 모든 `-D '나 `-U '옵션을 평가합니다. 모든 `-include ' 및 `-imacros ' 옵션은, 그것들이 기술된 차례 대로에 처리됩니다.

-idirafter dir
    디렉토리 dir (을)를 제 2 인클루드 패스에 가세합니다. 제 2 인클루드 패스중의 디렉토리는, 메인 인클루드 패스 (옵션 `-I '에 의해 추가됩니다) 안에 헤더 파일을 찾은 결과 발견할 수 있는거야 샀을 경우에 검색됩니다.

-iprefix prefix
    prefix (을)를, 그 후에 계속되는 `-iwithprefix ' 옵션용의 프레픽스로서 사용합니다.

-iwithprefix dir
    디렉토리를 제 2 인클루드 패스에 추가합니다. 디렉토리명은 prefix (와)과 dir (을)를 연결하는 것에 의해 얻을 수 있습니다. 여기서 prefix (은)는, `-iprefix '옵션에 의해 지정된 것입니다.

-nostdinc
    헤더 파일을 위한 표준의 시스템 디렉토리를 검색하지 않습니다. `-I '옵션에 의해 지정한 디렉토리 (또는 경향 디 렉토 리)만을 검색합니다.

    `-nostdinc '와 `-I- '를 사용하는 것으로써, 인클루드 파일의 검색 패스를 명시적으로 손가락 정한 디렉토리에만 한정하는 것이 가능해집니다.

-nostdinc++
    헤더 파일의 검색에, C++-고유의 표준 디렉토리를 이용하지 않습니다. 다만 해 그 이외의 표준 디렉토리는 검색됩니다. (이 옵션은 `libg++ '의 구축에 사용됩니다. )

-undef
    표준이 아닌 정의가 끝난 매크로(아키텍쳐 플래그도 포함해)를 정의하지 않습니다.

-E  C 프리프로세서의 처리만을 실시합니다. 지정된 모든 C 의 원시 파일 에 대해서 프리프로세스를 행해, 표준 출력, 또는 지정된 출력 파일에 대해 출력을 실시합니다.

-C  프리프로세서에 대해서 코멘트의 삭제를 행하지 않게 지시합니다. `-E '옵션과 함께 사용됩니다.

-P  프리프로세서에 대해서 `#line '명령을 생성하지 않게 지시합니다. `-E '옵션과 함께 사용됩니다.

-M  [ -MG ]
    프리프로세서에 대해서 make 그리고 사용 가능한, 오브젝트간의 의존관계(dependencies)를 기술한 출력을 생성하도록(듯이) 지시 합니다. 각각의 원시 파일에 대해서, 프리프로세서는 make (을)를 위한 규칙을 1 개 출력합니다. 이 출력은, 타겟으로서 그 원시 파일로부터 생성되는 오브젝트 파일의 파일명을 취해, 의존하는 파일의 리스트로서는 `#include '에 의해 원시 파일에 읽히는 모든 파일의 이름이 줄섭니다. 이 규칙은 1 행, 혹은 긴 경우에는 `\ '와 개행을 넣어 복수행으로 출력됩니다. 이 규칙의 리스트는, 프리프로세스제 보고의 C 프로그램의 대신에, 표준 출력으로 출력됩니다.

    `-M '는 암묵중에 `-E '를 포함합니다.

    `-MG '를 지정하면(자), 발견되지 않는 헤더 파일은 생성된 파일이며, 그것들은 원시 파일과 같은 디렉토리에 존재하면(자) 간주합니다. 이것은 `-M '와 동시에 지정하지 않으면 안됩니다.

-MM  [ -MG ]
    `-M '와 닮아 있습니다만, `#include "file "'에 의해 인클루드 되는 유저 정의의 헤더 파일만을 대상으로 한 출력 파일을 생성합니다. `#include <file >'에 의해 인클루드 되는 시스템 헤더 파일은 생략 됩니다.

-MD `-M '와 닮아 있습니다만, 의존 정보는 출력 파일명의 마지막 `.o '를 `.d '에 옮겨놓은 파일명의 파일에 대해서 출력됩니다. `-MD '를 지정한 파일의 컴파일도 이것에 가세해 행해져 `-M '와 같이 통상의 컴파일을 억제할 것은 없습니다.

    Mach 의 유틸리티인 `md '는, 이러한 복수의 `.d '파일을 `make ' 명령에 의해 사용할 수 있는 단일의 의존 기술 파일로 merge 하는데 사용 할 수가 있습니다.

-MMD
    `-MD '와 닮아 있습니다만, 유저 헤더 파일만을 대상으로 해, 시스템 헤더 파일을 무시합니다.

-H  통상의 동작에 가세해, 사용된 헤더 파일의 이름을 표시합니다.

-Aquestion(answer)
    question 에 대한 assertion answer (을)를 정의합니다. 이것은 `#if #question(answer) '와 같은 프리프로세서 조건절에 의해 테스트됩니다. `-A- '는 표준의 assertion(통상은 타겟 머신에 관 하는 정보를 나타내고 있다)를 금지합니다.

-Dmacro
    매크로 macro 에 대해서 캐릭터 라인 `1 '를 정의로서 줍니다.

-Dmacro=defn
    매크로 macro (을)를 defn (으)로서 정의합니다. 명령행상의 모든 `-D '옵션은 `-U '옵션의 처리를 행하기 전에 처리됩니다.

-Umacro
    매크로 macro 의 정의를 무효로 합니다. `-U '옵션은 모든 `-D '옵션의 처리가 종료한 후, `-include '와 `-imacros '옵션의 처리 전에 처리됩니다.

-dM 프리프로세서에 대해서, 프리프로세스 종료시에 유효함 매크로의 정의의 보고를 출력하도록(듯이) 지시합니다. `-E ' 옵션과 함께 사용합니다.

-dD 프리프로세서에 대해서, 모든 매크로 정의를 적절한 차례로 출력중에 그대로 출력하도록(듯이) 지시합니다.

-dN `-dD '와 닮아 있습니다만, 매크로의 인수와 내용을 삭제합니다. 출력에는 `#define name '만이 포함됩니다.

어셈블러 옵션

-Wa,option
    option (을)를 어셈블러에 대한 옵션으로서 건네줍니다. option 하지만 콤마를 포함한 경우는, 그 콤마로 단락지어진 복수의 옵션으로서 주고

링커 옵션
이러한 옵션은, 컴파일러가 오브젝트 파일군을 링크 해 1 개(살) 의 실행 가능 파일을 출력할 때에 사용되는 것입니다. 이것들은 컴파일러가 린크스텝을 행하지 않는 경우에는 의미를 가지지 않습니다.

object-file-name
    특별히 인식되는 확장자(extension)로 끝나지 않은 파일명은, 오브젝트 파일, 또는 프로그램 라이브러리이다고 인식됩니다. (오브젝트 파일과 프로그램 라이브러리 (은)는 링커가 그 내용을 참조하는 것으로 구별됩니다. ) GCC 가 린크스텝을 행하는 경우는, 이러한 파일은 링커에의 입력으로서 사용됩니다.

-llibrary
    이름이 library 인 프로그램 라이브러리를 링크시에 사용합니다.

    링커는, 표준의 프로그램 라이브러리용 디렉토리의 리스트중으로부터, 실제의 파일명이 `lib library .a'인 파일을 검색합니다. 링커는 이 파일을, 파일 이름으로 직접 지정했을 경우와 같게 사용합니다.

    검색하는 디렉토리에는, 몇개의 표준 시스템 디렉토리와 `-L '에 의해 지정한 디렉토리가 포함됩니다.

    통상, 이 방법으로 발견되는 파일은 프로그램 라이브러리 파일, 즉 몇개의 오브젝트 파일을 멤버로서 포함한 archive파일입니다. 링커는, archive파일안을 검색해, 참조되고 있지만 정의되어 있지 않은 심볼을 정의하고 있는 멤버를 찾아냅니다. 그러나, 만약 링커가 프로그램 라이브러리가 아니고 통상의 오브젝트 파일을 발견했다 경우는, 그 오브젝트 파일을 통상의 방법으로 링크 합니다. `-l '옵션을 사용하는 경우와 파일명을 직접 지정하는 경우의 차이는, `-l '의 경우가 library (을)를 `lib '와 `.a '로 둘러싸, 얼마든지의 디렉토리를 검색하는 것 뿐입니다.

-lobjc
    Objective C 의 프로그램을 링크 하는 경우는, 이 특별한 -l 옵션을 지정할 필요가 있습니다.

-nostartfiles
    링크시에, 표준의 시스템 스타트 업 파일을 사용하지 않습니다. 표준 프로그램 라이브러리는 통상 대로에 사용됩니다.

-nostdlib
    링크시에, 표준의 시스템 프로그램 라이브러리와 스타트 업 파일을 사용하지 않습니다. 지정한 파일만이 링커에게 건네집니다.

-static
    다이나믹 링크를 서포트하는 시스템에 대해, 이 옵션은 공유 프로그램 라이브러리와의 링크를 억제합니다. 그 이외의 시스템에서는 이 옵션은 의미를 가지지 않습니다.

-shared
    다른 오브젝트와 링크 해 실행 가능 프로그램을 형성 할 수 있는 공유 오브젝트를 생성합니다. 매우 소수의 시스템에서만, 이 옵션은 서포트되고 (이)라고 있습니다.

-symbolic
    공유 오브젝트를 구축할 때에, 글로벌인 심볼에의 참조를 바인드 합니다. 모든 해결할 수 없었던 참조에 대해서 경고를 줍니다 (다만 링크 에디터 옵션 `-Xlinker -z -Xlinker defs'에 의해 이것을 무효화했을 경우를 제외합니다). 매우 소수의 시스템에서만, 이 옵션은 서포트되고 있습니다.

-Xlinker option
    옵션 option (을)를 링커에 대해서 건네줍니다. 링커에 건네주는 시스템 고유의 옵션이, GNU CC 를 이해할 수 없는 것으로 있는 경우에 이용할 수 있습니다.

    인수를 가진 옵션을 건네주고 싶은 경우는, `-Xlinker '를 2 번 사용하면 가능합니다. 1 번째로 옵션을 건네주어, 2 번째로 인수를 건네줍니다. 예를 들면 `-assert definitions'를 건네주려면 , `-Xlinker -assert -Xlinker definitions'와 같이 기술하면 가능합니다. `-Xlinker "-assert definitions"'와 같이 지정했을 경우는 정상적으로 동작하지 않습니다. 왜냐하면 이것은, 캐릭터 라인전 몸을 1 개의 인수로서 건네주어 버려, 링커의 기대하는 형식과 달라 섬 로부터입니다.

-Wl,option
    옵션 option (을)를 링커에 건네줍니다. option 하지만 콤마를 포함한 경우는, 그러한 콤마로 복수의 옵션으로서 분할됩니다.

-u symbol
    심볼 symbol 하지만 미정도리인것 같이 행동합니다. 이것은 강제적으로 이 심볼을 정의하고 있고 프로그램 라이브러리 모듈을 링크 하기 위해서 사용합니다. `-u '는 다른 심볼에 대해서 여러 차례 사용할 수가 있습니다. 이것에 (이)라고, 한층 더 많은 프로그램 라이브러리 모듈을 읽어들이게 할 수가 있습니다.

디렉토리 옵션
이러한 옵션은, 헤더 파일, 프로그램 라이브러리, 컴파일러의 일부를 검 색 하는 디렉토리를 지정하기 위해서 사용됩니다.

-Idir
    디렉토리 dir (을)를, 인클루드 파일의 검색하는 디렉토리의 리스트중에 추가합니다.

-I- `-I- '옵션지정전에 `-I ' 옵션에 의해 지정된 모든 디렉토리는, `#include "file "'의 형식에 의해서만 검색됩니다. 이러한 디렉토리는 `#include <file >'에 따라서는 검색되지 않습니다.

    ` -I- '옵션지정 후에 `-I '로 지정한 디렉토리는, 모든 `#include ' 인스트럭션에 의해 검색됩니다. (통상은 모든 `-I '로 지정된 디렉토리는 이 방법으로 검색됩니다. )

    이것에 가세해 `-I- '옵션은, 커런트 디렉토리 (현재의 입력 파일이 존재한다 디렉토리)가 `#include "file "'에 대한 최초의 검색 대상이 되는 것을 억제합니다. `-I- '에 의한 이 효과를 덧쓰기하는 방법은 없습니다. `-I. '를 지정하는 것에 의해, 컴파일러가 기동된 디렉토리가 검색 되는 것을 지정하는 것은 가능합니다. 이것은 프리프로세서가 행한다 디폴트의 동작과는 다릅니다만, 대부분은 이것으로 충분합니다.

    `-I- '는, 헤더 파일의 검색에 표준의 시스템 디렉토리를 사용하는 것을 억제 하는 것은 아닙니다. 따라서, `-I- '와 `-nostdinc '는 독립입니다.

-Ldir
    디렉토리 dir (을)를 `-l '에 의한 검색이 행해지는 디렉토리의 리스트에 가세합니다.

-Bprefix
    이 옵션은 컴파일러 자신의 실행 형식, 프로그램 라이브러리, 데이터 파일의 검색 장소를 지정합니다.

    컴파일러 드라이버는 서브 프로그램 `cpp ', `cc1 ' (또는 C++ 에 대해 `cc1plus '), `as ', 그리고 `ld '를 1 개(살), 혹은 그 이상 기동합니다. 컴파일러 드라이버는, 기동하는 프로그램의 프레픽스로서 prefix 에 `machine / version / '를 붙인 것과 붙이지 않는 쌍방을 사용합니다.

    컴파일러 드라이버는 각 서브 프로그램의 기동시에, `-B '프레픽스의 지정이 있는 경우는, 그것을 최초로 이용합니다. 만약 그 이름이 발견되지 않으면, 또는 `-B ' 하지만 지정되어 있지 않으면, 드라이버는 2 개의 표준 프레픽스 `/usr/lib/gcc/ '와 `/usr/local/lib/gcc-lib/ '를 시험합니다. 이 어느 쪽에도 발견되지 않으면, 컴파일러 드라이버는, 환경 변수 `PATH '의 디렉토리 리스트를 이용해, 그 프로그램명을 검색합니다.

    런타임 서포트 파일 `libgcc.a '도, 필요하면 `-B '프레픽스를 이용해 검색됩니다. 만약 거기에 발견되지 않으면, 전기 2 개의 표준 프레픽스가 시도됩니다만, 그래서 끝입니다. 이 경우는 링크의 것 대상에서 제외해집니다. 대부분의 경우, 또 대부분의 머신에서는, `libgcc.a '는 실제로는 필요하지는 않습니다.

    이것과 같은 효과를, 환경 변수 GCC_EXEC_PREFIX 에 의해도 얻을 수 있습니다. 만약 이 환경 변수가 정의되고 있으면, 와 의 값이 프레픽스로서와 같이 사용됩니다. 만약 `-B '옵션과 GCC_EXEC_PREFIX 환경 변수의 쌍방이 존재했을 경우는, `-B '옵션이 최초로 사용되어 환경 변수는 다음에 사용됩니다.

경고 옵션
경고는, 본질적으로 실수인 것은 아닙니다만, 위험한 구조를 보고하거나 에러가 있을지도 모르는 것 같은 부분을 시사하는 진단 메세지입니다.

이하의 옵션은, GNU CC 가 생성하는 경고의 양과 종류를 제어합니다.

-fsyntax-only
    코드의 문법 에러를 체크합니다만, 일절 출력은 실시하지 않습니다.

-w  모든 경고 메세지를 억제합니다.

-Wno-import
    #import 의 이용에 의한 경고 메세지를 억제합니다.

-pedantic
    엄밀한 ANSI 표준 C 언어로 규정하고 있는 모든 경고를 표시해, 용서되지 않은 확장을 사용한 프로그램을 모두 거부합니다.

    정당한 ANSI 표준 C 프로그램은, 이 옵션의 유무에 관련되지 않고 컴파일 할 수 있어야 합니다 (가장, 그저 불과입니다만 `-ansi '를 필요로 하는 것은 있습니다). 그러나, 이 옵션을 사용하지 않는 경우, GNU 확장이나 전통적인 C 의 특징도, 이것에 가세해 서포트됩니다. 이 옵션 (을)를 사용하면, 그것들은 거절됩니다. 이 옵션을 사용하는 이유는 없습니다만, 조건이 있는 사람들을 만족시키기 위해서(때문에) 마셔 존재하고 있습니다.

    `-pedantic '는, 시작과 끝이 `__ '인 대체 키워드의 사용에 대해서는, 경고하지 않습니다. (와)과 같이 __extension__ 에 계속되는 표현에 대해서도 경고하지 않습니다. 그러나, 시스템 헤더 파일만 하지만 이 샛길을 사용해야 하고, 응용 프로그램은 이것을 피하고 합니다.

-pedantic-errors
    `-pedantic '와 닮아 있습니다만, 경고의 대신에 에러를 냅니다.

-W  이하의 이벤트에 대해서, 특별한 경고 메세지를 표시합니다.

•   volatile 가 아닌 자동 변수가 longjmp 의 호출에 의해 변경될 수 있는 경우입니다. 이러한 경고는, 최적화 컴파일 의 때만 문제가 될 수 있습니다.

    컴파일러는 setjmp 의 호출만을 보고 있습니다. 컴파일러는, 어디서 longjmp 하지만 불려 갈까를 알 수 없습니다. 실제로는, 시그널 핸들러는 코드중의 임의의 장소에서 longjmp (을)를 호출할 수가 있습니다. 따라서, 실제로는 longjmp 에의 호출이 위험한 부분으로부터는 행해지지 않기 위해(때문에) 문제가 없는 프 로그 램이어도, 경고가 발 다투어지게 됩니다.

•   함수가, 값을 수반해 리턴 하는 경우와 값을 수반하지 않고 리턴 하는 경우의 양쪽 모두 하지만 일어날 수 있는 경우입니다. (함수의 최후를 빠져 가는 것은, 값을 수반하지 않고 함수를 리턴 한다고 보입니다. ) 예를 들면, 다음의 함수가 이 종류의 경고를 일으킵니다.

    foo (a)
    {
      if (a > 0)
        return a;
    }

    어느 함수 (abort (이)나 longjmp (을)를 포함한다) 하지만 결코 리턴 하지 않는다고 하는 것을 GNU CC 를 이해할 수 없기 위해(때문에), 가짜의 경고 하지만 발생할지도 모릅니다.

•   식문 (expression-statement) 또는 콤마식의 왼쪽 부분이 일절의 부작용을 포함하지 않는 경우입니다. 경고를 억제하려면 , 사용하지 않는 식을 void 에 캐스트 해 주세요. 예를 들면 `x[i, j] '라고 하는 식은 경고됩니다만, `x[(void) i, j] '는 경고되지 않습니다.

•   부호 없음의 값이 0 으로 `> '또는 `<= '로 비교되는 경우입니다.

-Wimplicit-int
    형태를 지정하고 있지 않는 선언에 대해서 경고합니다.

-Wimplicit-function-declaration
    선언에 앞서 이용된 함수에 대해서 경고합니다.

-Wimplicit
    -Wimplicit-int 및 -Wimplicit-function-declaration 와 같습니다.

-Wmain
    main 함수가 의심스러운 형태로 선언 혹은 정의되고 있는 경우에 경고합니다. 통상, main 는 외부 링키지를 가져, int (을)를 돌려주어, 0 개 또는 2 개의 인수를 취하는 함수입니다.

-Wreturn-type
    함수의 반환값의 형태가, 디폴트인 int 에 정의되었을 때에 항상 경고합니다. 또, 반환값의 형태가 void (이)가 아닌 함수내에, 반환값이 없는 return 문장이 있는 경우에도 항상 경고합니다.

-Wunused
    로컬 변수가 선언되었음에도 관련되지 않고 사용되어 있지 않은 경우, 정적으로 선언함 함수의 실체가 정의되어 있지 않은 경우, 계산 결과가 분명하게 이용되어 있지 않은 경우에 항상 경고합니다.

-Wswitch
    switch 문장이 인덱스로서 열거형을 취하고 있을 때, 그 열거형중의 몇 개 인가의 값에 대한 case 하지만 빠져 있는 경우에 항상 경고합니다. (default label가 존재하는 경우, 이 경고는 나오지 않습니다. ) 이 옵션을 사용했을 경우 에는, 열거형의 범위를 넘은 case label도, 항상 경고됩니다.

-Wcomment
    코멘트의 개시 캐릭터 라인 `/* '가 코멘트중에 나타났을 때에 항상 경고합니다.

-Wtrigraphs
    트라이 그래프의 출현을 항상 경고합니다 (트라이 그래프가 사용 가능하다라고 가정합니다).

-Wformat
    printf , scanf 등에의 호출에 대해서, 주어진 인수가, 포맷 캐릭터 라인의 손가락 정을 만족하는 형태를 가지고 있는지를 검사합니다.

-Wchar-subscripts
    배열의 첨자의 형태가 char 에서 만났을 경우에 경고합니다. 이것은 자주 있는 실수 아래입니다. 몇개의 머신에 대해 이 형태가 부호 첨부인 것을, 프로그래머는 자주 잊어 버립니다.

-Wuninitialized
    초기화되어 있지 않은 자동 변수가 사용되고 있습니다.

    이러한 경고는, 최적화 컴파일을 행할 때 마셔 발생합니다. 왜냐하면, 컴파일러는 최적화를 행할 때에게만 데이터 플로우(flow) 정보를 필요로 하기 때문입니다. 만약 `-O '를 지정하지 않았던 경우는, 이 경고를 얻을 수 없습니다.

    이러한 경고는, 레지스터 할당의 대상이 된 변수에 대한 보고 발생합니다. 따라서, volatile 이다고 선언된 변수나, 주소상에 할당할 수 있었던 변수, 사이즈가 1, 2, 4, 8 바이트 이외의 변수에 관해서는 이러한 경고는 발생하지 않습니다. 게다가 구조체, 공용체, 배열에 대해서는, 비록 그것들이 레지스터에 할당할 수 있었다고 해도, 이러한 경고는 발생하지 않습니다.

    어느 변수에 의해 계산된 값이 결국 사용되지 않는 것 같은 변수에 대해서는, 모두의 경고가 생기지 않는 것에 주의해 주세요. 이러한 계산은, 경고가 표시되기 전에 데이터 플로우(flow) 해석에 의해 삭제됩니다.

    이러한 경고를 옵션으로 한 이유의 하나는, GNU CC 가 아직 그다지 영리하지 않아, 어느 코드가 일견 실수를 포함하는것 같이 보여도 그것은 실은 올바른 것일지도 모르는, 그렇다고 하는 것을 GNU CC 를 이해할 수 없는, 이라는 것입니다. 여기에 그 1 개의 예를 듭니다.

    {
      int x;
      switch (y)
        {
        case 1: x = 1;
          break;
        case 2: x = 4;
          break;
        case 3: x = 5;
        }
      foo (x);
    }

    만약 y 의 값이 항상 1, 2 혹은 3 인 한은 x (은)는 항상 초기화됩니다. 그러나 GNU CC 는 이것을 알 수 없습니다. 이제(벌써) 1 개의 일반 적인 예를 듭니다.

    {
      int save_y;
      if (change_y) save_y = y, y = new_y;
      . . .
      if (change_y) y = save_y;
    }

    이것은 버그를 포함하지 않습니다. 왜냐하면 save_y (은)는, 그 값이 설정되었을 때 마셔 사용되기 때문입니다.

    몇개의 가짜의 경고는, 사용하고 있는 결코 리턴 하지 않는 함수 모두에 대해서 volatile (이)라고 선언하는 것에 의해 막는 것이 가능합니다.

-Wparentheses
    어느 특정의 문맥중에서 괄호가 생략 되고 있었을 경우에 경고합니다.

-Wtemplate-debugging
    C++ 프로그램에 대해 템플릿을 사용하고 있을 때에, 디버그가 완전하게 가능하지 않은 경우를 경고합니다 (C++ 마셔).

-Wall
    모든 우에에 둔 `-W '옵션을 결합한 것입니다. 이러한 옵션은 모두, 비록 매크로와의 편성 에서 만나도, 피하는 편이 좋으면 우리가 추천 하는 용법이나, 간단하게 피할 수가 있으면(자) 우리가 믿고 있는 용법에 관한 것입니다.

나머지의 `-W. . . '옵션은 `-Wall ' 에 따라서는 암묵중으로 지정되지 않습니다. 왜냐하면 이것들은, 크리궶프 로그 램에 대해도, 어느 상황에 있어 사용하는 것이 타당하다라고 우리가 생각하는 구조에 대한 경고를 행하는 옵션이기 때문입니다.

-Wtraditional
    전통적인 C 와 ANSI C 에 대해 다른 행동을 하는 특정의 구조에 대해 경찰 고 합니다.

•   매크로 인수가 매크로 본체내의 캐릭터 라인 정수에 나타나는 것입니다. 이것은, 전통적인 C 에 두어 그 인수로 치환했습니다만, ANSI C 에 대해 정수의 일부로서 급원

•   블록내에서 외부 선언이다고 선언되어 한편 그 블록의 종단의 다음에 사용되고 있는 함수입니다.

•   오퍼랜드로서 long 형태를 취하는 switch 문장입니다.

-Wshadow
    로컬 변수가 다른 로컬 변수를 숨기고 있을 때에 항상 경고합니다.

-Wid-clash-len
    2 개(살)의 완전히 다른 식별자의 최초의 len 캐릭터가 일치했을 때에 경고합니다. 이것은 어떤 종류의 구식인 아줌마나씨컴파일러로 컴파일 될 수 있는 프로그램을 만드는 경우에 도움이 됩니다.

-Wpointer-arith
    함수형이나 void 의 “사이즈” 에 의존하는 것을 모두 경고합니다. GNU C 는 이것들에 대해서, 사이즈 1 을 할당하고 있습니다. 이것은 void * 포인터와 함수에의 포인터에 있어서의 계산을 간편하게 하기 (위해)때문입니다.

-Wcast-qual
    포인터가, 형태 수식자가 삭제되도록(듯이) 캐스트 되는 모든 경우에 경고합니다. 예를 들면 const char * (을)를 보통 char * 에 캐스트 했을 경우에 경고가 이루어집니다.

-Wcast-align
    포인터의 캐스트에 있어, 그 타겟으로 요구되는 경계 조건이 커지는 것 같은 캐스트를 모두 경고합니다. 예를 들면 char * 하지만 int * (으)로 캐스트 되면(자), 정수가 2, 혹은 4 바이트 경계에서 밖에 액세스로 기내 머신에 대해 경고가 발 다투어집니다.

-Wwrite-strings
    캐릭터 정수에 대해서, 형태 const char[ length ] (을)를 주어 비-const 의 char * 포인터에의 주소의 카피에 대해서 경고하도록(듯이) 합니다. 이 경고는, 선언과 prototype에 대해 const 의 사용을 매우 주의 깊게 행해도 좋음 하면, 캐릭터 라인 정수에 기입을 할 것 같은 코드를 컴파일시에 발견하는 것을 돕습니다만, 그렇지 않은 경우는 유해 무익한 지정입니다. 이것이, 우리가 이 경고를 `-Wall '의 리퀘스트에 포함하지 않았던 이유입니다.

-Wconversion
    같은 인수가 주어졌을 때에, prototype가 존재하는 경우와 prototype가 존재하지 않는 경우로, 다른 형태 변환을 일으키는 경우에 대해 경고합니다. 이것은 고정 소수점으로부터 부동 소수점에의 변환이나 그 역, 디폴트의 동작과 다른 고정 소수점 인수의 폭이나 부호의 유무의 변환이 포함됩니다.

-Waggregate-return
    구조체나 공용체를 돌려주는 함수를 정의했을 경우나, 그것들을 호출하는 모든 경우에 경고합니다. (배열을 돌려줄 수가 있는 언어에 대해도, 이것은 경고를 일으킵니다. )

-Wstrict-prototypes
    인수의 형태를 지정하지 않고 함수를 선언, 혹은 정의했을 경우에 경고합니다. (이전에 인수의 형태를 지정한 선언이 존재하는 경우에는, 구식의 함수 선언에 대해서는 경고를 하지 않습니다. )

-Wmissing-declarations
    글로벌인 함수를, 그 전에 prototype 선언을 하지 않고 정의했을 경우에 경고합니다. 이 경고는, 비록 그 정의 자신이 prototype를 포함하고 있었다고 해도 발생합니다. 이 경고의 목적은, 헤더 파일중에 글로벌 함수의 정의를 잊는 와 (을)를 막는 것에 있습니다.

-Wredundant-decls
    동일 스코프중에서 여러 차례, 동일 대상을 선언했을 경우에, 비록 그것이 정당해 아무것도 변화시키지 않는 경우여도 경고합니다.

-Wnested-externs
    함수내에서 extern 선언을 행했을 경우에 경고합니다.

-Wenum-clash
    다른 열거형의 사이에 변환을 행했을 때에 경고합니다 (C++ 마셔).

-Wlong-long
    long long 형태가 사용되고 있는 경우에 경고합니다. 이것은 디폴트입니다. 이 경고 메세지를 억제하려면 `-Wno-long-long '플래그를 이용해 주세요. 플래그 `-Wlong-long ' 및 `-Wno-long-long '는, 플래그 `-pedantic '사용시만 고려됩니다.

-Woverloaded-virtual
    (C++ 마셔. ) 도출 클래스에 있어, 가상 함수의 정의는 base class로 정의된 가상 함수의 형태 의 기술과 일치하고 있지 않으면 안됩니다. 이 옵션을 사용하는 것에 (이)라고, base class에 있어서의 가상 함수와 동일한 이름을 가져, base class의 어떠한 가상 함수와도 다른 형태의 기술을 가지는 함수에 대해서 경고를 합니다. 이것에 따라서, 도출 클래스가 가상 함수를 정의하려고 해 실패하는 경우를 경고하는 와 (이)가 할 수 있습니다.

-Winline
    함수가 인 라인 선언되고 있다, 혹은 -finline-functions 옵션이 주어지고 있는 경우에, 함수를 인 라인 전개할 수 없었던 경우 에 경고합니다.

-Werror
    경고를 에러로서 취급합니다. 경고의 뒤에 컴파일을 중단합니다.

디버그 옵션
GNU CC 는, 유저의 프로그램이나 GCC 의 쌍방을 디버그 하기 위해서, 많은 옵션을 갖추고 있습니다.

-g
     operating system의 네이티브의 포맷 (stabs, COFF, XCOFF, DWARF)로 디버그 정보를 생성합니다. GDB 는 이 디버그 정보에 기있고 (이)라고 동작할 수가 있습니다.

    stabs 포맷을 사용하는 대부분의 시스템에 대해서는, `-g '를 지정하면(자), GDB 만이 사용할 수 있는 여분의 디버그 정보가 사용 가능하게 됩니다. 이 특별한 정보는 GDB 에 대해서는 보다 좋은 디버그를 행하는 것을 가능 (으)로 합니다만, 아마 다른 디버거에 대해서는 크래쉬, 혹은 그 프로그램을 읽을 수 없게 해 버립니다. 이 특별한 정보의 생성을 제어하기 위해서는 `-gstabs+ ', `-gstabs ', `-gxcoff+ ', `-gxcoff ', `-gdwarf+ ', `-gdwarf ' (을)를 사용해 주세요 (아래와 같이 참조).

    다른 많은 C 컴파일러와 달리, GNU CC 는 `-g '를 `-O '와 함께 사용하는 것을 허락하고 있습니다. 최적화된 코드가 통과하는 지름길은, 때로는 놀랄 만한 결과를 낳을지도 모릅니다. 정의했음이 분명한 변수가 존재하지 않기도 하고, 제어의 흐름이 예상도 하지 않았던 장소로 이동하거나 결과가 정수로 아는 계산이나, 결과가 벌써 수중에 있는 문장은 실행되지 않게 되어, 어느 문장이 루프의 밖에 내쫓아져 다른 장소에서 실행 되거나 합니다.

    거기에도 관련되지 않고, 이 옵션은 최적화된 출력의 디버그를 가능으로 해 (이)라고 있습니다. 이것에 의해, 버그를 포함할지도 모르는 프로그램에 대해서 오프티마이자를 사용할 수가 있게 됩니다.

이하의 옵션은, GNU CC 를 1 개 이상의 디버그 포맷을 급 있도록(듯이) 작성되어 있는 경우에 유익합니다.

-ggdb
    (만약 서포트되고 있으면) 네이티브의 포맷으로 디버그 정보를 생성 합니다. 이것은 가능한 한의 모든 GDB 확장을 포함합니다.

-gstabs
    (만약 서포트되고 있으면) stabs 포맷으로 디버그 정보를 생성합니다. 다만 GDB 확장은 포함하지 않습니다. 이 포맷은 대부분의 BSD 시스템상 의 DBX 로 이용할 수 있는 포맷입니다.

-gstabs+
    (만약 서포트되고 있으면) stabs 포맷으로 디버그 정보를 생성합니다. 다만 GNU 디버거 (GDB)로 밖에 이해할 수 없는 GNU 확장을 사용합니다. 이 확장을 사용하면(자), 다른 디버거에서는, 크래쉬나 프로그램을 읽을 수 없게 되는 등의 영향이 아마 나옵니다.

-gcoff
    (서포트되고 있으면) COFF 포맷으로 디버그 정보를 생성합니다. 이것은, System V Release 4 보다 전의 대부분의 System V 상의 SDB 로 이용할 수 있는 포맷입니다.

-gxcoff
    (서포트되고 있으면) XCOFF 포맷으로 디버그 정보를 생성합니다. 와 는 IBM RS/6000 시스템에 대해 DBX 디버거에 의해 사용된다 포맷입니다.

-gxcoff+
    (만약 서포트되고 있으면) XCOFF 포맷으로 디버그 정보의 생성을 행 있습니다. 다만, GNU 디버거 (GDB)에 의해서만 이해될 수 있는 GNU 확장을 사 용 합니다. 이러한 확장을 사용하면(자), 다른 디버거에 대해서는 크래쉬나 프 로그 램을 읽어내 불능으로 하는 등의 영향을 미칠 수 있습니다.

-gdwarf
    (만약 서포트되고 있으면) DWARF 포맷으로 디버그 정보의 생성을 행 있습니다. 이것은 대부분의 System V Release 4 시스템에 대해 SDB 에 (이)라고 사용되는 형식입니다.

-gdwarf+
    (만약 서포트되고 있으면) DAWRF 포맷으로 디버그 정보의 생성을 행 있습니다. 다만, GNU 디버거 (GDB)에 의해서만 이해될 수 있는 GNU 확장을 사 용 합니다. 이러한 확장을 사용하면(자), 다른 디버거에 대해서는 크래쉬나 프로그램을 읽어내 불능으로 하는 등의 영향을 미칠 수 있습니다.

-glevel
-ggdblevel
-gstabslevel
-gcofflevel -gxcofflevel

-gdwarflevel
    디버그 정보를 요구합니다만, 동시에 level 에 의해 어느 정도의 정보가 필요한가를 지정합니다. 디폴트의 레벨은 2 입니다.

    레벨 1 은, 디버그를 예정하지 않는 프로그램의 부분에 대해서 백 트레이스 (을)를 생성하기에 충분한 최저한의 정보를 생성합니다. 이것은 함수와 외부 변수의 기술 (을)를 포함합니다만, 로컬 변수나 행 번호에 관한 정보는 포함하지 않습니다.

    레벨 3 은 프로그램에 포함되는 모든 매크로 정의등이 특별한 정보를 포함합니다. 몇개의 디버거는 `-g3 '의 사용에 의해 매크로의 전개를 서포트합니다.

-p  프로그램 prof 에 의해 사용되는 프로파일 정보를 기입하는 특별한 코드를 생성합니다.

-pg 프로그램 gprof 에 의해 사용되는 프로파일 정보를 기입하는 특별한 코드를 생성합니다.

-a  기본 블록의 프로파일 정보를 기입하는 특별한 코드를 생성합니다. 이것은 각각의 블록이 몇회 실행되었는지를 기록합니다. 이 데이터는 tcov (와)과 같은 프로그램에 의해 해석됩니다. 다만, 이 데이터 포맷은 tcov 하지만 기대하는 것과는 다릅니다. 최종적으로는, GNU gprof 하지만 처리할 수 있도록(듯이) 확장되어야 합니다.

-ax 파일 `bb.in'로부터 기본 블록 프로파일 파라미터를 읽어내, 파일 `bb.out'에 프로파일 결과를 써내기 위한, 특별한 코드를 생성합니다. `bb.in'는 함수의 리스트를 보관 유지하고 있습니다. 이 리스트에 포함되는 함수에 들어가면(자), 프로 파일링이 온이 됩니다. 최외측 함수를 빠지면(자), 프로 파일링은 오프가 됩니다. 함수명이 `-'로 시작되어 있는 경우, 그 함수는 프로파일 대상외에 됩니다. 만약 함수명이 유일하게 정해지지 않는 경우는, `/path/filename.d:functionname'와 기술하는 것으로 이것들을 구별할 수 있습니다. `bb.out'에는, 몇개의 이용 가능한 함수가 리스트 됩니다. 특별한 의미를 가지는 함수가 4 개 있습니다: `__bb_jumps__'는 점프 빈도를 `bb.out'에 써냅니다. `__bb_trace__'는 기본 블록열을 `gzip'에 파이프 해, 파일 `bbtrace.gz'에 써냅니다. `__bb_hidecall__'는 call 인스트럭션을 트레이스로부터 제외합니다. `__bb_showret__'는 return 인스트럭션을 트레이스에 포함하도록(듯이) 합니다.

-dletters
    컴파일중의 letters 그리고 지정되는 타이밍에, 디버그용의 덤프를 생성하도록(듯이) 지시합니다. 이것은 컴파일러를 디버그 하기 위해서 사용됩니다. 대부분의 덤프의 파일 이름은 원시 파일명에 1 단어를 연결한 것이 됩니다. (예를 들면, `foo.c.rtl '나 `foo.c.jump ' 등입니다).

-dM 모든 매크로 정의를 덤프 해, 프리프로세스 종료시에 출력에 써냅니다. 그 외에는 아무것도 써내지 않습니다.

-dN 모든 매크로명을 덤프 해, 프리프로세스 종료시에 출력에 써냅니다.

-dD 모든 매크로 정의를 프리프로세스 종료시에 통상의 출력에 가세해 덤프 합니다.

-dy 퍼스중에 디버그 정보를 표준 에러 출력에 덤프 합니다.

-dr RTL 생성 후에 `file .rtl '에 대해서 덤프 합니다.

-dx 함수를 컴파일 하는 대신에, RTL 를 생성할 뿐의 처리를 실시합니다. 통상은 `r '와 함께 사용됩니다.

-dj 최초의 점프 최적화의 뒤에, `file .jump '에 대해서 덤프 합니다.

-ds 공통 부분식 삭제 (자주 공통 부분식 삭제에 계속되는 점프 최적화도 포함합니다)의 종료 때에 `file .cse '에 대해서 덤프 합니다.

-dL 루프 최적화 종료시에 `file .loop '에 대해서 덤프 합니다.

-dt 제 2 공통 부분식 삭제 단계 (자주 공통 부분식 삭제에 계속되는 점프 최적화도 포함합니다)의 종료시에, `file .cse2 '에 대해서 덤프 합니다.

-df 플로우(flow) 해석 종료후에, `file .flow '에 대해서 덤프 합니다.

-dc 인스트럭션 콤비네이션 종료시에 `file .combine '에 대해서 덤프 합니다.

-dS 제 1 인스트럭션 스케줄링 단계 종료시에 `file .sched '에 대해서 덤프 합니다.

-dl 로컬 레지스터 할당 종료시에 `file .lreg '에 대해서 덤프 합니다.

-dg 글로벌 레지스터 할당 종료시에 `file .greg '에 대해서 덤프 합니다.

-dR 제 2 인스트럭션 스케줄링 단계 종료시에 `file .sched2 '에 대해서 덤프 합니다.

-dJ 최종 점프 최적화 종료시에 `file .jump2 '에 대해서 덤프 합니다.

-dd 지연 분기 스케줄링 종료시에 `file .dbr '에 대해서 덤프 합니다.

-dk 레지스터로부터 스택에의 전환 종료시에 `file .stack '에 대해서 덤프 합니다.

-da 이상의 모든 덤프를 생성합니다.

-dm 처리의 종료시에, 메모리 사용에 관한 통계 정보를 표준 에러 출력에 출력합니다.

-dp 어떠한 패턴이나 선택사항이 사용되었는지를 나타내는 코멘트를 어셈블러 출력 안의 코멘트로 해설합니다.

-fpretend-float
    크로스 컴파일러로 처리를 행할 때에, 호스트 머신과 같은 부동 소수점 포맷 (을)를 타겟 머신이 가지는것 같이 행동하게 합니다. 이것은 부동 소수점정 수가 잘못한 출력을 일으킵니다만, 실제의 인스트럭션열은 아마 GNU CC 를 타겟 머신으로 기동했을 경우와 같은 것되겠지요.

-save-temps
    통상의 “한때” 중간 파일을 소거하지 않고 보존합니다. 이것들은 커런트 디렉토리에 놓여져 원시 파일에 근거한 이름을 붙일 수 있습니다. 따라서, `foo.c '를 `-c -save-temps '를 사용해 컴파일 했을 경우는, `foo.cpp ', `foo.s '가, `foo.o '와 같게 생성됩니다.

-print-libgcc-file-name=library
    프로그램 라이브러리 파일 `library '의 완전한 절대명을 표시합니다. 이 파일은 링크때에만 사용되어 그 이외의 기능은 없습니다. 이 옵션이 지정되었을 경우는, GNU CC 는 컴파일이나 링크를 아무것도 행하지 않고, 다만 파일명을 표시할 뿐입니다.

-print-libgcc-file-name
    `-print-file-name=libgcc.a '와 같습니다.

-print-prog-name=program
    `-print-file-name '와 닮아 있습니다만, `cpp'와 같은 program 를 검색합니다.

최적화 옵션
이러한 옵션은 여러가지 종류의 최적화 처리를 제어합니다.

-O

-O1 최적화를 실시합니다. 최적화 컴파일은 약간 약간 긴 처리 시간과 큰 함수에 대 하는 매우 많은 메모리를 필요로 합니다.

    `-O '가 지정되지 않았던 경우는, 컴파일러의 목표는 컴파일의 코스트를 저감 하는 것이나, 목적의 결과를 얻기 위한 디버그를 가능으로 하는 것에 놓여지고 정지시키는 것에 의해, 임의의 변수에 신해 있고 값을 대입하거나 프로그램 카운터를 다른 문장으로 변경하는 것을 가능으로 해, 그 원시 코드에 프로그래머가 바라는 올바른 결과를 얻는 것을 가능하게 합니다.

    `-O '를 지정하지 않았던 경우는, register (이)라고 선언한 변수만이 레지스터로 할당할 수 있습니다. 컴파일의 결과와 해 얻을 수 있는 코드는, PCC 를 `-O '없음으로 사용했을 경우와 비교해 약간 좋지 않는 것이 됩니다.

    `-O '가 지정되면(자), 컴파일러는 코드의 사이즈와 실행 시간을 감소시킨다 일을 시도합니다.

    `-O '를 지정하는 것에 의해, `-fthread-jumps '와 `-fdefer-pop '의 플래그가 지정됩니다. 지연 슬롯을 가지는 머신에서는 `-fdelayed-branch '가 지정됩니다. 프레임 포인터를 사용하지 않는 디버그를 서포트하고 있다 머신에서는, `-fomit-frame-pointer '도 지정됩니다. 머신에 따라서는 한층 더 그 외의 플래그가 지정되는 일도 있습니다.

-O2 한층 더 최적화를 실시합니다. 서포트되고 있는 최적화 수단 가운데, 공간과 속도의 트레이드 오프를 포함하지 않는 것은 대부분의 모두 사용됩니다. 예를 들면 루프의 안 롤링이나 함수의 인 라인화는 행해지지 않습니다. -O (와)과 비교해, 이 옵션은 컴파일 시간과 생성 코드의 성능의 쌍방을 증가 시킵니다.

-O3 새로운 최적화를 실시합니다. 이것은 -O2 하지만 실시하는 모든 최적화 수단에 가세해 -finline-functions 도 유효하게 합니다.

-Os 사이즈 우선으로 최적화합니다. 보통, 코드를 증대시킬리가 없는 모든 -O2 최적화가 유효하게 됩니다. 더욱, 코드 사이즈를 줄이도록(듯이) 설계된 최적화도 실시합니다.

-O0 최적화를 실시하지 않습니다.

    복수의 -O 옵션을 지정했을 경우는, 레벨 번호의 유무에 관련되지 않고, 마지막에 지정했다 물건이 유효하게 됩니다.

`-f flag '의 형식을 가진 옵션은, 머신 독립의 플래그입니다. 대부분의 플래그는 유효 형식과 무효 형식의 쌍방을 가지고 있습니다. `-ffoo '의 무효 형식은 `-fno-foo '입니다. 이하의 리스트에서는, 디폴트가 아닌 (분)편의 형식만을 나타냅니다. 이것에 대해서 `no- '를 삭제한다, 혹은 추가하는 것에 의해 쌍방의 형식을 생성하는 것 하지만 가능합니다.

-ffloat-store
    부동 소수점 변수를 레지스터에 격납하지 않습니다. 이 옵션은 68000 과 같이 (68881 의) 부동 소수점 레지스터가 double 보다 높은 정밀도를 가지고 있다고 생각되는 머신에 대해, 바라지 않는 초과 정밀도를 억제하는 것을 가능하게 합니다.

    대부분의 프로그램에 대해서는, 초과 정밀도는 단지 좋은 결과를 낳을 뿐입니다만, 몇개의 프로그램은 정확한 IEEE 의 부동 소수점 포맷 정의에 의 간직하고 있습니다. 이러한 프로그램에 대해서 `-ffloat-store '를 사용합니다.

-fmemoize-lookups

-fsave-memoized
    컴파일을 고속으로 행하기 위해서(때문에), 휴리스틱스를 사용합니다 (C++ 마셔). 이러한 휴리스틱스는 디폴트에서는 유효하게 되어 있고 선. 왜냐하면, 이것은 어떤 종류의 입력 파일 밖에 효과가 없고, 그 외의 파일에서는 오히려 컴파일이 저속이 되기 때문입니다.

    최초로, 컴파일러는 멤버 함수에의 호출해 (혹은 데이터 멤버에의 참 조)를 구축합니다. 이것은 (1) 어느 클래스에서 그 이름의 멤버 함수가 실장함 라고 있을까를 결정해, (2) 어느 멤버 함수에의 호출인가 하는 문제 (이것은 어느 종류의 형태 변환이 필요한가 하는 결정도 포함합니다)(을)를 해결해, (3) 호출 측에 대하는 그 함수의 가시성을 검사한다고 하는 작업을 행할 필요가 있습니다. 이것들은 모두, 컴파일을 보다 저속으로 해 버립니다. 통상은, 그 멤버 함수에의 2 번째의 호출이 일어났을 경우도, 이 긴 처리가 또 행해지고 것이 됩니다. 이것은 다음과 같은 코드

    cout << "This " << p << " has " << n << " legs.\n";

    (은)는, 이러한 3 개의 순서를 6 회 반복한다고 하는 것을 의미합니다. 이것에 대해 (이)라고, 소프트웨어 캐쉬를 사용하면(자), 그 캐쉬에의“히트 ”는, 코스트를 극적으로 저감 하는 것이 기대할 수 있습니다. 불행한 일로, 캐쉬 의 도입에 따라서 다른 레이어의 기구를 실장하는 것이 필요해, 그것 자신의 오버헤드가 생겨 버립니다. `-fmemoize-lookups '는 이 소프트웨어 캐쉬를 유효하게 합니다.

    멤버와 멤버 함수에의 액세스 특권 (가시성)은 있는 함수에 있어서의 문맥 (와)과 다른 함수에 있어서의 것과는 다르므로, g++ (은)는 캐쉬를 플래시 하지 않으면 안됩니다. `-fmemoize-lookups '플래그를 사용하면(자), 모든 함수를 컴파일 할 때마다 매회 캐쉬를 플래시 합니다. `-fsave-memoized '플래그는 동일한 소프트웨어 캐쉬에 대해, 컴파일러가 전회 컴파일 한 함수의 문맥이, 다음에 컴파일 하는 문맥과 동 1의 액세스 특권을 가지고 있으면(자) 간주할 수 있을 때에는, 캐쉬를 보관 유지합니다. 이것은 동일 클래스안에 많은 멤버 함수를 정의하고 있을 때에 특히 유효합니다. 다른 클래스의 프렌드가 되어 있는 멤버 함수를 제외해, 동일한 클래스에 속해 있는 모든 멤버 함수의 액세스 특권은, 모두 동일합니다. 이러한 경우는 캐쉬를 플래시 할 필요는 없습니다.

-fno-default-inline
    클래스 스코프중에 정의된 멤버 함수를 디폴트로 인 라인 함수 처리를 행하지 않습니다 (C++ 마셔).

-fno-defer-pop
    각각의 함수 호출에 대해서, 함수의 리턴 직후에 항상 인수를 팝 합니다. 함수 호출 후에 인수를 팝 해야 하는 머신에 대해서는, 컴파일러는 통상, 몇개의 함수의 인수를 스택에 쌓아, 그것들을 동시에 팝 합니다.

-fforce-mem
    메모리오페란드에 대해서, 그것들에 대한 연산이 행해지기 전에, 레지스터에 카피합니다. 이것은 모든 메모리 참조를, 잠재적인 공통 부분식이라고 정하는 것에 의해, 보다 좋은 코드를 생성합니다. 만약 그것이 공통 부분식 나오는거야 샀을 경우는, 인스트럭션 콤비네이션에 의해 레지스터에의 읽기는 삭 제 됩니다. 나는 이것이 어떠한 차이를 낳을까라고 하는 것에 흥미가 있습니다.

-fforce-addr
    메모리아드레스 정수에 대해, 그것들에 대한 연산이 행해지기 전에 레지스터 에 카피합니다. 이것은 `-fforce-mem '와 같은 수법으로 보다 좋은 코드를 생성합니다. 나는 이것이 어떠한 차이를 낳을까라고 하는 것에 흥미가 있습니다.

-fomit-frame-pointer
    프레임 포인터를 레지스터에 격납할 필요가 없는 함수에 대해, 이 처리를 실시하지 않습니다. 이것은 프레임 포인터의 보존, 설정, 복귀에 걸리는 인스트럭션을 생략 해, 게다가 많은 함수로 레지스터 변수로서 사용할 수 있는 여분의 레지스터를 얻는 것을 가능하게 합니다. 다만, 이 옵션은 대부분의 머신에 대해 디버그를 불가능하게 합니다.

    Vax 등의 몇개의 머신에서는, 이 플래그는 효과를 가지지 않습니다. 왜냐하면 와 등의 머신에서는 표준의 호출 순서가 자동적으로 프레임 포인터의 설정을 행해 버려, 이것이 존재하지 않는다고 했더니 아무것도 절약을 할 수 없기 때문입니다. 머신 기술 매크로 FRAME_POINTER_REQUIRED 하지만, 타겟 머신이 이 플래그를 서포트하는지 어떤지를 제어하고 있습니다.

-finline-functions
    모든 단순한 함수를 호출해 측에 짜넣어 버립니다. 컴파일러는 휴리스틱스를 이용해, 어느 함수가 이 방법으로 짜넣는 기에 충분할 만큼 단순한가를 결정합니다.

    만약, 어느 함수에 대한 모든 호출을 짜넣을 수가 있어 한편 그 함수가 static (이)라고 선언되고 있었을 경우는, GCC 는 그 함수를 독립한 어셈블러 코드와 해 출력을 하지 않습니다.

-fcaller-saves
    함수 호출에 대해 파괴될 값을, 레지스터 로 유지하는 것을 가능 노우로 합니다. 이것은 이러한 호출의 주위에 레지스터에 대한 보존, 복귀의 특별한 코드를 출력하는 것에 의해 실현됩니다. 이러한 할당은, 가 통상보다 좋은 코드를 출력한다고 보이는 경우에게만 행해집니다.

    이 옵션은 특정의 머신에서는 디폴트로 유효가 되고 있습니다. 이것들은 통상, 이 옵션의 처리 대신에 사용할 수가 있는 호출시 보존 레지스터가 존재하지 않는 머신입니다.

-fkeep-inline-functions
    어느 함수에의 호출이 모두 호출 측에 짜넣을 수가 있어, 한편 그 함수가 static (이)라고 선언되고 있었다고 해도, 실행시에 호출해 가능한 함수도 생성합니다.

-fno-function-cse
    함수의 주소를 레지스터에 두지 않습니다. 즉, 정해진 함수를 호출하는 코드는, 각각 명시적인 함수의 주소를 포함한 코드가 됩니다.

    이 옵션은 효율의 낮은 코드를 생성합니다만, 어셈블러 출력을 개서 같은 핵을 행하는 경우에는, 이 옵션을 사용하지 않으면 혼란 당하겠지요.

-fno-peephole
    머신 고유의 피프호르 최적화를 금지합니다.

-ffast-math
    이 옵션은 생성 코드의 스피드를 위해서(때문에), GCC 에 대해서, 몇개의 ANSI 또는 IEEE 의 규칙/표준을 침범하게 합니다. 예를 들면, 이 옵션은 sqrt 함수의 인수는 비부의 수인 것을 가정합니다.

    이 옵션은 어느 `-O '옵션에 의해도 유효로 여겨지지 않습니다. 왜냐하면, 이 옵션은 수 학 함수에 관한 IEEE 또는 ANSI 의 규칙/표준의 엄밀한 실장에 의존해 쓰여졌다 프로그램에 대해서 잘못한 출력을 주기 때문입니다.

이하의 옵션은 특수한 최적화에 관한 제어를 실시합니다. `-O2 ' 옵션은 `-funroll-loops ' (와)과 `-funroll-all-loops '를 제외하는 이러한 모든 옵션을 유효하게 합니다.

`-O '옵션은 통상 `-fthread-jumps '와 `-fdelayed-branch '를 유효로 합니다. 다만, 특수한 머신에서는 디폴트의 최적화에 대해서 변경이 더해지고 있을지도 모릅니다.

최적화에 관한 “ 치밀한 튜닝” 가 필요한 경우에, 이하의 플래그를 사용하는 것이 가능합니다.

-fstrength-reduce
    루프의 힘 축소와 반복해 변수의 제거를 실시합니다.

-fthread-jumps
    분기 점프에 의해 있는 장소에 점프 했을 때에, 최초의 분기에 포괄된다 비교가 존재했을 때에, 최초의 분기의 점프처를 후자의 분기 먼저 변경합니다. 이 변경처는, 2 번째의 분기 조건의 진위에 의해, 2 번째의 분기의 점프처인가, 혹은 2 번째의 분기의 직후에 정해집니다.

-funroll-loops
    루프 전개의 최적화를 실시합니다. 이것은 루프의 반복수가 컴파일시, 혹은 런타임으로 결정할 수 있을 때에 두어서만, 실행됩니다.

-funroll-all-loops
    루프 전개의 최적화를 실시합니다. 이것은 모든 루프에 대해서 행해집니다. 이 옵션은 대체로, 보다 늦게 동작하는 프로그램을 생성합니다.

-fcse-follow-jumps
    공통 부분식 삭제의 처리에 대해, 점프 인스트럭션의 행선지가 다른 경로로부터 도달할 수 없는 경우는, 그 점프 인스트럭션을 넘어 스캔을 행 있습니다. 예를 들면, 공통 부분식 삭제 처리중에 else 마디를 수반했다 if 문장을 만났을 경우, 조건이 가짜라면 분기 먼저 대해도 공통 부분식 삭제를 계속합니다.

-fcse-skip-blocks
    이것은 `-fcse-follow-jumps '를 닮아 있습니다만, 블록을 넘는 점프에 대해서도 공통 부분식 삭제를 계 속 합니다. 공통 부분식 삭제 처리중에, else 절을 가지지 않는 단순한 if 문장에에서 만났을 때, `-fcse-skip-blocks '는 if 의 보디를 넘은 점프에 대한 공통 부분식 삭제 처리를 계속합니다.

-frerun-cse-after-loop
    루프 최적화가 행해진 후에, 재차 공통 부분식 삭제의 처리를 실시합니다.

-felide-constructors
    constructor　 　 에의 호출을 생략 할 수 있는 것처럼 생각되는 경우에, 그 불러 출 해를 생략 합니다 (C++ 마셔). 이 플래그를 손가락 정했을 경우는, GNU C++ 는 이하의 코드에 대해서, 일시 오브젝트를 경유하지 않고 y (을)를 foo 에의 호출의 결과로부터 직접 초기화합니다.

    A foo (); A y = foo ();

    이 옵션을 사용하지 않는 경우는, GNU C++ 는 최초로 y (을)를 A 형태의 적절한 constructor　 　 을 호출하는 것에 의해 초기화합니다. 그리고, foo 의 결과를 일시 오브젝트에 격납해, 최종적으로는 `y '의 값을 일시 오브젝트의 값에 바꿔 넣습니다.

    디폴트의 행동 (`-fno-elide-constructors ')가, ANSI C++ 표준의 드래프트에는 규정되고 있습니다. constructor 하지만 부작용을 포함한 프로그램에 대해서, `-felide-constructors '를 지정하면(자), 그 프로그램은 다른 동작을 할 가능성이 있습니다. 라면, 몇개의 constructor　 　 의 호출이 생략 되기 때문입니다.

-fexpensive-optimizations
    비교적 코스트의 비싼 몇개의 사소한 최적화를 실시합니다.

-fdelayed-branch
    타겟 머신에 대해 이 플래그가 서포트되고 있는 경우는, 지연 분기 인스트럭션 후의 인스트럭션 슬롯을 인스트럭션의 차례 변경에 의해 이용하도록(듯이) 설정합니다.

-fschedule-insns
    타겟 머신에 대해 이 플래그가 서포트되고 있는 경우는, 필요한 데이터를 이용 가능하게 될 때까지 기다리는 것에 의한 실행의 지체를 막기 위해서(때문에), 인스트럭션 의 차례의 변경을 실시합니다. 이것은 늦은 부동 소수점 인스트럭션이나 메모리 읽기 인스트럭션의 열매 행에 대해, 그러한 결과를 필요로 하는 인스트럭션의 전에 다른 인스트럭션을 담습니다.

-fschedule-insns2
    `-fschedule-insns '와 닮아 있습니다만, 레지스터 할당 처리의 뒤에 한번 더 인스트럭션 스케줄링의 단계를 둡니다. 이것은, 비교적 레지스터수가 적고, 메모 리로드 인스트럭션 하지만 1 사이클보다 대부분을 필요로 하는 머신에 대해, 특히 효과적입니다.

타겟 옵션
디폴트에서는, GNU CC 컴파일러는, 현재 사용하고 있는 머신과 같은 타입의 코드를 컴파일 합니다. 그러나, GNU CC 는 크로스 컴파일러 (이)라고 해도 인스톨 하는 것이 가능합니다. 실제로는, 다른 타겟 머신을 위한 여러가지 배치의 GNU CC 는, 동시에 몇개(살) 도 인스톨 하는 것이 가능합니다. 거기서, 어느 GNU CC 를 사용할까를 지정하기 위해서, `-b '옵션을 사용할 수가 있습니다.

이것에 가세해, 낡은, 혹은보다 새로운 버젼의 GNU CC 도 동시에 간다 개도 인스톨 해 나갈 수가 있습니다. 이러한 중 1 개(살) (아마도 (와)과도 새로운 걸)가 디폴트가 됩니다. 그러나, 혹시 다른 것을 사 아파질지도 모릅니다.

-b machine
    인수 machine (은)는, 컴파일의 타겟 머신을 규정합니다. 이것은 GNU CC 를 크로스 컴파일러로서 인스톨 했을 때에 유용합니다.

    machine (으)로 지정하는 값은, GNU CC 를 크로스 컴파일러로서 배치 했을 때에게 준 머신 타입과 같습니다. 예를 들면, 80386 상의 System V 그리고 실행되는 프로그램을 위해서(때문에) `configure i386v'라고 하는 배치를 행한 크로스 컴파일러를 기동했다 있고 경우는, `-b i386v '와 지정합니다.

    `-b '의 설정을 생략 했을 경우는, 통상은 사용하고 있는 머신과 동타입의 머신 (을)를 위한 컴파일을 합니다.

-V version
    인수 version (은)는, 기동되는 GNU CC 의 버젼을 규정합니다. 이것은 복수의 버젼이 인스톨 되고 있는 경우에 유용합니다. 예를 들면, version 하지만 `2.0 '라면, GNU CC 버젼 2.0 을 기동하는 것을 의미합니다.

    `-V '를 지정하지 않았던 경우의 디폴트의 버젼은, GNU CC 를 인스톨 할 때에 조정 가능합니다. 통상은, 가장 일반적인 사용에 권할 수가 있다 버젼이 여기로 지정됩니다.

머신 의존 옵션
각각의 타겟 머신 타입은, 각각의 특별한 옵션을 가진다 일이 가능합니다. `-m '로 시작되는 옵션군은, 여러가지 하드웨어 모델이나 배치—예를 들면 68010 으로 68020, 부동 소수점 coprocessor의 유무— 등을 선택할 수 있습니다. 이 옵션을 지정하는 것에 의해, 컴파일러는 어떤 것이나 1 개의 모델, 혹은 배치에 대한 컴파일이 가능합니다.

몇개의 배치는, 통상은 그 플랫폼상의 다른 컴파일러와의 명령행에 관한의 호환성을 취하기 (위해)때문에 의 특별한 옵션을 준비해 있습니다.

이하는 68000 시리즈를 위해서(때문에) 정의된 `-m '옵션입니다.

-m68000

-mc68000
    68000 을 위한 코드를 생성합니다. 이것은 68000 베이스의 시스템에 대해서 배치를 행한 컴파일러의 디폴트입니다.

-m68020

-mc68020
    (68000 은 아니고) 68020 을 위한 코드를 생성합니다. 이것은 68020 베이스의 시스템에 대해서 배치를 행한 컴파일러의 디폴트 입니다.

-m68881
    부동 소수점 연산을 위해서(때문에) 68881 인스트럭션을 포함한 출력을 실시합니다. 이것은 대부분의 68020 베이스의 시스템에 대해, 컴파일러의 배치시에 -nfp (을)를 지정되지 않았던 경우의 디폴트입니다.

-m68030
    68030 을 위한 코드를 생성합니다. 이것은 68030 베이스의 시스템에 대해서 배치를 행한 컴파일러의 디폴트입니다.

-m68040
    68040 을 위한 코드를 생성합니다. 이것은 68040 베이스의 시스템에 대해서 배치를 행한 컴파일러의 디폴트입니다.

-m68020-40
    68040 을 위한 코드를 생성합니다만, 새로운 인스트럭션을 사용하지 않습니다. 이 결과로 해 (이)라고 얻을 수 있는 코드는,68020/68881, 68030, 68040 의 어느 시스템에 대해도, 비교적 높은 성능을 가집니다.

-mfpa
    부동 소수점 연산을 위해서(때문에) Sun FPA 인스트럭션을 포함한 출력을 실시합니다.

-msoft-float
    부동 소수점 연산을 위해서(때문에) 프로그램 라이브러리를 호출하는 출력을 실시합니다. 경고: 이 필수의 프로그램 라이브러리는 GNU CC 의 일부로서는 포함되지 않습니다. 통상은 그 머신 의 일반적인 C 컴파일러의 제공하는 것을 사용합니다만, 이것은 통상의 방법 그럼 크로스 컴파일로 직접 사용할 수 없습니다. 크로스 컴파일을 행 없는 싶은 경우는, 자기 자신으로 필요한 프로그램 라이브러리 함수를 준비할 필요가 있습니다.

-mshort
    int 형태를 short int 형태와 같이 16 비트폭으로 간주합니다.

-mnobitfield
    비트 필드 인스트럭션을 사용하지 않습니다. `-m68000 '는 암묵중에 `-mnobitfield '를 포함합니다.

-mbitfield
    비트 필드 인스트럭션을 사용합니다. `-m68020 '는 암묵중에 `-mbitfield '를 포함합니다. 이것은 변경되어 있지 않은 소스의 경우의 디폴트입니다.

-mrtd
    고정 개수의 인수를 취하는 함수에 대해서, 다른 함수 호출 규약을 사용합니다. 이것은, 리턴시에 인수를 팝 하는 rtd 인스트럭션을 이용하는 것입니다. 이것은 호출해 옆에서 인수를 팝 시킬 필요가 손상해에, 1 인스트럭션을 생략 하는 것이 가능해집니다.

    이 호출 규약은 통상의 Unix 로 사용되고 있는 방식과는 호환성이 없습니다. 때문에, Unix 컴파일러로 컴파일 된 프로그램 라이브러리를 호출할 필요가 한계는, 사용할 수 없습니다.

    게다가 모든 가변 인수를 취할 수 있는 함수 ( printf (을)를 포함합니다)에 대해서, 함수 prototype를 준비할 필요가 있습니다. 그렇지 않으면, 이러한 함수에 대해서 잘못한 코드가 생성됩니다.

    게다가 함수에 대해서 너무 많은 인수를 붙여 호출하는 코드를 썼을 경우, 와 는 심각한 잘못한 코드를 생성합니다. (통상은 너무 많은 변수는 해를 미치는 것 없게 무시됩니다. )

    rtd 인스트럭션은 68010 으로 68020 에 의해 서포트됩니다만, 68000 에서는 사용 성과 선.

이하는 Vax 를 위해서(때문에) 정의된 `-m '옵션입니다.

-munix
    특정의 몇개의 점프 인스트럭션 (aobleq 등 ) (을)를 출력하지 않습니다. 이러한 인스트럭션으로 긴 레인지를 사용했을 경우, Vax 용의 Unix 어셈블러는 이것을 처리할 수 없습니다.

-mgnu
    이러한 점프 인스트럭션을 출력합니다. 어셈블(assemble)에는 GNU 어셈블러의 사용 (을)를 가정합니다.

-mg 부동 소수점수(실수)에 대해, d-포맷이 아니고, g-포맷을 위한 코드를 출력합니다.

이하는 SPARC 로 서포트되고 있는 `-m '스윗치입니다.

-mfpu

-mhard-float
    부동 소수점 인스트럭션을 포함한 출력을 실시합니다. 이것은 디폴트입니다.

-mno-fpu

-msoft-float
    부동 소수점의 처리를 위해서(때문에) 프로그램 라이브러리를 호출하는 출력을 실시합니다. 경고: SPARC 용의 GNU 부동 소수점 프로그램 라이브러리는 존재하지 않습니다. 통상은 그 머신의 일반적인 C 컴파일러의 제공하는 것을 사용합니다만, 이것은 통상의 방법에서는 크로스 컴파일로 직접 사용할 수 없습니다. 크로스 컴파일을 행하고 싶은 경우는, 자기 자신으로 필요한 프로그램 라이브러리 함수를 준비할 필요가 있습니다.

    -msoft-float (은)는 호출 규약을 변경합니다. 따라서, 모두 의 프로그램을 이 옵션으로 컴파일 하지 않는 한, 이 옵션은 의미를 만들어내지 않습니다.

-mno-epilogue

-mepilogue
    -mepilogue (을)를 지정하는 것에 의해 (디폴트), 컴파일러는 함수를 빠지기 (위해)때문에 의 코드를 항상 함수의 마지막에 출력합니다. 함수의 도중에 함수를 빠지는 코드는 모두, 함수의 마지막 종료 코드에의 점프로서 생성됩니다.

    -mno-epilogue (을)를 설정하는 것에 의해, 컴파일러는 함수로부터 빠지는 코드를 인 라인화 하는 것을 시도합니다.

-mno-v8

-mv8

-msparclite
    이러한 3 개의 옵션은 SPARC 아키텍쳐의 바리에이션을 선택 하기 위해서 사용됩니다.

    디폴트에서는, (Fujitsu SPARClite 용으로 배치 하지 않는 한 는) GCC 는 SPARC 아키텍쳐 v7 용의 코드를 생성합니다.

    -mv8 (은)는, SPARC v8 용 코드를 생성합니다. v7 코드와의 차이는, 정수의 곱셈과 정수 의 제산이 v7 에서는 존재하지 않지만 v8 에는 존재한다고 하는 점만입니다.

    -msparclite (은)는, SPARClite 용의 코드를 생성합니다. 이것은 v7 에는 존재하지 않고 SPARClite 에 존재하는, 정수 곱셈, 정수 제산과 스캔 (ffs) 인스트럭션을 추가합니다.

-mcypress

-msupersparc
    이것들 2 개의 옵션은 코드 최적화 대상의 프로세서를 선택하기 위한 물건입니다.

    -mcypress (을)를 이용하면(자)(이것이 디폴트), 컴파일러는 Cypress CY7C602 칩용으로 코드를 최적화합니다. 이 칩은 SparcStation/SparcServer 3xx 시리즈에 이용되고 있습니다. 이 옵션은 낡은 SparcStation 1, 2, IPX 등에도 적용할 수 있습니다.

    -msupersparc (을)를 이용하면(자), 컴파일러는 SuperSparc CPU 용으로 코드를 최적화합니다. 이 칩은 SparcStation 10, 1000, 2000 시리즈에 이용되고 있습니다. 이 옵션을 이용하면(자), SPARC v8 의 전인스트럭션 세트를 이용하게 됩니다.

이하는 Convex 를 위해서(때문에) 정의된 `-m '옵션입니다.

-mc1
    C1 용의 출력을 실시합니다. 이것은 컴파일러가 C1 용으로 배치 (을)를 행해졌을 때의 디폴트입니다.

-mc2
    C2 용의 출력을 실시합니다. 이것은 컴파일러가 C2 용으로 배치 (을)를 행해졌을 때의 디폴트입니다.

-margcount
    인수열의 전에, 인수의 수를 워드에 두는 코드를 생성합니다. 몇개의 가반성 (이)가 없는 Convex 나 Vax 의 프로그램은 이 워드를 필요로 합니다. (디버거는 부정 나가히키수리스트를 가지는 함수를 제외해, 이 워드를 필요로 하지 않습니다. 이러한 정보는 심볼 테이블에 쓰여집니다. )

-mnoargcount
    인수의 수를 나타내는 워드를 생략 합니다. 이것은 변경되어 있지 않은 소스를 사용했다 경우의 디폴트입니다.

이하는, AMD Am29000 를 위해서(때문에) 정의된 `-m '옵션입니다.

-mdw
    DW 비트가 서 있는 것을 가정한 코드를 출력합니다. 이것은, 하드웨어 에 의해 바이트 조작이나 하프 워드 조작이 서포트되고 있다고 하는 것을 의미합니다. 이것은 디폴트입니다.

-mnodw
    DW 비트가 서지 않은 것을 가정한 코드를 출력합니다.

-mbw
    시스템이 바이트 조작이나 하프 워드 기입 조작을 서포트하고 있는 것을 가정했다 코드를 생성합니다. 이것은 디폴트입니다.

-mnbw
    시스템이 바이트 조작이나 하프 워드 기입 조작을 서포트하고 있지 않는 것을 가정해 코드를 생성합니다. 이것은 암묵중에 `-mnodw '를 포함합니다.

-msmall
    스모르메모리모델을 사용합니다. 이것은 모든 함수의 주소가 단일의 256KB 의 세그먼트(segment)내에 접어드는 것으로, 함수의 절대 주소가 256K 이하에 있다 일을 가정합니다. 이 옵션은 call 인스트럭션을 const , consth , calli 순차 순서 대신에 사용하는 것을 가능하게 합니다.

-mlarge
    call 인스트럭션을 사용할 수 있는 것을 가정하지 않습니다. 이것은 디폴트입니다.

-m29050
    Am29050 용의 코드를 생성합니다.

-m29000
    Am29000 용의 코드를 생성합니다. 이것은 디폴트입니다.

-mkernel-registers
    gr96-gr127 레지스터에의 참조 대신에 gr64-gr95 (을)를 참조하는 코드를 생성합니다. 이 옵션은, 유저의 코드인가 들 사용할 수 있는 글로벌 레지스터로부터 구별된 글로벌 레지스터의 집합 (을)를 이용하는 커널의 코드를 컴파일 할 때에 사용할 수 있습니다.

    다만, 이 옵션이 사용되고 있을 때에도 `-f ' 플래그중의 레지스터명은 통상의 유저 모드에서의 이름을 사용합니다.

-muser-registers
    통상의 글로벌 레지스터의 집합 gr96-gr127 (을)를 사용합니다. 이것은 디폴트입니다.

-mstack-check
    __msp_check 에의 호출을 각각의 스택 조정의 뒤에 삽입합니다. 이것은 자주 커널의 코드에 대해 이용됩니다.

이하는, Motorola 88K 아키텍쳐를 위해서(때문에) 정의된 `-m '옵션입니다.

-m88000
    m88100 와 m88110 의 쌍방에서 비교적 고성능으로 동작하는 코드를 생성합니다.

-m88100
    m88100 에 최적인 코드를 생성합니다. 다만 m88110 에 대해도 동작합니다.

-m88110
    m88110 에 최적인 코드를 생성합니다. 다만 m88100 에 대해 동작하지 않을지도 모릅니다

-midentify-revision
    어셈블러 출력중에, 원시 파일명, 컴파일러명과 버젼, 타임 스탬프, 사용된 컴파일 플래그를 적은 ident 지시문을 삽입합니다.

-mno-underscores
    심볼명의 최초로 언더 스코아 캐릭터를 붙이지 않는 어셈블러 출력을 생 이룹니다. 디폴트에서는 개개의 이름에 대해서, 언더 스코아를 프레픽크 스로서 사용합니다.

-mno-check-zero-division

-mcheck-zero-division
    초기의 88K 의 모델은 제로에 의한 제산의 처리에 문제를 가지고 있었습니다. 특히, 등이 많게 두어 트랩이 생기지 않았던 (일)것은 문제였습니다. 이것 들의 옵션을 사용하는 것에 의해, 제로 제산을 발견해, 예외를 알린다 코드를 묻는 것을 금지 (혹은 명시적으로 허가)할 수가 있습니다. 전 (이)라고의 88K 용의 GCC 의 배치는 `-mcheck-zero-division '를 디폴트로서 사용하고 있습니다.

-mocs-debug-info

-mno-ocs-debug-info
    88Open Object Compatibility Standard “OCS” 로 정의되었다 (각각의 스택 프레임중에서 사용되는 레지스터에 관한) 부가적인 디버그 정보를 수중에 넣습니다 (또는 생략 합니다). 이러한 부가적인 정보는 GDB 에 (이)라고는 필요하게 되지 않습니다. DG/UX, SVr4, Delta 88 SVr3. 2 에서는 디폴트로 이 정 보를 포함합니다. 그 외의 88K 배치에서는 디폴트로 생략 합니다.

-mocs-frame-position

-mno-ocs-frame-position
    OCS 로 규정되고 있도록(듯이), 레지스터의 값에 대해서, 스택 프레임중의 특정의 장소에 보존된다고 하는 동작을 강제합니다 (혹은 요구하지 않습니다). DG/UX, Delta88 SVr3. 2, BCS 의 배치에서는 `-mocs-frame-position '를 디폴트로서 그 이외의 88k 배치에서는 `-mno-ocs-frame-position '를 디폴트로서 사용하고 있습니다.

-moptimize-arg-area

-mno-optimize-arg-area
    함수의 인수가 어떠한 방법으로 스택 프레임에 격납되는지를 지정합니다. `-moptimize-arg-area '는 스페이스를 절약합니다만, 몇개의 디버거 (GDB 는 포함되지 않는다)를 크래쉬 시킵니다. `-mno-optimize-arg-area '는 보다 표준에 따르고 있습니다. 디폴트에서는 GCC 는 인수 에리어의 최적화 (을)를 실시하지 않습니다.

-mshort-data-num
    데이터 참조시에, 그러한 처리를 r0 (으)로부터의 상대 참조로 행하는 것에 의해 작은 코드로 하는 것을 가능으로 합니다. 이것은 값의 로드를 (그 외의 경우는 2 인스트럭션 나도는 곳(중)을) 1 인스트럭션으로 행인 일을 가능하게 합니다. num (을)를 이 옵션과 함께 지정하는 것에 의해, 어느 데이터 참조가 영향 (을)를 받는지를 지정할 수가 있습니다. 예를 들면 `-mshort-data-512 '를 지정하면(자), 512 바이트 이내의 디스프레이스먼트의 데이터 참조가 영향을 받게 됩니다. `-mshort-data- num '는 num 하지만 64K 보다 큰 때는 효과를 가지지 않습니다.

-mserialize-volatile

-mno-serialize-volatile
    volatile 인 메모리에의 참조에 대해, 시퀀셜인 정합성을 가졌다 코드를 생성한다, 혹은 생성하지 않습니다.

    GNU CC 는 디폴트에서는 어느 프로세서 서브 모델을 선택했을 경우에 대해도, 정합성을 항상 프로텍션합니다. 이것이 어떻게 실현되고 있을까는, 서브 모델에 의존하고 있습니다.

    m88100 프로세서는 메모리 참조의 차례를 바꿔 넣지 않기 때문에, 항상 시퀀셜인 정합성은 유지됩니다. 만약 `-m88100 '를 사용했을 경우는, GNU CC 는 시퀀셜인 정합성을 유지하기 위한 특 별도인 인스트럭션을 생성하지 않습니다.

    m88110 프로세서에 있어서의 메모리 참조의 차례는, 반드시 그러한 요구를 행 된 인스트럭션의 차례와는 일치하지 않습니다. 특히, 읽기 인스트럭션은, 선행하는 기입 인스트럭션보다 먼저 실행될 수 있습니다. 이러한 차례의 교체는, 멀티 프로세서시에 volatile 인 메모리의 참조에 있어서의 시퀀셜인 정합성을 무너뜨려 버립니다. `-m88000 '또는 `-m88110 '를 지정했을 경우에는, GNU CC 는, 필요한 경우는 특별한 인스트럭션을 생성해, 인스트럭션의 실행이 올바른 차례로 행해지는 것을 강제합니다.

    여기서 생성되는 정합성을 프로텍션하기 위한 특별한 인스트럭션은 어플리케이션의 성 노우에 대해서 영향을 미칩니다. 만약 이 프로텍션 없음으로 문제가 없다고 하는 것이 원이나 (이)라고 있는 경우는, `-mno-serialize-volatile '를 사용할 수가 있습니다.

    `-m88100 '옵션을 사용하고 있지만, m88110 에 있어서의 실행시에 시퀀셜인 정합성이 필요하게 되는 경우는, `-mserialize-volatile '를 사용해야 합니다.

-msvr4

-msvr3
    System V release 4 (SVr4)에 관련한 컴파일러의 확장을 유효 (`-msvr4 ') 혹은 무효 (`-msvr3 ')로 합니다. 이것은 이하의 내용을 제어합니다.

•   생성하는 어셈블러의 문법의 종류 (이것은 `-mversion-03. 00 '를 사용하는 것에 의해 독립에 제어할 수 있습니다).

•   `-msvr4 '는 C 프리프로세서에 대해서 `#pragma weak '를 이해시킵니다.

•   `-msvr4 '는, GCC 에 SVr4 에 의해 사용되고 있는 부가적인 선언 지시문 (을)를 생성시킵니다.

`-msvr3 '는, SVr4 를 제외하는 모든 m88K 배치에 있어서의 데포 르트입니다.

-mtrap-large-shift

-mhandle-large-shift
    31 비트보다 큰 비트 쉬프트를 검출하는 코드를 묻습니다. 이러한 옵션을 지정하는 것에 의해, 각각 트랩, 혹은 적절히 처리 코드가 파묻힙니다. 디폴트에서는 GCC 는 큰 비트 쉬프트에는 특별한 대책을 실시하지 않습니다.

-muse-div-instruction
    매우 초기의 88K 아키텍쳐의 모델은 제산 인스트럭션을 가지고 있지 않습니다. 종 (이)라고, GCC 는 디폴트에서는 제산 인스트럭션을 생성하지 않습니다. 이 옵션은 제산 인스트럭션 하지만 안전하게 사용할 수 있다고 하는 것을 지정합니다.

-mversion-03. 00
    DG/UX 배치에는, 2 개의 SVr4 의 종류가 있습니다. 이 옵션 하 -msvr4 옵션에 의해 hybrid-COFF 와 real-ELF 의 어느 쪽이 사용되는지를 선택합니다. 다른 배치는 이 옵션을 무시합니다.

-mwarn-passed-structs
    함수에 대해서 구조체를 건네주었을 경우와 함수가 구조체를 돌려주었을 경우에 경고합니다. 구조체를 건네주는 규약은 C 언어의 발전 중(안)에서 변화하고 있어, 이식성의 문제를 잔디 잔디 생기게 됩니다. 디폴트에서는 GCC 는 이 경고를 실시하지 않습니다.

이하의 옵션은 IBM RS6000 를 위해서(때문에) 정의된 것입니다.

-mfp-in-toc

-mno-fp-in-toc
    부동 소수점 정수를 Table of Contents (TOC)에 넣는지 어떤지를 지정합니다. 이 테이블은 모든 글로벌 변수와 함수의 주소를 격납합니다. 디폴트 그럼 GCC 는 부동 소수점 정수를 여기에 격납합니다. 만약 TOC 가 산술 넘치고를 일으킨다 경우는, `-mno-fp-in-toc '를 사용하는 것에 의해 TOC 의 사이즈를 작게 하는 것이 가능하고, 산술 넘치고를 막을 수가 있겠지요.

이하는 IBM RT PC 용으로 정의된 `-m '옵션입니다.

-min-line-mul
    정수의 곱셈에 대해서 인 라인의 코드열을 생성합니다. 이것은 디폴트입니다.

-mcall-lib-mul
    정수의 곱셈에 대해서 lmul$$ (을)를 호출합니다.

-mfull-fp-blocks
    풀 사이즈의 부동 소수점 데이터 블록을 생성합니다. 이것은 IBM 에 의해 추 장 되고 있는 최저한의 스크래치 스페이스의 양을 포함 합니다. 이것은 디폴트입니다.

-mminimum-fp-blocks
    부동 소수점 데이터 블록내에 특별한 스크래치 스페이스를 포함하지 않습니다. 이것에 따라서, 보다 작은 코드가 생성됩니다만, 실행은 늦어집니다. 왜냐하면 스크래치 스페이스가 동적으로 확보되기 때문입니다.

-mfp-arg-in-fpregs
    IBM 의 함수 호출 규약과는 호환성이 없는 호출 순서를 사용합니다. 이 규약에서는 부동 소수점 인수를 부동 소수점 레지스터에 넣어 건네줍니다. 이 옵션을 지정하면(자), varargs.h (이)나 stdarg.h 그리고 부동 소수점 오퍼랜드를 사용할 수 없게 되는 것에 주의해 주세요.

-mfp-arg-in-gregs
    부동 소수점에 대해서 통상의 함수 호출 규약을 사용합니다. 이것은 디폴트입니다.

-mhc-struct-return
    1 워드보다 큰 구조체를 돌려줄 때에, 레지스터는 아니고 메모리를 사용해 돌려줍니다. 이것은 MetaWare HighC (hc) 컴파일러와의 호환성을 제공합니다. `-fpcc-struct-return '를 사용하는 것에 의해 Portable C Compiler (pcc)와의 호환성을 이득 일이 생깁니다.

-mnohc-struct-return
    1 워드보다 큰 구조체를 돌려줄 때에, 레지스터에 의해 돌려주어지는 경우가 있습니다. 이것은 그 쪽이 편리하다라고 생각될 때에 사용됩니다. 이것은 디폴트입니다. IBM 가 제공하는 컴파일러와의 호환성을 얻기 위해서(때문에)는, `-fpcc-struct-return '와 `-mhc-struct-return '의 쌍방을 사용합니다.

이하는 MIPS 패밀리를 위해서(때문에) 정의된 `-m '옵션입니다.

-mcpu=cpu-type
    인스트럭션 스케줄링시에, 디폴트의 머신 타입을 cpu-type 에 가정합니다. 디폴트의 cpu-type 하 default 입니다. 이 선택은 모든 머신에 대한 최장의 사이클수를 바탕으로 코드를 생성합니다. 이것은, 생성되는 코드가 어느 MIPS cpu 에 대해도 적당한 속도 그리고 처리되도록(듯이) 하기 (위해)때문입니다. 이외의 cpu-type 의 선택으로서는, r2000, r3000, r4000, r6000 (이)가 있습니다. 특정의 cpu-type (을)를 선택했을 경우는, 그 특정의 칩에 적절한 스케줄을 합니다. 컴파일러는, -mips2 또는 -mips3 스윗치가 사용되어 있지 않은 경우는, MIPS ISA (instruction set architecture)의 레벨 1 에 합치하지 않는 코드를 생성할 것은 없습니다.

-mips2
    MIPS ISA 의 레벨 2 (branch likely 인스트럭션, 평방근 인스트럭션)에 의한 인스트럭션군 (을)를 출력합니다. -mcpu=r4000 (와)과 -mcpu=r6000 스윗치는, -mips2 (와)과 함께 사용될 필요가 있습니다.

-mips3
    MIPS ISA 의 레벨 3 (64 비트 인스트럭션)을 포함한 인스트럭션군을 출력합니다. -mcpu=r4000 스윗치는, -mips2 그와 동시에 사용할 필요가 있습니다.

-mint64

-mlong64

-mlonglong128
    이러한 옵션은 현재 동작하지 않습니다.

-mmips-as
    MIPS 어셈블러를 위한 코드를 생성해, mips-tfile (을)를 기동해 통상의 디버그 정보를 추가합니다. 이것은 OSF/1 레퍼런스 플랫폼 이외의 모든 플랫폼에 있어서의 디폴트입니다. OSF/1 레퍼런스 플랫폼은 OSF/rose 오브젝트 포맷을 사용합니다. 스윗치 -ggdb, -gstabs, -gstabs+
     중 어떤 것인가가 사용되고 있는 경우는, mips-tfile 프로그램은, stabs 를 MIPS ECOFF 중에 캡슐화합니다.

-mgas
    GNU 어셈블러용의 코드를 생성합니다. 이것은 OSF/1 레퍼런스 플랫폼 에 있어서의 디폴트입니다. OSF/1 레퍼런스 플랫폼은 OSF/rose 오브젝트 포맷을 사용합니다.

-mrnames

-mno-rnames
    -mrnames 스윗치는 출력 코드에 대해, 레지스터의 이름으로서 하드웨어명의 대 비교적 MIPS 소프트웨어명을 사용하는 것을 지정합니다. (즉, a0 (을)를 $4 대신에 사용합니다). GNU 어셈블러는 -mrnames 스윗치를 서포트하지 않습니다. MIPS 어셈블러는 원시 파일에 대해서 MIPS C 프리프로세서를 기동하겠지요. -mno-rnames 스윗치가 디폴트입니다.

-mgpopt

-mno-gpopt
    -mgpopt 스윗치는, 모든 데이터 선언을 텍스트 섹션중의 전인스트럭션의 전에 써 출 일을 지정합니다. 이것에 의해, 모든 MIPS 어셈블러는, 쇼트 글로벌, 혹은 정적인 데이터 아이템에 대해서, 2 워드가 아니고, 1 워드의 메모리 참조 인스트럭션을 생성합니다. 이것은 최적화가 지정되었을 경우의 디폴트입니다.

-mstats

-mno-stats
    -mstats 하지만 지정되었을 경우는, 컴파일러에 의해 인 라인이 아닌 함수가 처리된다 마다, 표준 에러 출력 파일에 대해서, 그 프로그램에 대한 통계 정보 (을)를 나타내는 1 행의 메세지를 출력합니다. 이 메세지는, 보존한 레지스터 의 수, 스택의 사이즈등을 나타냅니다.

-mmemcpy

-mno-memcpy
    -mmemcpy 스윗치는, 모든 블록 전송에 대해서, 인라인 코드를 생성하는 대 원 에, 적절한 string 함수 (memcpy 또는 bcopy) (을)를 호출하는 코드를 생성합니다.

-mmips-tfile

-mno-mips-tfile
    -mno-mips-tfile 스윗치를 지정하면(자), MIPS 어셈블러가 디버그 서포트를 위해서(때문에) 생성한 오브젝트 파일에 대해, mips-tfile (을)를 사용한 후 처리를 실시하지 않습니다. mips-tfile 하지만 실행되지 않으면 디버거로부터는 로컬 변수를 취급할 수가 없습니다. 게다가 stage2 (와)과 stage3 의 오브젝트는 어셈블러에게 건네지는 일시적인 파일명을 오브젝트 파일 안에 파묻혀 가지고 있어 이 때문에 그것들을 비교했을 경우에 동일한도 의것 과는 보이지 않습니다.

-msoft-float
    부동 소수점 연산을 위해서(때문에) 프로그램 라이브러리를 호출하는 출력을 실시합니다. 경고: 이 필수의 프로그램 라이브러리는 GNU CC 의 일부로서는 포함되지 않습니다. 통상은 그 머신의 일반적인 C 컴파일러의 제공하는 것을 사용합니다만, 이것은 통상의 방법 그럼 크로스 컴파일로 직접 사용할 수 없습니다. 크로스 컴파일을 행 없는 싶은 경우는, 자기 자신으로 필요한 프로그램 라이브러리 함수를 준비할 필요가 있습니다.

-mhard-float
    부동 소수점 인스트럭션을 포함한 출력을 생성합니다. 이것은 변경되지 않는 소스를 사용해 경우의 디폴트입니다.

-mfp64
    스테이터스 워드중의 FR 비트가 서 있는 것을 가정합니다. 이것은 32 개의 32 비트 부동 소수점 레지스터 대신에, 32 개의 64 비트의 부동 소수점 레지스터가 존재하면(자) 있고 일을 나타냅니다. 이 경우는, 동시에 -mcpu=r4000 (와)과 -mips3 스윗치를 지정할 필요가 있습니다.

-mfp32
    32 개의 32 비트 부동 소수점 레지스터가 존재한다고 하는 것을 가정합니다. 와 는 디폴트입니다.

-mabicalls

-mno-abicalls
    몇개의 System V. 4 의 이식이 위치 독립 코드를 위해서(때문에) 사용하는 유사 인스트럭션 .abicalls, .cpload, .cprestore (을)를 출력한다, 혹은 출력하지 않습니다.

-mhalf-pic

-mno-half-pic
    -mhalf-pic 스윗치는, 텍스트 섹션중에 참조를 배치하는 대신에, 외부 참조를 행 포인터를 데이터 섹션에 배치해, 그것을 로드하는 동작을 지정합니다. 이 옵션은 현재 아직 동작하지 않습니다. -Gnum 하 num 바이트 이하의 글로벌, 혹은 정적인 아이템을, 통상의 데이터나 bss 섹션이 아니고, 작은 데이터, 또는 bss 섹션에 배치하는 것을 지정합니다. 이것에 의해 어셈블러는, 통상에서는 2 워드의 참조를 실시하는 곳(중)을, 글로벌 포인터 (gp 또는 $28) (을)를 기준으로 한 1 워드의 메모리 참조 인스트럭션을 생성 가능해집니다. 디폴트에서는 MIPS 어셈블러가 사용되는 경우, num (은)는 8 입니다. 또, GNU 어셈블러가 사용되는 경우의 디폴트는 0 입니다. -Gnum 스윗치는 어셈블러, 링커에도와 같이 건네받습니다. 모든 모듈은 동일한 -Gnum 의 값으로 컴파일 되지 않으면 안됩니다.

-nocpp
    MIPS 어셈블러에, 유저 어셈블러 파일 (`.s '확장자(extension)를 가집니다)에 대한 어셈블(assemble)시의 프리프로세서의 기동을 억제함

이하는, Intel 80386 패밀리용으로 정의된 `-m '옵션입니다.

-m486

-mno-486
    386 은 아니고 486 에 최적화된 코드를 출력한다, 혹은 그 역을행인 지정을 실시합니다. 486 용으로 생성된 코드는 386 으로 실행 가능하고, 역도 또 가능합니다.

-mpentium
    -mcpu=pentium (와)과 동의입니다.

-mpentiumpro
    -mcpu=pentiumpro (와)과 동의입니다.

-mcpu=cpu type
    인스트럭션을 스케줄링 할 때의 머신 타입의 디폴트를 설정합니다. CPU TYPE 의 선택사항은 i386, i486, i586 (pentium), pentium, i686 (pentiumpro), 및 pentiumpro 입니다. 어느 CPU TYPE 를 선택하면(자), 그 특정 칩에 적절하도록(듯이) 스케줄링을 실시합니다만, -march=cpu type 옵션을 지정하지 않는 한, 컴파일러는 i386 로 실행할 수 없는 것 같은 코드는 생성하지 않습니다.

-march=cpu type
    머신 타입 CPU TYPE 용으로 인스트럭션을 생성합니다. CPU TYPE 의 선택사항은 i386, i486, pentium, 및 pentiumpro 입니다. -march=cpu type (을)를 지정하면(자) -mcpu=cpu type 도 지정된 것으로 간주합니다.

-msoft-float
    부동 소수점 연산을 위해서(때문에) 프로그램 라이브러리를 호출하는 출력을 실시합니다. 경고: 이 필수의 프로그램 라이브러리는 GNU CC 의 일부로서는 포함되지 않습니다. 통상은 그 머신의 일반적인 C 컴파일러의 제공하는 것을 사용합니다만, 이것은 통상의 방법 그럼 크로스 컴파일로 직접 사용할 수 없습니다. 크로스 컴파일을 행 없는 싶은 경우는, 자기 자신으로 필요한 프로그램 라이브러리 함수를 준비할 필요가 있습니다.

    함수가 부동 소수점수(실수)를 돌려줄 때에 80387 레지스터 스택을 사용하는 머신에 두어서는, `-msoft-float '를 사용했을 경우에서도, 몇개의 부동 소수점 인스트럭션이 생성됩니다.

-mno-fp-ret-in-387
    함수로부터의 돌아가 값에 FPU 의 레지스터를 사용하지 않습니다.

    통상의 함수 호출 규약은, 비록 FPU 가 존재하지 않아도 float (와)과 double 의 결과를 FPU 레지스터에 넣어 돌려줍니다. 따라서 이 경우,
     operating system는 FPU 를 에뮤레이트 하지 않으면 안됩니다.

    `-mno-fp-ret-in-387 '옵션을 지정하면(자), 부동 소수점수(실수)도 통상의 CPU 레지스터에 넣고 (이)라고 돌려주어집니다.

-mprofiler-epilogue

-mno-profiler-epilogue
    함수로부터 빠지는 코드에서 프로파일 정보를 써내는 추가 코드를 생성합니다.

이하는 HPPA 패밀리용으로 정의된 `-m '옵션입니다.

-mpa-risc-1-0
    PA 1.0 프로세서용의 코드를 출력합니다.

-mpa-risc-1-1
    PA 1.1 프로세서용의 코드를 출력합니다.

-mkernel
    커널에 적절한 코드를 생성합니다. 특히, 인수의 1 개로서 DP 레지스터를 취한다 add 인스트럭션의 사용을 억제해, 그 대신에, addil 인스트럭션을 생성합니다. 이것은 HP-UX 링커의 심각한 버그를 피하기 위한 조치입니다.

-mshared-libs
    HP-UX 공유 프로그램 라이브러리와 링크 시키는 코드를 생성합니다. 이 옵션 (이)다 완전하게 동작하고 있는 것은 아니고, 어느 PA 타겟으로 두어도 디폴트 (이)가 되어 있지 않습니다. 이 옵션을 지정하면(자), 컴파일러는 잘못한 코드 (을)를 출력 할 수 있습니다.

-mno-shared-libs
    공유 프로그램 라이브러리와 링크 하지 않는 코드를 생성합니다. 이것은 모든 PA 타겟 에 두어 디폴트의 옵션입니다.

-mlong-calls
    함수의 호출처라고 불러 방편원이 동일 파일에 포함되었을 경우, 호출시의 거리가 256K 를 넘는 경우에서도 동작하는 것 같은 코드를 출력합니다. 이 옵션은, 링커로부터 “branch out of range errors” 로 링크가 거부되었을 때 이외로는 사용하지 않게 해 주세요.

-mdisable-fpregs
    어떠한 형태에 대해도, 부동 소수점 레지스터의 사용을 금지합니다. 이것은 부동 소수점 레지스터에 배려하지 않는 콘텍스트 스위칭을 행한다 커널에 대해서 유효합니다. 이 옵션을 사용해, 부동 소수점 처리를 행하려고 하면(자), 컴파일러는 중단( abort) 합니다.

-mdisable-indexing
    컴파일러에 대해서, indexing addressing mode 를 사용하지 않게 지정합니다. 이것에 의해 MACH 에 대해 MIG 에 의해 생성된 코드를 컴파일 때의, 그다지 중요하지 않은 몇개의 문제를 막을 수가 있습니다.

-mtrailing-colon
    label 정의의 뒤에 코론을 더합니다 (ELF 어셈블러용).

이하는, Intel 80960 패밀리용으로 정의된 `-m '옵션입니다.

-mcpu-type
    디폴트의 머신 타입을 cpu-type 에 가정합니다. 이것은 생성하는 인스트럭션과 addressing mode, 그리고 경계 조건에 관계합니다. 디폴트의 cpu-type 하 kb 입니다. 그 외의 선택으로서는 ka, mc, ca, cf, sa, sb (이)가 있습니다.

-mnumerics

-msoft-float
    -mnumerics 옵션은 프로세서가 부동 소수점 인스트럭션을 서포트하는 것을 나타냅니다. -msoft-float 옵션은 부동 소수점 서포트를 가정하지 않는 것을 나타냅니다.

-mleaf-procedures

-mno-leaf-procedures
    잎에 위치하는 수속에 대해, call 인스트럭션과 같게 bal 명령에서도 호출하는 것을 가능으로 합니다 (혹은, 하지 않습니다). 이것은 bal 인스트럭션이 어셈블러, 또는 링커에 의해 옮겨놓을 수 있는 얻는 경우에는, 직접호 방편에 대해서 효율이 좋은 코드를 얻을 수 있습니다. 다만, 그 이외의 장소 합은 효율의 좋지 않는 코드를 생성합니다. 예를 들면, 함수에의 포인터 경유의 불러 방편이나, 이 최적화를 서포트하지 않는 링커를 사용했을 경우등이 이것 에 해당합니다.

-mtail-call

-mno-tail-call
    (머신비의존의 부분을 넘어) 말미 재귀를 분기로 변환하는 처리에 관한 들 되는 최적화를 실시합니다(또는 실시하지 않습니다). 이 수법의 적용이 정당하지 않다고 하는 것에 관한 판단 하지만 완전하지 않기 때문에, 아직 이 옵션을 사용하는 것은 적당하지 않을지도 알려지지 않습니다. 디폴트는 -mno-tail-call 입니다.

-mcomplex-addr

-mno-complex-addr
    이 i960 의 실장에서는 복잡한 addressing mode의 사용이 우위이라고 가정 합니다 (혹은 가정하지 않습니다). 복잡한 addressing mode는 K-시리즈에서는 사용하는 가치는 없을지도 모릅니다만, C-시리즈에서는 확실히 사용하는 가치가 있습니다. 현재는 -mcomplex-addr 하지만, CB 와 CC 를 제외하는 모든 프로세서에 있어서의 디폴트입니다.

-mcode-align

-mno-code-align
    보다 고속의 페치를 위해서(때문에) 코드를 8 바이트에 아라인 합니다 (또는 아무것도 하지 않습니다). 현재는 C 시리즈의 실장에 대해서만 디폴트로 유효하게 하고 있습니다.

-mic-compat

-mic2. 0-compat

-mic3. 0-compat
    iC960 v2. 0 또는 v3. 0 과의 호환성을 갖게합니다.

-masm-compat

-mintel-asm
    iC960 어셈블러와의 호환성을 갖게합니다.

-mstrict-align

-mno-strict-align
    아라인 되지 않는 액세스를 허가하지 않습니다 (혹은 허가합니다).

-mold-align
    Intel 에 의한 gcc 릴리스 버젼 1.3 (gcc 1.37 베이스)과의 구조체의 경계 조건에 관한 호환성을 갖게합니다. 현재는, #pragma align 1 하지만 동시에 가정되어 버려, 무효화할 수 없다고 하는 버그를 가지고 있습니다.

이하는, DEC Alpha 용으로 정의된 `-m '옵션입니다.

-mno-soft-float

-msoft-float
    부동 소수점 조작에 대해서, 하드웨어에 의한 부동 소수점 인스트럭션을 사용합니다 (해 선). 만약, -msoft-float 하지만 지정되었을 경우는, `libgcc1.c ' 안의 함수가 부동 소수점 연산에 사용됩니다. 다만, 이러한 routine가 부동 소수점 연산을 에뮤레이트 하는 routine에 의해 옮겨놓을 수 있고 있는지, 그러한 에뮬레이션 routine를 호출하도록(듯이) 컴파일 되고 있다 의 나오지 않는 한, 이러한 routine는 부동 소수점 연산을 행해 버립니다. 부동소 몇 점 연산이 없는 Alpha 를 위한 컴파일을 행하기 위해서(때문에)는, 프로그램 라이브러리도 이것들을 호출하지 않게 컴파일되어 있지 않으면 안됩니다.

    부동 소수점 연산이 없는 Alpha 의 실장은, 부동 소수점 레지스터를 필요로 하면(자) 말하는 것에 주의해 주세요.

-mfp-reg

-mno-fp-regs
    부동 소수점 레지스터 세트를 사용하는 (사용하지 않는다) 코드를 생성합니다. -mno-fp-regs (은)는 암묵중에 -msoft-float (을)를 포함합니다. 부동 소수점 레지스터 세트가 사용되지 않는 경우는, 부동 소수점 오퍼랜드는 정수 레지스터에 넣어져 건네받아 부동 소수점수(실수)의 결과는 $f0 에서는 없고 $0 에 넣어 돌려주어집니다. 이것은 비표준의 함수 호출 순서이며, 부동 소수점수(실수)의 인수나 돌아가 값을 가지는 함수로, -mno-fp-regs (을)를 붙여 컴파일 된 코드로부터 불려 가는 함수는 모두 이 옵션을 붙여 컴파일 되고 있을 필요가 있습니다.

    이 옵션의 전형적인 용법은, 부동 소수점 레지스터를 사용하지 않고, 했지만 (이)라고 부동 소수점 레지스터에의 세이브도 restore도 필요가 없는 커널을 구축한다 때등이 있겠지요.

여기에 추가하는 옵션은 System V Release 4 에 대해, 이러한 시스템상의 다른 컴파일러와의 호환성을 위해서(때문에) 제공되는 것입니다.

-G  SVr4 시스템에 대해, gcc (은)는 `-G '옵션을 받아들입니다 (그리고 이것을 시스템 링커에 건네줍니다). 이것은 다른 컴파일러와의 호환성이기 때문에입니다. 그러나, 링커 옵션을 gcc 의 명령행으로부터 건네주는 것보다도, 우리는 `-symbolic '또는 `-shared '의 사용이 적당하다라고 생각하고 있습니다.

-Qy 컴파일러가 사용한 각각의 툴의 버젼을 .ident 어셈블러 지시문을 사용해, 출력으로 명시합니다.

-Qn .ident 지시문을 출력에 가세하는 것을 억제합니다 (이것은 디폴트입니다).

-YP,dirs
    `-l '로 지정된 프로그램 라이브러리에 대해서, dirs 그리고 규정된 디렉토리만을 검색해, 외는 검색하지 않습니다. dirs 안은, 1 개의 코론으로 단락짓는 것으로, 복수의 디렉토리 엔트리를 기술합니다.

-Ym,dir
    M4 프리프로세서를 dir 에 검색합니다. 어셈블러가 이 옵션을 사용합니다.

코드 생성 옵션
이러한 머신 독립 옵션은, 코드 생성에서 사용되는 인터페이스 규약을 제어합니다.

이러한 대부분은 `-f'로 시작됩니다. 이러한 옵션은 유효 형식과 무효 형식의 2 개의 형식을 지 (이)라고 있습니다. `-ffoo '의 무효 형식은 `-fno-foo '입니다. 이하에 드는 표에 대해서는, 이 중, 디폴트가 아닌 편 (분)편만을 들 수 있습니다. `no- '를 추가하는지, 삭제할까에 의해 쌍방의 형식을 얻을 수 있습니다.

-fnonnull-objects
    참조형에 의해 참조되는 오브젝트는 눌이 아니면 가정합니다 (C++ 마셔).

    통상은 GNU C++ 는 참조형에 의해 참조되는 오브젝트에 관해서는 보수적 가정을 실시합니다. 예를 들면, 컴파일러는 a 하지만 이하의 코드에 대해 눌이 아닌 것을 체크할 필요가 있습니다.

    obj &a = g (); a.f (2);

    이런 종류의 참조가 눌이 아닌 것의 체크는, 특별한 코드를 필요로 합니다. 그러나, 이것은 많은 프로그램에 있어 소용없는 것입니다. 이 눌에 대한 체크를 필요가 없는 경우 `-fnonnull-objects '를 사용하는 것으로써, 생략 할 수가 있습니다.

-fpcc-struct-return
    struct (와)과 union 의 값을 돌려주는 경우에, 보통 C 컴파일러가 행하는 것과 같은 규약을 사용합니다. 이 규약은 소규모의 구조체에 대해서 비효율적인 것이 되어, 또 많은 머신으로 그 함수를 재입불가능으로서 끝냅니다. 그러나 이것은, GCC 로 컴파일 된 코드 (와)과 PCC 로 컴파일 된 코드를 서로 호출하는 것을 가능으로 하면(자) 있고 이점을 가집니다.

-freg-struct-return
    struct (와)과 union 의 값을 돌려주는 경우에, 가능한 경우는 레지스터를 사용하는 규약을 사용합니다. 이것은 -fpcc-struct-return (을)를 사용했을 경우와 비교해, 작은 구조체를 돌려주는 경우에 높은 성능을 발휘합니다.

    -fpcc-struct-return (와)과 -freg-struct-return 의 어느쪽이나 사용하지 않았던 경우에는, GNU CC 는 각 타겟으로 대해 표준으로 있다고 생각되는 규약을 디폴트로서 사용합니다. 만약 표준 규약이 없었던 경우는, -fpcc-struct-return (을)를 디폴트로서 사용합니다.

-fshort-enums
    enum 형태에 대해서, 막 취할 수 있는 값의 범위에 응한 바이트수의 형태를 줍니다. 구체적으로는, enum 형태는, 그 치역을 격납하기에 충분한 최소의 정수형과 등가가 됩니다.

-fshort-double
    double (을)를 float (와)과 동사이즈로 합니다.

-fshared-data
    데이터와 비 const 변수를, 사적인 데이터가 아니고, 공유 데이터로서 컴파일 합니다. 이 옵션은, 실행 중의 같은 프로그램간은 공유 데이터가 공유되어 프라이빗 데이터가 각각의 프로세스에 1 개씩 주어지는 것 같은 일부 의 operating system로 의미를 가집니다.

-fno-common
    bss 섹션중의 초기화되어 있지 않은 글로벌 변수에 대해서에서도, 공통 블록 에 생성하는 것이 아니라, area를 할당합니다. 이 옵션은, (extern (을)를 붙이지 않고 ) 동일한 변수를 선언한 2 개의 컴파일에 대해서, 링크시 에 에러를 발생한다고 하는 효과가 있습니다. 이 옵션은, 항상 이러한 동 작을 행하는 시스템에 대해도, 프로그램이 정상적으로 동작하는지 어떤지를 검사 하는 경우에게만 유용합니다.

-fno-ident
    `#ident '지시문을 무시합니다.

-fno-gnu-linker
    (C++ 의 constructor　 　 과 소멸자와 같은) 글로벌인 초기화의 코드를 (GNU 링커가 이것들을 취급하는 표준의 시스템인 것 같은 시스템에 대해) GNU 링커로 사용되는 형식에서 출력하지 않습니다. 이것은 GNU 링커는 아니다 링커를 사용하는 경우로 지정합니다. 이 경우, collect2 (을)를 사용해, 확실히 시스템 링커에 constructor　 　 과 소멸자를 함 응이다 코드를 출력시킬 필요가 있습니다. (collect2 (은)는 GNU CC 의 디스트리뷰션에 포함됩니다. ) collect2 (을)를 반드시 사용해야 하는 시스템에 대해서는, 컴파일러 드라이버 gcc (은)는 자동적으로 그처럼 배치 됩니다.

-finhibit-size-directive
    .size 어셈블러 지시문 등, 함수가 도중에 분할되어 메모리상이 달랐다 위치에 각각의 부분이 배치되는 것 같은 경우에 사정이 생기는 것 같은 요소를 출력하지 않습니다. 이 옵션은 `crtstuff.c '를 컴파일 할 때에 사용됩니다. 그 이외의 장소에서는 이것을 사용한다 필요는 없습니다.

-fverbose-asm
    출력의 어셈블러안에 특별한 코멘트 정보를 추가해, 가독성을 높입니다. 이 옵션은 일반적으로는, 출력의 어셈블러 코드를 정말로 읽고 싶은 경우 (비유 컴파일러 자신을 디버그 하고 있는 것 같은 경우)에게만 효과가 있습니다.

-fvolatile
    포인터에 의한 메모리의 참조를 모두 volatile 로서 취급합니다.

-fvolatile-global
    외부 변수나 글로벌 데이터 아이템에의 메모리 참조를 모두 volatile 로서 취급합니다.

-fpic
    이 옵션이 타겟 머신으로 서포트되고 있으면, 위치 독립인 코드를 출력합니다. 이 옵션은 공유 프로그램 라이브러리에서의 사용에 적절합니다.

-fPIC
    이 옵션이 타겟 머신으로 서포트되고 있으면, 위치 독립인 코드를 출력합니다. 이 옵션은 다이나믹 링크에 적절하고 있어 분기에 있어 큰 디스프레이스먼트를 요구하는 경우에도 적응합니다.

-ffixed-reg
    이름이 reg 의 레지스터를 고정 레지스터로서 취급합니다. 생성된 코드는 이 레지스터 (을)를 참조하지 않습니다 (다만, 스택 포인터, 프레임 포인터, 그 외 고정용 도의 경우를 제외합니다).

    reg (은)는 레지스터명이 아니면 안됩니다. 받아들일 수 있는 레지스터명은 머신고 유이며, 머신 기술 매크로 파일내의 REGISTER_NAMES 매크로에 기술된 것입니다.

    이 플래그는 무효 형식을 가지지 않습니다. 왜냐하면, 이것은 3 방법의 지정이 가능해 있기 때문입니다.

-fcall-used-reg
    이름이 reg 의 레지스터를, 함수 호출에 의해 파괴되는 할당 가능의 레지스터 (으)로서 취급합니다. 이것은, 함수 호출을 넘어 존재하지 않는 일시 area나 변수 (으)로서 나누어 맞을 수가 있습니다. 이 지정으로 컴파일 된 함수는, 레지스터 reg 의 보존이나 복귀를 실시하지 않습니다.

    이 플래그를 머신의 실행 모델에 대해, 어느 고정적이고 특수한 역할을 가져 있는 레지스터, 예를 들면 스택 포인터나 프레임 포인터에 대해서 적용한다 (일)것은, 파멸적인 결과를 낳습니다.

    이 플래그는 무효 형식을 가지지 않습니다. 왜냐하면, 이것은 3 방법의 지정이 가능해 있기 때문입니다.

-fcall-saved-reg
    이름이 reg 의 레지스터를, 함수에 의해 보존되는 할당 가능한 레지스터로서 취 취급합니다. 이것은, 함수 호출을 넘어 존재하는 일시 area나 변수라고 해도 나누어 맞힐 수가 있습니다. 이 지정으로 컴파일 된 함수는, 레지스터 reg (을)를 사용하는 경우, 그 보존과 복귀를 실시합니다.

    이 플래그를 머신의 실행 모델에 대해, 어느 고정적이고 특수한 역할을 가져 있는 레지스터, 예를 들면 스택 포인터나 프레임 포인터에 대해서 적용한다 (일)것은, 파멸적인 결과를 낳습니다.

    또, 이 플래그를 함수의 돌아가 값이 격납되는 레지스터에 사용하면(자), 이것도 파멸적인 결과를 낳습니다.

    이 플래그는 무효 형식을 가지지 않습니다. 왜냐하면, 이것은 3 방법의 지정이 가능해 있기 때문입니다.

프라그마
2 개의 `#pragma '지시문(지령)이 GNU C++ 에 의해 서포트되고 있습니다. 이것은, 1 개의 헤더 파일을 2 개의 목적, 즉 있는 오브젝트 클래스를 위한 인터페이스의 정의로서의 목적과 오브젝트 클래스에 포함되는 내용 의 완전한 정의로서의 목적의, 양쪽 모두의 목적으로 사용하기 위한의 것입니다.

#pragma interface
    (C++ 마셔) 이 지시문을, 오브젝트 클래스를 정의하고 있는 헤더 파일중 에 사용하는 것에 의해, 그러한 클래스를 사용하는 대부분의 오브젝트 파일의 크기를 감소시킬 수가 있습니다. 통상은, 특정의 정보 (인 라인 멤버 함수의 백업 카피, 디버그 정보, 가상 함수 실현을 위한 내부 테이블)의 복제가 그 클래스 정의를 인클루드 했다 각각의 오브젝트 파일중에 놓여집니다. 이 프라그마를 사용하는 것에 의해, 이러한 복제를 막는 것이 가능해집니다. `#pragma interface '를 포함한 헤더 파일을 인클루드 했을 경우는, 이러한 추가 정보 (은)는 생성되지 않습니다 (다만, 메인의 입력 원시 파일 자신이 `#pragma implementation '를 포함하고 있는 경우를 제외합니다). 그 대신, 오브젝트 파일은 링크시에 해결되는 참조를 포함하게 됩니다.

#pragma implementation

#pragma implementation "objects.h"
    (C++ 마셔) 인클루드 된 헤더 파일에 의한 완전한 출력을 생성시키고 싶다 ( 를 글로벌하게 가시화하고 싶다) 경우에는, 메인의 입력 파일중에서 이 프라그마를 사용합니다. 이 경우, 인클루드 되는 헤더 파일은, `#pragma interface '를 사용하고 있지 않으면 안됩니다. 인 라인 함수의 백업 정보, 디버그 정보, 가상 함수 실현용의 내부 테이블은, 모두 임플리멘테이션 파일중에 생성됩니다.

    `#pragma implementation '를, 인수를 붙이지 않고 사용했을 경우는, 이것은 그 원시 파일과 같다 베이스 네임(basename)을 가지는 파일에 대해서 적용됩니다. 예를 들면, `allclass.cc '안의 `#pragma implementation '는, `#pragma implementation “allclass.h” '와 등가입니다. 만약 복수의 헤더 파일에 대해서, 1 개의 임플리멘테이션 파일을 대응시키고 싶은 경우는, 캐릭터 라인의 인수를 사용할 필요가 있습니다.

    1 개의 헤더 파일에 대해서, 복수의 임플리멘테이션 파일을 대 응 시키는 방법은 없습니다.

관련 파일
file.c	C 언어 원시 파일
file.h	C 언어 헤더 (프리프로세서) 파일
file.i	프리프로세스 끝난 C 언어 원시 파일
file.C	C++ 원시 파일
file.cc	C++ 원시 파일
file.cxx	C++ 원시 파일
file.m	Objective-C 원시 파일
file.s	어셈블리 언어 파일
file.o	오브젝트 파일
a.out	링크 에디트 끝난 출력
TMPDIR/cc*	일시파일군
LIBDIR/cpp	프리프로세서
LIBDIR/cc1	C 언어 컴파일러
LIBDIR/cc1plus	C++ 컴파일러
LIBDIR/collect	몇개의 머신으로 필요한 링커의 프론트엔드
LIBDIR/libgcc.a	GCC 써브루틴 프로그램 라이브러리
/lib/crt[01n]. o	스타트 업 routine
LIBDIR/ccrt0	C++ 용의 부가적인 스타트 업 routine
/lib/libc.a	표준 프로그램 라이브러리,
intro(3)
(을)를 참조
/usr/include	#include 파일을 위한 표준 디렉토리
LIBDIR/include	#include 파일을 위한 GCC 표준 디렉토리
LIBDIR/g++-include	#include 파일을 위한 부가적인 g++ 디렉토리

LIBDIR (은)는 통상 /usr/local/lib/ machine/version 의 형식을 가집니다
TMPDIR (은)는 환경 변수 TMPDIR (만약 사용 가능하면 /usr/tmp (을)를, 그렇지 않으면 /tmp (을)를 사용합니다)로부터 빼앗깁니다.

관련 항목
as(1), cpp(1), gdb(1), ld(1)
info 안의 `gcc', `cpp', `as', `ld', `gdb' 엔트리
Using and Porting GNU CC (for version 2.0) , Richard M. Stallman; The C Preprocessor, Richard M. Stallman; Debugging with GDB: the GNU Source-Level Debugger, Richard M. Stallman and Roland H. Pesch; Using as: the GNU Assembler, Dean Elsner, Jay Fenlason & friends; ld: the GNU linker, Steve Chamberlain and Roland Pesch.

버그
버그를 보고하는 방법에 대해서는, GCC 메뉴얼을 참조해 주세요.

COPYING
Copyright 1991, 1992, 1993 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English.

저자
GNU CC 에 대해서 공헌한 사람들에 관해서는, GNU CC 메뉴얼을 참조해 주세요.

일본어 번역
호소카와들 당신(hosokawa@mt.cs.keio.ac.jp): NetBSD 용으로 번역
sakai@csl.cl.nec.co.jp, h-nokubi@nmit.mt.nec.co.jp,
kumano@strl.nhk.or.jp, horikawa@isrd.hitachi.co.jp: FreeBSD 전용으로 수정, 사열