FreeBSD 日本語マニュアル検索 (jman/japropos/jwhatis)


日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。

4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)

13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。



検索コマンド: man apropos whatis
コマンド/キーワード:
日本語マニュアル RELEASE :
セクション:
Table of Contents
名称 | 書式 | 解説 | オプション | 環境変数 | バグ | 脚注 | 関連項目 | 作者 | COPYRIGHT
GCC(1)                                GNU                               GCC(1)



名称
       gcc - GNU プロジェクト C と C++ コンパイラ

書式
       gcc [-c|-S|-E] [-std=standard]
           [-g] [-pg] [-Olevel]
           [-Wwarn...] [-pedantic]
           [-Idir...] [-Ldir...]
           [-Dmacro[=defn]...] [-Umacro]
           [-foption...] [-mmachine-option...]
           [-o outfile] [@file] infile...

       最も役に立つオプションだけがここにリストされています。残りについては下
       記を参照してください。g++gcc とほとんど同じオプションを受け付けま
       す。

解説
       GCC を呼び出すとき、通常、前処理、コンパイル、アセンブリとリンクを行い
       ます。"全般的なオプション" によって、利用者は、中間的なステージでこのプ
       ロセスを停止することができます。例えば、-c オプションは、リンカを実行し
       ないようにします。次に、オブジェクトファイルから成る出力は、アセンブラ
       によって行われます。

       他のオプションは、1 つのプロセスのステージで渡されます。いくつかのオプ
       ションは、プリプロセッサを制御し、他のものはコンパイラ自体を制御しま
       す。さらに、他のオプションはアセンブラとリンカを制御します。それらを使
       用する必要がめったにないので、これらの大部分は、ここで文書化されていま
       せん。

       利用者が GCC で使用することができるコマンドラインオプションのほとんど
       は、C プログラムの役に立ちます。オプションが他の言語 (通常 C++) によっ
       てのみ役に立つとき、明らか説明します。特定のオプションのための記述が
       ソース言語について言及しないなら、利用者はすべてのサポートされた言語で
       そのオプションを使用することができます。

       gcc プログラムは、オプションとファイル名をオペランドとして受け付けま
       す。多くのオプションには、意味が同じで指定文字が異なる複数の名前があり
       ます。したがって、複数の単一文字のオプションは分類できません: -dr-d -r とは大変異なっています。

       オプションと他の引数を混ぜることができます。ほとんどは、使用する順序は
       重要ではありません。同じ種類のいくつかのオプションを使用するとき、順序
       は重要です。例えば、複数の -L を指定するなら、ディレクトリは指定された
       順序で検索されます。

       多くのオプションには、-f または -W --- 例えば、-fmove-loop-invariants,
       -Wformat その他、で始まる長い名前があります。これらのほとんどには、肯定
       (positive) 形式と否定 (negative) 形式の両方があります。-ffoo の否定形式
       は -fno-foo です。このマニュアルは、どちらかデフォルトでない、これらの
       2 つの形式の 1 つだけが文書化されています。

オプション
       オプションの概要

       ここに、種類によってグループ化されたすべてのオプションの概要を示しま
       す。説明は以下のセクションにあります。

       全般的なオプション
           -c  -S  -E  -o file  -combine -pipe  -pass-exit-codes -x language
           -v  -###  --help  --target-help  --version @file

       C 言語オプション
           -ansi  -std=standard  -fgnu89-inline -aux-info filename -fno-asm
           -fno-builtin  -fno-builtin-function -fhosted  -ffreestanding
           -fopenmp -fms-extensions -trigraphs  -no-integrated-cpp
           -traditional  -traditional-cpp -fallow-single-precision
           -fcond-mismatch -fsigned-bitfields  -fsigned-char
           -funsigned-bitfields  -funsigned-char -funsigned-bitfields
           -funsigned-char

       C++ 言語オプション
           -fabi-version=n  -fno-access-control  -fcheck-new -fconserve-space
           -ffriend-injection -fno-elide-constructors -fno-enforce-eh-specs
           -ffor-scope  -fno-for-scope  -fno-gnu-keywords
           -fno-implicit-templates -fno-implicit-inline-templates
           -fno-implement-inlines  -fms-extensions -fno-nonansi-builtins
           -fno-operator-names -fno-optional-diags  -fpermissive -frepo
           -fno-rtti  -fstats  -ftemplate-depth-n -fno-threadsafe-statics
           -fuse-cxa-atexit  -fno-weak  -nostdinc++ -fno-default-inline
           -fvisibility-inlines-hidden -Wabi  -Wctor-dtor-privacy
           -Wnon-virtual-dtor  -Wreorder -Weffc++  -Wno-deprecated
           -Wstrict-null-sentinel -Wno-non-template-friend  -Wold-style-cast
           -Woverloaded-virtual  -Wno-pmf-conversions -Wsign-promo

       言語独立のオプション
           -fmessage-length=n -fdiagnostics-show-location=[once|every-line]
           -fdiagnostics-show-option

       警告オプション
           -fsyntax-only  -pedantic  -pedantic-errors -w  -Wextra  -Wall
           -Waddress  -Waggregate-return -Wno-attributes -Wc++-compat
           -Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment
           -Wconversion  -Wno-deprecated-declarations -Wdisabled-optimization
           -Wno-div-by-zero  -Wno-endif-labels -Werror  -Werror=*
           -Werror-implicit-function-declaration -Wfatal-errors  -Wfloat-equal
           -Wformat  -Wformat=2 -Wno-format-extra-args -Wformat-nonliteral
           -Wformat-security  -Wformat-y2k -Wimplicit
           -Wimplicit-function-declaration  -Wimplicit-int -Wimport
           -Wno-import  -Winit-self  -Winline -Wno-int-to-pointer-cast
           -Wno-invalid-offsetof  -Winvalid-pch -Wlarger-than-len
           -Wunsafe-loop-optimizations  -Wlong-long -Wmain  -Wmissing-braces
           -Wmissing-field-initializers -Wmissing-format-attribute
           -Wmissing-include-dirs -Wmissing-noreturn -Wno-multichar  -Wnonnull
           -Wno-overflow -Woverlength-strings  -Wpacked  -Wpadded
           -Wparentheses  -Wpointer-arith  -Wno-pointer-to-int-cast
           -Wredundant-decls -Wreturn-type  -Wsequence-point  -Wshadow
           -Wsign-compare  -Wstack-protector -Wstrict-aliasing
           -Wstrict-aliasing=2 -Wstrict-overflow -Wstrict-overflow=n -Wswitch
           -Wswitch-default  -Wswitch-enum -Wsystem-headers  -Wtrigraphs
           -Wundef  -Wuninitialized -Wunknown-pragmas  -Wno-pragmas
           -Wunreachable-code -Wunused  -Wunused-function  -Wunused-label
           -Wunused-parameter -Wunused-value  -Wunused-variable
           -Wvariadic-macros -Wvolatile-register-var  -Wwrite-strings

       C のみの警告オプション
           -Wbad-function-cast  -Wmissing-declarations -Wmissing-prototypes
           -Wnested-externs  -Wold-style-definition -Wstrict-prototypes
           -Wtraditional -Wdeclaration-after-statement -Wpointer-sign

       デバッグオプション
           -dletters  -dumpspecs  -dumpmachine  -dumpversion -fdump-noaddr
           -fdump-unnumbered  -fdump-translation-unit[-n]
           -fdump-class-hierarchy[-n] -fdump-ipa-all -fdump-ipa-cgraph
           -fdump-tree-all -fdump-tree-original[-n] -fdump-tree-optimized[-n]
           -fdump-tree-inlined[-n] -fdump-tree-cfg -fdump-tree-vcg
           -fdump-tree-alias -fdump-tree-ch -fdump-tree-ssa[-n]
           -fdump-tree-pre[-n] -fdump-tree-ccp[-n] -fdump-tree-dce[-n]
           -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-n]
           -fdump-tree-dom[-n] -fdump-tree-dse[-n] -fdump-tree-phiopt[-n]
           -fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv
           -fdump-tree-vect -fdump-tree-sink -fdump-tree-sra[-n]
           -fdump-tree-salias -fdump-tree-fre[-n] -fdump-tree-vrp[-n]
           -ftree-vectorizer-verbose=n -fdump-tree-storeccp[-n]
           -feliminate-dwarf2-dups -feliminate-unused-debug-types
           -feliminate-unused-debug-symbols -femit-class-debug-always
           -fmem-report -fprofile-arcs -frandom-seed=string -fsched-verbose=n
           -ftest-coverage  -ftime-report -fvar-tracking -g  -glevel  -gcoff
           -gdwarf-2 -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ -p
           -pg  -print-file-name=library  -print-libgcc-file-name
           -print-multi-directory  -print-multi-lib -print-prog-name=program
           -print-search-dirs  -Q -save-temps  -time

       最適化オプション
           -falign-functions=n  -falign-jumps=n -falign-labels=n
           -falign-loops=n -fbounds-check -fmudflap -fmudflapth -fmudflapir
           -fbranch-probabilities -fprofile-values -fvpt
           -fbranch-target-load-optimize -fbranch-target-load-optimize2
           -fbtr-bb-exclusive -fcaller-saves  -fcprop-registers
           -fcse-follow-jumps -fcse-skip-blocks  -fcx-limited-range
           -fdata-sections -fdelayed-branch  -fdelete-null-pointer-checks
           -fearly-inlining -fexpensive-optimizations  -ffast-math
           -ffloat-store -fforce-addr  -ffunction-sections -fgcse  -fgcse-lm
           -fgcse-sm  -fgcse-las  -fgcse-after-reload -fcrossjumping
           -fif-conversion  -fif-conversion2 -finline-functions
           -finline-functions-called-once -finline-limit=n
           -fkeep-inline-functions -fkeep-static-consts  -fmerge-constants
           -fmerge-all-constants -fmodulo-sched -fno-branch-count-reg
           -fno-default-inline  -fno-defer-pop -fmove-loop-invariants
           -fno-function-cse  -fno-guess-branch-probability -fno-inline
           -fno-math-errno  -fno-peephole  -fno-peephole2
           -funsafe-math-optimizations  -funsafe-loop-optimizations
           -ffinite-math-only -fno-toplevel-reorder -fno-trapping-math
           -fno-zero-initialized-in-bss -fomit-frame-pointer
           -foptimize-register-move -foptimize-sibling-calls
           -fprefetch-loop-arrays -fprofile-generate -fprofile-use -fregmove
           -frename-registers -freorder-blocks  -freorder-blocks-and-partition
           -freorder-functions -frerun-cse-after-loop -frounding-math
           -frtl-abstract-sequences -fschedule-insns  -fschedule-insns2
           -fno-sched-interblock  -fno-sched-spec  -fsched-spec-load
           -fsched-spec-load-dangerous -fsched-stalled-insns=n
           -fsched-stalled-insns-dep=n -fsched2-use-superblocks
           -fsched2-use-traces -fsee -freschedule-modulo-scheduled-loops
           -fsection-anchors  -fsignaling-nans  -fsingle-precision-constant
           -fstack-protector  -fstack-protector-all -fstrict-aliasing
           -fstrict-overflow  -ftracer  -fthread-jumps -funroll-all-loops
           -funroll-loops  -fpeel-loops -fsplit-ivs-in-unroller
           -funswitch-loops -fvariable-expansion-in-unroller -ftree-pre
           -ftree-ccp  -ftree-dce -ftree-loop-optimize -ftree-loop-linear
           -ftree-loop-im -ftree-loop-ivcanon -fivopts -ftree-dominator-opts
           -ftree-dse -ftree-copyrename -ftree-sink -ftree-ch -ftree-sra
           -ftree-ter -ftree-lrs -ftree-fre -ftree-vectorize
           -ftree-vect-loop-version -ftree-salias -fipa-pta -fweb
           -ftree-copy-prop -ftree-store-ccp -ftree-store-copy-prop
           -fwhole-program --param name=value -O  -O0  -O1  -O2  -O3  -Os

       プリプロセッサオプション
           -Aquestion=answer -A-question[=answer] -C  -dD  -dI  -dM  -dN
           -Dmacro[=defn]  -E  -H -idirafter dir -include file  -imacros file
           -iprefix file  -iwithprefix dir -iwithprefixbefore dir  -isystem
           dir -imultilib dir -isysroot dir -M  -MM  -MF  -MG  -MP  -MQ  -MT
           -nostdinc -P  -fworking-directory  -remap -trigraphs  -undef
           -Umacro  -Wp,option -Xpreprocessor option

       アセンブラオプション
           -Wa,option  -Xassembler option

       リンカオプション
           object-file-name  -llibrary -nostartfiles  -nodefaultlibs
           -nostdlib -pie -rdynamic -s  -static  -static-libgcc  -shared
           -shared-libgcc  -symbolic -Wl,option  -Xlinker option -u symbol

       ディレクトリオプション
           -Bprefix  -Idir  -iquotedir  -Ldir -specs=file  -I- --sysroot=dir

       ターゲットオプション
           -V version  -b machine

       マシン依存のオプション
           ARC オプション -EB  -EL -mmangle-cpu  -mcpu=cpu  -mtext=text-
           section -mdata=data-section  -mrodata=readonly-data-section

           ARM オプション -mapcs-frame  -mno-apcs-frame -mabi=name
           -mapcs-stack-check  -mno-apcs-stack-check -mapcs-float
           -mno-apcs-float -mapcs-reentrant  -mno-apcs-reentrant
           -msched-prolog  -mno-sched-prolog -mlittle-endian  -mbig-endian
           -mwords-little-endian -mfloat-abi=name  -msoft-float  -mhard-float
           -mfpe -mthumb-interwork  -mno-thumb-interwork -mcpu=name
           -march=name  -mfpu=name -mstructure-size-boundary=n
           -mabort-on-noreturn -mlong-calls  -mno-long-calls -msingle-pic-base
           -mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport
           -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
           -mpoke-function-name -mthumb  -marm -mtpcs-frame  -mtpcs-leaf-frame
           -mcaller-super-interworking  -mcallee-super-interworking -mtp=name

           AVR オプション -mmcu=mcu  -msize  -minit-stack=n  -mno-interrupts
           -mcall-prologues  -mno-tablejump  -mtiny-stack  -mint8

           Blackfin オプション -momit-leaf-frame-pointer
           -mno-omit-leaf-frame-pointer -mspecld-anomaly -mno-specld-anomaly
           -mcsync-anomaly -mno-csync-anomaly -mlow-64k -mno-low64k
           -mid-shared-library -mno-id-shared-library -mshared-library-id=n
           -mlong-calls  -mno-long-calls

           CRIS オプション -mcpu=cpu  -march=cpu  -mtune=cpu
           -mmax-stack-frame=n  -melinux-stacksize=n -metrax4  -metrax100
           -mpdebug  -mcc-init  -mno-side-effects -mstack-align  -mdata-align
           -mconst-align -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue
           -mno-gotplt -melf  -maout  -melinux  -mlinux  -sim  -sim2
           -mmul-bug-workaround  -mno-mul-bug-workaround

           CRX オプション -mmac -mpush-args

           Darwin オプション -all_load  -allowable_client  -arch
           -arch_errors_fatal -arch_only  -bind_at_load  -bundle
           -bundle_loader -client_name  -compatibility_version
           -current_version -dead_strip -dependency-file  -dylib_file
           -dylinker_install_name -dynamic  -dynamiclib
           -exported_symbols_list -filelist  -flat_namespace
           -force_cpusubtype_ALL -force_flat_namespace
           -headerpad_max_install_names -image_base  -init  -install_name
           -keep_private_externs -multi_module  -multiply_defined
           -multiply_defined_unused -noall_load
           -no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs
           -noprebind  -noseglinkedit -pagezero_size  -prebind
           -prebind_all_twolevel_modules -private_bundle  -read_only_relocs
           -sectalign -sectobjectsymbols  -whyload  -seg1addr -sectcreate
           -sectobjectsymbols  -sectorder -segaddr -segs_read_only_addr
           -segs_read_write_addr -seg_addr_table  -seg_addr_table_filename
           -seglinkedit -segprot  -segs_read_only_addr  -segs_read_write_addr
           -single_module  -static  -sub_library  -sub_umbrella
           -twolevel_namespace  -umbrella  -undefined -unexported_symbols_list
           -weak_reference_mismatches -whatsloaded -F -gused -gfull
           -mmacosx-version-min=version -mkernel -mone-byte-bool

           DEC Alpha オプション -mno-fp-regs  -msoft-float  -malpha-as  -mgas
           -mieee  -mieee-with-inexact  -mieee-conformant -mfp-trap-mode=mode
           -mfp-rounding-mode=mode -mtrap-precision=mode  -mbuild-constants
           -mcpu=cpu-type  -mtune=cpu-type -mbwx  -mmax  -mfix  -mcix
           -mfloat-vax  -mfloat-ieee -mexplicit-relocs  -msmall-data
           -mlarge-data -msmall-text  -mlarge-text -mmemory-latency=time

           DEC Alpha/VMS オプション -mvms-return-codes

           FRV オプション -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 -mhard-float
           -msoft-float -malloc-cc  -mfixed-cc  -mdword  -mno-dword -mdouble
           -mno-double -mmedia  -mno-media  -mmuladd  -mno-muladd -mfdpic
           -minline-plt -mgprel-ro  -multilib-library-pic -mlinked-fp
           -mlong-calls  -malign-labels -mlibrary-pic  -macc-4  -macc-8 -mpack
           -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
           -moptimize-membar -mno-optimize-membar -mscc  -mno-scc  -mcond-exec
           -mno-cond-exec -mvliw-branch  -mno-vliw-branch -mmulti-cond-exec
           -mno-multi-cond-exec  -mnested-cond-exec -mno-nested-cond-exec
           -mtomcat-stats -mTLS -mtls -mcpu=cpu

           GNU/Linux オプション -muclibc

           H8/300 オプション -mrelax  -mh  -ms  -mn  -mint32  -malign-300

           HPPA オプション -march=architecture-type -mbig-switch
           -mdisable-fpregs  -mdisable-indexing -mfast-indirect-calls  -mgas
           -mgnu-ld   -mhp-ld -mfixed-range=register-range -mjump-in-delay
           -mlinker-opt -mlong-calls -mlong-load-store  -mno-big-switch
           -mno-disable-fpregs -mno-disable-indexing  -mno-fast-indirect-calls
           -mno-gas -mno-jump-in-delay  -mno-long-load-store
           -mno-portable-runtime  -mno-soft-float -mno-space-regs
           -msoft-float  -mpa-risc-1-0 -mpa-risc-1-1  -mpa-risc-2-0
           -mportable-runtime -mschedule=cpu-type  -mspace-regs  -msio  -mwsio
           -munix=unix-std  -nolibdld  -static  -threads

           i386x86-64 オプション -mtune=cpu-type  -march=cpu-type
           -mfpmath=unit -masm=dialect  -mno-fancy-math-387 -mno-fp-ret-in-387
           -msoft-float  -msvr3-shlib -mno-wide-multiply  -mrtd
           -malign-double -mpreferred-stack-boundary=num -mmmx  -msse  -msse2
           -msse3 -mssse3 -m3dnow -mthreads  -mno-align-stringops
           -minline-all-stringops -mpush-args  -maccumulate-outgoing-args
           -m128bit-long-double -m96bit-long-double  -mregparm=num
           -msseregparm -mstackrealign -momit-leaf-frame-pointer
           -mno-red-zone -mno-tls-direct-seg-refs -mcmodel=code-model -m32
           -m64 -mlarge-data-threshold=num

           IA-64 オプション -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld
           -mno-pic -mvolatile-asm-stop  -mregister-names  -mno-sdata
           -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency
           -minline-float-divide-max-throughput
           -minline-int-divide-min-latency -minline-int-divide-max-throughput
           -minline-sqrt-min-latency -minline-sqrt-max-throughput
           -mno-dwarf2-asm -mearly-stop-bits -mfixed-range=register-range
           -mtls-size=tls-size -mtune=cpu-type -mt -pthread -milp32 -mlp64
           -mno-sched-br-data-spec -msched-ar-data-spec
           -mno-sched-control-spec -msched-br-in-data-spec
           -msched-ar-in-data-spec -msched-in-control-spec -msched-ldc
           -mno-sched-control-ldc -mno-sched-spec-verbose
           -mno-sched-prefer-non-data-spec-insns
           -mno-sched-prefer-non-control-spec-insns
           -mno-sched-count-spec-in-critical-path

           M32R/D オプション -m32r2 -m32rx -m32r -mdebug -malign-loops
           -mno-align-loops -missue-rate=number -mbranch-cost=number
           -mmodel=code-size-model-type -msdata=sdata-type -mno-flush-func
           -mflush-func=name -mno-flush-trap -mflush-trap=number -G num

           M32C オプション -mcpu=cpu -msim -memregs=number

           M680x0 オプション -m68000  -m68020  -m68020-40  -m68020-60  -m68030
           -m68040 -m68060  -mcpu32  -m5200  -mcfv4e -m68881  -mbitfield
           -mc68000  -mc68020 -mnobitfield  -mrtd  -mshort  -msoft-float
           -mpcrel -malign-int  -mstrict-align  -msep-data  -mno-sep-data
           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library

           M68hc1x オプション -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12
           -mauto-incdec  -minmax  -mlong-calls  -mshort
           -msoft-reg-count=count

           MCore オプション -mhardlit  -mno-hardlit  -mdiv  -mno-div
           -mrelax-immediates -mno-relax-immediates  -mwide-bitfields
           -mno-wide-bitfields -m4byte-functions  -mno-4byte-functions
           -mcallgraph-data -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes
           -mno-lsim -mlittle-endian  -mbig-endian  -m210  -m340
           -mstack-increment

           MIPS オプション -EL  -EB  -march=arch  -mtune=arch -mips1  -mips2
           -mips3  -mips4  -mips32  -mips32r2  -mips64 -mips16  -mno-mips16
           -mabi=abi  -mabicalls  -mno-abicalls -mshared  -mno-shared  -mxgot
           -mno-xgot  -mgp32  -mgp64 -mfp32  -mfp64  -mhard-float
           -msoft-float -msingle-float  -mdouble-float  -mdsp  -mpaired-single
           -mips3d -mlong64  -mlong32  -msym32  -mno-sym32 -Gnum
           -membedded-data  -mno-embedded-data -muninit-const-in-rodata
           -mno-uninit-const-in-rodata -msplit-addresses  -mno-split-addresses
           -mexplicit-relocs  -mno-explicit-relocs -mcheck-zero-division
           -mno-check-zero-division -mdivide-traps  -mdivide-breaks -mmemcpy
           -mno-memcpy  -mlong-calls  -mno-long-calls -mmad  -mno-mad
           -mfused-madd  -mno-fused-madd  -nocpp -mfix-r4000  -mno-fix-r4000
           -mfix-r4400  -mno-fix-r4400 -mfix-vr4120  -mno-fix-vr4120
           -mfix-vr4130 -mfix-sb1  -mno-fix-sb1 -mflush-func=func
           -mno-flush-func -mbranch-likely  -mno-branch-likely -mfp-exceptions
           -mno-fp-exceptions -mvr4130-align -mno-vr4130-align

           MMIX オプション -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon
           -mabi=gnu -mabi=mmixware  -mzero-extend  -mknuthdiv
           -mtoplevel-symbols -melf  -mbranch-predict  -mno-branch-predict
           -mbase-addresses -mno-base-addresses  -msingle-exit
           -mno-single-exit

           MN10300 オプション -mmult-bug  -mno-mult-bug -mam33  -mno-am33
           -mam33-2  -mno-am33-2 -mreturn-pointer-on-d0 -mno-crt0  -mrelax

           MT オプション -mno-crt0 -mbacc -msim -march=cpu-type

           PDP-11 オプション -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45
           -m10 -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 -mint16
           -mno-int32  -mfloat32  -mno-float64 -mfloat64  -mno-float32
           -mabshi  -mno-abshi -mbranch-expensive  -mbranch-cheap -msplit
           -mno-split  -munix-asm  -mdec-asm

           PowerPC オプション RS/6000 と PowerPC オプション参照。

           RS/6000PowerPC オプション -mcpu=cpu-type -mtune=cpu-type
           -mpower  -mno-power  -mpower2  -mno-power2 -mpowerpc  -mpowerpc64
           -mno-powerpc -maltivec  -mno-altivec -mpowerpc-gpopt
           -mno-powerpc-gpopt -mpowerpc-gfxopt  -mno-powerpc-gfxopt -mmfcrf
           -mno-mfcrf  -mpopcntb  -mno-popcntb  -mfprnd  -mno-fprnd
           -mnew-mnemonics  -mold-mnemonics -mfull-toc   -mminimal-toc
           -mno-fp-in-toc  -mno-sum-in-toc -m64  -m32  -mxl-compat
           -mno-xl-compat  -mpe -malign-power  -malign-natural -msoft-float
           -mhard-float  -mmultiple  -mno-multiple -mstring  -mno-string
           -mupdate  -mno-update -mfused-madd  -mno-fused-madd  -mbit-align
           -mno-bit-align -mstrict-align  -mno-strict-align  -mrelocatable
           -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib -mtoc
           -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
           -mdynamic-no-pic  -maltivec  -mswdiv
           -mprioritize-restricted-insns=priority
           -msched-costly-dep=dependence_type -minsert-sched-nops=scheme
           -mcall-sysv  -mcall-netbsd -maix-struct-return
           -msvr4-struct-return -mabi=abi-type -msecure-plt -mbss-plt -misel
           -mno-isel -misel=yes  -misel=no -mspe -mno-spe -mspe=yes  -mspe=no
           -mvrsave -mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb
           -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single
           -mfloat-gprs=double -mprototype  -mno-prototype -msim  -mmvme
           -mads  -myellowknife  -memb  -msdata -msdata=opt  -mvxworks
           -mwindiss  -G num  -pthread

           S/390zSeries オプション -mtune=cpu-type  -march=cpu-type
           -mhard-float  -msoft-float -mlong-double-64 -mlong-double-128
           -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
           -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle -m64  -m31
           -mdebug  -mno-debug  -mesa  -mzarch -mtpf-trace -mno-tpf-trace
           -mfused-madd  -mno-fused-madd -mwarn-framesize  -mwarn-dynamicstack
           -mstack-size -mstack-guard

           Score オプション -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u
           -mscore7 -mscore7d

           SH オプション -m1  -m2  -m2e  -m3  -m3e -m4-nofpu  -m4-single-only
           -m4-single  -m4 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
           -m5-64media  -m5-64media-nofpu -m5-32media  -m5-32media-nofpu
           -m5-compact  -m5-compact-nofpu -mb  -ml  -mdalign  -mrelax
           -mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave
           -mieee  -misize  -mpadstruct  -mspace -mprefergot  -musermode
           -multcost=number -mdiv=strategy -mdivsi3_libfunc=name
           -madjust-unroll -mindexed-addressing -mgettrcost=number -mpt-fixed
            -minvalid-symbols

           SPARC オプション -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model
           -m32  -m64  -mapp-regs  -mno-app-regs -mfaster-structs
           -mno-faster-structs -mfpu  -mno-fpu  -mhard-float  -msoft-float
           -mhard-quad-float  -msoft-quad-float -mimpure-text
           -mno-impure-text  -mlittle-endian -mstack-bias  -mno-stack-bias
           -munaligned-doubles  -mno-unaligned-doubles -mv8plus  -mno-v8plus
           -mvis  -mno-vis -threads -pthreads -pthread

           System V オプション -Qy  -Qn  -YP,paths  -Ym,dir

           TMS320C3x/C4x オプション -mcpu=cpu  -mbig  -msmall  -mregparm
           -mmemparm -mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload
           -mrpts=count  -mrptb  -mdb  -mloop-unsigned -mparallel-insns
           -mparallel-mpy  -mpreserve-float

           V850 オプション -mlong-calls  -mno-long-calls  -mep  -mno-ep
           -mprolog-function  -mno-prolog-function  -mspace -mtda=n  -msda=n
           -mzda=n -mapp-regs  -mno-app-regs -mdisable-callt
           -mno-disable-callt -mv850e1 -mv850e -mv850  -mbig-switch

           VAX オプション -mg  -mgnu  -munix

           x86-64 オプション i386 と x86-64 オプション参照。

           Xstormy16 オプション -msim

           Xtensa オプション -mconst16 -mno-const16 -mfused-madd
           -mno-fused-madd -mtext-section-literals  -mno-text-section-literals
           -mtarget-align  -mno-target-align -mlongcalls  -mno-longcalls

           zSeries オプション S/390 と zSeries オプション参照。

       コード生成オプション
           -fcall-saved-reg  -fcall-used-reg -ffixed-reg  -fexceptions
           -fnon-call-exceptions  -funwind-tables -fasynchronous-unwind-tables
           -finhibit-size-directive  -finstrument-functions -fno-common
           -fno-ident -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
           -fno-jump-tables -freg-struct-return  -fshort-enums -fshort-double
           -fshort-wchar -fverbose-asm  -fpack-struct[=n]  -fstack-check
           -fstack-limit-register=reg  -fstack-limit-symbol=sym
           -fargument-alias  -fargument-noalias -fargument-noalias-global
           -fargument-noalias-anything -fleading-underscore  -ftls-model=model
           -ftrapv  -fwrapv  -fbounds-check -fvisibility

       出力の種類を制御するオプション

       コンパイルは最大 4 つのステージを必要とします: 前処理 (プリプロセス)、
       コンパイル自体、アセンブリ、とリンクで、常にその順序で行われます。GCC
       は、いくつかのファイルを前処理して、コンパイルして、いくつかのアセンブ
       ラ入力ファイル、または、1 つのアセンブラ入力ファイルにすることができま
       す。次に、それぞれのアセンブラ入力ファイルはオブジェクトファイルを生成
       し、リンクは、すべてのオブジェクトファイル (新しくコンパイルされ、入力
       として指定されたもの) を実行形式ファイルに結合します。

       任意の与えられた入力ファイルについて、ファイル名のサフィックスは、どの
       ようなコンパイルを行うかを決定します:

       file.c
           前処理されなければならない C ソースコード。

       file.i
           前処理されるべきでない C ソースコード。

       file.ii
           前処理されるべきでない C++ ソースコード。

       file.h
           プリコンパイルされたヘッダに変えられる C または C++ ヘッダファイ
           ル。

       file.cc
       file.cp
       file.cxx
       file.cpp
       file.CPP
       file.c++
       file.C
           前処理されなければならない C++ ソースコード。.cxx に関して、最後の
           2 つの文字はともに定数 x でなければならないことに注意してください、
           同様に、.C は定数の大文字 C です。

       file.hh
       file.H
           プリコンパイルされたヘッダに変えられる C++ ヘッダファイル。

       file.f
       file.for
       file.FOR
           前処理されるべきでない固定形式の Fortran ソースコード。

       file.F
       file.fpp
       file.FPP
           (伝統的なプリプロセッサで) 前処理されなければならない固定形式の
           Fortran ソースコード。

       file.f90
       file.f95
           前処理されるべきでない自由形式の Fortran ソースコード。

       file.F90
       file.F95
           (伝統的なプリプロセッサで) 前処理されなければならない自由形式の
           Fortran ソースコード。

       file.ads
           ライブラリユニット宣言 (パッケージ、サブプログラム、または汎用体
           (generic) の宣言、または汎用体具体化 (generic instantiation))、また
           はライブラリユニット改名宣言 (パッケージ、汎用体、またはサブプログ
           ラム改名宣言) を含む Ada ソースコードファイル。また、そのようなファ
           イルは specs と呼ばれます。

       file.adb
           ライブラリユニットのボディ (サブプログラムまたはパッケージのボディ)
           を含む Ada ソースコードファイル。また、そのようなファイルは bodies
           と呼ばれます。

       file.s
           アセンブラコード。

       file.S
           前処理されなければならないアセンブラコード。

       other
           直接リンクに渡されるオブジェクトファイル。認識されないサフィックス
           がついたすべてのファイル名は、このように扱われます。

       利用者は、-x オプションで明示的に入力言語を指定することができます:

       -x language
           (コンパイラがファイル名のサフィックスに基づくデフォルトを選択するよ
           りむしろ) 続く入力ファイルのための language を明示的に指定します。
           このオプションは、次の -x オプションまで、すべての後に続く入力ファ
           イルに適用されます。language のために指定できる値は次の通りです:

                   c  c-header  c-cpp-output
                   c++  c++-header  c++-cpp-output
                   assembler  assembler-with-cpp
                   ada
                   f95  f95-cpp-input
                   java
                   treelang

       -x none
           それに続くファイルが、それらのファイル名サフィックスにしたがって、
           (まるで、それらに -x が全く使用されていないかのように) 取り扱われる
           ように、言語のあらゆる指定をオフにします。

       -pass-exit-codes
           通常、gcc プログラムは、コンパイラの任意のフェーズで成功でないリ
           ターンコードを返すなら、1 のコードで終了します。-pass-exit-codes を
           指定するなら、gcc プログラムは、代わりにエラーを示して返った任意の
           フェーズによって生成された数値的に最も高いエラーとともに返ります。
           内部コンパイラエラーに遭遇するなら、C、C++ と Fortran フロントエン
           ドは、4 を返します。

       コンパイルのあるステージのみを望んでいるなら、利用者は、-x (または、
       ファイル名のサフィックス) を使用して、gcc にどこで始まるかを伝えること
       ができ、オプション -c, -S または -E の 1 つを使用して gcc がどこで停止
       するかを伝えます。いくつかの組み合わせ (例えば、-x cpp-output -E) は、
       gcc に何もしないように指示することに注意してください。

       -c  ソースファイルをコンパイルするか、またはアセンブルしますが、リンク
           しません。単にリンクステージを実行しません。最終的な出力は、各ソー
           スファイルのためのオブジェクトファイルの形式です。

           デフォルトでは、ソースファイルに対するオブジェクトファイル名は、サ
           フィックス .c, .i, .s、その他を .o に置き換えたものになります。

           コンパイルまたはアセンブリを必要としない、認識されていない入力ファ
           イルは、無視されます。

       -S  コンパイル自体のステージの後で停止します。アセンブルは行いません。
           出力は、指定された各アセンブラでない入力ファイルのためのアセンブラ
           コードファイルの形式です。

           デフォルトでは、ソースファイルに対するアセンブラファイル名は、サ
           フィックス .c, .i、その他を .s に置き換えたものになります。

           コンパイルを必要としない入力ファイルは、無視されます。

       -E  前処理ステージの後に停止します。コンパイラ自体は、実行されません。
           出力は、(標準出力に送られる) 前処理されたソースコードの形式です。

           前処理を必要としない入力ファイルは、無視されます。

       -o file
           出力をファイル file にします。これは、実行形式ファイル、オブジェク
           トファイル、アセンブラファイルまたは前処理された C コードであろうと
           なかろうと、生成される出力の種類にかかわらず適用します。

           -o が指定されないなら、デフォルトでは、a.out に実行形式ファイルを、
           source.osource.suffix のオブジェクトファイルを、source.s のその
           アセンブラファイルを、source.suffix.gch にプリコンパイルされたヘッ
           ダファイルを、そして標準出力にすべての前処理された C ソースを置きま
           す。

       -v  コンパイルのステージで実行されたコマンドを (標準エラー出力で) 印刷
           (表示) します。また、コンパイラドライバプログラムとプリプロセッサと
           コンパイラ自体のバージョン番号を印刷 (表示) します。

       -###
           コマンドは実行されず、すべてコマンドの引数がクォート (引用) される
           ことを除いて、-v に似ています。これは、ドライバが生成したコマンドラ
           インを獲得するためのシェルスクリプトに役に立ちます。

       -pipe
           コンパイル様々なステージの間の通信のために一時ファイルでなくパイプ
           を使用します。これは、アセンブラがパイプから読み込むことができない
           いくつかのシステムで失敗します。しかし、GNU アセンブラは問題ありま
           せん。

       -combine
           利用者が複数のソースファイルをコンパイルしているなら、このオプショ
           ンは、(コンパイラが処理できるそれらの言語に対して) 同時にすべての
           ソースファイルをコンパイラに渡すようにドライバに伝えます。これに
           よって、インタモジュール (intermodule) 分析 (IMA) をコンパイラに
           よって実行できます。現在、これがサポートされる唯一の言語は、C で
           す。利用者が、このオプションを使用して複数の言語のためのソースファ
           イルをドライバに渡すなら、ドライバは、適切なすべてのソースファイル
           を各コンパイラに渡して、それぞれ一度、IMA をサポートする (複数の)
           コンパイラを呼び出します。IMA をサポートしないそれらの言語に関し
           て、このオプションは無視され、コンパイラは、その言語の各ソースファ
           イルのために一度呼び出されます。利用者が、-save-temps とともにこの
           オプションを使用するなら、コンパイラは、(各ソースファイルあたり 1
           つ) 複数の前処理されたファイルを生成しますが、(結合された) .o また
           は .s ファイルだけです。

       --help
           gcc によって解釈されるコマンドラインオプションの説明を (標準出力に)
           印刷 (表示) します。-v オプションも指定されるなら、様々なプロセスが
           受け付けるコマンドラインオプションを表示できるように、gcc によって
           呼び出される様々なプロセスに --help を渡します。-Wextra オプション
           も指定されるなら、コマンドに関連している文書化されていないコマンド
           ラインオプションも表示されます。

       --target-help
           各ツールのためのターゲット特有のコマンドラインオプションの説明を
           (標準出力に) 印刷 (表示) します。

       --version
           呼び出された GCC のバージョン番号と著作権を表示します。

       @file
           file からコマンドラインのオプションを読み込みます。読み込まれたオプ
           ションは、オリジナルの @file オプションの場所に代わって挿入されま
           す。file が存在しないか、または読み込むことができないなら、オプショ
           ンは、文字通りに扱われ、取り除かれません。

           file 中のオプションは、空白類によって分離されます。空白類の文字は、
           シングルクォートまたはダブルクォートのいずれかで全体のオプションを
           囲むことによって、オプションに含めることができます。(バックスラッ
           シュを含む) 任意の文字は、バックスラッシュを文字を前に置くことに
           よって、含めることができます。file は、それ自体に、追加の @file オ
           プションを含むことができます。そのようなオプションは、再帰的に処理
           されます。

       C++ プログラムのコンパイル

       C++ ソースファイルは伝統的にサフィックス .C, .cc, .cpp, .CPP, .c++, .cp
       または .cxx の 1 つを使用します。C++ のヘッダファイルはしばしば .hh ま
       たは .H を使用します。そして、前処理された C++ ファイルはサフィックス
       .ii 使用します。利用者が (通常、名前 gcc で) C プログラムをコンパイルす
       るのと同じ方法で、コンパイラを呼び出しても、GCC は、これらの名前のファ
       イルを認識して、C++ プログラムとしてそれらをコンパイルします。

       しかしながら、gcc の使用は、C++ ライブラリを追加しません。g++ は、GCC
       を呼び出し、-x が使用されていないなら、C ソースファイルの代わりに C++
       ソースファイルとして .c, .h.i ファイルを取り扱い、C++ ライブラリに
       対して自動的にリンクすることを指定するプログラムです。また、このプログ
       ラムは、C++ のコンパイルで使用される .h 拡張子がある C ヘッダファイルを
       プリコンパイルするとき、役に立ちます。また、多くのシステムでは、g++
       は、名前 c++ でインストールされます。

       C++ プログラムをコンパイルするとき、利用者は、任意の言語で、プログラム
       をコンパイルするために使用するのと同じ多くのコマンドラインオプション、
       または、C と関連する言語に意味があるコマンドラインオプション、または、
       C++ プログラムのみに意味があるオプションを指定することができます。

       C の方言を制御するオプション

       次のオプションは、コンパイラが受け付ける C (または、C++ のような C から
       派生した言語) の方言を制御します:

       -ansi
           C モードで、すべての ISO C90 プログラムをサポートします。C++ モード
           で、ISO C++ と競合る GNU 拡張子を取り除きます。

           これは、"asm" と "typeof" キーワードと利用者が使用しているシステム
           のタイプを識別する "unix" と "vax" のような事前に定義されたマクロの
           ように、(C コードをコンパイルするとき) ISO C90 または (C++ コードを
           コンパイルするとき) 標準の C++ と互換性がない、GCC の特定の機能をオ
           フにします。また、望ましくなく、めったに使用されない ISO トライグラ
           フ機能を有効にします。C コンパイラのために、"inline" キーワードと同
           様に C++ スタイルの // コメントの認識を無効にします。

           代替のキーワード "__asm__", "__extension__", "__inline__" と
           "__typeof__" は、-ansi にもかかわらず動作します。もちろん ISO C プ
           ログラムでそれらを使用したくないかもしれませんが、-ansi で行われる
           コンパイルに含まれるかもしれないヘッダファイルに、それらを入れるた
           めにに役に立ちます。また、"__unix__" と "__vax__" のような代替の事
           前に定義されたマクロも -ansi の有無にかかわらず利用可能です。

           -ansi オプションによって、ISO でないプログラムは、根拠もなく拒否さ
           れません。それに関しては、-pedantic-ansi に加えて必要です。

           マクロ "__STRICT_ANSI__" は、-ansi オプションが使用されるとき、事前
           に定義されます。いくつかのヘッダファイルは、このマクロに気付いて、
           ISO 標準が要求しない、特定の関数を宣言するか、または特定のマクロを
           定義することを控えます。これは、他のものにこれらの名前を使用するか
           もしれない任意のプログラムとの干渉を防ぐためです。

           通常、組み込まれていますが、ISO C によって定義されたセマンティクス
           (意味) を持っていない ("alloca" と "ffs" のような) 関数は、-ansi で
           使用される組み込み関数ではありません。

       -std=
           言語の標準を決定します。このオプションは、現在、C または C++ をコン
           パイルするときのみ、サポートされています。このオプションのための値
           が提供されなければなりません。利用可能な値は次の通りです。

           c89
           iso9899:1990
               ISO C90 (-ansi と同様)。

           iso9899:199409
               改正 1 として変更された ISO C90。

           c99
           c9x
           iso9899:1999
           iso9899:199x
               ISO C99。この標準はまだ完全にサポートされていないことに注意して
               ください。詳細については、
               <http://gcc.gnu.org/gcc-4.2/c99status.html> を参照してくださ
               い。名前 c9xiso9899:199x は古くて推奨されません。

           gnu89
               デフォルトの ISO C90 に GNU 拡張 (いくつかの C99 の機能を含んで
               いる) を追加したもの。

           gnu99
           gnu9x
               ISO C99 に GNU 拡張を追加したもの。ISO C99 が GCC で完全に実装
               されるとき、これはデフォルトになるでしょう。名前 gnu9x は古くて
               推奨されません。

           c++98
               1998 年の ISO C++ 標準に改定を追加したもの。

           gnu++98
               -std=c++98 に GNU 拡張を追加したものと同じです。これは C++ コー
               ドのためのデフォルトです。

           このオプションが指定されないときでさえ、以前の C の標準と競合しない
           限りにおいて、より新しい標準の機能のいくつかを使用することができま
           す。例えば、利用者は、-std=c99 が指定されないときでさえ、
           "__restrict__" を使用することができます。

           ISO C のあるバージョンを指定する -std オプションは、ISO C90 ではな
           いが、指定されたバージョンにある機能 (例えば、ISO C99 の // コメン
           トと "inline" キーワード) が無効でないことを除いて、-ansi と同じ効
           果があります。

       -fgnu89-inline
           オプション -fgnu89-inline は、C99 モードのときに、"inline" 関数のた
           めの伝統的な GNU セマンティクスを使用するように GCC に伝えます。こ
           のオプションを使用することは、"gnu_inline" 関数属性をすべてのインラ
           イン関数に追加するのとほぼ同等です。

           このオプションは、GCC バージョン 4.1.3 以上で受け付けられます。4.3
           より前の GCC バージョンでは、C99 のインラインセマンティクスは、サ
           ポートされず、したがって、このオプションは、それが指定されているか
           どうかにかかわらず、事実上存在していると仮定されます。明白にそれを
           指定するという唯一の影響は、C99 モードでインライン関数を使用して警
           告を無効にすることです。同様に、オプション -fno-gnu89-inline は、
           4.3 より前の GCC のバージョンでサポートされていません。それは、C89
           または gnu89 モードでサポートされず、C99 または gnu99 モードでのみ
           サポートされます。

           プリプロセッサマクロ "__GNUC_GNU_INLINE__" と
           "__GNUC_STDC_INLINE__" は、どのようなセマンティクスが "inline" 関数
           で効力があるかをチェックするために使用されます。

       -aux-info filename
           変換ユニットで定義され、および/または宣言される、すべての関数のため
           のプロトタイプ宣言を、ヘッダファイルにそれらを含んで、与えられた
           ファイル名に出力します。このオプションは C 以外の言語で黙って無視さ
           れます。

           宣言のほかに、ファイルは、宣言が暗黙でか、プロトタイプ宣言された
           か、またはプロトタイプ宣言れていないか (行番号とコロンの後の最初の
           文字が、それぞれ I、新しい N、古い O) どうか、宣言または定義 (続く
           文字が、それぞれ、C または F) から来たかどうかを、コメントでそれぞ
           れの宣言の起源を (ソースファイルと行で) 示します。関数定義の場合
           に、K&R-スタイルの引数のリストに続くそれらの宣言は、宣言の後で、コ
           メント内に提供されます。

       -fno-asm
           "asm", "inline" または "typeof" をキーワードとして認識しません。そ
           れにより、コードは、識別子としてこれらの単語を使用することができま
           す。利用者は代わりにキーワード "__asm__", "__inline__" と
           "__typeof__" を使用することができます。-ansi-fno-asm の意味を含
           みます。

           C++ では、このスイッチは、"asm" と "inline" が標準のキーワードであ
           るので "typeof" キーワードにのみ影響します。利用者は、同じ効果があ
           る、-fno-gnu-keywords フラグを代わりに使用したいかもしれません。C99
           モード (-std=c99 または -std=gnu99) では、このスイッチは、"inline"
           が ISO C99 の標準のキーワードであるので、"asm" と "typeof" キーワー
           ドにのみ影響します。

       -fno-builtin
       -fno-builtin-function
           プレフィックスとして __builtin_ で始まらない組み込み関数を認識しま
           せん。

           通常、GCC は、より効率的に特定の組み込み関数を扱うための特別なコー
           ドを生成します。例えば、"alloca" への呼び出しは、直接スタックを調整
           する単一の命令になり、"memcpy" への呼び出しはインラインコピーのルー
           プになります。結果のコードは、しばしば小さくてより速いですが、関数
           呼び出しのようなものとして現れないので、利用者はそれらの呼び出しに
           ブレークポイントを設定することができませんし、異なったライブラリを
           リンクすることによって、関数の振る舞いを変更することができません。
           さらに、関数が組み込み関数として認識されるとき、GCC は、その関数へ
           の呼び出しでの問題に警告するか、または、たとえ結果のコードがまだそ
           の関数への呼び出し含んでいても、より効率的なコードを生成するため
           に、その関数に関する情報を使用します。例えば、"printf" が組み込まれ
           ていて、"strlen" がグローバルなメモリを変更しないことを知っていると
           き、"printf" への悪い呼び出しに対して -Wformat で警告が与えられま
           す。

           -fno-builtin-function オプションでのみ、組み込み関数 function を無
           効とします。function__builtin_ で始まってはいけません。GCC のこ
           のバージョンで組み込みでない関数が指定されるなら、このオプションは
           無視されます。対応する -fbuiltin-function オプションはありません。
           -fno-builtin または -ffreestanding を使用するとき、組み込み関数を選
           択的に有効にしたいなら、利用者は次のようなマクロを定義することがで
           きます:

                   #define abs(n)          __builtin_abs ((n))
                   #define strcpy(d, s)    __builtin_strcpy ((d), (s))

       -fhosted
           ホスト環境 (hosted environment) で行われるコンパイルをアサートしま
           す。これは -fbuiltin の意味を含んでいます。ホスト環境は、標準ライブ
           ラリの全部が利用可能であり、"main" が "int" のタイプを返す環境で
           す。実例はカーネルを除いてほとんどすべてです。これは
           -fno-freestanding と同等です。

       -ffreestanding
           フリースタンディング (独立した) 環境 (freestanding environment) で
           行われるコンパイルをアサートします。これは -fno-builtin の意味を含
           んでいます。フリースタンディング環境は、標準ライブラリが存在しない
           かもしれなくて、プログラムが "main" で開始される必要がない環境で
           す。最も明らかな例は OS のカーネルです。これは -fno-hosted と同等で
           す。

       -fopenmp
           C/C++ の OpenMP ディレクティブ "#pragma omp" と Fortran の "!$omp"
           の操作を有効にします。-fopenmp が指定されるとき、コンパイラは、
           OpenMP Application Program Interface v2.5 <http://www.openmp.org/>
           にしたがって並列実行コードを生成します。

       -fms-extensions
           Microsoft ヘッダファイルで使用されるいくつかの標準的でない構造を受
           け付けます。

           構造体と共用体の無名のフィールドの場合は、このオプションでのみ受け
           付けられます。

       -trigraphs
           ISO C トライグラフをサポートします。-ansi オプション (と、厳格な
           ISO C 準拠のための -std オプション) は、-trigraphs の意味を含んでい
           ます。

       -no-integrated-cpp
           2 つのパスでコンパイルを実行します: 前処理とコンパイルです。このオ
           プションによって、-B オプションによってユーザによって供給された
           "cc1", "cc1plus" または "cc1obj" を使用することができます。次に、
           ユーザが供給したコンパイルステップは、通常の前処理の後で、コンパイ
           ルの前に追加前処理ステップとして追加することができます。デフォルト
           では統合 cpp (内部の cpp) を使用します。

           このオプションのセマンティクス (意味) は、"cc1", "cc1plus" と
           "cc1obj" がマージされているなら、変更されます。

       -traditional
       -traditional-cpp
           以前は、これらのオプションによって、GCC は、標準化以前 (pre
           standard) の C コンパイラのエミュレートを試みました。それらは現在、
           -E スイッチでのみサポートされています。プリプロセッサは、標準化以前
           モードをサポートし続けています。詳細については、GNU CPP マニュアル
           を参照してください。

       -fcond-mismatch
           2 番目と 3 番目の引数で適合しないタイプがある条件演算子を許可しま
           す。そのような式の値は void です。このオプションは C++ ではサポート
           されていません。

       -funsigned-char
           タイプ "char" を "unsigned char" のように符号無しとします。

           マシンの種類毎に、"char" が何であるべきかのデフォルトがあります。デ
           フォルトで "unsigned char" のようか、またはデフォルトで "signed
           char" のようかのいずれかです。

           理想的には、移植性のあるプログラムは、オブジェクトの符号の状態に依
           存するとき、常に "signed char" または "unsigned char" を使用するべ
           きです。しかし、多くのプログラムは単に "char" を使用して書かれてお
           り、プログラムが書かれたマシンによって、符号付きを期待するか、また
           は符号無しを期待しています。このオプションとその逆で、利用者は、そ
           のようなプログラムをデフォルトの反対に動作させることができます。

           たとえ、振る舞いは、常にそれらの 2 のうちの 1 つのようですが、タイ
           プ "char" は常に、それぞれの "signed char" または "unsigned char"
           とは異なったタイプです。

       -fsigned-char
           タイプ "char" を "signed char" のように符号付きとします。

           これは、-funsigned-char の否定形式である、-fno-unsigned-char と同等
           であることに注意してください。同様に、オプション -fno-signed-char-funsigned-char と同等です。

       -fsigned-bitfields
       -funsigned-bitfields
       -fno-signed-bitfields
       -fno-unsigned-bitfields
           これらのオプションは、宣言が "signed" または "unsigned" のどちらも
           使用しないとき、ビットフィールドが符号付きか符号無しかどうかを制御
           します。デフォルトでは、これが次のように一貫しているので、そのよう
           なビットフィールドは符号付きです: "int" のような基本的な整数タイプ
           は符号付きタイプです。

       C++ 方言を制御するオプション

       このセクションは C++ プログラムのみに重要なコマンドラインオプションにつ
       いて説明しています。しかし、また、利用者のプログラムがどのような言語で
       あるかにかかわらず GNU コンパイラオプションの大部分を使用することができ
       ます。例えば、利用者は、次にようにファイル "firstClass.C" をコンパイル
       するかもしれません:

               g++ -g -frepo -O -c firstClass.C

       この例では、-frepo だけが C++ プログラムのみに意味があるオプションで
       す。利用者は GCC によってサポートされるあらゆる言語と共に他のオプション
       を使用することができます。

       ここに、C++ プログラムをコンパイルするためのみのオプションのリストを示
       します:

       -fabi-version=n
           C++ ABI のバージョン n を使用します。バージョン 2 は G++ 3.4 ではじ
           めて登場した C++ ABI のバージョンです。バージョン 1 は G++ 3.2 では
           じめて登場した C++ ABI のバージョンです。バージョン 0 は常に C++
           ABI 仕様にもっとも適合するバージョンです。したがって、バージョン 0
           を使用して取得された ABI は、ABI バグが修正されるように変化します。

           デフォルトはバージョン 2 です。

       -fno-access-control
           すべてのアクセスチェックをオフにします。このスイッチは主にアクセス
           制御コードでバグを回避して動作するのに役に立ちます。

       -fcheck-new
           "operator new" によって返されたポインタが割り付けられた記憶域の変更
           を試みる前に、NULL でないかチェックします。C++ 標準は、throw() で宣
           言されるなら、"operator new" が 0 のみを返すことを指定するので、こ
           のチェックは、通常不要です。その場合、コンパイラはこのオプションが
           なくても返り値を常にチェックします。他のすべての場合には、"operator
           new" に、ノンエンプティ例外指定があるとき、メモリを使い尽くしたこと
           は、"std::bad_alloc" を投げることによって、シグナルが起こされます。
           また、new (nothrow) を参照してください。

       -fconserve-space
           初期化されていないか、または実行に初期化されるグローバル変数を C が
           行うように共通セグメントに入れます。これは複製された定義を診断しな
           いことを犠牲にして実行形式の空間を節約します。このフラグでコンパイ
           ルして、利用者のプログラムが "main()" が終了した後に不可解にクラッ
           シュするなら、2 つの定義がマージされたので、二度破壊されているオブ
           ジェクトがあるかもしれません。

           現在、それらを共有せずに BSS に変数を入れるようにサポートが追加され
           ているので、このオプションはほとんどのターゲットで、もはや役に立ち
           ません、

       -ffriend-injection
           それらが宣言されるクラスの範囲の外側で目に見えることができるよう
           に、囲まれた名前空間に friend 関数を注入 (inject) します。friend 関
           数は、古い Annotated C++ Reference Manual でこのように動作するよう
           に文書化され、4.1 より前の G++ のバージョンは、常にそのように動作し
           ます。しかしながら、ISO C++ では、引数に依存する検索を使用して、囲
           まれたスコープで宣言されない friend 関数を見つけることだけができま
           す。このオプションによって、friend を、以前のリリースとして注入しま
           す。

           このオプションは、互換性のためであり、G++ の今後のリリースで削除さ
           れるかもしれません。

       -fno-elide-constructors
           C++ 標準によって、実装は、同じタイプの別のオブジェクトを初期化する
           ためにだけ使用されるテンポラリの作成を省略することができます。この
           オプションを指定することは、その最適化を無効にし、G++ がすべての場
           合にコピーコンストラクタの呼び出すように強制します。

       -fno-enforce-eh-specs
           実行時に例外指定の侵犯をチェックするためのコードを生成しません。こ
           のオプションは、C++ 標準に違反していますが、NDEBUG を定義することと
           よく似て、製品の構築でコードサイズを削減するために役に立ちます。こ
           れは例外指定の侵犯で例外を投げる許可をユーザコードに与えません。コ
           ンパイラは、それでも、仕様に基づいて最適化されるので、予期していな
           かった例外を投げられると、未定義の振る舞いの結果となります。

       -ffor-scope
       -fno-for-scope
           -ffor-scope が指定されるなら、for-init-statement で宣言された変数の
           スコープ (範囲) は、C++ 標準によって指定されるように、for ループ自
           体に制限されます。-fno-for-scope が指定されるなら、for-init-
           statement で宣言された変数のスコープ (範囲) は、G++ の古いバージョ
           ンと他の (伝統的な) C++ 実装の場合にように、囲まれたスコープの終り
           まで拡張されます。

           どちらのフラグも与えられない場合のデフォルトは、標準に従いますが、
           そうでなければ、不正であるか、または異なった振る舞いがある古いスタ
           イルのコードのために警告を与えて許可します。

       -fno-gnu-keywords
           キーワードとし "typeof" を認識せずに、コードが識別子としてこのワー
           ドを使用することができるようにします。利用者は、代わりにキーワード
           "__typeof__" を使用することができます。-ansi-fno-gnu-keywords
           の意味を含みます。

       -fno-implicit-templates
           (すなわち、使用することによって) 暗黙のうちにインスタンスを作成され
           る非インラインテンプレートのためのコードを決して出力しません。明示
           的なインスタンス化のためのコードのみを出力します。

       -fno-implicit-inline-templates
           暗黙のうちにインスタンス化されるインラインテンプレートのためのコー
           ドを出力しません。コンパイルの最適化のあるなしにかかわらず、同じ
           セットの明示的なインスタンス化を必要なので、デフォルトではインライ
           ンを異なって取り扱います。

       -fno-implement-inlines
           記憶域を節約するには、#pragma implementation によって制御されたイン
           ライン関数の調和していない (out-of-line) コピーを出力しません。これ
           らの関数が呼び出されているすべての場所でインライン化されていないな
           ら、これはリンカのエラーを引き起こします。

       -fms-extensions
           暗黙の int と標準でない構文によってメンバ関数へのポインタを取得する
           ような、MFC で使用されている構造に関する杓子定規な警告を無効にしま
           す。

       -fno-nonansi-builtins
           ANSI/ISO C によって強制されない関数の組み込みの宣言を無効にします。
           これらは "ffs", "alloca", "_exit", "index", "bzero", "conjf" と他の
           関連する関数を含んでいます。

       -fno-operator-names
           オペレータ名のキーワード "and", "bitand", "bitor", "compl", "not",
           "or" と "xor" をキーワードの同義語として取り扱いません。

       -fno-optional-diags
           標準によってコンパイラが出力する必要はないと述べられている診断を無
           効にします。現在、G++ によって出力されるそのような診断は、クラス内
           に複数の意味を持っている名前に対するもののみです。

       -fpermissive
           不適合なコードに関するいくつかの診断をエラーから警告まで格下げしま
           す。したがって、-fpermissive を使用することは、いくつかの不適合な
           コードをコンパイルできるようにします。

       -frepo
           リンク時に自動的なテンプレートのインスタンス化を有効にします。ま
           た、このオプションは -fno-implicit-templates の意味を含みます。

       -fno-rtti
           C++ 実行時タイプ識別機能 (dynamic_casttypeid) によって使用する
           仮想関数であらゆるクラスに関する情報の生成を無効にします。言語のそ
           れらの部品を使用しないなら、利用者は、このフラグを使用することに
           よって、いくらかの空間を節約することができます。例外操作は、同じ情
           報を使用しますが、必要に応じてそれを生成することに注意してくださ
           い。dynamic_cast 演算子は、まだ、ランタイムタイプ情報を必要としない
           キャストのために使用されます、すなわち、"void *" または明白な基底ク
           ラスへのキャスト。

       -fstats
           コンパイルの終わりでフロントエンド処理に関する統計を出力します。こ
           の情報は、一般的に、G++ 開発チームのみ役に立ちます。

       -ftemplate-depth-n
           テンプレートクラスのための最大のインスタンス化の深さを n に設定しま
           す。テンプレートのインスタンス化の深さの制限は、テンプレートクラス
           のインスタンス化の間の無限の繰り返しを検出するために必要です。
           ANSI/ISO C++ 適合プログラムは、17 より大きい最大の深さを当てにして
           はいけません。

       -fno-threadsafe-statics
           ローカルで静的な (static) のスレッドセーフの初期化のために C++ ABI
           で指定されたルーチンを使用する特別のコードを出力しません。利用者
           は、スレッドセーフであるある必要はないコードのコードサイズをわずか
           に減少させるためにこのオプションを使用することができます。

       -fuse-cxa-atexit
           "atexit" 関数よりはむしろ "__cxa_atexit" 関数で静的記憶域期間でオブ
           ジェクトのためのデストラクタを登録します。このオプションは、静的な
           デストラクタの完全な標準準拠の取り扱いに必要ですが、利用者の C ライ
           ブラリが "__cxa_atexit" をサポートする場合にだけ動作します。

       -fno-use-cxa-get-exception-ptr
           "__cxa_get_exception_ptr" ランタイムルーチンを使用しません。これに
           よって、"std::uncaught_exception" を不正としますが、ランタイムルー
           チンが利用可能でないなら、必要です。

       -fvisibility-inlines-hidden
           このスイッチは、ユーザが、2 つの関数のアドレスが別の共有オブジェク
           トで取られたインライン方法へのポインタを比較することを試みないと宣
           言します。

           事実上、この効果は、DSO のエクスポートテーブルに現れないで、DSO 内
           で使用されるとき、PLT 間接指定を要求できないように、"__attribute__
           ((visibility ("hidden")))" でインライン方法を GCC が、マークするこ
           とです。このオプションを有効にすることは、ライブラリがテンプレート
           の頻繁な使用を行うとき、動的なエクスポートクテーブルのサイズを大幅
           に減少させるように、ロード時と DSO のリンク時に動的な効果をもつこと
           ができます。

           このスイッチの振る舞いは、関数へのローカルな静的変数に影響しない
           か、またはコンパイラが、関数は、1 つの共有オブジェクトだけで定義さ
           れることを推論するので、直接隠される方法をマークするのとまったく同
           じではありません。

           利用者は、そのメソッドのためにスイッチの効果を無効にするために明白
           に可視性があるメソッドとしてマークできます。例えば、特定のインライ
           ンメソッドへのポインタを比較したいなら、利用者は、デフォルトの可視
           性があるとしてそれをマークするかもしれません。明白な可視性がある囲
           まれたクラスをマークすることは、なんの効果もありません。

           それらのリンケージが、共有ライブラリの境界に別の方法で交差するかも
           しれないので、明白に例示されたインラインメソッドは、このオプション
           によって影響を受けません。

       -fno-weak
           リンカによって提供されていても、ウィーク (weak, 弱い) シンボルのサ
           ポートを使用しません。デフォルトでは、G++ は、それらが利用可能であ
           るなら、ウィークシンボルを使用します。このオプションは、テストする
           ためだけに存在し、エンドユーザによって使用されるべきではありませ
           ん。それは、質の劣ったコードをもたらし、なんの利益もありません。こ
           のオプションは、G++ の今後のリリースで削除されるかもしれません。

       -nostdinc++
           C++ に特有の標準ディレクトリのヘッダファイルを検索しませんが、それ
           でも、他の標準ディレクトリは検索します。(このオプションは、C++ ライ
           ブラリを構築するとき使用されます。)

       さらに、これらの最適化、警告とコード生成オプションは、C++ プログラムの
       ためだけに意味があります:

       -fno-default-inline
           クラスのスコープの内側で定義された関数をインラインと仮定しません。
           これらの関数にはインライン関数のようなリンケージ (linkage) があるこ
           とに注意してください。それらはデフォルトで単にインラインとされない
           でしょう。

       -Wabi (C++ のみ)
           G++ が、ベンダ中立の C++ ABI とおそらく互換性がないコードを生成する
           とき、警告します。そのようなすべての場合に警告を行うように努力をし
           ていますが、G++ が互換性のないコードを生成するにもかかわらず、警告
           されないいくらかの場合がたぶんあります。また、生成されたコードが互
           換性があるにもかかわらず、警告が出される場合があるかもしれません。

           G++ によって生成されたコードが他のコンパイラによって生成されるコー
           ドとバイナリ互換性がないかもしれないという事実に関して心配している
           なら、利用者、これらの警告を回避するためにコードを書き直すべきで
           す。

           現時点で知られている非互換性には次のものがあります:

           *   ビットフィールドの末尾のパディング (詰め物) の不正確な取り扱
               い。G++ は、データを基底クラスと同じバイトに詰め込むことを試み
               ます。例えば:

                       struct A { virtual void f(); int f1 : 1; };
                       struct B : public A { int f2 : 1; };

               この場合、G++ は、"A::f1" と同じバイトに "B::f2" を置きます。他
               のコンパイラはそうしません。利用者は、サイズがプラットフォーム
               のバイトサイズの倍数とするように、"A" を明示的にパディングする
               ことによってこの問題を回避することができます。それによって、G++
               と他のコンパイラは、完全に同じように "B" を配置 (レイアウト) し
               ます。

           *   仮想ベースの末尾のパディング (詰め物) の不正確な取り扱い。G++
               は仮想ベースを配置するとき、末尾のパディングを使用しません。例
               えば:

                       struct A { virtual void f(); char c1; };
                       struct B { B(); char c2; };
                       struct C : public A, public virtual B {};

               この場合、G++ は "B" を "A" のための末尾のパディングに置きませ
               ん。他のコンパイラはそうします。利用者は、サイズが (仮想の基底
               クラスを無視して) 整列の倍数とするように、"A" を明示的にパディ
               ングすることによってこの問題を回避することができます。それに
               よって、G++ と他のコンパイラは、完全に同じように "C" を配置しま
               す。

           *   ビットフィールドが共用体 (union) に現れるとき、宣言しているビッ
               トフィールドの幅がそれらの基本的なタイプのものより大きいビット
               フィールドの不正確な取り扱い。例えば:

                       union U { int i : 4096; };

               "int" が 4096 ビットもなく、G++ が、"int" のビットの数によっ
               て、共用体を小さ過ぎるものにすることを仮定します。

           *   空クラスを不正確なオフセットに置くことができます。例えば:

                       struct A {};

                       struct B {
                         A a;
                         virtual void f ();
                       };

                       struct C : public B, public A {};

               G++ は "C" の "A" 基底クラスを 0 でないオフセットに置きます。そ
               れはオフセット 0 に置かれるべきです。G++ は、"B" の "A" データ
               メンバが既にオフセット 0 にあると誤って信じています。

           *   タイプが "typename" であること必要とするテンプレート関数の名
               前、またはテンプレート template パラメータを間違って台無しにす
               るかもしれません。

                       template <typename Q>
                       void f(typename Q::X) {}

                       template <template <typename> class Q>
                       void f(typename Q<int>::X) {}

               これらのテンプレートのインスタンス化は間違って台無しにされま
               す。

       -Wctor-dtor-privacy (C++ のみ)
           そのクラスでのすべてのコンストラクタまたはデストラクタは、プライ
           ベート (private) であり、friend もパブリック (public) の静的なメン
           バ関数もないので、クラスが使用不可能に思えるとき警告します。

       -Wnon-virtual-dtor (C++ のみ)
           クラスが多様型 (polymorphic) であるように思われ、その結果、仮想のデ
           ストラクタを必要し、さらに、仮想でないものを宣言しているとき、警告
           します。また、この警告は-Weffc++ が指定されているなら、有効にされま
           す。

       -Wreorder (C++ のみ)
           コードで与えられているメンバ初期化子 (initializer) の順序がそれらを
           実行しなければならない順序と一致しないとき、警告します。例えば:

                   struct A {
                     int i;
                     int j;
                     A(): j (0), i (1) { }
                   };

           コンパイラは、ij のメンバ初期化子をメンバの宣言の順序と一致する
           ように再調整し、その効果について警告を出力します。この警告は -Wall
           によって有効にされます。

       次の -W... オプションは -Wall によって影響されません。

       -Weffc++ (C++ のみ)
           Scott Meyers の Effective C++ の本から、次のスタイルガイドラインの
           違反について警告します:

           *   項目 11: コピーコンストラクタと動的に割り付けられたメモリがある
               クラスのための代入演算子を定義します。

           *   項目 12: コンストラクタの代入のための望ましい初期化。

           *   項目 14: 基底クラスでデストラクタを仮想にする。

           *   項目 15: "operator=" を *this への参照を返すようにする。

           *   項目 23: オブジェクトを返さなければならないとき、参照を返さない
               ようにする。

           また、Scott Meyers の More Effective C++ の本から次のスタイルガイド
           ラインの違反を警告します:

           *   項目 6: インクリメントとデクリメント演算子のプレフィックスとポ
               ストフィックスの形式を区別する。

           *   項目 7: "&&", "||" または "," を決してオーバロード (多重定義)
               しない。

           このオプションを選択するとき、標準ライブラリヘッダが、これらのすべ
           てのガイドラインに従わないことを承知してください。それらの警告を
           フィルタするためには grep -v を使用します。

       -Wno-deprecated (C++ のみ)
           推奨しない機能の使用に警告しません。

       -Wstrict-null-sentinel (C++ のみ)
           また、見張りとしてキャストされない "NULL" の使用に関して警告しま
           す。GCC でのみコンパイルするとき、これは、"NULL" が "__null" と定義
           されるように、有効な見張りです。NULL ポインタ定数は、NULL ポインタ
           ではありませんが、ポインタと同じサイズであることが保証されます。し
           かし、この使用は、別のコンパイラに渡って移植性はありません。

       -Wno-non-template-friend (C++ のみ)
           テンプレート化されていない friend 関数がテンプレート内に宣言される
           とき、警告を無効にします。G++ の明示的なテンプレート仕様のサポート
           の出現以来、friend の名前が無資格の ID (すなわち、friend foo(int))
           であるなら、C++ 言語仕様は、friend が非テンプレート関数の通常の宣言
           または定義することを要求します。(セクション 14.5.3)。G++ が明示的な
           仕様を実装する前には、無資格の ID は、テンプレート化された関数の特
           殊なものと解釈されていました。この適合しない振る舞いは、もはや G++
           のデフォルトの振る舞いではないので、-Wnon-template-friend によって
           コンパイラは、トラブルの可能性がある箇所の既存のコードをチェックす
           ることができます、それはデフォルトでオンです。
           -Wno-non-template-friend によって、この新しいコンパイラの振る舞いを
           オフにすることができます。それは、不適合なコンパイラのコードはその
           ままですが、有用な警告を無効にします。

       -Wold-style-cast (C++ のみ)
           void でないタイプへの古いスタイル (C-スタイル) のキャスト (cast) が
           C++ プログラムの中で使用されるなら、警告します。新しいスタイルの
           キャスト (dynamic_cast, static_cast, reinterpret_castconst_cast) は、意図されない効果に対して強く、検索をより容易にしま
           す。

       -Woverloaded-virtual (C++ のみ)
           関数宣言が基底クラスから仮想関数を隠すとき警告します。例えば、次の
           中で:

                   struct A {
                     virtual void f();
                   };

                   struct B: public A {
                     void f(int);
                   };

           "f" の "A" クラスバージョンは、"B" に隠されます、そして、次のような
           コードは:

                   B* b;
                   b->f();

           コンパイルに失敗します。

       -Wno-pmf-conversions (C++ のみ)
           メンバ関数へのバインドされたポインタを普通のポインタに変換すること
           に関する診断を無効にします。

       -Wsign-promo (C++ のみ)
           オーバロードの解決が、同じサイズの符号無し (unsigned) タイプへの変
           換の間、符号無し (unsigned) または列挙型 (enumerated type) から符号
           付き (signed) タイプへの昇格を選択するとき、警告します。G++ の以前
           のバージョンは、符号無しを保存しようと試みますが、標準は、現在の振
           る舞いを指令します。

                   struct A {
                     operator int ();
                     A& operator = (int);
                   };

                   main ()
                   {
                     A a,b;
                     a = b;
                   }

           この例では、G++ は、デフォルトの A& operator = (const A&); を合成し
           ますが、一方 cfront はユーザ定義の operator = を使用します。

       診断メッセージの書式化を制御するオプション

       伝統的に、診断メッセージは出力デバイスの状況 (例えば、幅、...) にかかわ
       りなく書式化されていました。診断メッセージの書式化アルゴリズムを制御す
       るために、以下で説明されたオプションを使用することができます、例えば、1
       行あたり何文字、どれくらいの頻度でソース位置情報が報告されるべきである
       か。現時点では、C++ フロントエンドのみ、これらのオプションをサポートで
       きます。しかしながら、近い将来、残っているフロントエンドは、正しくそれ
       らを要約できると期待されています。

       -fmessage-length=n
           およそ n 文字の行に適合できるようにエラーメッセージの書式化を試みま
           す。デフォルトは、g++ では 72 文字で、GCC によってサポートされた残
           りのフロントエンドでは 0 です。n が 0 あるなら、行の折り返しは行わ
           れません。各エラーメッセージは、単一の行に表示されます。

       -fdiagnostics-show-location=once
           行の折り返し (line-wrapping) モードでのみ意味があります。一度ソース
           位置情報を出力するように診断メッセージレポータに指示します。すなわ
           ち、メッセージが物理的な 1 行に適合しないくらい長く、折り返しされる
           場合、ソース位置は、継続行で、何度も、再び (プレフィックスとして)
           出力されません。これはデフォルトの振る舞いです。

       -fdiagnostics-show-location=every-line
           行の折り返し (line-wrapping) モードでのみ意味があります。1 行に適合
           しないくらい長過ぎるメッセージを改行する処理から結果の物理的な行の
           ために (プレフィックスとして) 同じソース位置情報を出力するように、
           診断メッセージレポータに指示します。

       -fdiagnostics-show-option
           このオプションは、そのようなオプションが診断機構に知られていると
           き、どのコマンドラインオプションが、直接その診断を制御するかを示
           す、出力された各診断にテキストを追加するよう診断機構に指示します。

       警告を要求するか、または抑制するオプション

       警告は、本質的に誤っていませんが、危険な、またはエラーがあったかもしれ
       ないと示唆する構成を報告する診断メッセージです。

       利用者は、-W で始まるオプションで多くの特有の警告、例えば、暗黙の宣言に
       関する警告を要求する -Wimplicit、を要求することができます。また、各これ
       らの特有の警告オプションには、警告をオフにするための -Wno- で始まる否定
       形式があります。例えば、-Wno-implicit です。このマニュアルでは、どちか
       らデフォルトでない、2 つの形式の 1 つだけをリストしています。

       次のオプションは GCC によって作成される警告の量と種類を制御します。さら
       に、言語特有のオプションについて、C++ 方言オプションも参照してくださ
       い。

       -fsyntax-only
           コードの構文エラーをチェックしますが、そのほかに何もしません。

       -pedantic
           厳密な ISO C と ISO C++ で要求されたすべての警告を出力します。禁じ
           られた拡張を使用するすべてのプログラムおよび ISO C と ISO C++ に
           従っていない他のプログラムを拒否します。ISO C のためには、使用され
           た任意の -std オプションによって指定された ISO C 標準のバージョンに
           従います。

           正当な ISO C と ISO C++ プログラムは、このオプションのあるなしにか
           かわらず適切にコンパイルするはずです (が、まれに ISO C の必要なバー
           ジョンを指定する -ansi または -std オプション必要とします)。しかし
           ながら、このオプションがなければ、特定の GNU 拡張と伝統的な C およ
           び C++ の機能は同様にサポートされます。このオプションがあれば、それ
           らは拒否されます。

           -pedantic によって、名前が __ で始まり終わる代替キーワードの使用の
           ための警告メッセージを生じません。また、ペダンチックな (pedantic)
           警告は "__extension__" に続く表現で無効にされます。しかしながら、シ
           ステムヘッダファイルだけがこれらのエスケープルーチンを使用するべき
           です。アプリケーションプログラムは、それらを避けるべきです。

           一部のユーザは、厳密な ISO C に適応しているかプログラムをチェックす
           るために -pedantic を使用することを試みます。彼らは、すぐに、彼らが
           望んでいることをまったく行われないことがわかります: いくつかの ISO
           でない慣例を見つけますが、すべて見つけるというわけではありません。
           --- ISO C が診断を要求するもの、と診断が追加された他のものだけで
           す。

           ISO C に適合に失敗することを報告する機能は、ある場合に役に立つかも
           しれませんが、かなりの追加作業を必要とし、-pedantic と全く異なるも
           のになるでしょう。近い将来、そのような機能をサポートする計画はあり
           ません。

           -std で指定された標準が gnu89 または gnu99 のような C の GNU 拡張方
           言を表すところで、GNU 拡張方言がベースにしている ISO C のバージョン
           である、対応するベース標準があります。-pedantic からの警告は、それ
           らがベース標準によって必要とされるところで与えられます。(C の GNU
           方言の定義で、与えられたオプションでコンパイラがサポートするすべて
           の機能を含み、何も警告することはないので、指定された GNU C 方言でな
           い機能のためだけに与えられているそのような警告に対してのために意味
           がありません。)

       -pedantic-errors
           警告よりむしろエラーを出すことを除いて、-pedantic に似ています。

       -w  すべての警告メッセージを抑制します。

       -Wno-import
           #import の使用に関する警告メッセージを抑制します。

       -Wchar-subscripts
           配列の添字が、タイプ "char" であるなら、警告します。プログラマは、
           しばしばこのタイプがあるマシンで符号付きであることを忘れるので、こ
           れはよくあるエラーの原因です。この警告は、-Wall よって有効にされま
           す。

       -Wcomment
           コメントの開始シーケンス /*/* コメント内に現れるときはいつで
           も、または、バックスラッシュ-改行が // コメント内に現れるときはいつ
           でも、警告します。この警告は、-Wall よって有効にされます。

       -Wfatal-errors
           このオプションによって、コンパイラは、コンパイルし続け、さらなるエ
           ラーメッセージを印刷しようとするよりむしろ、最初のエラーでコンパイ
           ルを中止します。

       -Wformat
           "printf" と "scanf" などの呼び出しをチェックして、供給された引数に
           は、指定された書式 (フォーマット) 文字列のための適切なタイプがあ
           り、書式の文字列の指定された変換とつじつまが合うことを確かめます。
           これは、"printf", "scanf", "strftime" と "strfmon" (X/Open 拡張で、
           C 標準でない) ファミリ (または、他のターゲット特有のファミリ) で、
           標準関数と書式属性によって指定された他のものを含んでいます。どの関
           数が、選択された標準のバージョンに依存する指定されている形式属性な
           しでチェックされるかと、指定された属性のない関数のそのようなチェッ
           クは、-ffreestanding または -fno-builtin によって無効にされます。

           書式は、GNU libc バージョン 2.2 によってサポートされた書式機能に対
           してチェックされます。これらは、Single Unix Specification といくつ
           かの BSD と GNU 拡張の機能と同様に、すべての ISO C90 と C99 機能を
           含みます。他のライブラリ実装は、これらのすべての機能をサポートする
           わけではありません。GCC は、特殊なライブラリの制限を越える機能に関
           しての警告をサポートしません。しかしながら、-pedantic が、-Wformat
           と共に使用されているなら、選択された標準バージョンでない書式機能に
           警告を与えます (が、それらが、C 標準のあらゆるバージョンでないの
           で、"strfmon" 書式のためではありません)。

           また、-Wformat は、いくつかの関数のための null 書式引数をチェックす
           るので、-Wformat また、-Wnonnull の意味を含みます。

           -Wformat-Wall に含まれています。書式のチェックのある局面の制御
           に関して、オプション -Wformat-y2k, -Wno-format-extra-args,
           -Wno-format-zero-length, -Wformat-nonliteral, -Wformat-security-Wformat=2 が利用可能ですが、-Wall には含まれていません。

       -Wformat-y2k
           また、-Wformat が指定されるなら、2 桁の年しか与えられていない
           "strftime" 書式に警告します。

       -Wno-format-extra-args
           -Wformat が指定されるなら、"printf" または "scanf" 書式関数への余分
           な引数に警告しません。C 標準では、そのような引数は無視されると明記
           しています。

           $ オペランド数指定で指定される使用される引数と間に未使用の引数がが
           あるところで、未使用の引数をスキップするるために、どのようなタイプ
           を "va_arg" に渡すか、実装では知ることができないので、通常まだ警告
           を与えられます。しかしながら、"scanf" 書式の場合には、Single Unix
           Specification では、そのような未使用の引数が許可されていると述べら
           れているので、このオプションは、未使用の引数がすべてポインタである
           なら、警告を抑制します。

       -Wno-format-zero-length
           -Wformat が指定されるなら、長さ 0 の書式に警告しません。C 標準で
           は、長さ 0 の書式は許可されていると明記しています。

       -Wformat-nonliteral
           また、-Wformat が指定されるなら、書式文字列が文字列リテラルでないの
           でチェックすることができなくて、書式関数が "va_list" として書式引数
           を取らないなら、警告します。

       -Wformat-security
           また、-Wformat が指定されるなら、セキュリティ問題を示す可能性がある
           書式関数の使用に警告します。現在のところ、これは、書式文字列が文字
           列リテラルでなく、"printf (foo);" のように書式引数がない場合、
           "printf" と "scanf" 関数への呼び出しに関して警告します。書式文字列
           が信頼されていない入力から来て、%n を含んでいるなら、これはセキュリ
           ティホールとなるかもしれません。(これは、現在 -Wformat-nonliteral
           が警告するものに関するサブセットですが、将来には、
           -Wformat-nonliteral に含まれていない -Wformat-security に警告が追加
           されるかもしれません。)

       -Wformat=2
           -Wformat-Wformat に含まれていない書式チェックを追加したものを有
           効にします。現在、-Wformat -Wformat-nonliteral -Wformat-security
           -Wformat-y2k に同等です。

       -Wnonnull
           "nonnull" 関数属性によって NULL でない値が要求されるように、マーク
           された引数のための NULL ポインタを渡すことに関して、警告します。

           -Wnonnull-Wall-Wformat に含まれています。それは、
           -Wno-nonnull オプションで無効にすることができます。

       -Winit-self (C, C++ のみ)
           それら自体で初期化される初期化されていない変数に関して、警告しま
           す。-O1 とそれ以上でのみ動作する、-Wuninitialized とともに、このオ
           プションを使用できることに注意してください、

           例えば、GCC は -Winit-self が指定されたときのみ、次の断片で初期化さ
           ていない "i" に警告します:

                   int f()
                   {
                     int i = i;
                     return i;
                   }

       -Wimplicit-int
           宣言がタイプを指定していないとき、警告します。この警告は、-Wall
           よって有効にされます。

       -Wimplicit-function-declaration
       -Werror-implicit-function-declaration
           関数が宣言される前に使用されるときはいつでも、警報 (またはエラー)
           を出します。形式 -Wno-error-implicit-function-declaration は、サ
           ポートされていません。この警告は、(エラーではなく、警告として)
           -Wall によって有効にされます。

       -Wimplicit
           -Wimplicit-int-Wimplicit-function-declaration と同じです。この
           警告は、-Wall よって有効にされます。

       -Wmain
           main のタイプが疑わしいなら、警告します。main は、外部リンクされ、
           int を返し、引数が 0 か、適切なタイプの 2 または 3 個の引数のいずれ
           かを取る関数であるべきです。この警告は、-Wall よって有効にされま
           す。

       -Wmissing-braces
           集合体 (aggregate) または共用体 (union) の初期化子が完全に角括弧で
           囲まれていないなら、警告します。次の例では、a のための初期化子は、
           完全に角括弧で囲まれていませんが、b のための初期化子は、完全に角括
           弧で囲まれています。

                   int a[2][2] = { 0, 1, 2, 3 };
                   int b[2][2] = { { 0, 1 }, { 2, 3 } };

           この警告は、-Wall よって有効にされます。

       -Wmissing-include-dirs (C と C++ のみ)
           ユーザによって供給されたインクルードディレクトリが存在しないなら、
           警告します。

       -Wparentheses
           真の値が予期されるコンテキストで、代入があるか、または、人々がしば
           しば当惑する優先順位で演算子がネストされるときのような、括弧がある
           コンテキスト (文脈) で省略されているなら、警告します。C++ をコンパ
           イルするとき、真の値がサポートされているとして使用される代入のため
           だけ警告します。他の警告は、C をコンパイルするときだけ、サポートさ
           れています。

           また、x<=y<=z のような比較が現れるなら、警告します。これは、普通の
           数学的表記のものとは異なって解釈される (x<=y ? 1 : 0) <= z と同等で
           す。

           また、"if" 文の "else" ブランチが属するところで混乱がある構造に関し
           て、警告します。ここに、そのような場合の例を示します:

                   {
                     if (a)
                       if (b)
                         foo ();
                     else
                       bar ();
                   }

           C では、すべての "else" ブランチは、できるだけ最も深い "if" 文に属
           します、この例では、"if (b)" です、これは、上記の例でプログラマが選
           んだインデントによって図解されるような、プログラマが期待したことと
           はしばしば異なります。このような混乱の可能性があり、このフラグが指
           定されるとき、GCC は、警報を出します。警告を排除するために、最も深
           い "if" のまわりに明示的に大括弧を追加して、"else" が囲まれた "if"
           に属することしか方法がないようになります。結果のコードは、次のよう
           になるでしょう:

                   {
                     if (a)
                       {
                         if (b)
                           foo ();
                         else
                           bar ();
                       }
                   }

           この警告は、-Wall よって有効にされます。

       -Wsequence-point
           C と C++ 標準でのシーケンスポイント規則の違反のために、未定義のセマ
           ンティクスがあるコードに警告します。

           C と C++ 標準は、C C/C++ プログラムの式が、プログラムの部分の実行の
           間の部分的な順序を表す、シーケンスポイントに関して評価される順序を
           定義します: シーケンスポイントの前に実行されたもの、とそれ後に実行
           されたものです。これらは、完全な式 (より大きな式の一部でないもの)
           の評価の後、"&&", "||", "? :" または "," (コンマ) 演算子の最初のオ
           ペランドの評価の後、関数が呼び出される前 (しかし、引数の評価と呼び
           出された関数を意味する式の後に)、および他の特定の場所で起こります。
           シーケンスポイント規則によって表現される以外、式の副式の評価の順序
           は指定されていません。例えば、2 つの関数が 1 つの式の中で、それらの
           間のシーケンスポイントなしで呼び出されるなら、関数が呼び出される順
           序が指定されないので、これらのすべての規則は、全体の順序よりむしろ
           部分的な順序についてのみ記述しています。しかしながら、標準委員会
           は、関数呼び出しがオーバラップしない規則があります。

           シーケンスポイントの間でオブジェクトの値への変更が実施されるとき
           は、指定されていません。これによる決まる振る舞いのプログラムは未定
           義の振る舞いの状態になります。C と C++ 標準は、"前と次のシーケンス
           ポイントの間で、オブジェクトは式の評価によって多くても一度変更され
           た値を格納した値を持つものとします。さらに、以前の値は、格納される
           値を決定するためだけに読み込み専用となるものとします。" と明記され
           ています。プログラムがこれらの規則を破るなら、特定の実装の結果は、
           まったく予測できません。

           未定義の振る舞いがあるコードの例は、"a = a++;", "a[n] = b[n++]" と
           "a[i++] = i;" です。いくつかのより複雑な場合は、このオプションに
           よって診断されません、そして、時々の誤った肯定的な結果を与えるかも
           しれませんが、一般的に、プログラムのこの種類の問題を検出するところ
           でかなり効果的であることがわかります。

           標準は、紛らわしい言葉で表現されています、したがって、微妙な場合に
           はシーケンスポイント規則の正確な意味に関する何らかの討論がありま
           す。提案されている公式の定義を含む問題の議論へのリンクは
           <http://gcc.gnu.org/readings.html> の GCC 見解ページにあります。

           この警告は、C and C++ のために -Wall よって有効にされます。

       -Wreturn-type
           関数が "int" をデフォルトとするリターンタイプで定義されるときはいつ
           も、警告します。また、関数のリターンタイプが "void" でないリターン
           値なしのあらゆる "return" 文に警告します。

           また、C に関して、関数のリターンタイプに、"const" のようなタイプ修
           飾子があるなら、警告します。そのようなタイプ修飾子は、関数によって
           返された値が左辺値 (lvalue) でないので、効果は、ありません。ISO C
           は、関数定義で修飾された "void" リターンタイプを禁止するので、その
           ようなリターンタイプは、常にこのオプションがなくても警告を受けま
           す。

           C++ のために、リターンタイプのない関数は、-Wno-return-type が指定さ
           れるときでさえ、常に診断メッセージを生成します。唯一の例外は、main
           とシステムヘッダで定義された関数です。

           この警告は、-Wall よって有効にされます。

       -Wswitch
           "switch" 文には、列挙タイプのインデックスがあり、その列挙型の指定さ
           れたコードのために複数の "case" が欠けているときはいつも、警告しま
           す。("default" ラベルが存在すれば、この警告を抑制します。) また、列
           挙型の範囲外の "case" ラベルは、このオプションが使用されていると
           き、警告を招きます。この警告は、-Wall よって有効にされます。

       -Wswitch-default
           "switch" 文に "default" ケースがないときはいつも、警告します。

       -Wswitch-enum
           "switch" 文には、列挙タイプのインデックスがあり、その列挙型の指定さ
           れたコードのために複数の "case" が欠けているときはいつも、警告しま
           す。また、列挙型の範囲外の "case" ラベルは、このオプションが使用さ
           れているとき、警告を招きます。

       -Wtrigraphs
           プログラムの意味を変えるかもしれないなんらかのトライグラフに遭遇す
           るなら、警告します (コメントの中のトライグラフに関しては警告されま
           せん)。この警告は、-Wall よって有効にされます。

       -Wunused-function
           静的な関数が宣言されていますが、定義されていないか、またはインライ
           ンでない静的な関数が未使用であるときはいつも、警告します。この警告
           は、-Wall よって有効にされます。

       -Wunused-label
           ラベルが宣言されていますが、使用されないときはいつも、警告します。
           この警告は、-Wall よって有効にされます。

           この警告を抑制するためには、unused 属性を使用してください。

       -Wunused-parameter
           関数パラメータが宣言はさておき未使用であるときはいつも、警告しま
           す。

           この警告を抑制するためには、unused 属性を使用してください。

       -Wunused-variable
           ローカル変数または定数でない静的変数が宣言はさておき未使用であると
           きはいつも、警告します。この警告は、-Wall よって有効にされます。

           この警告を抑制するためには、unused 属性を使用してください。

       -Wunused-value
           文が明らかに使用されていない結果を計算するときはいつも、警告しま
           す。この警告は、-Wall よって有効にされます。

           この警告を抑制するためには、式を void にキャストしてください。

       -Wunused
           上記のすべての -Wunused オプションを結合したものです。

           未使用の関数パラメータに関する警告を得るためには、利用者は、-Wextra
           -Wunused (-Wall-Wunused の意味を含むことに注意) か、または別々
           に -Wunused-parameter のいずれかを指定しなければなりません。

       -Wuninitialized
           最初に初期化されていない自動変数が使用されるか、または変数が
           "setjmp" 呼び出しによって上書きされるかもしれないなら、警告します。

           これらの警告は、最適化するときだけ計算されるデータフロー情報を必要
           とするので、コンパイルを最適化するためだけ可能です。-O を指定しない
           なら、利用者はこれらの警告を得ません。代わりに、GCC は、-O を必要と
           する -Wuninitialized に関して警報を出します。

           変数の初期化されていない値を、それ自身の初期化子で使用するコードに
           関して警告したいなら、-Winit-self オプションを使用してください。

           これらの警告は、まとめて非初期化されるか、または上書きされる変数と
           同様に、構造体、共用体または配列変数の個々に非初期化されるか、また
           は上書きされる要素に対して生じます。それらは、"volatile" と宣言され
           た変数または要素に対して生じません。これらの警告は、最適化に依存す
           るので、警告がある的確な変数または要素は、使用される GCC の厳密な最
           適化オプションとバージョンに依存します。

           そのような計算は、警告が印刷 (表示) される前にデータフロー解析に
           よって削除されるので、決して使用されないそれ自体の値を計算するだけ
           に使用される変数に警告しないものがあることに注意してください。

           GCC は、エラーがあるように思えるにもかかわらず、コードが正しいかも
           しれないすべての理由をわかることができるくらいには賢くないので、こ
           れらの警告は、オプションにされています。ここに、これがどのように起
           こるかの 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" は常に初期化されます
           が、GCC はこれを知りません。ここに、他のよくある例を示します:

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

           これには、それが設定される場合にだけ "save_y" が使用されるので、バ
           グはありません。

           また、このオプションは、非揮発性 (non-volatile) の自動変数が
           "longjmp" への呼び出しによって変更されるかもしれないとき、警告しま
           す。これらの警告は、同様にコンパイルの最適化でのみ起こり得ます。

           コンパイラは "setjmp" への呼び出しだけを見ています。コンパイラは、
           "longjmp" がどこで呼び出されているかを知ることができません。実際に
           は、シグナルハンドラは、コードの任意の点で、それを呼び出すことがで
           きます。結果として、"longjmp" は、問題を引き起こす場所で事実上呼び
           出すことができないので、たとえ実際には問題がないときでさえ警告を得
           るかもしれません。

           利用者が、使用する "noreturn" として決して返らないすべての関数を宣
           言するなら、いくつかの偽りの警告を避けることができます。

           この警告は、-Wall よって有効にされます。

       -Wunknown-pragmas
           GCC に解釈されない #pragma 指示に遭遇するとき、警告します。このコマ
           ンドラインオプションが使用されるなら、システムヘッダファイル中の未
           知のプラグマ (pragma) に対しても警告を出力します。これは、警告が
           -Wall コマンドラインオプションによって有効ににされただけであるな
           ら、そうではありません。

       -Wno-pragmas
           不正確なパラメータ、不正な構文、またはプラグマ (pragma) の間の競合
           のような、プラグマの誤用に警告しません。また、-Wunknown-pragmas を
           参照してください。

       -Wstrict-aliasing
           このオプションは、-fstrict-aliasing がアクティブであるときのみ、ア
           クティブです。コンパイラが最適化に使用している厳密なエイリアシング
           規則を破るかもしれないコードに関して、警告します。警告は、すべての
           場合を捕らえるわけではありませんが、より一般的な落とし穴を捕らえる
           ことを試みます。それは -Wall に含まれています。

       -Wstrict-aliasing=2
           このオプションは、-fstrict-aliasing がアクティブであるときだけ、ア
           クティブです。コンパイラが最適化のために使用している厳しいエイリア
           シング規則を破るかもしれないコードに警告します。この警告は、
           -Wstrict-aliasing より多くの場合を捕らえますが、また、いくつかの安
           全であいまいな場合のために警告を与えます。

       -Wstrict-overflow
       -Wstrict-overflow=n
           このオプションは、-fstrict-overflow がアクティブであるときだけ、ア
           クティブです。コンパイラが、符号のオーバフローが起こらないという仮
           定に基づいて最適化される場合に警告します。コードがオーバフローする
           かもしれないすべての場合に警告するというわけではないことに注意して
           ください: それは、コンパイラが、何らかの最適化を実装する場合に警告
           するだけです。したがって、この警告は、最適化レベルに依存します。

           符号のオーバフローが起こらないと仮定した最適化は、関与する変数の値
           が、実際に決してオーバフローが生じないなら、完全に安全です。した
           がって、この警告は、容易に誤検出を起こすかもしれません: 実際に問題
           でないコードに関する警告。重要な課題に焦点を当てて助けるために、い
           くつかの警告レベルが定義されています。ループが必要とするいくつの繰
           り返しを予測するとき、特に、ループがとにかく実行されているかどうか
           決定するときに、未定義の符号オーバフローの使用に対して警告を行いま
           せん。

           @option<-Wstrict-overflow=1>
               疑わしくて、避けやすい場合に警告します。例えば: "x + 1 > x"。
               -fstrict-overflow で、コンパイラは、単にこれを 1 にします。この
               -Wstrict-overflow のレベルは、-Wall によって有効にされます。よ
               り高いレベルは、なく、明白に要求しなければなりません。

           @option<-Wstrict-overflow=2>
               また、比較が定数に単純化される他の場合に警告します。例えば:
               "abs (x) >= 0"。"abs (INT_MIN)" が、0 未満である "INT_MIN" に
               オーバフローするので、-fstrict-overflow が効力のあるとき、これ
               を簡素化することができます。(レベルのない) -Wstrict-overflow
               は、-Wstrict-overflow=2 と同じです。

           @option<-Wstrict-overflow=3>
               また、比較が単純化される他の場合に警告します。例えば: "x + 1 >
               1" は、"x > 0" に単純化されます。

           @option<-Wstrict-overflow=4>
               また、上記の場合にカバーされなかった他の単純化を警告します。例
               えば: "(x * 10) / 5" は、"x * 2" に単純化されます。

           @option<-Wstrict-overflow=5>
               また、コンパイラが比較にかかわる定数の大きさを減少させる場合に
               警告します。例えば: "x + 2 > y" は、"x + 1 >= y" に単純化されま
               す。この単純化は、多くの比較に適用され、この警告レベルが、非常
               に多くの誤検出を起こすかもしれないので、最も高い警告レベルのみ
               を報告します。

       -Wall
           上記のすべての -W オプションを結合したものです。これは、マクロと併
           せても、あるユーザが疑わしいと見なし、簡単に避けれる (または、警告
           を避けるための変更する) 構造に関するすべての警告を有効にします。ま
           た、これは C++ 方言オプションで説明されているいくつかの言語特有の警
           告を有効にします。

       次の -W... オプションは、-Wall の意味は含まれません。それらのいくつか
       は、ユーザが一般的に疑わしいとにみなしませんが、時々利用者がチェックし
       たい構造に警告します。他のものは、いくつかの場合に必要であるか、または
       避けことが難しく、警告を抑制するためにコードを変更する簡単な方法がない
       構造に警告します。

       -Wextra
           (このオプションは以前は -W と呼ばれていました。古い名前はまだサポー
           トされていますが、新しい名前はより記述的です。) これらのイベントの
           ための特別な警告メッセージを印刷します:

           *   関数は、値の有無にかかわらず返ることができます。(関数本体の終り
               から抜けることは、値なしで返るとみなされます。) 例えば、次の関
               数はそのような警告を引き起こすでしょう:

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

           *   副作用を含まない、式文またはコンマ式の左辺。警告を抑制するため
               には、未使用の式を void にキャストしてください。例えば、x[i,j]
               のような式は、警告を引き起こますが、x[(void)i,j] は警告しませ
               ん。

           *   符号無しの値は、0 と < または >= と比較されます。

           *   "static" のような記憶域クラス指定子が、宣言で最初のものではあり
               ません。C 標準によれは、この使用法は廃れかかっています。

           *   また、-Wall または -Wunused が指定されるなら、未使用の引数に関
               して、警告します。

           *   符号付きと符号無しの値での比較は、符号付きが符号無しに変換され
               るとき、不正確な結果を生じるかもしれません。(ただし、
               -Wno-sign-compare も指定されるなら、警告しません。)

           *   集合体には、すべてのメンバを初期化しなし初期化子があります。
               -Wmissing-field-initializers によって、この警告を独立して制御で
               きます。

           *   指定された初期化子 (initializer) を使用するとき、副作用のない初
               期化されたフィールドは、上書きされます。-Woverride-init によっ
               て、この警告を独立して制御できます。

           *   関数パラメータは K&R-スタイルの関数のタイプ指定子なしで宣言され
               ます。

                       void foo(bar) { }

           *   空の本体は if または else 文で起こります。

           *   ポインタは、整数 0 に対して <, <=, > または >= で比較されます。

           *   変数は longjmp または vfork によって変更されるかもしれません。

           *<(C++ のみ)>
               条件式に現れる列挙子と非列挙子。

           *<(C++ のみ)>
               コンストラクタなしでクラスに現れる、静的でない参照または静的で
               ない const メンバ。

           *<(C++ のみ)>
               あいまいな仮想ベース。

           *<(C++ のみ)>
               register と宣言されている配列の添字。

           *<(C++ のみ)>
               register と宣言されている変数のアドレスを取る。

           *<(C++ のみ)>
               基底クラスは、派生されたクラスのコピーコンストラクタで初期化さ
               れません。

       -Wno-div-by-zero
           コンパイル時の 0 による整数除算を警告しません。無限大と NaN を取得
           する正当な方法であるで、0 による浮動小数点除算は警告されません。

       -Wsystem-headers
           システムヘッダファイルで見つけられた構造に対して警告メッセージを印
           刷します。それらが通常実際の問題を示さないで、コンパイラ出力を読む
           ことを難しくするだけであるという仮定の下に、通常、システムヘッダか
           らの警告は抑圧されます。このコマンドラインオプションを使用して、ま
           るでそれらがユーザのコードで起こるかのようにシステムヘッダから警告
           を出すように GCC に伝えます。しかしながら、このオプションに関連して
           -Wall を使用することは、システムヘッダで未知のプラグマ (pragma) を
           警告しないことに注意してください --- また、それのためには、
           -Wunknown-pragmas を使用しなければなりません。

       -Wfloat-equal
           浮動小数点の値が等価比較で使用されるなら、警告します。

           この背景の考えは、限りなく正確な実数に近似している浮動小数点の値と
           みなすために (プログラマのために) しばしば便利であるということで
           す。利用者がこれを行うなら、計算を導入する最大または、ほぼ最大のエ
           ラーを (コードを解析するか、またはある他の方法によって) 計算するこ
           とが必要であり、比較を実行するとき (そして、出力を生成するとき、そ
           れは異なった問題ですが)、それを考慮します。特に、等価をテストする代
           わりに、利用者は 2 つの値には重なる範囲があるかどうか確かめるために
           チェックするでしょう。そして、比較演算子でこれを行うので、等価比較
           はたぶん間違いです。

       -Wtraditional (C のみ)
           伝統的な C と ISO C で異なって振る舞う特定の構造に関して、警告しま
           す。また、伝統的な C と同等でない ISO C の構造、および避けられるべ
           きである問題のある構造に関して、警告します。

           *   マクロ本体の文字列リテラル内に現れるマクロパラメータ。伝統的な
               C では、マクロ置換は、文字列リテラル内で行われますが、ISO C で
               は行われません。

           *   伝統的な C では、いくつかのプリプロセッサ指示は存在しませんでし
               た。伝統的なプリプロセッサは、行のカラム 1 に # が現れる場合の
               み、行が指示であるとみなしていました。したがって、-Wtraditional
               は伝統的な C が理解しているが、# が行の最初の文字として現れない
               ので、無視される指示に関して、警告します。また、インデントする
               ことによって伝統的な C によって理解されない #pragma のような指
               示を隠すことを勧めます。いくつかの伝統的な実装は、#elif を認識
               しないので、それを完全に避けることを勧めます。

           *   引数なしで現れる関数のようなマクロ。

           *   単項プラス演算子。

           *   U 整数定数サフィックス、または F または L 浮動小数点定数サ
               フィックス。(伝統的な C は整数定数で L サフィックスをサポートし
               ます。) これらのサフィックスは、ごく最近のシステムのシステム
               ヘッダ、例えば、"<limits.h>" の _MIN/_MAX マクロ、で定義された
               マクロに現れることに注意してください。通常、ユーザコード内のこ
               れらのマクロの使用は、偽りの警告を導くかもしれませんが、GCC の
               統合プリプロセッサは、これらの場合に警告を避けるための十分なコ
               ンテキストがあります。

           *   1 つのブロックで external と宣言される関数と、次にブロックの終
               りの後に使用された機能。

           *   "switch" 文には、タイプ "long" のオペランドがあります。

           *   "static" でない関数宣言は "static" ものに続きます。この構造は、
               いくつかの伝統的な C コンパイラによって受け付けられません。

           *   整数定数の ISO タイプには、伝統的なタイプとは異なる幅または符号
               があります。定数のベースが 10 である場合にだけこの警告を出しま
               す。すなわち、通常ビットパターンを表す 16 進または 8 進値は、警
               告されません。

           *   ISO 文字列連結の使用法は検出されます。

           *   自動集合体の初期設定。

           *   ラベルと衝突する識別子。伝統的な C にはラベルのための個別の名前
               空間が不足しています。

           *   共用体の初期化。初期化子が 0 であるなら、警告は省略されます。
               ユーザコードの 0 初期化子が条件とされている、例えば、不足してい
               る初期化子の警告を避けるための "__STDC__" と伝統的な C の場合に
               デフォルトで 0 に初期化することを当てにする、と思われる仮定の元
               に行われます。

           *   固定/浮動小数点の値とのプロトタイプによる変換、とその逆。伝統的
               な C でコンパイルするとき、これらのプロトタイプの欠如は、深刻な
               問題を引き起こすでしょう。これは利用可能な変換の警告のサブセッ
               トで、フルセットは -Wconversion を使用します。

           *   ISO C スタイル関数定義の使用。libiberty の伝統的な C 互換マク
               ロ、"PARAMS" と "VPARAMS" を使用するとき、これらの ISO C 機能が
               利用者コードに現れるので、プロトタイプ宣言または variadic 関数
               のために、この警告は、故意に出されません。また、この警告は、そ
               の機能が既に GCC 拡張であり、したがって、伝統的な C との互換性
               に関連していないので、入れ子にされた関数のために回避されます。

       -Wdeclaration-after-statement (C のみ)
           宣言がブロック内の文の後に見つけられるとき、警告します。C++ で知ら
           れている、この構造は、ISO C99 で導入され、デフォルトによって GCC で
           許可されています。それは、ISO C90 によってサポートされず、GCC 3.0
           以前の GCC バージョンでもサポートされていません。

       -Wundef
           未定義の識別子が #if 指示で評価されるなら、警告します。

       -Wno-endif-labels
           #else または #endif の後にテキストが続いている場合でもつねに警告し
           ません。

       -Wshadow
           ローカル変数が別のローカル変数、パラメータまたはグローバル変数を隠
           すときはいつも、または、組み込み関数が隠されるときはいつも、警告し
           ます。

       -Wlarger-than-len
           len バイトより大きいオブジェクトが定義されるときはいつも、警告しま
           す。

       -Wunsafe-loop-optimizations
           コンパイラが、ループのインデックスの範囲で何も仮定できなかったの
           で、ループを最適化できないなら警告します。
           -funsafe-loop-optimizations で、コンパイラが、そのような仮定を行う
           なら警告します。

       -Wpointer-arith
           関数タイプまたは "void" の "size of" によるものは何でも警告します。
           GNU C は、"void *" ポインタと関数へのポインタの計算で便宜上、それら
           のタイプを size of 1 に割り当てます。

       -Wbad-function-cast (C のみ)
           関数呼び出しが適合しないタイプにキャストされるときはいつも、警告し
           ます。例えば、"int malloc()" が "anything *" にキャストされるなら、
           警告します。

       -Wc++-compat
           ISO C と ISO C++ の共通の部分集合の外にある ISO C 構成に警告しま
           す、例えば、"void *" から、非 "void" タイプへのポインタに暗黙の変換
           に対する要求。

       -Wcast-qual
           ポインタがターゲットタイプからタイプ修飾子を削除するためにキャスト
           されるときはいつも、警告します。例えば、"const char *" が普通の
           "char *" にキャストされるなら、警告します。

       -Wcast-align
           ポインタが、ターゲットの要求される整列 (alignment) が増加されるよう
           にキャスト (cast) されるときはいつも、警告します。例えば、整数が 2
           バイトまたは 4 バイトの境界でのみアクセスできるマシンで、"char *"
           が "int *" にキャストされるなら、警告します。

       -Wwrite-strings
           C をコンパイルするとき、あるアドレスを非 "const" "char *" ポインタ
           にコピーすると警告が得られるように、タイプ "const char[length]" 文
           字列定数に与えます。C++ をコンパイルするとき、文字列リテラルから
           "char *" への推奨されない変換に関して、警告します。この警告は、C++
           プログラムのためにデフォルトで有効にされます。これらの警告は、文字
           列定数に書き込むようにするかもしれないコードをコンパイル時に見つけ
           ることを助けますが、宣言とプロトタイプで "const" を使用して非常に注
           意していた場合のみです。そうでなければ、単に迷惑を掛けます。これ
           は、我々がこれらの警告を -Wall 要求に含めなかった理由です。

       -Wconversion
           プロトタイプによって、プロトタイプがない同じ引数に何が起こるかの違
           いでタイプ変換を引き起こすなら、警告します。これは、固定小数点から
           浮動小数点への変換やその逆と、デフォルトの特典と同じときを除いて、
           固定小数点の引数の幅または符号を変更する変換を含みます。

           また、負の整数定数表現が、暗黙的に符号無しタイプに変換されるなら、
           警告します。例えば、"x = -1" if "x" が符号無しの代入に関して、警告
           します。しかし、"(unsigned) -1" のような明白なキャストに関して、警
           告しません。

       -Wsign-compare
           符号付きと符号無しの値での比較は、符号付きが符号無しに変換されると
           き、不正確な結果を生じるかもしれないとき、警告します。また、この警
           告は -Wextra のよって有効にされます。この警告なしで、-Wextra の他の
           警告を得るためには、-Wextra -Wno-sign-compare を使用します。

       -Waddress
           メモリアドレスの疑わしい使用に警告します。これらは、"void
           func(void); if (func)" のような条件式での関数のアドレスを使用するこ
           と、と "if (x == "abc")" のような文字列リテラルのメモリアドレスに対
           する比較を含んでいます。そのような使用は、通常プログラマのエラーを
           示します: 関数のアドレスは、常に真と評価されるので、それらの条件内
           での使用は、プログラマが関数呼び出しで括弧を忘れたことを通常示しま
           す。そして、文字列リテラルに対する比較は、明示されていない振る舞い
           をもたらし、C での移植性がないので、通常、それらは、プログラマが
           "strcmp" を使用するつもりであったことを示します。この警告は、-Wall
           よって有効にされます。

       -Waggregate-return
           構造体または共有体を返す任意の関数が定義されるか、または呼び出され
           るなら、警告します。(配列を返すことができる言語では、これはまた、警
           告を引き出します。)

       -Wno-attributes
           認識されていない属性、変数に適用された関数属性などのような、予期し
           ていない "__attribute__" が使用される場合、警告しません。これは、サ
           ポートされた属性の不正な使用のためのエラーを停止しません。

       -Wstrict-prototypes (C のみ)
           関数が引数のタイプを指定しないで宣言されるか、または定義されるな
           ら、警告します。(古いスタイルの関数定義は、引数のタイプを指定する宣
           言が先行しているなら、警告なしで許可されます。)

       -Wold-style-definition (C のみ)
           古いスタイルの関数定義が使用されているなら、警告します。以前にプロ
           トタイプがあっても、警告が与えられます。

       -Wmissing-prototypes (C のみ)
           グローバル関数が以前のプロトタイプ宣言なしで定義されているなら、警
           告します。定義自体がプロトタイプを提供したとしても、この警告は出さ
           れます。この目的は、ヘッダファイル中に宣言されていないグローバル関
           数を検出することです。

       -Wmissing-declarations (C のみ)
           グローバル関数が、以前の宣言なしで定義されるなら、警告します。定義
           自体がプロトタイプを提供したとしても、警告します。ヘッダファイル中
           に宣言されないグローバル関数を検出するために、このオプションを使用
           します。

       -Wmissing-field-initializers
           構造体の初期化子にいくつかのフィールドの不足があるなら警告します。
           例えば、次のコードは、"x.h" は、暗黙で 0 であるので、そのような警告
           を生じます:

                   struct s { int f, g, h; };
                   struct s x = { 3, 4 };

           このオプションは、指定された初期化子に警告しないので、次の変更は警
           告の引き金となりません:

                   struct s { int f, g, h; };
                   struct s x = { .f = 3, .g = 4 };

           この警告は、-Wextra に含まれています。これなしで他の -Wextra 警告を
           得るには、-Wextra -Wno-missing-field-initializers を使用します。

       -Wmissing-noreturn
           属性 "noreturn" の候補となるかもしれない関数に関して、警告します。
           これらは絶対的ものではなく、可能性がある候補にすぎないことに注意し
           てください。"noreturn" 属性を追加する前に、関数が実際に決して返らな
           いことを手動で確認するために、特別な注意が払われなければなりませ
           ん。そうでなければ、微妙なコード生成バグを導入するかもしれません。
           利用者は、ホストの C 環境で "main" のための警告を得ません。

       -Wmissing-format-attribute
           "format" 属性の候補となるかもしれない関数ポインタに警告します。これ
           らは、絶対的ものではなく、可能性がある候補にすぎないことに注意して
           ください。GCC は、代入、初期化、パラメータを渡すこと、またはリター
           ン文で使用される "format" 属性がある関数ポインタは、結果のタイプの
           対応する "format" 属性があるべきであると推測します。すなわち、ま
           た、それぞれ、代入または初期化の左辺側、パラメータ変数のタイプ、ま
           たは関数を含むリターンタイプには、警告を避ける "format" 属性がある
           べきです。

           また、GCC は、"format" 属性の候補であるかもしれない関数定義を警告し
           ます。かさねて、これらは可能性がある候補にすぎません。GCC は、
           "format" 属性が "vprintf" または "vscanf" のような関数を呼び出す任
           意の関数に適切であるかもしれませんが、これは常にその場合であるかも
           しれなくて、"format" 属性が適切であるいくつかの関数が検出されない、
           と推測します。

       -Wno-multichar
           マルチキャラクタ定数 ('FOOF') が使用されるなら、警告ません。それら
           には実装定義 (implementation-defined) した値があり、移植性のある
           コードに使用するべきでないとき、通常、それらは、ユーザコードのタイ
           ポ (誤植) を示します。

       -Wnormalized=<none|id|nfc|nfkc>
           ISO C と ISO C++ では、それらが異なった文字のシーケンスであるなら、
           2 つの識別子は、異なります。しかしながら、とくどき、基本的な ASCII
           文字セットの外の文字が使用されるとき、利用者は、同じに見える 2 つの
           異なった文字シーケンスを持つことができます。混乱を避けるために、ISO
           10646 規格は、適用されるとき、同じに見える 2 つのシーケンスが同じ
           シーケンスに変えられることを確実にする、いくつかの正規化規則
           (normalization rules) を設定しています。GCC は、利用者が正規化され
           ていない識別子を使用しているなら、利用者に警告できます。このオプ
           ションは、その警告を制御します。

           GCC がサポートする 4 つのレベルの警告があります。デフォルトは、ISO
           10646 "C" 正規化形式、NFC ではない、任意の識別子に警告する、
           -Wnormalized=nfc です。NFC は、ほとんどの使用のためのお勧めの形式で
           す。

           残念ながら、ISO C と ISO C++ によって NFC に変えられるとき、識別子
           として許可できない識別子で認められたいくつかの文字があります。すな
           わち、移植性のある ISO C または C++ のこれらのシンボルを使用し、NFC
           の利用者のすべての識別子を持つ方法はありません。-Wnormalized=id
           は、これらの文字のための警告を抑制します。関連する規格の将来のバー
           ジョンで、これを修正することが望まれています、だから、このオプショ
           ンは、デフォルトではありません。

           利用者は、書き込み -Wnormalized=none によってすべての文字のための警
           告をオフにすることができます。利用者は、ある他の正規化スキーム ("D"
           のような) を使用している場合にだけ、これを行いたいでしょう、そうで
           なければ、利用者は、そのまま見ることが不可能なバグを作成できるから
           です。

           ISO 10646 のいくつかの文字は、異なった意味がありますが、特に形式が
           いったん適用されると、いくつかのフォントまたは表示の方法が同じに見
           えます。例えば、"\u207F", "SUPERSCRIPT LATIN SMALL LETTER N" は、
           ちょうど、上付き文字として置かれた通常の "n" のように表示すます。
           ISO 10646 は、同様に、これらをすべて標準形式に変換するために NFKC
           正規化スキームを定義し、GCC は、利用者のコードが NFKC でなく、利用
           者が -Wnormalized=nfkc を使用するなら、警告します。この警告は、数値
           0 と混乱するかもしれないので、文字 O を含むあらゆる識別子を警告する
           ことに似ていて、それにデフォルトではありませんが、プログラミング環
           境がこれらの文字を区別して表示するために固定できないなら、局所的な
           コーディング規約として役に立ちます。

       -Wno-deprecated-declarations
           "deprecated" 属性を使用することによって推奨されないとしてマークされ
           た関数、変数とタイプの使用に警告しません。

       -Wno-overflow
           定数の式におけるコンパイル時のオーバフローに警告しません。

       -Woverride-init
           指定された初期化子を使用するとき、副作用のない初期化されたフィール
           ドが上書きされるなら、警告します。

           この警告は、-Wextra に含まれています。これなしで他の -Wextra 警告を
           得るには、-Wextra -Wno-override-init を使用します。

       -Wpacked
           構造体に packed 属性が与えられるが、packed 属性に構造体のレイアウト
           またはサイズに効果がないなら、警告します。そのような構造体は、わず
           かの利益のために誤って整列されるかもしれません。例えば、次コードで
           は、"struct bar" が、それ自体に packed 属性がなくても、"struct bar"
           の変数 "f.x" は誤って整列されます。

                   struct foo {
                     int x;
                     char a, b, c, d;
                   } __attribute__((packed));
                   struct bar {
                     char z;
                     struct foo f;
                   };

       -Wpadded
           構造体の要素を整列するためにか、または構造体全体を整列するために、
           構造体に詰め物 (パディング) が含まれているなら、警告します。時々こ
           れが起こるとき、詰め物を減らし、構造体をより小さくするために構造体
           のフィールドを再配置することができます。

       -Wredundant-decls
           多重宣言が有効であり何も変更されない場合でも、同じスコープで複数
           回、何かを宣言するなら、警告します。

       -Wnested-externs (C のみ)
           関数の中で "extern" 宣言に遭遇するなら、警告します。

       -Wunreachable-code
           コンパイラが決して実行されないコードを検出するなら、警告します。

           このオプションは、いくつかの条件が決して満たされないので、または、
           決して返らない手続きであるので、コンパイラが、少なくともソースコー
           ドの 1 行全体が決して実行されないことを検出するとき、警告することを
           目的としています。

           たとえ影響を受ける行の一部を実行することができる状況があったとして
           も、このオプションが警告を生成することは可能なので、明らかに到達で
           きないコードを削除するとき、特別の注意が払われなければなりません。

           例えば、関数かインラインのとき、警告は、行が関数のただ 1 つのインラ
           インコピーで到達できないことを、意味します。

           プログラムのデバッグバージョンで、プログラムの正しい機能をチェック
           する多くのコードがしばしばあり、うまくいけば、プログラムが動作する
           ため到達できないので、このオプションは、-Wall の一部にはなっていま
           せん。他の到達できないコードの一般的の使用は、コンパイル時に選択可
           能な振る舞いを提供することです。

       -Winline
           関数をインラインにすることができず、インラインとして宣言されている
           なら、警告します。このオプションがあったとしても、コンパイラは、シ
           ステムヘッダで宣言されたインライン関数の失敗に関して、警告しませ
           ん。

           コンパイラは、関数をインラインにするかどうかを決定するためにさまざ
           まな発見的手法を使用します。例えば、コンパイラがインライン化される
           関数のサイズと、現在の関数で既に行われたインラインの総量を考慮に入
           れます。したがって、ソースプログラムの外見的には重要でない変更は、
           -Winline によって生成された警告が、現れたり、消したりすることができ
           ます。

       -Wno-invalid-offsetof (C++ のみ)
           POD でないタイプに offsetof マクロを適用して警告を抑制します。1998
           ISO C++ 標準によると、offsetof を POD でないタイプに適用することは
           未定義です。しかしながら、既存の C++ 実装では、ある種類の POD でな
           いタイプに適用されるとき、通常 offsetof は重要な結果を与えます。(コ
           ンストラクタを持っているという理由だけで POD タイプとなることに失敗
           する単純な struct などです。) このフラグは、移植性がないコードを書
           いていることを承知していて、それに関する警告を無視するために故意に
           選んだ、ユーザのためのものです。

           offsetof での制限は、C++ 標準の将来のバージョンで緩和されるかもしれ
           ません。

       -Wno-int-to-pointer-cast (C のみ)
           キャストから異なったサイズの整数のポインタタイプまで警告を抑制しま
           す。

       -Wno-pointer-to-int-cast (C のみ)
           ポインタから異なったサイズの整数タイプまでの警告を抑制します。

       -Winvalid-pch
           プリコンパイルされたヘッダが検索パスで見つけられますが、使用するこ
           とができないなら、警告します。

       -Wlong-long
           long long タイプが使用されているなら、警告します。これはデフォルト
           です。警告メッセージを抑制するためには、-Wno-long-long を使用しま
           す。フラグ -Wlong-long-Wno-long-long は、-pedantic  フラグが使
           用される場合のみ、考慮に入れられます。

       -Wvariadic-macros
           可変長マクロが、杓子定規な ISO C90 モード、または杓子定規な ISO C90
           モードのときに、GNU 代替構文で使用されるなら、警告します。これは、
           デフォルトです。警告メッセージを抑制するためには、
           -Wno-variadic-macros を使用します。

       -Wvolatile-register-var
           レジスタ変数が、volatile (揮発性) と宣言されているなら警告します。
           volatile 修飾子は、レジスタ変数への読み込みおよび/または書き込みを
           排除するかもしれない、すべての最適化を抑制するというわけではありま
           せん。

       -Wdisabled-optimization
           要求された最適化パスが無効であるなら、警告します。一般的に、この警
           告は、利用者のコードに何か悪いものがあることを示しません。それは、
           GCC のオプティマイザがコードを効率的に取り扱うことができなかったこ
           とを単に示します。しばしば、問題は、利用者のコードが大き過ぎるか、
           または複雑過ぎるということです。GCC は、最適化自体がとてつもない量
           の時間がかかりそうなとき、プログラムを最適化することを拒否します。

       -Wpointer-sign
           異なったサイン (signedness) でポインタ引数の引き渡しか、または代入
           に警告します。このオプション、は C のためだけサポートされます。
           -Wno-pointer-sign で無効にすることができる、-Wall-pedantic に
           よって暗黙に定義されます。

       -Werror
           すべての警告をエラーにします。

       -Werror=
           指定された警告をエラーにします。警告のための指定子が追加され、例え
           ば、-Werror=switch は、-Wswitch によって制御される警告をエラーに変
           えます。このスイッチは、特定の警告のために -Werror を否定するために
           使用される否定形を取ります、例えば、-Wno-error=switch は、-Werror
           が有効であるときにさえ、エラーでない -Wswitch 警告を行います。利用
           者は、このオプションで何を使用したらよいかを決定するために、それを
           制御するオプションで、それぞれの制御可能な警告を改正するために
           -fdiagnostics-show-option オプションを使用できます。

           -Werror=foo を指定することは、-Wfoo の意味が含まれていることに注意
           してください。しかしながら、-Wno-error=foo は、何の意味も含まれませ
           ん。

       -Wstack-protector
           -fstack-protector がアクティブであるときにだけ、このオプションは、
           アクティブです。それはスタックの破壊に対して保護されない関数に警告
           します。

       -Woverlength-strings
           C 標準で指定された "minimum maximum" 長より長い文字列定数に警告しま
           す。一般的に現代のコンパイラによって、標準の最小の制限よりずっと長
           い文字列定数を許可しますが、たいへん移植性のあるプログラムは、より
           長い文字列を使用することを避けるべきです。

           制限は、文字列定数の連結の後に適用して、後続する NUL (ヌル文字) を
           数えません。C89 では、制限は、509 文字でした。C99 では、それは 4095
           まで引き上げられました。C++98 は、標準的な最小最大を指定しないの
           で、我々は、C++ の長さがオーバする文字列を診断しません。

           このオプションは、-Wno-overlength-strings で無効にすることができ
           る、-pedantic の意味を含みます。

       利用者のプログラムまたは GCC をデバッグするためのオプション

       GCC には、利用者のプログラムまたは GCC のいずれかをデバッグするために使
       用される様々な特別のオプションがあります:

       -g  オペレーティングシステムのネイティブ形式 (stabs, COFF, XCOFF または
           DWARF 2) でデバッグ情報を生成します。GDB は、このデバッグ情報を使用
           して動作することができます。

           stabs 形式を使用する、ほとんどのシステムでは、-g は GDB だけが使用
           することができる特別のデバッグ情報の使用を有効にします。この特別の
           情報は、GDB でデバッグすることをより良くしますが、他のデバッガで
           は、たぶんクラッシュさせるか、またはプログラムを読み込むことを拒否
           することになります。特別の情報を生成するかどうかを確実に制御したい
           なら、-gstabs+, -gstabs, -gxcoff+, -gxcoff または -gvms (下記参照)
           を使用していください。

           GCC で、利用者は、-O とともに -g を使用することができます。最適化さ
           れたコードによって行われたショートカットは、時々驚異的な結果を生む
           かもしれません: 利用者が宣言したいくつかの変数が存在しないかもしれ
           ません。制御の流れが利用者が予想しなかったところにあっさりと移動す
           るかもしれません。いくつかの文は、定数の結果を計算したり、それらの
           値が既に手元にあるので、実行されないかもしれません。いくつかの文
           は、それらがループに外に移動され、異なった場所で実行されるかもしれ
           ません。

           それにもかかわらず、最適化された出力をデバッグすることが可能である
           と分かります。これによって、バグがあるかもしれないプログラムに対し
           てオプティマイザを使用することが妥当になります。

           次のオプションは、GCC が複数のデバッグ形式の能力を生成するとき、役
           に立ちます。

       -ggdb
           GDB によって使用するデバッグ情報を生成します。これは、可能であれ
           ば、GDB 拡張を含んで、(DWARF 2, stabs またはそれらのいずれかがサ
           ポートされているならネイティブ形式) で利用可能な最も表現に富む形式
           を使用することを意味します。

       -gstabs
           (サポートされるなら) GDB 拡張なしで stabs 形式でデバッグ情報を生成
           します。これは、ほとんどの BSD システムで DBX によって使用される形
           式です。MIPS, Alpha の System V Release 4 システムでは、このオプ
           ションは、DBX または SDB によって解釈されない stabs デバッグ出力を
           生成します。System V Release 4 システムでは、このオプションは GNU
           アセンブラを必要とします。

       -feliminate-unused-debug-symbols
           (サポートされているなら) 実際に使用されるシンボルためだけの stabs
           形式のデバッグ情報を生成します。

       -femit-class-debug-always
           たった 1 つのオブジェクトファイルの C++ クラスのためのデバッグ情報
           を出力する代わりに、クラスを使用するすべてのオブジェクトファイルで
           それを出力します。このオプションを使用することは、デバッグ情報のサ
           イズが 2 の倍数と同じくらいに増加されるので、このオプションは、GCC
           が通常、クラスのためのデバッグ情報を出力する方法を扱うことができな
           いデバッガだけでのみ使用されるべきです。

       -gstabs+
           GNU デバッガ (GDB) だけによって解釈される GNU 拡張を使用して、(サ
           ポートされているなら) stabs 形式のデバッグ情報を生成します。これら
           の拡張の使用は、おそらく、他のデバッガをクラッシュさせるか、または
           プログラムを読み込むことを拒否するかもしれません。

       -gcoff
           (サポートされているなら) COFF 形式のデバッグ情報を生成します。これ
           は、System V Release 4 以前のほとんどの System V システムで SDB に
           よって使用された形式です。

       -gxcoff
           (サポートされているなら) XCOFF 形式のデバッグ情報を生成します。これ
           は、IBM RS/6000 システムで DBX デバッガによって使用される形式です。

       -gxcoff+
           GNU デバッガ (GDB) だけによって解釈される GNU 拡張を使用して、(サ
           ポートされているなら) XCOFF 形式のデバッグ情報を生成します。これら
           の拡張の使用は、おそらく、他のデバッガをクラッシュさせるか、または
           プログラムを読み込むことを拒否し、GNU アセンブラ (GAS) 以外のアセン
           ブラがエラーで失敗するかもしれません。

       -gdwarf-2
           (サポートされているなら) DWARF バージョン 2 形式のデバッグ情報を生
           成します。これは、IRIX 6 の DBX によって使用される形式です。このオ
           プションで、GCC は、それらが役に立つとき、DWARF バージョン 3 の機能
           を使用します。バージョン 3 は、バージョン 2 と上位互換性があります
           が、まだ、古いデバッガで問題を起こすかもしれません。

       -gvms
           (サポートされているなら) VMS デバッグ形式のデバッグ情報を生成しま
           す。これは、VMS システムの DEBUG によって使用される形式です。

       -glevel
       -ggdblevel
       -gstabslevel
       -gcofflevel
       -gxcofflevel
       -gvmslevel
           デバッグ情報を要求し、また、どのくらい多くの情報かを指定するために
           level 使用します。デフォルトのレベルは 2 です。

           レベル 1 は、利用者がデバッグを計画していないプログラムの部分でバッ
           クトレースをするのに十分な、最小限の情報を生成します。これは、関数
           と外部変数の記述を含んでいますが、ローカル変数と行番号に関する情報
           を含んでいません。

           レベル 3 は、プログラムに存在しているすべてのマクロ定義のような、特
           別の情報を含んでいます。いくつかのデバッガは、利用者が -g3 を使用す
           るとき、マクロ展開をサポートします。

           GCC は、あまりに混乱させられる、(バージョン 2 とたいへん異なってい
           る) DWARF 形式のバージョン 1 のデバッグ情報を生成することを意味する
           オプション -gdwarf をサポートするために使用するので、-gdwarf-2 は、
           連結されたデバッグレベルを受け付けません。そのデバッグ形式は、長い
           間時代遅れですが、現在、オプションを変更することができません。代わ
           りに、DWARF2 のデバッグレベルを変更するために、追加の -glevel オプ
           ションを使用します。

       -feliminate-dwarf2-dups
           各シンボルに関する重複した情報を取り除くことによって、DWARF2 デバッ
           グ情報を圧縮します。-gdwarf-2 で DWARF2 デバッグ情報を生成するとき
           だけ、このオプションは意味があります。

       -p  解析プログラム prof のために適切なプロファイル情報を書き込むための
           特別のコードを生成します。データが欲しいソースファイルをコンパイル
           するとき、このオプションを使用しなければなりません、そして、リンク
           するときもそれを使用しなければなりません。

       -pg 解析プログラム gprof のために適切なプロファイル情報を書き込むための
           特別のコードを生成します。データが欲しいソースファイルをコンパイル
           するとき、このオプションを使用しなければなりません、そして、リンク
           するときもそれを使用しなければなりません。

       -Q  コンパイラは、コンパイルされる各関数名を印刷し、終了したとき、各パ
           スに関するいくつかの統計を印刷するようにします。

       -ftime-report
           コンパイラは、終了したとき各パスによって消費した時間に関するいくつ
           かの統計を印刷するようにします。

       -fmem-report
           コンパイラは、終了したとき永久的なメモリ割り付けに関するいくつかの
           統計を印刷するようにします。

       -fprofile-arcs
           プログラムフロー arcs が備え付けられるように、コードを追加します。
           実行の間、プログラムは、各分岐と呼び出しが何回実行されたか、および
           それが何回試みられ返されたかを記録します。コンパイルされたプログラ
           ムが終了するとき、このデータを各ソースファイルに対して auxname.gcda
           と呼ばれるファイルに保存します。このデータは、プロファイルで指示さ
           れた最適化 (-fbranch-probabilities) またはテストカバレッジ分析
           (-ftest-coverage) で使用されます。各オブジェクトファイルの auxname
           は、明示的に指定され、最後の実行形式でなければ、出力ファイルの名前
           から生成され、そうでなければ、ソースファイルの basename です。訳注:
           basename はソースファイルからサフィックスを取り除いた名前、
           basename(1) を参照。どちらの場合も、任意のサフィックスが削除されま
           す (例えば、入力ファイルが dir/foo.c なら foo.gcda-o dir/foo.o と
           指定された出力ファイルなら dir/foo.gcda です)。

       --coverage
           このオプションは、カバレッジ分析のために備えられているコンパイルと
           コードリンクのために使用されます。オプションは、-fprofile-arcs
           -ftest-coverage (コンパイルするとき) と -lgcov (リンクするとき) の
           ための同義語です。それらのオプションのより詳しい情報については、文
           書を参照してください。

           *   ソースファイルを -fprofile-arcs に最適化とコード生成オプション
               を追加してコンパイルします。テストカバレッジ分析のためには、追
               加の -ftest-coverage オプションを使用します。利用者はプログラム
               のすべてのソースファイルのプロファイルを行う必要はありません。

           *   利用者のオブジェクトファイルを -lgcov または -fprofile-arcs (後
               者は前者の意味を含みます) つきでリンクします。

           *   arc プロファイル情報を生成するために、典型的な仕事量 (workload)
               でプログラムを実行します。これは任意の回数繰り返されます。利用
               者は、プログラムのインスタンスを並列 (concurrent) に実行するこ
               とができ、ロックをサポートするファイルシステムが提供され、デー
               タファイルは、正しく更新されます。訳注: 原文がおかしく訳せませ
               ん。また、"fork" 呼び出しは、検出されて、正しく取り扱われます
               (二重のカウントは起こらないでしょう)。

           *   プロファイル指示された最適化のために、同じ最適化とコード生成オ
               プションに -fbranch-probabilities を加えて再びソースファイルを
               コンパイルします。

           *   テストカバレッジ分析のために、.gcno and .gcda ファイルから人間
               に解読可能な情報を生成するために gcov を使用します。詳細につい
               ては gcov の文書を参照してください。

           -fprofile-arcs をつけて、利用者のプログラムの各関数のために、GCC は
           プログラムフローグラフを作成し、次にグラフのためのスパニングツリー
           を見つけます。スパニングツリーにない arc のみ計装されなければなりま
           せん: コンパイラは、これらの arc が実行される回数をカウントするため
           のコードを追加します。arc が単にブロックで終了するか、または単にブ
           ロックに入るとき、計装コードをブロックに追加することができます。そ
           うでなければ、計装コードを保持するために新しい基本ブロックを作成し
           なければなりません。

       -ftest-coverage
           gcov コードカバレッジユーティリティがプログラムのカバレッジを表示す
           るために使用することができるノートファイルを生成します。各ソース
           ファイルのノートファイルは auxname.gcno と呼ばれます。auxname の説
           明とテストカバレッジデータをどうのように生成するかに関する指示につ
           いては、上記の -fprofile-arcs オプションを参照してください。カバ
           レッジデータは、利用者が最適化しないなら、より密接にソースファイル
           に適合します。

       -dletters
       -fdump-rtl-pass
           コンパイルの間に、letters によって指定される時期にデバッグのダンプ
           を行うように指示します。これは、コンパイラの RTL ベースのパスをデ
           バッグするために使用されます。ほとんどのダンプのファイル名は、パス
           番号と単語を dumpname に追加することによって作られます。dumpname
           は、明白に指定され、実行形式でなければ、出力ファイルの名前から生成
           され、そうでなければ、ソースファイルの basename です。

           文字を -d オプションにわたすか、または長い -fdump-rtl スイッチで、
           ほとんどのデバッグダンプを有効にすることができます。ここに、指定で
           きる letterpass で使用される文字とその意味を示します:

           -dA その他のデバッグ情報をつけてアセンブラ出力に注釈つけます。

           -dB
           -fdump-rtl-bbro
               ブロックの並べ替えの後に、file.148r.bbro にダンプします。

           -dc
           -fdump-rtl-combine
               命令結合の後に、ファイル file.129r.combine ダンプします。

           -dC
           -fdump-rtl-ce1
           -fdump-rtl-ce2
               -dC-fdump-rtl-ce1 は、変換されるなら、最初の後に、ファイル
               file.117r.ce1 へのダンプを有効にします。-dC-fdump-rtl-ce2
               は、変換されるなら、2 番目の後にファイル file.130r.ce2 へのダン
               プを有効にします。

           -dd
           -fdump-rtl-btl
           -fdump-rtl-dbr
               -dd-fdump-rtl-btl は、ブランチターゲットロード最適化の後に
               ファイル file.31.btl へのダンプを有効にします。-dd-fdump-rtl-dbr は、遅延ブランチスケジューリングの後に
               file.36.dbr へのダンプを有効にします。

           -dD 通常の出力に加えて、前処理の終わりに、すべてのマクロ定義をダン
               プします。

           -dE
           -fdump-rtl-ce3
               変換されるなら、3 番目の後に、file.146r.ce3 へダンプします。

           -df
           -fdump-rtl-cfg
           -fdump-rtl-life
               -df-fdump-rtl-cfg は、制御とデータフロー解析の後に、
               file.116r.cfg へのダンプを有効にします。-df-fdump-rtl-cfg
               は、生存解析の後に、file.128r.life1file.135r.life2 へのダン
               プを有効にします。

           -dg
           -fdump-rtl-greg
               グローバルレジスタの割り付けの後に、file.139r.greg へダンプしま
               す。

           -dG
           -fdump-rtl-gcse
           -fdump-rtl-bypass
               -dG-fdump-rtl-gcse は、GCSE の後に、file.114r.gcse へのダン
               プを有効にします。-dG-fdump-rtl-bypass は、ジャンプバイパス
               と制御フロー最適化の後に、file.115r.bypass へのダンプを有効にし
               ます。

           -dh
           -fdump-rtl-eh
               EH 操作コードの確定化 (finalization) の後に、file.02.eh にダン
               プします。

           -di
           -fdump-rtl-sibling
               シブリング (sibling, 兄弟) 呼び出し最適化の後に、
               file.106r.sibling にダンプします。

           -dj
           -fdump-rtl-jump
               最初のジャンプ最適化の後に、file.112r.jump にダンプします。

           -dk
           -fdump-rtl-stack
               レジスタからスタックへの変換の後に、file.152r.stack にダンプし
               ます。

           -dl
           -fdump-rtl-lreg
               ローカルレジスタ割り付けの後に、file.138r.lreg にダンプします。

           -dL
           -fdump-rtl-loop2
               -dL-fdump-rtl-loop2 は、ループ最適化パスの後に
               file.119r.loop2, file.120r.loop2_init,
               file.121r.loop2_invariantfile.125r.loop2_done へのダンプを
               有効にします。

           -dm
           -fdump-rtl-sms
               モジュロ (modulo) スケジューリングの後に、file.136r.sms にダン
               プします。

           -dM
           -fdump-rtl-mach
               マシンに依存する再編成パスを実行した後に、file.155r.mach にダン
               プします。

           -dn
           -fdump-rtl-rnreg
               レジスタの再番号付けの後に、file.147r.rnreg にダンプします。

           -dN
           -fdump-rtl-regmove
               レジスタ移動パスの後に、file.132r.regmove にダンプします。

           -do
           -fdump-rtl-postreload
               ポストリロード (post-reload) 最適化の後に、file.24.postreload
               にダンプします。

           -dr
           -fdump-rtl-expand
               RTL 生成の後に、file.104r.expand にダンプします。

           -dR
           -fdump-rtl-sched2
               2 番目のスケジューリングパスの後に、file.150r.sched2 にダンプし
               ます。

           -ds
           -fdump-rtl-cse
               CSE (しばしば CSE に続くジャンプ最適化を含む) の後に、
               file.113r.cse にダンプします。

           -dS
           -fdump-rtl-sched
               最初のスケジューリングパスの後に、file.21.sched にダンプしま
               す。

           -dt
           -fdump-rtl-cse2
               2 番目の CSE パス (しばしば CSE に続くジャンプ最適化を含む) の
               後に、file.127r.cse2 にダンプします。

           -dT
           -fdump-rtl-tracer
               トレーサを実行した後に、file.118r.tracer にダンプします。

           -dV
           -fdump-rtl-vpt
           -fdump-rtl-vartrack
               -dV-fdump-rtl-vpt は、値のプロファイル変換の後に、
               file.10.vpt へのダンプを有効にします。-dV-fdump-rtl-vartrack は、変数追跡の後に、file.154r.vartrack への
               ダンプを有効にします。

           -dw
           -fdump-rtl-flow2
               2 番目のフローパスの後に、file.142r.flow2 にダンプします。

           -dz
           -fdump-rtl-peephole2
               ピープホール (peephole, のぞき穴) パスの後に、
               file.145r.peephole2 にダンプします。

           -dZ
           -fdump-rtl-web
               ライブ範囲分割の後に、file.126r.web にダンプします。

           -da
           -fdump-rtl-all
               上にリストされたすべてのダンプを行います。

           -dH エラーが起こるときはいつも、コアダンプを行います。

           -dm 実行の終りにメモリ使用量の統計を標準エラーに印刷します。

           -dp どのパターンと代替手段が使用されたかを示すコメントをつけてアセ
               ンブラ出力を注釈します。各命令の長さも印刷されます。

           -dP 各命令の前にコメントとしてアセンブラ出力に RTL をダンプします。
               -dp 注釈もオンにします。

           -dv (-d または -fdump-rtl-pass のいずれかで) 他に示されたダンプファ
               イルごとに、VCG で表示される適切な制御フローグラフの表現を
               file.pass.vcg にダンプします。

           -dx 関数をコンパイルする代わりに関数のための RTL を単に生成します。
               通常、r (-fdump-rtl-expand) で使用されます。

           -dy 構文解析の間にデバッグ情報を標準エラーにダンプします。

       -fdump-noaddr
           デバッグダンプ (上記の -d オプション参照) を行うとき、アドレス出力
           を抑制します。これで、異なったコンパイラバイナリ、および/または、異
           なった text / bss / data / heap / stack / dso 開始位置で、コンパイ
           ラ呼び出しのためにデバッグダンプで異なった使用のためによりふさわし
           くします。

       -fdump-unnumbered
           デバッグダンプ (上記の -d オプション参照) を行うとき、指示番号、行
           番号の注意、とアドレス出力を抑制します。これによって、異なったオプ
           ションをつけて、特に -g のあるなしにかかわらず、コンパイラ実行のた
           めのデバッグダンプで diff を使用することをより実行可能とします。

       -fdump-translation-unit (C++ のみ)
       -fdump-translation-unit-options (C++ のみ)
           変換ユニット全体のツリー構造の表現をファイルにダンプします。ファイ
           ル名は、ソースファイル名に .tu を追加して作成されます。-options 形
           式が使用されるなら、options-fdump-tree オプションで説明されてい
           るダンプの詳細を制御します。

       -fdump-class-hierarchy (C++ のみ)
       -fdump-class-hierarchy-options (C++ のみ)
           各クラスの階層構造と仮想関数テーブルのレイアウトの表現をファイルに
           ダンプします。ファイル名は、ソースファイル名に .class を追加して作
           成されます。-options 形式が使用されるなら、options-fdump-tree
           オプションで説明されているダンプの詳細を制御します。

       -fdump-ipa-switch
           様々なステージの相互手続きの解析言語ツリーをファイルにダンプするこ
           とを制御します。ファイル名は、ソースファイル名にスイッチ特有のの接
           尾辞を追加することによって生成されます。次のダンプが利用可能です:

           all すべての相互手続きの解析ダンプを有効にします。現在、唯一の生産
               されるダンプは、cgraph ダンプです。

           cgraph
               呼び出しグラフの最適化、未使用関数の削除、とインライン化の決定
               に関する情報をダンプします。

       -fdump-tree-switch
       -fdump-tree-switch-options
           中間言語ツリーを処理する様々なステージでファイルへのダンプを制御し
           ます。ファイル名は、スイッチ特有のサフィックスをソースファイル名に
           追加することによって生成されます。-options 形式が使用されるなら、
           options はダンプの詳細を制御する - で区切られたリストです。すべての
           オプションがすべてのダンプに適用可能というわけではなく、意味のない
           ものは無視されます。次のオプションが利用可能です:

           address
               それぞれのノードのアドレスを印刷します。通常、これは、環境と
               ソースファイルにしたがって変化するので、重要ではありません。主
               要な使用は、ダンプファイルとデバッグ環境を結びつけることです。

           slim
               単にスコープが到達しているので、スコープのメンバまたは関数の本
               体のダンプを抑制します。項目がある他のパスによって直接到達可能
               であるとき、単にそのような項目をダンプします。ツリーを清書プリ
               ント (pretty-print) でダンプするとき、このオプションは、制御構
               造体の本体をダンプすることを抑制します。

           raw ツリーの生の表現を印刷 (表示) します。デフォルトで、ツリーは、C
               のような表現で清書プリントされます。

           details
               (すべてのダンプオプションによって指示されるわけではない) より詳
               細なダンプを有効にします。

           stats
               (すべてのダンプオプションによって指示されるわけではない) パスに
               関する様々な統計値のダンプを有効にします。

           blocks
               (生のダンプで無効にされる) 基本的なブロック境界の表示を有効にし
               ます。

           vops
               すべての文のための仮想のオペランドの表示を有効にします。

           lineno
               文のための行番号の表示を有効にします。

           uid 各変数のためのユニークな ID ("DECL_UID") の表示を有効にします。

           all raw, slimlineno を除いて、すべてのオプションをオンにしま
               す。

           次のツリーダンプが可能です:

           original
               任意のツリーベースの最適化の前に、file.original にダンプしま
               す。

           optimized
               すべてのツリーベースの最適化の後に、file.optimized にダンプしま
               す。

           inlined
               関数のインライン化の後に、file.inlined にダンプします。

           gimple
               gimplification パスの前後の各関数をファイルにダンプします。ファ
               イル名は、ソースファイル名に .gimple を追加することによって作ら
               れます。

           cfg 各関数の制御フローグラフをファイルにダンプします。ファイル名
               は、ソースファイル名に .cfg を追加することによって作られます。

           vcg 各関数の制御フローグラフを VCG 形式でファイルにダンプします。
               ファイル名は、ソースファイル名に .vcg を追加することによって作
               られます。ファイルが複数の関数を含んでいるなら、直接 VCG によっ
               て生成されたファイルを使用できないことに注意してください。利用
               者は、最初に、各関数のグラフをそれ自体の別々のファイルにカット
               アンドペーストする必要ああります。

           ch  ループヘッダをコピーした後に、各関数をダンプします。ファイル名
               は、ソースファイル名に .ch を追加することによって作られます。

           ssa SSA 関連の情報をファイルにダンプします。ファイル名は、ソース
               ファイル名に .ssa を追加することによって作られます。

           salias
               構造体エイリアシング変数情報をファイルにダンプします。ファイル
               名は、ソースファイル名に .salias を追加することによって作られま
               す。

           alias
               各関数のためのエイリアシング情報をダンプします。ファイル名は、
               ソースファイル名に .alias を追加することによって作られます。

           ccp CCP の後に各関数をダンプします。ファイル名は、ソースファイル名
               に .ccp を追加することによって作られます。

           storeccp
               STORE-CCP の後に各関数をダンプします。ファイル名は、ソースファ
               イル名に .storeccp を追加することによって作られます。

           pre 部分的な冗長性の除去の後にツリーをダンプします。ファイル名は、
               ソースファイル名に .pre を追加することによって作られます。

           fre 完全な冗長性の除去の後にツリーをダンプします。ファイル名は、
               ソースファイル名に .fre を追加することによって作られます。

           copyprop
               コピー伝播の後にツリーをダンプします。ファイル名は、ソースファ
               イル名に .copyprop を追加することによって作られます。

           store_copyprop
               コピー伝播を格納した後にツリーをダンプします。ファイル名は、
               ソースファイル名に .store_copyprop を追加することによって作られ
               ます。

           dce 死んでいるコード (dead code) の除去の後に各関数をダンプします。
               ファイル名は、ソースファイル名に .dce を追加することによって作
               られます。

           mudflap
               泥よけ (mudflap) 計装を加えた後に各関数をダンプします。ファイル
               名は、ソースファイル名に .mudflap を追加することによって作られ
               ます。

           sra 集合体のスカラ置換を実行した後に各関数をダンプします。ファイル
               名は、ソースファイル名に .sra を追加することによって作られま
               す。

           sink
               コード sinking (沈没) を実行した後に各関数をダンプします。ファ
               イル名は、ソースファイル名に .sink を追加することによって作られ
               ます。

           dom dominator (支配者) ツリーの最適化を適用した後に各関数をダンプし
               ます。ファイル名は、ソースファイル名に .dom を追加することに
               よって作られます。

           dse 死んでいる格納 (dead store) の除去を適用した後に各関数をダンプ
               します。ファイル名は、ソースファイル名に .dse を追加することに
               よって作られます。

           phiopt
               PHI ノードを直線的コードに最適化した後に各関数をダンプします。
               ファイル名は、ソースファイル名に .phiopt を追加することによって
               作られます。

           forwprop
               単一使用変数の前方伝播の後に各関数をダンプします。ファイル名
               は、ソースファイル名に .forwprop を追加することによって作られま
               す。

           copyrename
               コピー改名最適化を適用した後に各関数をダンプします。ファイル名
               は、ソースファイル名に .copyrename を追加することによって作られ
               ます。

           nrv 一般的なツリーで指定された返り値の最適化適用した後に各関数をダ
               ンプします。ファイル名は、ソースファイル名に .nrv を追加するこ
               とによって作られます。

           vect
               ループのベクトル化を適用した後に各関数をダンプします。ファイル
               名は、ソースファイル名に .vect を追加することによって作られま
               す。

           vrp Value Range Propagation (VRP) の後に各関数をダンプします。ファ
               イル名は、ソースファイル名に .vrp を追加することによって作られ
               ます。

           all このオプションで提供されているフラグをつけて利用可能なツリーダ
               ンプを有効にします。

       -ftree-vectorizer-verbose=n
           このオプションは、デバッグ出力 vectorizer (ベクトル化プログラム) 印
           刷の量を制御します。この情報は、通常ダンプリストファイル、.vect へ
           の出力されますが、-fdump-tree-all または -fdump-tree-vect が指定さ
           れないなら、標準エラーに書き込まれます。n=0 に関しては、診断情報
           は、報告されません。n=1 なら、vectorizer は、ベクトル化された各ルー
           プとベクトル化されたループの合計数を報告します。また、n=2 なら、
           vectorizer は、最初の解析フェーズ (vect_analyze_loop_form) に渡され
           たベクトル化されていないループ - すなわち、countable, inner-most,
           single-bb, single-entry/exit ループ、を報告します。これは、
           -fdump-tree-vect-stats が使用する同じ冗長レベルです。より高い冗長レ
           ベルは、それぞれの報告されたループのためにダンプされたされたより詳
           しい情報か、またはより多くのループに対してを報告された同じ量の情報
           のいずれかを意味します: n=3 なら、整列に関連する情報が、報告に追加
           されます。n=4 なら、データ参照に関連する情報 (例えば、メモリの依存
           関係、メモリアクセスパターン) が、報告に追加されます。また、n=5 な
           ら、vectorizer は、最初の解析フェーズ (すなわち、カウントされなかっ
           たか、または複雑な制御フローがあるかもしれない) に渡されなかったベ
           クトル化されていない inner-most ループを報告します。n=6 なら、
           vectorizer は、ベクトル化されていない入れ子にされたループを報告しま
           す。n=7 に関しては、vectorizer がその解析と変換の間に生成されるすべ
           ての情報が報告されます。これは、-fdump-tree-vect-details が使用する
           同じ冗長レベルです。

       -frandom-seed=string
           このオプションは GCC が使用する種を提供し、そうでなければ、乱数を使
           用します。すべてのコンパイルされたファイルで異なっていなければなら
           ない特定のシンボル名を生成するために使用されます。また、カバレッジ
           データファイルと生成されたオブジェクトファイルのユニークなスタンプ
           をつけるために使用されます。利用者は、再生可能な方法で同じオブジェ
           クトファイルを作成するために -frandom-seed オプションを使用すること
           ができます。

           string は、コンパイルするすべてのファイルで異なっているべきです。

       -fsched-verbose=n
           命令スケジューリングを使用するターゲットでは、このオプションはスケ
           ジューラが印刷するデバッグ出力の量を制御します。-dS または -dR が指
           定されないなら、この情報は標準エラーに書き込まれます、指定された場
           合、普通のダンプリストファイル、それぞれ .sched または .sched2 に出
           力されます。しかしながら、n が 9 より大きいなら、出力は常に標準エ
           ラーに印刷されます。

           n が 0 より大きいなら、-fsched-verbose は、-dRS と同じ情報を出力し
           ます。n が 1 より大きいなら、基本ブロック確率、詳細な準備リスト
           (ready list) 情報と unit/insn 情報も出力します。n が 2 より大きいな
           ら、中断ポイント、制御フローと領域情報で RTL を含みます。そして、n
           が 4 を越えるなら、-fsched-verbose は依存情報も含みます。

       -save-temps
           通常の "一時的な" 中間ファイルを削除せずに格納します。それらをカレ
           ントディレクトリに置いて、ソースファイルに基づいてそれらの名前を付
           けます。したがって、-c -save-temps  をつけて foo.c をコンパイルする
           と、foo.o と同様に、ファイル foo.ifoo.s を生成します。たとえ、
           現在コンパイラは通常統合プリプロセッサを使用ても、これは前処理され
           た foo.i 出力ファイルを作成します。

           -x コマンドラインのオプションと組み合わせて使用されるとき、
           -save-temps は、中間ファイルとして同じ拡張がある入力ソースファイル
           を上書きすることを避けるために十分賢明です。対応する中間ファイル
           は、-save-temps を使用する前にソースファイルを改名することによって
           取得できます。

       -time
           コンパイルのシーケンスにおいて各サブプロセスでかかった CPU 時間を報
           告します。C ソースファイルについては、これは、コンパイラ自体とアセ
           ンブラ (と、リンクが行われるなら、リンカも) です。出力は次のような
           ものです:

                   # cc1 0.12 0.01
                   # as 0.00 0.01

           各行の最初の数値は "ユーザ時間" で、すなわち、プログラム自体の実行
           に費やされた時間です。2 番目の数値は "システム時間" で、プログラム
           のためにオペレーティングシステムのルーチンの実行に費やされた時間で
           す。どちらの数値も秒です。

       -fvar-tracking
           変数追跡パスを実行します。それは変数がコードの各位置に格納されると
           ころで計算されます。(デバッグ情報形式が、この情報をサポートするな
           ら) より良いデバッグ情報が生成されます。

           最適化 (-Os, -O, -O2, ...)、デバッグ情報 (-g) でコンパイルして、デ
           バッグ情報形式がそれをサポートするとき、それはデフォルトで有効にさ
           れます。

       -print-file-name=library
           リンクするとき使用されるライブラリファイル library の完全な絶対名を
           印刷します --- そして、他に何もしません。このオプションについて、
           GCC は、コンパイルもリンクも何もしません。ただファイル名を印刷しま
           す。

       -print-multi-directory
           コマンドラインに存在する任意の他のスイッチによって選択された
           multilib に対応するディレクトリ名を印刷します。このディレクトリは
           GCC_EXEC_PREFIX に存在するはずです。

       -print-multi-lib
           multilib ディレクトリ名からそれらを有効にするコンパイラスイッチへの
           マッピングを印刷します。ディレクトリ名は ; によってスイッチと分離さ
           れ、各スイッチは複数のスイッチの間の空白なしで、@samp{- の代わりに
           @} で始まります。これはシェル処理で簡単に行えるはずです。

       -print-prog-name=program
           -print-file-name に似ていますが、cpp のようなプログラムを検索しま
           す。

       -print-libgcc-file-name
           -print-file-name=libgcc.a と同じです。

           これは、利用者が -nostdlib または -nodefaultlibs を使用しますが、
           libgcc.a とリンクしたいとき、役に立ちます。次のように行うことができ
           ます:

                   gcc -nostdlib <files>... `gcc -print-libgcc-file-name`

       -print-search-dirs
           設定されたインストールディレクトリの名前と gcc が検索するプログラム
           とライブラリディレクトリのリストを印刷します --- そして、他に何もし
           ません。

           これは、gcc がエラーメッセージ installation problem, cannot exec
           cpp0: No such file or directory を印刷するとき、役に立ちます。これ
           を解決するために、利用者は、gcc が、それらを見つけると予想するとこ
           ろに cpp0 と他のコンパイラコンポーネントを置くか、または環境変数
           GCC_EXEC_PREFIX に利用者がそれらをインストールしたディレクトリを設
           定する必要があります。末尾の / を忘れないでください。

       -dumpmachine
           コンパイラのターゲットマシン (例えば、i686-pc-linux-gnu) を印刷しま
           す --- そして、他に何もしません。

       -dumpversion
           コンパイラのバージョン (例えば、3.0) を印刷します --- そして、他に
           何もしません。

       -dumpspecs
           コンパイラの組み込み仕様を印刷します --- そして、他に何もしません。
           (これは、GCC 自体が構築されているとき、使用されます。)

       -feliminate-unused-debug-types
           通常、DWARF2 出力を生成するとき、GCC は、実際にそのコンパイルユニッ
           トで使用されるかどうかにかかわらず、コンパイルユニットで宣言された
           すべてのタイプのためのデバッグ情報を出力します。デバッガにおいて、
           利用者のプログラムで実際に使用されないタイプ (しかし、宣言されてい
           る) への値をキャストしたい場合に、しばしば役に立ちます。しかしなが
           ら、よりしばしば、これはかなりの量の無駄な空間をもたらします。この
           オプションで、GCC は、コンパイルされるソースファイル中で使用される
           どこにもないタイプのデバッグシンボルの出力を生成しません。

       最適化を制御するオプション

       これらのオプションは様々な種類の最適化を制御します。

       なにも最適化オプションがなければ、コンパイラのゴールは、コンパイルのコ
       ストを削減して、期待された結果を生成するデバッグを行うことです。(複数
       の) 文は独立しています: 利用者が、文の間のブレークポイントでプログラム
       を停止するなら、次に、新しい値を任意の変数に代入するか、またはプログラ
       ムカウンタを関数中の任意の別の文に変更し、ソースコードから予想される結
       果を正確に得ることができます。

       最適化フラグをオンにすると、コンパイラは、コンパイル時間とプログラムを
       デバッグする能力を犠牲にして、性能、および/または、コードサイズを改良す
       る試みを行います。

       コンパイラは、自体が持っているプログラムの知識に基づく最適化を実行しま
       す。特に、最適化レベル -O と上記は、コンパイラが、関数をコンパイルする
       とき、ファイル中の後の関数から得られた情報を考慮することができる、unit-
       at-a-time モードを有効にします。複数のファイルを unit-at-a-time モード
       で一度に単一の出力ファイルにコンパイルすることによって、コンパイラは、
       それらをそれぞれコンパイルするとき、ファイルのすべてから得られた情報を
       使用できます。

       すべての最適化は、フラグによって直接制御されわけではありません。フラグ
       がある最適化だけリストされます。

       -O
       -O1 最適化します。最適化をおこなうコンパイルは、大きい関数に対して、い
           くらか長い時間とずっと多いメモリを必要とします。

           -O によって、コンパイラは、ものすごいコンパイル時間がかかる任意の最
           適化を実行しないで、コードサイズと実行時間を削減することを試みま
           す。

           -O は次の最適化フラグをオンにします: -fdefer-pop -fdelayed-branch
           -fguess-branch-probability -fcprop-registers -fif-conversion
           -fif-conversion2 -ftree-ccp -ftree-dce -ftree-dominator-opts
           -ftree-dse -ftree-ter -ftree-lrs -ftree-sra -ftree-copyrename
           -ftree-fre -ftree-ch -funit-at-a-time -fmerge-constants

           また、-O は、デバッグに干渉しないマシンで -fomit-frame-pointer をオ
           ンにします。

       -O2 さらに最適化します。GCC は、空間と速度のトレードオフに関連しない、
           ほとんどすべてのサポートされた最適化を実行します。利用者が -O2 を指
           定するとき、コンパイラは、ループ展開または関数のインライン化を実行
           しません。-O と比べて、このオプションは、コンパイル時間と生成コード
           の性能の両方を向上させます。

           -O2-O によって指定されたすべての最適化フラグをオンにします。ま
           た、次の最適化フラグをオンにします: -fthread-jumps -fcrossjumping
           -foptimize-sibling-calls -fcse-follow-jumps  -fcse-skip-blocks
           -fgcse  -fgcse-lm -fexpensive-optimizations -frerun-cse-after-loop
           -fcaller-saves -fpeephole2 -fschedule-insns  -fschedule-insns2
           -fsched-interblock  -fsched-spec -fregmove -fstrict-aliasing
           -fstrict-overflow -fdelete-null-pointer-checks -freorder-blocks
           -freorder-functions -falign-functions  -falign-jumps -falign-loops
           -falign-labels -ftree-vrp -ftree-pre

           計算された goto を使用するプログラムで -O2 の呼び出しに関する
           -fgcse の下での警告に注意してください。

           -O2 は、Ada コンパイラのための -ftree-vrp をオンに切り替えません。
           このオプションは、Ada コンパイラのために有効にするためにコマンドラ
           インで明白に指定されなければなりません。

       -O3 さらに最適化します。-O3 は、-O2 によって指定されたすべての最適化を
           オンにし、また、-finline-functions, -funswitch-loops-fgcse-after-reload オプションもオンにします。

       -O0 最適化しません。これはデフォルトです。

       -Os サイズに対して最適化します。-Os は、通常コードサイズを増加させな
           い、すべての -O2 最適化を有効にします。また、コードサイズを減少する
           ように設計されたさらなる最適化を実行します。

           -Os は次の最適化フラグを無効にします: -falign-functions
           -falign-jumps  -falign-loops -falign-labels  -freorder-blocks
           -freorder-blocks-and-partition -fprefetch-loop-arrays
           -ftree-vect-loop-version

           複数の -O オプションを使用するなら、レベル番号のあるなしにかかわら
           ず、最後のオプションが有効にされます。

       -fflag 形式のオプションは、マシン独立のフラグを指定します。ほとんどのフ
       ラグには、肯定形式と否定形式の両方があります。-ffoo の否定形式は
       -fno-foo となります。下記のテーブルでは、1 つの形式だけがリストされ ---
       通常利用者が使用するものです。利用者は、no- を取り除くか、または追加す
       るることによって、もう片方の形式を見当つけることができます。

       次のオプションは特定の最適化を制御します。それらは、-O オプションまたは
       関連するもののいずれかによってアクティブとなります。利用者は、実行され
       るべきである最適化の  "微調整" が必要であるとき、まれに、次のフラグを使
       用することができます。

       -fno-default-inline
           単にメンバ関数がクラススコープ中で定義されるので、デフォルトでそれ
           らをインライン化しません (C++ のみ)。そうでなければ、利用者が -O を
           指定するとき、クラススコープ中で定義されたメンバ関数は、デフォルト
           でインラインにコンパイルされます。すなわち、利用者はメンバ関数名の
           前に inline を追加する必要はありません。

       -fno-defer-pop
           その関数が返るとすぐに、各関数呼び出しへの引数を常にポップします。
           関数呼び出しの後に引数をポップしなければならないマシンについては、
           コンパイラは、通常、いくつかの関数呼び出しのためにスタックに引数を
           蓄積し、それらをいっせいにポップします。

           レベル -O, -O2, -O3, -Os で無効です。

       -fforce-mem
           メモリオペランドはそれらで演算する前に、強制的にレジスタにコピーさ
           れます。これは、すべてのメモリ参照を潜在的な共通部分式にすることに
           よってより良いコードを生成します。それらが共通部分式でないときに、
           命令の組み合わせは、個別のレジスタロードを排除するべきです。このオ
           プションは、現在 nop (効果なし) であり、4.3 で取り除かれます。

       -fforce-addr
           メモリアドレス定数はそれらで演算する前に、強制的にレジスタにコピー
           されます。

       -fomit-frame-pointer
           フレームポインタを必要としない関数のためのレジスタのフレームポイン
           タを保存しません。これはフレームポインタを保存、設定、復旧する命令
           を避けます。また、それで、多くの関数で余分なレジスタを利用可能とし
           ます。また、それで、いくつかのマシンでデバッグを不可能にします。

           VAX などのようないくつかのマシンでは、標準の呼び出しシーケンスが自
           動的にフレームポインタを取り扱い、それが存在しないふりをすることに
           よって何も保存しないので、このフラグは効果がありません。マシン記述
           マクロ "FRAME_POINTER_REQUIRED" は、ターゲットマシンがこのフラグを
           サポートするかどうかを制御しています。

           レベル -O, -O2, -O3, -Os で有効です。

       -foptimize-sibling-calls
           シブリング (sibling, 兄弟) とテール再帰呼び出しを最適化します。

           レベル -O2, -O3, -Os で有効です。

       -fno-inline
           "inline" キーワードに注意を払いません。通常、このオプションは、任意
           の関数のインライン展開することを避けるために使用されます。利用者が
           最適化しないなら、関数をインライン展開できないことに注意してくださ
           い。

       -finline-functions
           すべての単純な関数をそれらの呼び出し側に統合します。コンパイラは、
           単にどの関数がこの方法で統合する価値が足りるか発見的に決定します。

           与えられた関数へのすべての呼び出しが統合され、関数が "static" であ
           ると宣言されるなら、通常、関数は、それ自体でアセンブラコードとして
           出力されません。

           レベル -O3 で有効です。

       -finline-functions-called-once
           一度呼び出されるすべて "static" 関数は、たとえ、それらが "inline"
           とマークされても、それらの呼び出し側に対して、インラインと見なされ
           ます。与えられた関数への呼び出しが統合されているなら、関数は、それ
           自体でアセンブラコードとして出力されません。

           -funit-at-a-time が有効にされるなら、有効にされます。

       -fearly-inlining
           "always_inline" によってマークされたインライン関数と
           -fprofile-generate 計装と実際のインラインパスを行う前に関数呼び出し
           のオーバヘッドより小さく思える本体がある関数。そうすることによっ
           て、極めて安くプロファイリングができ、通常、入れ子にされたラッパ関
           数の大きなチェーンを持っているプログラムで、より速いインラインとな
           ります。

           デフォルトで有効にされます。

       -finline-limit=n
           デフォルトでは、GCC はインライン化することができる関数のサイズを制
           限しています。このフラグによって、明らかにインラインとしてマークさ
           れる (すなわち、インラインキーワードでマークされるか、または c++ で
           クラス定義内で定義される) 関数のためのこの制限を制御できます。n
           は、(パラメータの取り扱いをカウントしない) 疑似命令の数のインライン
           化することができる関数のサイズです。n のデフォルト値は 600 です。こ
           の値を増加することは、コンパイル時間とメモリ消費のコストを犠牲にし
           てよりインライン化されたコードをもたらすことができます。減少するこ
           とは、通常、コンパイルは、より速くなり、より少ないコードがインライ
           ン化されます (おそらくより遅いプログラムを意味します)。このオプショ
           ンは、特に C++ で再帰的なテンプレートに基づくものなどのように、かな
           りインライン化を使用するプログラムの役に立ちます。

           インライン化は、--param name=value を使用することによって個別に指定
           される多くのパラメータによって実際に制御されます。-finline-limit=n
           オプションは、次のように、これらのパラメータのいくつかを設定します:

           max-inline-insns-single
                 は I<n>/2 に設定します。

           max-inline-insns-auto
                 は I<n>/2 に設定します。

           min-inline-insns
                 は 130 または I<n>/4 のどちらか小さいほう。

           max-inline-insns-rtl
                 は I<n> に設定します。

           インライン化を制御する個別のパラメータの文書については下記を参照し
           てください。

           注: 疑似命令は、この特定のコンテキストにおいて、関数のサイズの抽象
           的な大きさを表します。決して、アセンブリ命令のカウントを表していな
           くて、そのこと自体の正確な意味は、あるリリースから別のリリースで変
           更されるかもしれません。

       -fkeep-inline-functions
           C では、たとえ、関数が、呼び出し側のすべての関数にインライン化され
           ていても、"inline" と宣言されている "static" 関数をオブジェクトファ
           イルに出力します。このスイッチは、GNU C の "extern inline" 拡張を使
           用する関数に影響しません。C++ では、ありとあらゆるインライン関数を
           オブジェクトファイルに出力します。

       -fkeep-static-consts
           最適化がオンにされていないとき、たとえ変数が参照されなくても、
           "static const" で宣言された変数を出力します。

           GCC は、デフォルトでこのオプションを有効にします。最適化がオンにさ
           れいるかどうかにかかわらず、変数が参照されているかコンパイラに
           チェックさせたいなら、-fno-keep-static-consts オプションを使用しま
           す。

       -fmerge-constants
           コンパイルユニットを越えて同じ定数 (文字列定数と浮動小数点定数) を
           マージすることを試みます。

           このオプションは、アセンブラとリンカがサポートするなら、最適化され
           たコンパイルのためのデフォルトです。この振る舞いを抑制するために
           は、-fno-merge-constants を使用します。

           レベル -O, -O2, -O3, -Os で有効です。

       -fmerge-all-constants
           同じ定数と同じ変数をマージすることを試みます。

           このオプションは -fmerge-constants の意味を含みます。
           -fmerge-constants に加えて、これは、例えば、整数または浮動小数点タ
           イプの初期化された定数配列または初期化された定数変数さえも考慮しま
           す。C または C++ のような言語は、それぞれの自動的でない変数が別個の
           位置にあることを必要とするので、このオプションを使用すると、一致し
           ない振る舞いの結果となります。

       -fmodulo-sched
           最初のスケジューリングパスの直前にスイングモジュロスケジューリング
           (swing modulo scheduling) を実行します。このパスは、異なった繰り返
           しを重ね合わせることによって、最も奥深いループと再順序付けるそれら
           の命令を検索します。

       -fno-branch-count-reg
           カウントレジスタで "減少と分岐" 命令を使用しませんが、代わりにレジ
           スタを減少させ、それを 0 と比較して、次に結果に基づいて分岐する命令
           のシーケンスを生成します。このオプションは、x86, PowerPC, IA-64 と
           S/390 が挙げられる、そのような命令をサポートするアーキテクチャでの
           み重要です。

           デフォルトは、-fbranch-count-reg です。

       -fno-function-cse
           レジスタに関数のアドレスを置きません。各命令は、明示的に関数のアド
           レスを含んでいる定数関数を呼び出します。

           このオプションは、効率的でないコードとなりますが、アセンブラ出力を
           変更するいくつかの変わったハッキングは、このオプションが使用されて
           いないときに実行される最適化によって混乱させられるかもしれません。

           デフォルトは -ffunction-cse です。

       -fno-zero-initialized-in-bss
           ターゲットが BSS セクションをサポートするなら、GCC はデフォルトで 0
           に初期化される変数を BSS に置きます。これは結果のコードにおいて空間
           を節約することができます。

           このオプションは、いくつかのプログラムが、明白に変数がデータセク
           ションに置かれることを当てにしているので、この振る舞いをオフにしま
           す。例えば、結果の実行形式がそのセクションの始まりを見つけることが
           でき、そして/または、それに基づいてアサンプション (assumption) を行
           うことができるようにです。

           デフォルトは -fzero-initialized-in-bss です。

       -fbounds-check
           それをサポートするフロントエンドのために、配列にアクセスするために
           使用されるインデックスが宣言している範囲内であるかチェックする追加
           コードを生成します。これは、現在、Java と Fortran フロントエンドに
           よってのみサポートされ、このオプションは、それぞれ真と偽をデフォル
           トとします。

       -fmudflap -fmudflapth -fmudflapir
           (C と C++) をサポートするフロントエンドのために、すべての危険なポイ
           ンタ/配列の参照解除の操作、いくつかの標準ライブラリ文字列/ヒープ関
           数、といくつかの範囲/正当性のテストを構築する他の関連を計装していま
           す。そのように計装されたモジュールは、バッファオーバフロー、無効の
           ヒープの使用、とある他のクラスの C/C++ プログラミングエラーを免除さ
           れるべきです。計装は、リンク時に -fmudflap が与えられるなら、プログ
           ラムにリンクされる、別々のランタイムライブラリ (libmudflap) に頼り
           ます。計装されたプログラムの実行時の振る舞いは、MUDFLAP_OPTIONS 環
           境変数によって制御されます。オプションについては、"env
           MUDFLAP_OPTIONS=-help a.out" を参照してください。

           プログラムがマルチスレッド化されるなら、コンパイルして、リンクする
           ために -fmudflap の代わりに -fmudflapth を使用します。計装がポイン
           タの読み込みを無視するべきであるなら、-fmudflap または -fmudflapth
           に加えて -fmudflapir を使用します。これは、より少ない計装 (と、した
           がって、より速い実行) を作成して、まだ、完全なメモリの誤った書き込
           みに対する何らかの保護を提供していますが、間違っている読み込みデー
           タは、プログラム内で伝播することができます。

       -fthread-jumps
           ジャンプが最初に包含された別の比較が見つけられる位置に分岐するかど
           うか確認するための部分の最適化を実行します。そうだとすれば、最初の
           分岐は、条件が真か偽か分からないかどうかによって、2 番目の分岐の目
           的地またはそれの直後に続くポイントのいずれかに変えられます。

           レベル -O2, -O3, -Os で有効です。

       -fcse-follow-jumps
           共通の部分式の除去では、ジャンプのターゲットが任意の他のパスによっ
           ても到達しないとき、ジャンプ命令を通してスキャンします。例えば、CSE
           が "else" 節で "if" 文に遭遇するとき、CSE は、テストされた条件が偽
           のとき、ジャンプに続きます。

           レベル -O2, -O3, -Os で有効です。

       -fcse-skip-blocks
           これは、-fcse-follow-jumps と同様ですが、CSE は、条件付きでブロック
           をスキップするジャンプに続きます。CSE が、else 節のない単純な "if"
           文に遭遇するとき、-fcse-skip-blocks によって、CSE は、"if" の本体を
           囲むジャンプに続きます。

           レベル -O2, -O3, -Os で有効です。

       -frerun-cse-after-loop
           ループの最適化が実行された後に、共通部分式の除去を再実行します。

           レベル -O2, -O3, -Os で有効です。

       -fgcse
           グローバルな共通部分式の除去のパスを実行します。また、このパスはグ
           ローバルな定数とコピー伝播を実行します。

           注: 計算された goto、GCC 拡張使用してプログラムをコンパイルすると
           き、コマンドラインに -fno-gcse を追加するることによってグローバルな
           共通部分式の除去パスを無効にするなら、利用者は、より良い実行時性能
           を得ることができます。

           レベル -O2, -O3, -Os で有効です。

       -fgcse-lm
           -fgcse-lm が有効にされるとき、グローバルな共通部分式の除去は、それ
           ら自体に格納することよって kill されるだけであるロードを移動するこ
           とを試みます。これによって、ロード/格納シーケンスを含むループは、
           ループの外でロードし、ループ内でコピー/格納するように変更することが
           できます。

           gcse が有効にされるとき、デフォルトで有効です。

       -fgcse-sm
           -fgcse-sm が有効にされるとき、格納モーションパス (store motion
           pass) は、グローバルな共通部分式の除去の後に実行されます。このパス
           は、格納をループの外に移動することを試みます。-fgcse-lm に関連して
           使用されるとき、ロード/格納シーケンスを含むループをループの前にロー
           ドし、ループの後に格納するように変更することができます。

           どんな最適化レベルでも有効にされません。

       -fgcse-las
           -fgcse-las が有効にされるとき、グローバルな共通部分式の除去パスは同
           じメモリ位置 (一部分および全て冗長の両方) への格納の後に来る冗長な
           ロードを除去します。

           どんな最適化レベルでも有効にされません。

       -fgcse-after-reload
           -fgcse-after-reload が有効にされるとき、冗長なロード除去パスが、再
           ロードの後に実行されます。このパスの目的は、冗長な spilling (洩れ)
           をクリーンアップすることです。

       -funsafe-loop-optimizations
           与えられるなら、ループのオプティマイザは、ループのインデックスが
           オーバフローしないで、重要な終了条件があるループが無限でないと仮定
           します。これは、たとえ、ループのオプティマイザ自体が、これらの仮定
           が有効であると証明することができなくても、より広い範囲のループの最
           適化を有効にします。-Wunsafe-loop-optimizations を使用して、コンパ
           イラは、この種類にループを見つけるなら、警告します。

       -fcrossjumping
           クロスジャンプ (cross-jumping) 変換を実行します。この変換は同等な
           コードを一体化し、コードサイズを節約します。結果のコードは、クロス
           ジャンプなしよりも良く実行されるかどうかわかりません。

           レベル -O2, -O3, -Os で有効です。

       -fif-conversion
           条件付きジャンプを分岐なし (branch-less) の同等物に変換することを試
           みます。これは、条件付きの move, min, max, set フラグと abs 命令、
           および標準の演算でできるいくつかのトリックの使用を含んでいます。利
           用可能なチップで条件付きの実行の使用は、"if-conversion2" によって制
           御されます。

           レベル -O, -O2, -O3, -Os で有効です。

       -fif-conversion2
           条件付きのジャンプを分岐なしの同等物に変換するために (利用可能なと
           ころで) 条件付きの実行を使用します。

           レベル -O, -O2, -O3, -Os で有効です。

       -fdelete-null-pointer-checks
           使用されていない null ポインタのチェックを識別して除去するためにグ
           ローバルなデータフロー解析を使用します。コンパイラは、null ポインタ
           を参照解除することは、プログラムが停止したと仮定します。ポインタが
           既に参照解除された後にチェックされるなら、null にすることができませ
           ん。

           いくつかの環境では、この仮定は真実でなく、プログラムは安全に null
           ポインタを参照解除することができます。その振る舞いに依存するプログ
           ラムのために、この最適化を無効にするためには、
           -fno-delete-null-pointer-checks を使用します。

           レベル -O2, -O3, -Os で有効です。

       -fexpensive-optimizations
           比較的高価な、いくつかの小さな最適化を実行します。

           レベル -O2, -O3, -Os で有効です。

       -foptimize-register-move
       -fregmove
           move 命令とレジスタ拘束の量を最大にするために他の簡単な命令のオペラ
           ンドとしてレジスタ番号を再割り付けすることを試みます。これは 2 オペ
           ランド形式の命令があるマシンで特に役立ちます。

           -fregmove-foptimize-register-move は同じ最適化であることに注意
           してください。

           レベル -O2, -O3, -Os で有効です。

       -fdelayed-branch
           ターゲットマシンでサポートされるなら、遅延分岐命令の後に利用可能な
           命令スロットを利用するために命令の並べ替えを試みます。

           レベル -O, -O2, -O3, -Os で有効です。

       -fschedule-insns
           ターゲットマシンでサポートされるなら、利用可能でない必要なデータの
           ために実行ストールを除去するために命令の並べ替えを試みます。これ
           は、ロードまたは浮動小数点命令の結果が必要になるまで、他の命令が発
           行されるのを許可することによって遅い浮動小数点またはメモリロード命
           令があるマシンを助けます。

           レベル -O2, -O3, -Os で有効です。

       -fschedule-insns2
           -fschedule-insns と似ていますが、レジスタ割り付けが行われたの後で命
           令スケジューリングの追加パスを要求します。これは、レジスタの数が比
           較的少なく、メモリロード命令が 1 サイクル以上かかるマシンで特に役に
           立ちます。

           レベル -O2, -O3, -Os で有効です。

       -fno-sched-interblock
           基本ブロックを越える命令のスケジューリングを行いません。これは、通
           常、レジスタ割り付けの前にスケジューリングするとき、デフォルトで有
           効にされます、すなわち、-fschedule-insns または -O2 またはそれ以上
           を指定した場合です。

       -fno-sched-spec
           ロードしない命令の投機的な動作を許可しません。これは、通常、レジス
           タ割り付けの前にスケジューリングするとき、デフォルトで有効にされま
           す、すなわち、-fschedule-insns または -O2 またはそれ以上を指定した
           場合です。

       -fsched-spec-load
           いくつかのロード命令の投機的な動作を許可しません。これは、レジスタ
           割り付けの前にスケジューリングするときのみ、意味があります、すなわ
           ち、-fschedule-insns または -O2 またはそれ以上を指定した場合です。

       -fsched-spec-load-dangerous
           より多くのロード命令の投機的な動作を許可しません。これは、レジスタ
           割り付けの前にスケジューリングするときのみ、意味があります、すなわ
           ち、-fschedule-insns または -O2 またはそれ以上を指定した場合です。

       -fsched-stalled-insns=n
           2 番目のスケジューリングパスの間に、ストールした insn のキューから
           準備リストに (もしあれば) どのくらい多くの insn を早急に移動するこ
           とができるかを定義します。

       -fsched-stalled-insns-dep=n
           どのくらい多くの insn グループ (サイクル) が、ストールしている insn
           のキューから早急に削除する候補であるストールしている insn の依存状
           態を調べられるかを定義します。-fsched-stalled-insns が使用されてい
           て、値が 0 でない場合のみ、2 番目のスケジューリングパスの間にのみ効
           果があります。

       -fsched2-use-superblocks
           レジスタ割り付けの後にスケジューリングするとき、スーパブロックスケ
           ジューリングアルゴリズムを使用します。スーパブロックスケジューリン
           グによって、より速いスケジュールの結果となる、基本的なブロック境界
           を越える動作を許可します。GCC によって使用されるすべてのマシンの記
           述がアルゴリズムから信頼できない結果を避けることができるほど密接に
           CPU をモデル化しないので、このオプションは実験的です。

           これは、レジスタ割り付けの後にスケジューリングするときのみ、意味が
           あります、すなわち、-fschedule-insns2 または -O2 またはそれ以上を指
           定した場合です。

       -fsched2-use-traces
           レジスタ割り付けの後にスケジューリングするとき、
           -fsched2-use-superblocks アルゴリズムを使用し、トレーサのパスを使用
           するスーパブロックのサイズを増加させるために追加のコード複製を実行
           します。トレースの形成に関する詳細については -ftracer を参照してく
           ださい。

           このモードは、より速いけれども、かなり長いプログラムを生成するはず
           です。また、-fbranch-probabilities なしで、構成されたトレースは、実
           態と合わず、性能に害を与えるかもしれません。これは、レジスタ割り付
           けの後にスケジューリングするときのみ、意味があります、すなわち、
           -fschedule-insns2 または -O2 またはそれ以上を指定した場合です。

       -fsee
           冗長な拡張命令を削除し、冗長でないものを LCM を使用して最適な配置に
           移動します。

       -freschedule-modulo-scheduled-loops
           modulo (剰余) スケジューリングは、伝統的なスケジューリングに優先
           し、ループがスケジュールされている modulo であったなら、我々は、そ
           のスケジュールの変更から後のスケジューリングパスを防いでもよく、そ
           れを制御するためにこのオプションを使用します。

       -fcaller-saves
           関数呼び出しの前後でレジスタを保存して復元するために特別な命令を発
           行することによって、そのような呼び出しによって上書きされるレジスタ
           に値が割り付けられることを有効にします。そのような割り付けは、そう
           しなければ生成されるものより良いコードをもたらすように思われるとき
           のみ、行われます。

           このオプションは、通常代わりに使用する呼び出しで保存されるレジスタ
           がない特定のマシンでデフォルトで常に有効にされます。

           レベル -O2, -O3, -Os で有効です。

       -ftree-pre
           ツリーで Partial Redundancy Elimination (PRE) を実行します。このフ
           ラグは、-O2-O3 で、デフォルトで有効にされます。

       -ftree-fre
           ツリーで Full Redundancy Elimination (FRE) を実行します。FRE と PRE
           の違いは、FRE が冗長な計算に導くすべてのパスで計算される表現のみを
           考慮することです。この解析は、PRE より速くなりますが、より少ない冗
           長性をあらわにします。このフラグは、-O 以上で、デフォルトで有効にさ
           れます。

       -ftree-copy-prop
           ツリーでコピー伝播を実行します。このパスは、不要なコピー操作を省き
           ます。このフラグは、-O 以上で、デフォルトで有効にされます。

       -ftree-store-copy-prop
           メモリロードと格納のコピー伝播を実行します。このパスは、メモリ参照
           (構造体、グローバル変数、配列など) で不要なコピー操作を除去します。
           このフラグは、-O2 以上で、デフォルトで有効にされます。

       -ftree-salias
           ツリーで構造的なエイリアス (別名) 解析を実行します。このフラグは、
           -O 以上で、デフォルトで有効にされます。

       -fipa-pta
           内部手続き (interprocedural) ポインタ解析を実行します。

       -ftree-sink
           ツリーで前方格納モーションを実行します。このフラグは、-O 以上で、デ
           フォルトで有効にされます。

       -ftree-ccp
           ツリーでスパース (まばらな) 条件付きの定数の伝播 (CCP) を実行しま
           す。このパスのみ、ローカルのスカラ変数で動作し、-O 以上でデフォルト
           で有効にされます。

       -ftree-store-ccp
           ツリーでスパース (まばらな) 条件付きの定数の伝播 (CCP) を実行しま
           す。このパスは、ローカルのスカラ変数とメモリ格納とロード (グローバ
           ル変数、構造体、配列など) で動作します。このフラグは、-O2 以上で、
           デフォルトで有効にされます。

       -ftree-dce
           ツリーで死んでいるコード (dead code) の除去 ((DCE) を実行します。こ
           のフラグは、-O 以上で、デフォルトで有効にされます。

       -ftree-dominator-opts
           dominator ツリーの走査に基づく、さまざまな単純なスカラのクリーン
           アップ (定数/コピー伝播、冗長除去、範囲伝播と式の簡素化) を実行しま
           す。また、これは、ジャンプのスレッド化 (ジャンプからジャンプの削減)
           を実行します。このフラグは、-O 以上で、デフォルトで有効にされます。

       -ftree-ch
           ツリーでループヘッダコピーを実行します。コードモーション (動作) の
           最適化の有効性を増加させるので、これは有益です。また、それは 1 つの
           ジャンプを節約します。このフラグは、-O 以上で、デフォルトで有効にさ
           れます。それは、通常、コードサイズを増加させるので、-Os に対して有
           効にされません。

       -ftree-loop-optimize
           ツリーでループの最適化を実行します。このフラグは、-O 以上で、デフォ
           ルトで有効にされます。

       -ftree-loop-linear
           ツリーで直線的なループの変換を実行します。このフラグ、キャッシュ性
           能を向上させることができ、さらにループの最適化を行うことができま
           す。

       -ftree-loop-im
           ツリーでループ不変条件のモーション (動作) を実行します。このパス
           は、RTL レベル (関数呼び出し、insn の重要なシーケンスに拡張する操
           作)。で扱いにくい不変条件だけを動かしますまた、-funswitch-loops
           で、我々が、ちょうどループの切り換えなしで自明の不変条件の解析を使
           用できるように、不変条件である条件のオペランドをループの外に動かし
           ます。また、パスは、格納モーションを含んでいます。

       -ftree-loop-ivcanon
           複雑な解析を必要とする、繰り返しの数を決定するためのループの繰り返
           しの数のための基準のカウンタを作成します。次に、後の最適化は、容易
           に数を決定します。特に unrolling (展開) に関連して役に立ちます。

       -fivopts
           ツリーで帰納法 (induction) 変数の最適化 (強さ減少、帰納法変数のマー
           ジと記法法変数の除去) を実行します。

       -ftree-sra
           集合体のスカラの置換を実行します。このパスは、あまりに早く構造体を
           メモリに送ることを防ぐために構造体の参照をスカラに置き換えます。こ
           のフラグは、-O 以上で、デフォルトで有効にされます。

       -ftree-copyrename
           ツリーでコピーの改名を実行します。このパスは、コンパイラの一時変数
           をコピー位置の他の変数へ改名することを試みます、通常、変数により似
           た変数名の結果となります。このフラグは、-O 以上で、デフォルトで有効
           にされます。

       -ftree-ter
           SSA->normal フェーズの間に、一時的な式の置換を実行します。単一使用/
           単一定義の一時変数は、それらの定義された式でそれらが使用する位置で
           置き換えられます。これは、GIMPLE でないコードの結果となりますが、よ
           り良い RTL 生成の結果で動作するためにより複雑なツリーをエキスパンダ
           (expander) に与えます。これは、-O 以上で、デフォルトで有効にされま
           す。

       -ftree-lrs
           SSA->normal フェーズの間に、ライブ範囲分割を実行します。変数の区別
           できるライブ範囲は、後でより良い最適化を可能とするために、ユニーク
           な変数に分割されます。これは、-O 以上で、デフォルトで有効にされま
           す。

       -ftree-vectorize
           ツリーでループのベクトル化を実行します。

       -ftree-vect-loop-version
           ツリーでループのベクトル化を行うときに、ループバージョニング
           (versioning) を実行します。データ整列またはデータの依存関係がコンパ
           イル時に決定できないことを除いて、ループがベクトル化可能であると思
           われるとき、ループのベクトル化されるか、またはベクトル化されない
           バージョンは、整列のランタイムチェック、またはどのバージョンが実行
           されるかを制御するのとともに生成されます。このオプションは、無効に
           されたレベル -Os を除いて、デフォルトで有効にされます。

       -ftree-vrp
           ツリーで Value Range Propagation を実行します。これは、定数の伝播パ
           スと同様ですが、値の代わりに、値の範囲が、伝播されます。これによっ
           て、オプティマイザは、配列の境界チェックと NULL ポインタチェックの
           ような不要な範囲チェックを取り除くことができます。これは、-O2 以上
           で、デフォルトで有効にされます。-fdelete-null-pointer-checks が有効
           にされる場合のみ、NULL ポインタチェック除去が行われます。

       -ftracer
           スーパブロックサイズを拡大するためにテール複製を実行します。この変
           換は、他の最適化が、より良い仕事ができる関数の制御フローを簡素化し
           ます。

       -funroll-loops
           コンパイル時間またはループへの入口で、繰り返しの数を決定できる、
           ループを unroll (展開) します。-funroll-loops は、
           -frerun-cse-after-loop の意味を含みます。このオプションで、コードを
           より大きくして、より速く実行できるかもしれません。

       -funroll-all-loops
           ループに入るとき、たとえ、それらの繰り返しの数が不確実であっても、
           すべてのループを unroll (展開) します。これは、通常、より遅くプログ
           ラムを実行することになります。-funroll-all-loops は、-funroll-loops
           と同じオプションの意味を含みます。

       -fsplit-ivs-in-unroller
           最初の繰り返しで値を使用して unroll (展開) されたループの後の繰り返
           しで、帰納法の変数の値を表現することを有効にします。これは、長い依
           存関係チェーンを切断します、その結果、スケジューリングパスの効率を
           向上します。

           -fweb と CSE の組み合わせは、同じ効果を得るためにしばしば十分です。
           しかしながら、ループ本体が、単一の基本ブロックよりさらに複雑である
           場合には、これは信頼できません。また、CSE パスの制限のためにアーキ
           テクチャのいくつかで全く動作しません。

           この最適化は、デフォルトで有効にされます。

       -fvariable-expansion-in-unroller
           このオプションで、コンパイラは、優れたコードをもたらすことができる
           ループを展開するとき、いくつかのローカル変数の複数のコピーを作成し
           ます。

       -fprefetch-loop-arrays
           ターゲットマシンによってサポートされるなら、大きな配列にアクセスす
           るループの性能を向上させるために、メモリをプリフェッチ (先読み) す
           る命令を生成します。

           このオプションは、より良い、またはより悪いコードを生成するかもしれ
           ません。結果はソースコード中のループの構造に大きく依存しています。

           レベル -Os で無効です。

       -fno-peephole
       -fno-peephole2
           あらゆるマシン特有のピープホール (のぞき穴) 最適化を無効にします。
           -fno-peephole-fno-peephole2 の違いは、それらがコンパイラでどの
           ように実行されているかです。いくつかのターゲットは一方を使用し、い
           くつかはもう他方を使用し、わずかのものは両方を使用します。

           -fpeephole は、デフォルトで有効です。-fpeephole2 は、レベル -O2,
           -O3, -Os で有効です。

       -fno-guess-branch-probability
           発見的な手法を使用して、分岐の確率を推測しません。

           GCC は、プロファイリングのフィードバック (-fprofile-arcs) によって
           提供されないなら、分岐の確率を推測するために発見的手法を使用しま
           す。これらの発見的手法は、制御フローグラフに基づいています。いくつ
           かの分岐の確率が __builtin_expect によって指定されるなら、発見的手
           法は、__builtin_expect 情報を考慮に入れて、制御フローグラフの残りの
           ために分岐の確率を推測するために使用されます。発見的手法と
           __builtin_expect の間の相互作用は、いくつかの場合、複雑となり、
           __builtin_expect の効果がより理解しやすくできるように、発見的手法を
           無効にすることが役に立つかもしれません。

           デフォルトは、レベル -O, -O2, -O3, -Os において
           -fguess-branch-probability です。

       -freorder-blocks
           必要とする分岐の数を減らせて、コードの局所性を改良するためにコンパ
           イルされた関数の基本ブロックを並べ替えます。

           レベル -O2, -O3 で有効です。

       -freorder-blocks-and-partition
           コンパイルされた関数の再順序付けされた基本ブロックに加えて、取られ
           た分岐の数を減少させて、ページングとキャッシュ位置の性能を向上させ
           るために、コロコロ変わる基本ブロックをアセンブリと .o ファイルの別
           々のセクションにパーティションを区切ります。

           この最適化は、linkonce セクションのために、ユーザ定義のセクション属
           性がある関数のために、および指定されたセクションをサポートしない任
           意のアーキテクチャで、例外処理があるとき自動的にオフにされます。

       -freorder-functions
           コードの局所性を改良するためにオブジェクトファイルの関数を再順序付
           けします。これは、最も頻繁に実行される関数のための特別なサブセク
           ション ".text.hot" と実行されそうもない関数のための
           ".text.unlikely" を使用して実装されます。並べ替えは、リンカで行われ
           るので、オブジェクトファイル形式は、指定されたセクションをサポート
           しなければなりません、そして、リンカは、合理的な手段でそれらを置か
           なければなりません。

           また、プロファイルのフィードバックは、このオプションを有効にするた
           めに利用可能でなければなりません。詳細については、-fprofile-arcs を
           参照してください。

           レベル -O2, -O3, -Os で有効です。

       -fstrict-aliasing
           コンパイラは、コンパイルされる言語に適用できる最も厳格なエイリアシ
           ング規則を仮定することができます。C (と C++) に関して、これは式のタ
           イプに基づく最適化をアクティブにします。特に、1 つのタイプのオブ
           ジェクトは、タイプがほとんど同じでないなら、異なったタイプのオブ
           ジェクトと同じアドレスに決して存在していないと仮定されます。例え
           ば、"unsigned int" は、"int" にエイリアスすることができますが、
           "void*" または "double" にはエイリアスすることはできません。文字タ
           イプは、いかなる他のタイプにもエイリアスできます。

           次のようなコードに特別の注意を払ってください:

                   union a_union {
                     int i;
                     double d;
                   };

                   int f() {
                     a_union t;
                     t.d = 3.0;
                     return t.i;
                   }

           ("type-punning (タイプの語呂合わせ)" と呼ばれる) ごく最近書き込まれ
           たものと異なる共用体のメンバを読み込む習慣は一般的です。メモリが、
           union タイプを通してアクセスされるという条件で、-fstrict-aliasing
           が指定されても、type-punning は許可されます。したがって、上記のコー
           ドは予想されるように動作します。しかしながら、次のコードはそうしま
           せん:

                   int f() {
                     a_union t;
                     int* ip;
                     t.d = 3.0;
                     ip = &t.i;
                     return *ip;
                   }

           言語特有のエイリアス解析を実行することを望むあらゆる言語は、計算さ
           れる関数を定義し、"tree" ノードを与え、ノードのためのエイリアスを設
           定するべきです。異なったエイリアスを設定するノードは、エイリアスを
           許可されていません。例については、C フロントエンド関数
           "c_get_alias_set" を参照してください。

           レベル -O2, -O3, -Os で有効です。

       -fstrict-overflow
           コンパイラは、コンパイルされる言語によって、厳密な符号付きオーバフ
           ロー規則を仮定することができます。C (と C++) に関して、コンパイラ
           が、オーバフローが起こらないと仮定することを意味する、符号付きの数
           で演算を行うことが未定義であるとき、オーバフローすることを意味しま
           す。これは、様々な最適化を可能にします。例えば、コンパイラは、"i +
           10 > i" のような式が、常に符号付きの "i" で真となると仮定します。こ
           の仮定は、2 の補数演算を使用するとき、"i + 10" がオーバフローするな
           ら、式が偽のときに、符号付きのオーバフローが未定義である場合にだ
           け、有効です。このオプションが有効であるときに、符号付きの数の操作
           がオーバフローするかどうか決定する任意の試みは、実際にオーバフロー
           しないように慎重に書かれなければなりません。

           また、-fwrapv オプションを参照してください。-fwrapv を使用すること
           は、符号付きのオーバフローが完全に定義されることを意味します: それ
           は折り返し (wrap) ます。-fwrapv が使用されるとき、-fstrict-overflow-fno-strict-overflow の間に違いはありません。-fwrapv で、オーバ
           フローの特定のタイプは、許可されます。例えば、定数で演算を行うと
           き、コンパイラがオーバフローを得るなら、-fwrapv でオーバフローして
           いる値をまだ使用できますが、そうでなければ、使用できません。

           -fstrict-overflow オプションは、レベル -O2, -O3, -Os で有効にされま
           す。

       -falign-functions
       -falign-functions=n
           n バイトをスキップして、n より大きい次の 2 の冪乗に関数の始まりを整
           列します。例えば、-falign-functions=32 は関数を次の 32 バイトの境界
           に整列しますが、-falign-functions=24 は、23 バイト以下をスキップす
           ることによってこれが行える場合にだけ、次の 32 バイトの境界に整列し
           ます。

           -fno-align-functions-falign-functions=1 は、同等であり、関数が
           整列されないことを意味します。

           いくつかのアセンブラは、n が 2 の冪乗であるときにだけ、このフラグを
           サポートします。その場合、それは切り上げられます。

           n が指定されていないか、0 であるなら、マシン依存のデフォルトを使用
           します。

           レベル -O2, -O3 で有効です。

       -falign-labels
       -falign-labels=n
           -falign-functions のように nバイトをスキップして、すべての分岐ター
           ゲットを 2 の冪乗の境界に整列します。コードの普通のフローで分岐ター
           ゲットに到達しているとき、ダミーの命令を挿入しなければならないの
           で、このオプションは、簡単にコードを遅くできます。

           -fno-align-labels-falign-labels=1 は、同等であり、ラベルが整列
           されないことを意味します。

           -falign-loops または -falign-jumps が適用でき、この値より大きいな
           ら、それらの値が代わりに使用されます。

           n が指定されていないか、0 であるなら、整列しないことを意味する、た
           ぶん 1 となるマシン依存のデフォルトを使用します。

           レベル -O2, -O3 で有効です。

       -falign-loops
       -falign-loops=n
           -falign-functions のように n バイトをスキップして、ループを 2 の冪
           乗の境界に整列します。望みは、ダミーの命令の任意の実行を埋め合わせ
           をする、ループが何回も実行されることです。

           -fno-align-loops-falign-loops=1 は、同等であり、ループが整列さ
           れないことを意味します。

           n が指定されていないか、0 であるなら、マシン依存のデフォルトを使用
           します。

           レベル -O2, -O3 で有効です。

       -falign-jumps
       -falign-jumps=n
           -falign-functions のように n をスキップして、ジャンプによってのみ
           ターゲットに到達できる分岐ターゲットのために、分岐ターゲットを 2 の
           冪乗の境界に整列します。この場合、ダミーの命令を実行する必要はあり
           ません。

           -fno-align-jumps-falign-jumps=1 は、同等であり、ループが整列さ
           れないことを意味します。

           n が指定されていないか、0 であるなら、マシン依存のデフォルトを使用
           します。

           レベル -O2, -O3 で有効です。

       -funit-at-a-time
           コードを作成し始める前に、全体のコンパイル単位を解析します。これに
           よって、いくつかの特別な最適化を行うことができますが、(一般的に) よ
           り多くのメモリを消費します。unit-at-a-time モードにはいくつかの互換
           性の問題があります:

           *   unit-at-a-time モードを有効にすることは、関数、変数とトップレベ
               ルの "asm" 文が出力される順序を変更し、いくつかの特定の順序を当
               てにするコードをおそらく断絶するかもしれません。しかしながら、
               そのようなトップレベルの "asm" 文の大部分を "section" 属性に置
               き換えることができます。fno-toplevel-reorder オプションは、いく
               つかの最適化のコストで、入力ファイルで使用される順序を保持する
               ために使用されます。

           *   unit-at-a-time モードは、参照されない静的変数と関数を削除しま
               す。これは、"asm" 文が、そのほかの点では未使用である変数または
               関数を直接参照するとき、未定義の参照の結果となります。その場
               合、変数/関数は、"asm" 文のオペランドのオペランドとしてリストさ
               れるべきか、またはトップレベルの "asm" 文の場合に、属性 "used"
               を、宣言のときに使用するべきです。

           *   静的な関数は、現在、直接関数を呼び出す "asm" を断絶する標準でな
               い引き渡しの規約を使用できます。さらに、"used" 属性は、この振る
               舞いを防ぎます。

           一時的な回避策として、-fno-unit-at-a-time を使用できますが、このス
           キームは、GCC の今後のリリースでサポートされないかもしれません。

           レベル -O, -O2, -O3, -Os で有効です。

       -fno-toplevel-reorder
           トップレベルの関数、変数と "asm" 文を再順序付けしません。それらが入
           力ファイルに現れる同じ順序でそれらを出力します。このオプションが使
           用されているとき、参照されない静的変数は、削除されません。このオプ
           ションは、特定の順序を当てにする既存のコードをサポートすることを意
           図しています。新しいコードでは、属性を使用するほうがよいです。

       -fweb
           レジスタ割り付けの目的のために共通に使用されるウェブを構築し、それ
           ぞれのウェブを個別の擬似レジスタに割り当てます。これによって、レジ
           スタ割り付けパスは、pseudo で直接操作することができますが、また、
           CSE、ループオプティマイザとささいな死んでいるコードの削除のような、
           他のいくつかの最適化パスを強化します。訳注: pseudo の意味不明。しか
           しながら、変数がもはや "ホームレジスタ" に留まらないので、デバッグ
           を不可能にするかもしれません。

           -funroll-loops でデフォルトで有効です。

       -fwhole-program
           現在のコンパイル単位がコンパイルされる全体のプログラムを表すと仮定
           します。"main" を除いて、すべてのパブリック関数と変数とそれらは、静
           的な関数となる属性 "externally_visible" によってマージします、そし
           てプロセジャ相互 (interprocedural) のオプティマイザによってより積極
           的な最適化に影響を及ぼす。このオプションが単一ファイルからなるプロ
           グラムのための "static" キーワードの適切な使用に同等である間、オプ
           ション --combine と組み合わせて、関数と変数が、単一のソースファイル
           自体に対してではなく、全体の結合したコンパイル単位に対してローカル
           となるので、より小さいスケールの C プログラムの大部分をコンパイルす
           るために、このフラグを使用することができます。

       -fno-cprop-registers
           レジスタ割り付けとポストレジスタ割り付け命令分割の後に、私たちは、
           スケジューリングの依存関係を減らすために試みるコピー伝播パスを実行
           して、時々コピーを除去します。

           レベル -O, -O2, -O3, -Os で無効です。

       -fprofile-generate
           通常、プロファイルフィードバックに基づく最適化によって後の再コンパ
           イルで役に立つプロファイルを生成するために、アプリケーションの計装
           のために使用されるオプションを有効にします。利用者は、コンパイルす
           るとき、および利用者のプログラムをリンクする両方のときに
           -fprofile-generate を使用しなければなりません。

           次のオプションが有効にされます: "-fprofile-arcs",
           "-fprofile-values", "-fvpt"。

       -fprofile-use
           プロファイルのフィードバック直接の最適化、一般的に、利用可能なプロ
           ファイルフィードバックのみ有益となる最適化を有効にします。

           次のオプションが有効にされます: "-fbranch-probabilities", "-fvpt",
           "-funroll-loops", "-fpeel-loops", "-ftracer"。

       次のオプションは、浮動小数点演算に関するコンパイラの振る舞いを制御しま
       す。これらのオプションは、速度と正確さの間でトレードオフされます。明確
       にすべてを有効にしなければなりません。

       -ffloat-store
           レジスタに浮動小数点変数を格納しません、そして、浮動小数点値がレジ
           スタまたはメモリから取られるかどうかを変更するかもしれない他のオプ
           ションを抑制します。

           このオプションは、(68881 の) 浮動小数点レジスタが "double" が持つと
           思われるより多くの精度を保持する 68000 のようなマシンで望ましくない
           過度の精度を抑制します。x86 アーキテクチャでも同様です。ほとんどの
           プログラムのためには、過度な精度は、ただ良いことですが、いくつかの
           プログラムは IEEE 動小数点の厳密な定義に依存します。すべての適切な
           中間的な計算を変数に格納するためにプログラムを変更した後に、そのよ
           うなプログラムのために -ffloat-store を使用します。

       -ffast-math
           -fno-math-errno, -funsafe-math-optimizations, -fno-trapping-math,
           -ffinite-math-only, -fno-rounding-math, -fno-signaling-nansfcx-
           limited-range を設定します。

           このオプションによって、プリプロセッサマクロ "__FAST_MATH__" は定義
           されます。

           このオプションは、数学関数のための IEEE または ISO 規則/仕様の正確
           な実装に依存するプログラムで不正確な出力をもたらすかもしれないの
           で、なんらかの -O オプションによって決してオンにされるべきではあり
           ません。

       -fno-math-errno
           単一の命令、例えば、sqrt、で実行される数学関数を呼び出した後に、
           ERRNO を設定しません。数学エラー操作のために IEEE 例外に依存するプ
           ログラムは、IEEE 演算互換性を維持する間に、速度のためのこのフラグを
           使用したいかもしれません。

           このオプションは、数学関数のための IEEE または ISO 規則/仕様の正確
           な実装に依存するプログラムで不正確な出力をもたらすかもしれないの
           で、なんらかの -O オプションによって決してオンにされるべきではあり
           ません。

           デフォルトは -fmath-errno です。

           Darwin システムでは、数学ライブラリは、決して "errno" を設定しませ
           ん。したがって、コンパイラがそうするかもしれない可能性を考慮する
           は、ありません、-fno-math-errno は、デフォルトです。

       -funsafe-math-optimizations
           (a) 引数と結果が有効であると仮定する、(b) IEEE または ANSI 標準に違
           反してもよい、浮動小数点演算のための最適化を許可します。リンク時に
           使用されるとき、デフォルトの FPU 制御ワードまたは他の同様の最適化を
           変更するライブラリまたは起動時のファイルを含みます。

           このオプションは、数学関数のための IEEE または ISO 規則/仕様の正確
           な実装に依存するプログラムで不正確な出力をもたらすかもしれないの
           で、なんらかの -O オプションによって決してオンにされるべきではあり
           ません。

           デフォルトは -fno-unsafe-math-optimizations です。

       -ffinite-math-only
           引数と結果が NaN (非数) でも +-Inf (無限数) でもないと仮定する浮動
           小数点演算のための最適化を許可します。

           このオプションは、IEEE または ISO 規則/仕様の正確な実装に依存するプ
           ログラムで不正確な出力をもたらすかもしれないので、なんらかの -O オ
           プションによって決してオンにされるべきではありません。

           デフォルトは -fno-finite-math-only です。

       -fno-trapping-math
           浮動小数点演算がユーザの目に見えるトラップを生成することができない
           と仮定するコードをコンパイルします。これらのトラップには、0 除算、
           オーバフロー、アンダフロー、不正確な結果、と不正な操作を含んでいま
           す。このオプションは -fno-signaling-nans の意味を含みます。このオプ
           ションを設定することは、例えば、"non-stop" IEEE 演算に依存するコー
           ドをより速くできます。

           このオプションは、数学関数のための IEEE または ISO 規則/仕様の正確
           な実装に依存するプログラムで不正確な出力をもたらすかもしれないの
           で、なんらかの -O オプションによって決してオンにされるべきではあり
           ません。

           デフォルトは -ftrapping-math です。

       -frounding-math
           デフォルトの浮動小数点の丸めの振る舞いを仮定する変換と最適化を無効
           にします。これは、すべての浮動小数点を整数に変換するための切捨て
           (round-to-zero) と、他のすべての演算の切捨てのための丸め (round-to
           nearest) です。このオプションは、動的に FP 丸めモードを変更するか、
           またはデフォルトでない丸めモードで実行されるプログラムで指定される
           べきです。このオプションは、(丸めモードによって影響されるかもしれな
           い) コンパイル時に浮動小数点式の定数の畳み込み、と符号依存の丸め
           モードの存在で安全でない演算変換を無効にします。

           デフォルトは -fno-rounding-math です。

           このオプションは、実験的であり、現在、丸めモードによって影響される
           GCC のすべての最適化を無効にする保証がありません。GCC の将来のバー
           ジョンは、C99 の "FENV_ACCESS" プラグマを使用してこの設定のよりよい
           制御を提供するかもしれません。このコマンドラインオプションは、
           "FENV_ACCESS" のためのデフォルト状態を指定するために使用されます。

       -frtl-abstract-sequences
           それは、サイズ最適化方法です。このオプションは、疑似手続きに変える
           ことができる同じシーケンスのコードを見つけて、次に、すべての発生を
           新たに作成されたサブルーチンへの呼び出しに置き換えます。それは、い
           わば、-finline-functions の正反対です。この最適化は、RTL レベルで実
           行します。

       -fsignaling-nans
           IEEE シグナル伝達 NaN (非数) が浮動小数点の操作の間にユーザの目に見
           えるトラップを生成することを仮定するコードをコンパイルします。この
           オプションを設定することは、シグナル伝達 NaN で目に見える例外の数を
           変更する最適化を無効にします。このオプションは -ftrapping-math の意
           味を含みます。

           このオプションによって、プリプロセッサマクロ "__SUPPORT_SNAN__" が
           定義されます。

           デフォルトは -fno-signaling-nans です。

           このオプションは、実験的であり、現在、シグナル伝達 NaN の振る舞いに
           影響する GCC のすべての最適化を無効にする保証がありません。

       -fsingle-precision-constant
           単精度定数を倍精度実定数に暗黙的に変換する代わりに単精度定数として
           浮動小数点定数を取り扱います。

       -fcx-limited-range
       -fno-cx-limited-range
           有効にされるとき、このオプションは、複雑な除算を実行するとき、範囲
           減少ステップが必要でないことを提示します。デフォルトは、
           -fno-cx-limited-range ですが、-ffast-math によって有効にされます。

           このオプションは、ISO C99 "CX_LIMITED_RANGE" プラグマのデフォルト設
           定を制御します。それにもかかわらず、オプションは、すべての言語に適
           用されます。

       次のオプションは、性能を向上させる最適化を制御しますが、任意の -O オプ
       ションによって有効にされません。このセクションは壊れているコードを生成
       する実験的なオプションを含んでいます。

       -fbranch-probabilities
           -fprofile-arcs でコンパイルされたプログラムを実行した後に、利用者
           は、各分岐が行われる回数に基づく最適化を改良するために、2 度目に
           -fbranch-probabilities を使用してそれをコンパイルすることができま
           す。-fprofile-arcs でコンパイルされたプログラムが終了するとき、アー
           ク (arc) 実行カウントを各ソースファイルのための sourcename.gcda と
           呼ばれるファイルに保存します。このデータファイルの情報は、生成コー
           ドの構造に非常に依存しているので、利用者は、両方のコンパイルで同じ
           ソースコードと同じ最適化オプションを使用しなければなりません。

           -fbranch-probabilities で、GCC は、JUMP_INSNCALL_INSN それぞれ
           に REG_BR_PROB ノートを置きます。最適化を改良するためににこれらを使
           用することができます。分岐がほとんど取られ、REG_BR_PROB 値が、どの
           パスがもっと頻繁に取られるかを正確に決定するために使用されるのは、
           どのパスかを推測する代わりに、現在、それらは reorg.c の 1 つの場所
           に使用されるだけです。

       -fprofile-values
           -fprofile-arcs で結合されるなら、プログラムで式の値に関するいくつか
           のデータが集められるようなコードを追加します。

           -fbranch-probabilities で、式の値のプロファイルから集められたデータ
           を読み返して、REG_VALUE_PROFILE ノートを最適化で後の使用のための命
           令に追加します。

           -fprofile-generate-fprofile-use で有効にされます。

       -fvpt
           -fprofile-arcs で結合されるなら、式の値に関する情報を集めるための
           コードを追加するようにコンパイラに指示します。

           -fbranch-probabilities で、集められたデータを読み返して、実際にそれ
           らに基づく最適化を実行します。現在、最適化には、分母の値に関する知
           識を使用する除算操作の特殊化を含んでいます。

       -frename-registers
           レジスタ割り付けの後に使い残されたレジスタを利用することによってス
           ケジュールされているコードでの誤った依存関係を避けることを試みま
           す。この最適化は、多くのレジスタがあるプロセッサのために最も多くの
           の利益となります。しかしながら、ターゲットによって採用されたデバッ
           グ情報形式によって、変数がもはや "home register" に残らないので、デ
           バッグを不可能にするかもしれません。

           -funroll-loops でデフォルトで有効です。

       -ftracer
           スーパブロックのサイズを拡大するためにテール複製を実行します。この
           変換は、他の最適化が、より良い仕事を行うことができる関数の制御フ
           ローを簡素化します。

           -fprofile-use で有効にされます。

       -funroll-loops
           コンパイル時またはループに入るときに繰り返しの数を決定することがで
           きるループを展開します。-funroll-loops は、-frerun-cse-after-loop,
           -fweb-frename-registers の意味を含みます。また、完全なループの
           皮はぎ (peeling) をオンにします (すなわち、繰り返しの小さな定数で
           ループの完全な削除)。このオプションは、コードをより大きくして、実行
           をより速くするかもしれません。

           -fprofile-use で有効にされます。

       -funroll-all-loops
           ループに入るとき、それらの繰り返しの数が不確実であっても、すべての
           ループを展開します。これは、通常、プログラムをより遅く実行するよう
           にします。-funroll-all-loops は、-funroll-loops と同じオプションの
           意味を含みます。

       -fpeel-loops
           (プロファイルフィードバックから) あまり回転していないという十分な情
           報があるループを皮はぎ (peel) します。また、完全なループの皮はぎ
           (peeling) をオンにします (すなわち、繰り返しの小さな定数でループの
           完全な削除)。

           -fprofile-use で有効にされます。

       -fmove-loop-invariants
           RTL ループオプティマイザのループ不変条件のモーションパスを有効にし
           ます。レベル -O1 で有効です。

       -funswitch-loops
           (条件の結果に従って変更される) 両方の分岐でループの複製によって、
           ループの不変条件の分岐をループの外に移動します。

       -ffunction-sections
       -fdata-sections
           ターゲットが任意のセクションをサポートするなら、各関数またはデータ
           項目を出力ファイルのそれ自体のセクションに置きます。関数の名前また
           はデータ項目の名前は、出力ファイルのセクションの名前を決定します。

           リンカは、命令スペースで参照の局所性を改良するために最適化を実行す
           ることができるシステムで、これらのオプションを使用します。ELF オブ
           ジェクト形式を使用するほとんどのシステムと Solaris 2 を実行する
           SPARC プロセッサには、そのような最適化を行うリンカがあります。AIX
           には、将来、これらの最適化があるかもしれません。

           それを行うことに特筆すべき利益があるときのみ、これらのオプションを
           使用します。利用者がこれらのオプションを指定するとき、アセンブラと
           リンカは、より大きいオブジェクトと実行形式ファイルを作成し、また、
           より遅くなります。利用者がこのオプションを指定するなら、すべてのシ
           ステムで "gprof" を使用することができません、このオプションと -g の
           両方を指定するなら、デバッグで問題があるかもしれません。

       -fbranch-target-load-optimize
           プロローグ/エピローグのスレッドの前に分岐ターゲットレジスタのロード
           最適化を実行します。ターゲットレジスタの使用は、一般的に再ロードの
           間のみ顕在化することができます、したって、ループの外にロードを持ち
           上げ、別個の最適化パスが必要なブロック間のスケジューリング行いま
           す。

       -fbranch-target-load-optimize2
           プロローグ/エピローグのスレッドの後に分岐ターゲットレジスタのロード
           最適化を実行します。

       -fbtr-bb-exclusive
           分岐ターゲットレジスタロード最適化を実行するとき、任意の基本的なブ
           ロック内の分岐ターゲットレジスタを再利用しません。

       -fstack-protector
           スタックスマッシイング (smashing) 攻撃のような、バッファオーバフ
           ローをチェックする特別のコードを出力します。攻撃を受けやすいオブ
           ジェクトで見張り変数を関数に加えることによって、これを行います。こ
           れは alloca を呼び出す関数と、8 より大きいバッファがある関数を含み
           ます。見張りは、関数に入るときに初期化されて、次に、関数が終了する
           とき、チェックされます。見張りチェックが失敗するなら、エラーメッ
           セージが印刷され、プログラムは、終了します。

       -fstack-protector-all
           すべての関数が保護されることを除いて、-fstack-protector に似ていま
           す。

       -fsection-anchors
           近くのオブジェクトにアドレス付けするために、共有された "anchor" シ
           ンボルを使用することによって、シンボリックアドレス計算の数を減少す
           るように試みます。この変換は、いくつかのターゲットで GOT エントリと
           GOT アクセスの数を減少する効果があります。

           例えば、次の関数 "foo" の実装は、次の通りです:

                   static int a, b, c;
                   int foo (void) { return a + b + c; }

           これは、通常すべての 3 つの変数のアドレスについて計算しますが、利用
           者が、-fsection-anchors でそれをコンパイルするなら、代わりに共通の
           アンカ (anchor) ポイントから変数にアクセスします。効果は、次の擬似
           コード (有効な C でない) と同様です:

                   int foo (void)
                   {
                     register int *xr = &x;
                     return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
                   }

           すべてのターゲットが、このオプションをサポートするというわけではあ
           りません。

       --param name=value
           所によっては、GCC は、行われる最適化の量を制御するための様々な定数
           を使用します。例えば、GCC は、特定の数以上の命令を含む関数をインラ
           イン化しません。利用者は、コマンドラインで --param オプションを使用
           してこれらの定数のいくつかを制御することができます。

           特定のパラメータの名前と値の意味は、コンパイラの内部に関係してい
           て、今後のリリースで予告なしで変更することがあります。

           いずれの場合にも、value は整数です。name のための許可される選択は、
           次のテーブルで与えられます:

           salias-max-implicit-fields
               構造体のエイリアシングが、各フィールドを追跡しようと見なされる
               直接の構造体のアクセスがない変数のフィールドの最大数。デフォル
               トは、5 です。

           salias-max-array-elements
               配列が持つことができる要素の最大数、そしてその要素は、構造体の
               エイリアシングによって個別に追跡されます。デフォルトは、4 で
               す。

           sra-max-structure-size
               集合のスカラ置換 (scalar replacement of aggregates, SRA) 最適化
               がブロックコピーを実行する、バイト単位の最大の構造体のサイズ。
               デフォルト値、0、は、GCC がそれ自体の最も適切なサイズを選択する
               ことを意味します。

           sra-field-structure-ratio
               説明されたフィールドと完全な構造体サイズの間の閾値の (パーセン
               トの) 比率。いってみれば、説明されたフィールドのバイト数と完全
               な構造体のバイト数の比率が、このパラメータを超えているなら、ブ
               ロックコピーは、使用されません。デフォルトは、75 です。

           max-crossjump-edges
               クロスジャンプ (crossjumping) と見なされる入力エッジ (incoming
               edge) の最大数。-fcrossjumping によって使用されるアルゴリズム
               は、各ブロックに入力するエッジの数で O(N^2) です。値を増加する
               ことは、実行形式のサイズでたぶん小さな改善がありコンパイル時間
               の増加させる、より積極的な最適化を意味します。

           min-crossjump-insns
               ブロックで、クロスジャンプが実行される前に、2 つのブロックの終
               りにマッチしなければならない命令の最小数。この値は、ブロック内
               のすべての命令がマッチされた場所からクロスジャンプされる場合
               は、無視されます。デフォルト値は、5 です。

           max-grow-copy-bb-insns
               ジャンプの代わりに基本ブロックをコピーするとき、最大のコードサ
               イズの拡張係数。拡張は、ジャンプ命令に関連しています。デフォル
               ト値は、8 です。

           max-goto-duplication-insns
               計算された goto へジャンプするブロックに複製する命令の最大数。
               パスの数で O (N^2) の振る舞いを避けるために、GCC は、コンパイル
               プロセスで前に計算された goto を因数分解し、できるだけ遅く、そ
               れらを非因数分解します。max-goto-duplication-insns のみの基本ブ
               ロックの終りの計算されたジャンプのみ、非因数分解されます。デ
               フォルト値は、8 です。

           max-delay-slot-insn-search
               遅延スロットを埋めるための命令を検索するとき考慮する命令の最大
               数。この任意の数以上の命令が検索されるなら、遅延スロットを埋め
               ることによる時間の節約が最小となるので、検索を停止します。値を
               増加することは、実行形式の実行時間でたぶん小さな改善がありコン
               パイル時間の増加させる、より積極的な最適化を意味します。

           max-delay-slot-live-search
               遅延スロットを埋めることを試みるとき、有効で使用中のレジスタ情
               報でブロックを検索するとき、考慮される命令の最大数。この任意の
               選択された値を増加させることは、コンパイル時を増加させて、より
               積極的な最適化を意味します。このパラメータは、遅延スロットコー
               ドが制御フローグラフを保持するために書き直されるとき、削除され
               るべきです。

           max-gcse-memory
               グローバルな共通部分式の除去の最適化を実行するために割り付けら
               れるメモリのおおよその最大量。指定されるより多くのメモリを必要
               とするなら、最適化は行われません。

           max-gcse-passes
               GCSE を実行するパスの最大数。デフォルトは、1 です。

           max-pending-list-length
               現在の状態をフラッシュして、もう一度やり直す前に許可される保留
               中 (pending) の依存状態のスケジューリングの最大数。わずかの分岐
               または呼び出しがある大きな関数は、メモリとリソースを必要以上に
               消費する非常に大きなリストを作成することができます。

           max-inline-insns-single
               いくつかのパラメータは、gcc で使用されるツリーインラインナ
               (tree inliner) を制御します。これの数は、ツリーインラインナがイ
               ンライン化を考慮する、単一の関数で (GCC の内部表現でカウントさ
               れる) 命令の最大数を設定します。これはインラインと宣言された関
               数と (C++) のクラス宣言で実装されたメソッドのみに影響します。デ
               フォルト値は 450 です。

           max-inline-insns-auto
               利用者が (-O3 に含まれている) -finline-functions を使用すると
               き、そうでなければ、コンパイラによってインライン化が考慮されな
               い多くの関数が調査されます。それらの関数のために、インラインと
               宣言された関数と比較して別の (より限定的な) 制限を適用できま
               す。デフォルト値は 90 です。

           large-function-insns
               本当に大きな関数を指定する制限。インライン化の後のこの制限より
               大きな関数に関して、インライン化は、--param large-function-
               growth によって抑制されます。このパラメータは、バックエンドに
               よって使用される非線形 (non-linear) アルゴリズムによって引き起
               こされる極端なコンパイル時間を避けるために主として役に立ちま
               す。このパラメータは、-funit-at-a-time が使用されていないとき、
               無視されます。デフォルト値は 2700 です。

           large-function-growth
               インライン化によって引き起こされる大きな関数の最大の増大率を
               パーセントで指定します。このパラメータは、-funit-at-a-time が使
               用されていないとき、無視されます。デフォルト値は、大きい関数が
               元のサイズの 2.0 倍に増大するように制限する、100 です。

           large-unit-insns
               大きな変換単位を指定する制限。この制限が --param inline-unit-
               growth によって制限されるより大きい単位のインラインに起因する増
               加。小さな単位のために、これはきつ過ぎるかもしれません (関数 A
               からなる単位は、インラインであり、単に A を 3 回呼び出す B を考
               えます)。B が A と比べて小さいなら、単位の増加は、300\% です
               が、まだ、そのようなインラインは、非常に健全です。しかしなが
               ら、小さなインライン化ができない関数から成る非常に大きな単位に
               関して、全体的な単位の増加は、コードサイズの指数関数的な爆発を
               避けるために必要です。したがって、より小さい単位に関して、サイ
               ズは、--param inline-unit-growth を適用する前に、--param large-
               unit-insns まで増加します。デフォルトは、10000 です。

           inline-unit-growth
               インライン化によって引き起こされるコンパイルユニットの最大の全
               体の増大率を指定します。このパラメータは、-funit-at-a-time が使
               用されていないとき、無視されます。デフォルト値は、ユニットが元
               のサイズの 1.5 倍に増大するように制限する、50 です。

           max-inline-insns-recursive
           max-inline-insns-recursive-auto
               インライン関数が再帰的なインライン化を実行することによって増加
               するようになる再帰的に自己の不適切な (out-of-line) コピーする命
               令の最大数を指定します。

               インラインで宣言された関数に対して、--param max-inline-insns-
               recursive は、考慮に入れられます。インラインで宣言されない関数
               に対して、(-O3 に含まれている) -finline-functions が有効にされ
               て、--param max-inline-insns-recursive-auto が使用されていると
               きだけ、再帰的なインラインが起こります。デフォルト値は、450 で
               す。

           max-inline-recursive-depth
           max-inline-recursive-depth-auto
               再帰的なインラインによって使用される最大の再帰的な深さ (depth)
               を指定します。

               インラインで宣言された関数に対して、--param max-inline-
               recursive-depth は、考慮に入れられます。インラインで宣言されな
               い関数に対して、(-O3 に含まれている) -finline-functions が有効
               にされて、--param max-inline-recursive-depth-auto が使用されて
               いるときだけ、再帰的なインラインが起こります。デフォルト値は、
               450 です。

           min-inline-recursive-probability
               再帰的なインラインは、平均的な深い再帰を持っている関数のだけに
               有益であり、関数本体のプロローグ (prologue) サイズまたは複雑さ
               を他のオプティマイザまで増加させることによって、少ない再帰の深
               さを持っている関数のために有害です。

               プロファイルフィードバックが利用可能であるとき
               (-fprofile-generate を参照)、機能が与えられた呼び出し表現を通し
               て再帰する確率から実際の再帰の深さを推測することができます。こ
               のパラメータは、確率が (パーセントで) 与えられた閾値を超えてい
               る呼び出し表現のみのインラインを制限します。デフォルト値は、10
               です。

           inline-call-cost
               簡単な演算操作 (1 の費用) に比べて呼び出し (call) 命令の費用を
               指定します。この費用を上げることは、リーフでない関数のインライ
               ンを不適格とみなし、同時に、インラインにされることによって関数
               のサイズを減少させると信じられているリーフの関数のサイズを増加
               させます。事実上、大きい抽象化のペナルティ (ただ他の関数へ引数
               を渡すだけの多くの関数) を持っているコードのためのインラインの
               量を増加させ、低い抽象化ペナルティがあるコードのためのインライ
               ンを減少させます。デフォルト値は、16 です。

           max-unrolled-insns
               そのループが展開されるなら、ループが持つべきである命令の最大数
               であり、ループが展開されるなら、ループコードが何回展開されるか
               を決定します。

           max-average-unrolled-insns
               そのループが展開されるなら、ループが持つべきであるそれらの実行
               の確率によってかたよった命令の最大数であり、ループが展開される
               なら、ループコードが何回展開されるかを決定します。

           max-unroll-times
               単一のループの展開の最大数。

           max-peeled-insns
               そのループが皮はぎされるなら、ループが持つべきである命令の最大
               数であり、ループが皮はぎされるなら、ループコードが何回皮はぎさ
               れるかを決定します。

           max-peel-times
               単一のループの皮はぎの最大数。

           max-completely-peeled-insns
               完全に皮はぎされるループの insn の最大数。

           max-completely-peel-times
               完全な皮はぎに適しているループの繰り返しの最大数。

           max-unswitch-insns
               スイッチされないループの insn の最大数。

           max-unswitch-level
               単一のループでスイッチされない分岐の最大数。

           lim-expensive
               ループの不変条件のモーションで高価な表現の最低の費用。

           iv-consider-all-candidates-bound
               すべての候補が帰納的変数の最適化における各使用のために考えられ
               る、下記の帰納的変数のための候補の数でバインドします。最も関連
               している候補だけは、より多くの候補があるなら、二次の時間的複雑
               さを避けるために、考慮されます。

           iv-max-considered-uses
               帰納的変数の最適化は、より多くの帰納的変数の使用を含むループで
               あきらめます。

           iv-always-prune-cand-set-bound
               セットの候補の数が、この値より少ないなら、新しい iv がセットに
               追加されるとき、我々は、最適化の間、セットから不要な iv を常に
               削除しようと試みます。

           scev-max-expr-size
               スカラ展開解析器で使用される式のサイズでバインドします。大きい
               表現は、解析器を遅くします。

           vect-max-version-checks
               ベクトル化でループのバージョニングを行うとき、実行できるランタ
               イムチェックの最大数。詳細については、オプション ftree-vect
               loop-version を参照してください。

           max-iterations-to-track
               ループの繰り返しの数 (#) の解析のためのブルートフォース (brute
               force) アルゴリズムが評価しようと試みる、ループの繰り返しの最大
               数。

           hot-bb-count-fraction
               基本ブロックがホットと見なされている必要がある、与えられたプロ
               グラムの基本ブロックの繰り返しの最大カウントの断片を選択しま
               す。

           hot-bb-frequency-fraction
               基本ブロックがホットと見なされている必要がある、与えられた関数
               の基本ブロックの実行の最大の頻度の断片を選択します。

           max-predicted-iterations
               我々が静的に予測するループの繰り返しの最大数。これは、関数が知
               られている境界と未知の他のループがある単一のループを含む場合に
               役に立ちます。我々は、およそ 10 の平均した繰り返しの未知の数で
               すが、正しく繰り返しの知られている数を予測します。これは、境界
               のないループが人工的にはもう片方と比べて cold (完ぺき) であるよ
               うに見えることを意味します。

           tracer-dynamic-coverage
           tracer-dynamic-coverage-feedback
               この値は、いったん実行された命令の与えられたパーセンテージがカ
               バーされると、スーパブロックの構成を制限するために使用されま
               す。これは不要なコードサイズ拡張を制限します。

               tracer-dynamic-coverage-feedback は、プロファイルのフィードバッ
               クが利用可能であるときにのみ使用されます。(静的に見積もられたも
               のと対照的に) 実際のプロファイルは、閾値がより大きい値を許可す
               ることから、よりバランスのとれないものとなります。

           tracer-max-code-growth
               いったんコードの増大が与えられたパーセンテージ到達すると、テー
               ル複製を停止します。複製の大部分がクロスジャンプの後に除去され
               るように、これはかなりわざとらしい引数 (訳注: 議論かもしれない)
               であるので、必要なコードの増大よりはるかに大きな値に設定するこ
               とができます。

           tracer-min-branch-ratio
               ベストエッジの逆の確率がこの敷居 (パーセント) より少ないとき
               に、逆の増大を停止します。

           tracer-min-branch-ratio
           tracer-min-branch-ratio-feedback
               ベストエッジがこの閾値より小さくなる確率があるなら、前方増大を
               停止します。

               tracer-dynamic-coverage と同様に、2 つの値が存在し、1 つは、プ
               ロファイルフィードバックのためのコンパイルのためで、1 つは、コ
               ンパイルなしのためです。プロファイルフィードバックがあるコンパ
               イルのための値は、トレーサを有効にするために、より控えめ (より
               大きい) である必要があります。

           max-cse-path-length
               cse (共通部分式の除去) で考慮されるパスの基本ブロックの最大数。
               デフォルトは、10 です。

           max-cse-insns
               フラッシュする前に CSE 処理する最大命令。デフォルトは、1000 で
               す。

           global-var-threshold
               関数呼び出しの数 (n) と call-clobbered 変数の数 (v) をカウント
               します。nxv がこの制限より大きいなら、単一の人工的な変数は、関
               数呼び出しサイトで、すべての call-clobbered 変数を表すために作
               成されます。そして、この人工的な変数は、あらゆる call-clobbered
               変数にエイリアスされます。(ホストマシンで "int * size_t" として
               行います; オーバフローに注意)。

           max-aliased-vops
               エイリアスのグループ分けの発見的な引き金となる前に、エイリアス
               を表すことができる仮想のオペランドの最大数。エイリアスのグルー
               プ分けは、コンパイル時間、とエイリアス情報で精度の損失を犠牲に
               してエイリアシングに必要とするメモリの消費を減少させます。

           ggc-min-expand
               GCC は、それ自体のメモリ割り付けを管理するためにガーベージコレ
               クタ (ごみ収集人) を使用します。このパラメータはガーベージコレ
               クタのヒープがコレクションの間に拡張することが許可されるべきで
               ある最小のパーセンテージを指定します。これを調整すると、コンパ
               イル速度が改良されるかもしれません。コード生成に影響はありませ
               ん。

               RAM >= 1GB であるとき、デフォルトは 100% の上限がある 30% + 70%
               * (RAM/1GB) です。"getrlimit" が利用可能であるなら、"RAM" の概
               念は、実際の RAM と "RLIMIT_DATA" または "RLIMIT_AS" の最も小さ
               いものです。GCC が特定のプラットフォームで RAM を計算することが
               できないなら、30% の下限が使用されます。このパラメータと ggc-
               min-heapsize を 0 に設定することによって、完全なコレクション
               は、すべての機会に起こります。これは、極めて遅くなりますが、デ
               バッグに役に立ちます。

           ggc-min-heapsize
               ごみを収集する手数を掛ける前の、ガーベージコレクタのヒープの最
               小サイズ。ヒープが ggc-min-heapsize を越える ggc-min-expand% に
               よって拡張された後に最初のコレクション (収集) は起こります。さ
               らに、これを調整することは、コンパイルの速度を改良します、コー
               ド生成には影響はありません。

               デフォルトは、RAM/8, RLIMIT_RSS、または RLIMIT_DATA か
               RLIMIT_AS が制限を超えないことを保証しようと試みる制限のより小
               さいものですが、下限が 4096 (4 メガバイト) で上限が 131072 (128
               メガバイト) です。GCC が特定のプラットフォームで RAM を計算する
               ことができないなら、下限が使用されます。このパラメータを極めて
               大きくを設定すると、ガーベージコレクションを事実上無効にしま
               す。このパラメータと ggc-min-expand を 0 に設定することによっ
               て、全体のコレクションはあらゆる機会に起こります。

           max-reload-search-insns
               同等なレジスタを後方に検索するべき、再ロードされた命令の最大
               数。値を増加することは、より積極的な最適化を意味し、たぶん少し
               良い性能があり、コンパイル時間を増加させます。デフォルト値は
               100 です。

           max-cselib-memory-locations
               考慮するべきメモリ位置 cselib の最大数。値を増加することは、よ
               り積極的な最適化を意味し、たぶん少し良い性能があり、コンパイル
               時間を増加させます。デフォルト値は 500 です。

           max-flow-memory-locations
               max-cselib-memory-locations に似ていますが、データフロー活性で
               す。デフォルト値は 100 です。

           reorder-blocks-duplicate
           reorder-blocks-duplicate-feedback
               無条件分岐またはその目的地でコードを複製を使用するかどうかを決
               定する基本ブロックの並べ替えパスによって使用されます。見積りサ
               イズが、プログラムのホットスポットで無条件ジャンプの見積りサイ
               ズを掛けた値より小さいときに、コードは複製されます。

               reorder-block-duplicate-feedback はプロファイルフィードバックが
               利用可能であるときにだけ使用され、ホットスポットに関する情報が
               より正確なので、reorder-block-duplicate より大きな値に設定され
               ます。

           max-sched-ready-insns
               最初のスケジューリングパスの間に任意の与えられた時間で考えるべ
               きスケジューラを発行される準備ができている命令の最大数。増加す
               る値は、たぶん少ない利益でコンパイル時間の増加する、より徹底的
               な検索を意味します。デフォルト値は、100 です。

           max-sched-region-blocks
               ブロック間のスケジューリングのために考えられる領域のブロックの
               最大数。デフォルト値は、10 です。

           max-sched-region-insns
               ブロック間のスケジューリングのために考えられる領域の insn の最
               大数。デフォルト値は、100 です。

           min-spec-prob
               ブロック間の推論的なスケジューリングのためのソースブロックに達
               する (パーセントでの) 最小の確率。デフォルト値は、40 です。

           max-sched-extend-regions-iters
               CFG を通して拡張領域までの繰り返しの最大数。0 - 領域拡張を無効
               にする、N - 多くても N 回繰り返しを行う。デフォルト値は、0 で
               す。

           max-sched-insn-conflict-delay
               推論的なモーションのために考えられる insn のための最大の競合遅
               延。デフォルト値は、3 です。

           sched-spec-prob-cutoff
               推論的な insn をスケジュールできるように、推測の成功 (パーセン
               トで) の最小量の確率。デフォルト値は、40 です。

           max-last-value-rtl
               そのレジスタの最後に知られている値として擬似レジスタのために
               combiner (結合器) で表現に記録することができる、RTL の数として
               測定された最大サイズ。デフォルトは、10000 です。

           integer-share-limit
               小さな整数定数は、コンパイラのメモリ使用量を減少させて速度を増
               加させる、共有されるデータ構造を使用することができます。これ
               は、共有された整数定数の最大値を設定します。デフォルト値は、256
               です。

           min-virtual-mappings
               virtual-mappings-ratio よって定義された発見的な仮想のマッピング
               の引き金となるように登録されるべきである増加する SSA updater の
               仮想のマッピングの最小の数を指定します。デフォルト値は、100 で
               す。

           virtual-mappings-ratio
               仮想のマッピングの数が更新される仮想のシンボルの数より大きい
               virtual-mappings-ratio であるなら、増加する SSA updater は、そ
               れらのシンボルのための完全な更新に切り替えます。デフォルトの比
               率は、3 です。

           ssp-buffer-size
               -fstack-protection が使用されるとき、スタック smashing 保護を受
               信するバッファ (すなわち、配列) の最小サイズ。

           max-jump-thread-duplication-stmts
               スレッド化されたジャンプのとき、複製される必要があるブロックで
               許可された文の最大数。

           max-fields-for-field-sensitive
               我々が、ポインタ解析の間にフィールドに影響される方法を取り扱
               う、構造体のフィールドの最大数。

       プリプロセッサを制御するオプション

       これらのオプションは、実際のコンパイルの前に、それぞれの C ソースファイ
       ルで実行される、C プリプロセッサを制御します

       利用者が -E オプションを使用するなら、前処理を除いて何も行いません。こ
       れらのオプションのいくつかは、それらのオプションよって、プリプロセッサ
       出力が実際のコンパイルには不適当であるので、-E と同時に指定されるときの
       み意味があります。

           利用者は、コンパイラのドライバをバイパスして、option を直接プリプロ
           セッサに渡すために -Wp,option を使用することができます。option がコ
           ンマを含んでいるなら、コンマで複数のオプションに分割されます。しか
           しながら、多くのオプションは、プリプロセッサに渡される前に、コンパ
           イラドライバによって変更されるか、変換されるか、または解釈され、そ
           して、-Wp は強制的にこのフェーズをバイパスします。プリプロセッサの
           ダイレクトインタフェースは、文書化されていなくて、変更の影響を受け
           やすいので、可能ならいつでも、利用者は、-Wp を使用するのを避けて、
           代わりにドライバにオプションを操作させるべきです。

       -Xpreprocessor option
           option をオプションとしてプリプロセッサに渡します。利用者は、GCC
           が、どのように認識するかを知らないシステム特有のプリプロセッサオプ
           ションを供給するために、これを使用することができます。

           引数を取るオプションを渡したいなら、利用者は、オプションのために一
           度、引数のために一度の、-Xpreprocessor を二度使用しなければなりませ
           ん。

       -D name
           name を 1 と定義されたマクロとしてあらかじめ定義します。

       -D name=definition
           definition の内容は、トークン化され、#define 指示の変換フェーズツ
           リーの間に現れたかのように処理されます。特に、定義は埋め込まれた改
           行文字によって先端が切り詰められます。

           利用者がシェルまたはシェルに似たプログラムからプリプロセッサを呼び
           出しているなら、シェルの構文で意味がある空白のような文字を保護する
           ためにシェルの引用 (クォート) 構文を使用する必要があるかもしれませ
           ん。

           コマンドラインで関数のようなマクロを定義したいなら、(もしあるなら)
           等号記号の前の引数リストを丸括弧で囲みます。丸括弧は、ほとんどの
           シェルで意味があるので、オプションを引用する必要があります。shcsh では、-D'name(args...)=definition' は動作します。

           -D-U オプションは、それらがコマンドラインに与えられる順序で処理
           されます。すべての -imacros file-include file オプションは、す
           べての -D-U オプションの後に処理されます。

       -U name
           組み込みまたは -D オプションで提供された、name の以前の定義を取り消
           します。

       -undef
           すべてのシステム特有、または GCC 特有のマクロをまえもって定義しませ
           ん。標準のまえもって定義されたマクロは、定義されたままです。

       -I dir
           ディレクトリ dir をヘッダファイルを検索するためのディレクトリのリス
           トに追加します。-I によって指定されたディレクトリは、標準のシステム
           インクルードディレクトリの前に検索されます。ディレクトリ dir が標準
           のシステムインクルードディレクトリであるなら、システムディレクトリ
           のデフォルト検索順序とシステムヘッダの特別な処理が無効化されないこ
           とを保証するために、このオプションは、無視されます。

       -o file
           出力を file に書き込みます。これは cpp への 2 番目のオプションでな
           い引数として file を指定することと同じです。gcc には 2 番目のオプ
           ションでない引数に対して異なった解釈があるので、利用者は出力ファイ
           ルを指定するために -o を使用しなければなりません。

       -Wall
           通常のコードに望ましいすべてのオプションの警告をオンに切り替えま
           す。現在のところ、これは、-Wcomment, -Wtrigraphs, -Wmultichar と
           "#if" 式の符号の変化を生じる整数拡張に関する警告です。プリプロセッ
           サの警告の多くは、デフォルトでオンであり、それらを制御するオプショ
           ンがないことに注意してください。

       -Wcomment
       -Wcomments
           コメント開始シーケンス /*/* コメントの中に現れるときはいつも、
           またはバックスラッシュ改行が // コメントの中に現れるときはいつも警
           告します。(両方の形式には、同じ効果があります。)

       -Wtrigraphs
           コメント中のほとんどのトライグラフ (trigraph) は、プログラムの意味
           に影響することはあり得ません。しかしながら、エスケープされた改行
           (行末の ??/) を形成するトライグラフは、コメントが始まるかまたは終る
           場所を変更することによって影響するかもしれません。そのために、エス
           ケープされた改行を形成するトライグラフは、コメント内で警告を生成し
           ます。

           このオプションは -Wall の意味を含んでいます。-Wall が与えられないな
           ら、このオプションは、トライグラフが有効でなくても有効になります。
           警告なしでトライグラフ変換を得ますが、他の -Wall 警告を得るには、
           -trigraphs -Wall -Wno-trigraphs を使用します。

       -Wtraditional
           伝統的な C と ISO C で異なる振る舞いがある特定の構文に関して警告し
           ます。また、伝統的な C と同等でない、避けられるべきである問題となる
           構文がある ISO C 構文に警告します。

       -Wimport
           最初に #import が使われたとき、警告します。

       -Wundef
           マクロでない識別子が defined の外側で #if 指示に遭遇するときはいつ
           も警告します。そのような識別子は 0 に置き換えられます。

       -Wunused-macros
           使用されていないメインファイルで定義されたマクロに警告します。少な
           くとも拡張されるか、または存在がテストされるなら、マクロは、使用さ
           れます。また、プリプロセッサは、マクロが再定義されるか、または未定
           義とする時点で使用されていないなら、警告します。

           組み込みマクロ、コマンドラインで定義されたマクロ、とインクルード
           ファイルで定義されたマクロは、警告されません。

           注: マクロが実際に使用されますが、スキップされた条件ブロック内で使
           用されるだけであるなら、CPP は未使用としてそれを報告します。このよ
           うな場合に警告を避けるためには、利用者は、例えば、最初にスキップさ
           れたブロックにそれを移動することによって、マクロの定義の範囲を改良
           した方がよいでしょう。代わりに、利用者は次のようなダミーを使用する
           こともあり得ます。

                   #if defined the_macro_causing_the_warning
                   #endif

       -Wendif-labels
           #else または #endif の後にテキストが続くときはいつも、警告します。
           通常、これは次の形式のコードで起こります。

                   #if FOO
                   ...
                   #else FOO
                   ...
                   #endif FOO

           2 番目と 3 番目の "FOO" は、コメントに入れるべきですが、しましば古
           いプログラムはそうなってません。この警告はデフォルトでオンです。

       -Werror
           すべての警告を困難なエラーとします。警告の引き金となるソースコード
           は拒絶されます。

       -Wsystem-headers
           システムヘッダのコードのための警告を発行します。これらは、通常、利
           用者自身のコードのバグを見つけるのに役に立たないので、抑制されま
           す。システムライブラリに責任があるなら、利用者はそれらを見たいるか
           もしれません。

       -w  GNU CPP がデフォルトで発行するものを含めてすべての警告を抑制しま
           す。

       -pedantic
           C 標準にリストされたすべての強制的な診断を発行します。頻繁に無害な
           コードの引き金となるので、それらのいくつかは、デフォルトで省略され
           ます。

       -pedantic-errors
           すべての強制的な診断を発行し、すべての強制的な診断をエラーとしま
           す。これは、GCC が -pedantic なしで発行する強制的な診断を含みます
           が、警告として取り扱います。

       -M  前処理の結果を出力する代わりに、メインソースファイルの依存関係を記
           述する make のための適切な規則を出力します。プリプロセッサは、その
           ソースファイルのためのオブジェクトファイル名、コロン、-include また
           は -imacros コマンドラインオプションから来るものをインクルードして
           いる、すべてのインクルードファイルの名前を含む 1 つの make 規則を出
           力します。

           明示的に (-MT または -MQ で) 指定されていないなら、オブジェクトファ
           イル名は、ソースファイルの basename とソースファイルのサフィックス
           をオブジェクトファイルのサフィックスに置き換えたものから成ります。
           多くのインクルードされているファイルがあるなら、規則は \-newline を
           使用していくつかの行に分割されます。規則には、コマンドがありませ
           ん。

           このオプションは、-dM のようなプリプロセッサのデバッグ出力を抑制し
           ません。そのようなデバッグ出力と依存関係の規則が混在することを避け
           るために、利用者は、-MF で依存関係の出力ファイルを明らかに指定する
           べきであるか、または DEPENDENCIES_OUTPUT のように環境変数を使用する
           べきです。それでもデバッグ出力は、いつものように通常の出力ストリー
           ムに送られます。

           ドライバへ -M を渡すことは、-E の意味を含み、暗黙の -w での警告を抑
           制します。

       -MM -M に似ていますが、システムヘッダのディレクトリで見つけられるヘッダ
           ファイルも、そのようなヘッダから直接的または間接的にインクルードさ
           れているヘッダファイルについて言及しません。

           #include 指示で山括弧または二重引用符の選択は、そのヘッダが -MM 依
           存関係出力に現れるかどうかをそれ自体が決定しないことを意味します。
           これは、GCC バージョン 3.0 とそれ以前のものから意味的にわずかに変更
           されています。

       -MF file
           -M または -MM と共に使用するとき、依存関係を書き込むファイルを指定
           します。-MF スイッチが与えないなら、プリプロセッサは、前処理された
           出力を送った同じ場所に規則を送ります。

           ドライバオプション -MD または -MMD と共に使用されるとき、-MF はデ
           フォルトの依存関係出力ファイルを上書きします。

       -MG 依存関係の生成を要求する -M のようなオプションに関連して、-MG は不
           足しているヘッダファイルが生成されるファイルであると仮定し、エラー
           を引き起こさずに、それらを依存関係のリストに追加します。依存関係の
           ファイル名は、任意のパスを先頭に追加しないで、"#include" 指示から直
           接取り出されます。また、-MG は、不足しているヘッダファイルを無用の
           ものとして、前処理された出力を抑制します。

           この機能は、makefiles の自動更新に使用されます。

       -MP このオプションは、それぞれが何も依存しない、メインファイル以外の各
           依存関係のための偽のターゲットを追加するように CPP に指示します。利
           用者が、適合する Makefile を更新しないでヘッダファイルを削除するな
           ら、これらのダミーの規則は、make が与えるエラーに対処します。

           次は典型的な出力です:

                   test.o: test.c test.h

                   test.h:

       -MT target
           依存関係の生成によって発行された規則のターゲットを変更します。デ
           フォルトでは、CPP は任意のパスを含むメイン入力ファイルの名前を取
           り、.c のような任意のファイルサフィックスを削除して、プラットフォー
           ムでの通常のオブジェクトのサフィックスを追加します。結果はターゲッ
           トです。

           -MT オプションは、利用者が指定する文字列をそのままターゲットに設定
           します。複数のターゲットを必要とするなら、利用者は、-MT への単一の
           引数として指定するか、または複数の -MT オプションを使用することがで
           きます。

           例えば、-MT '$(objpfx)foo.o' は次のようになります。

                   $(objpfx)foo.o: foo.c

       -MQ target
           -MT と同じですが、Make のための特別なすべての文字をクォート (引用)
           します。-MQ '$(objpfx)foo.o' は次のようになります。

                   $$(objpfx)foo.o: foo.c

           デフォルトのターゲットは、まるで -MQ と共に与えられるかのように自動
           的にクォートされます。

       -MD -MD は、-E が意味されないことを除いて、-M -MF file と同等です。ドラ
           イバは -o オプションが与えられているかどうかに基づいて file を決定
           します。それがそうなら、ドライバは、その引数を使用しますが、.d のサ
           フィックスを付けて使用し、そうでなければ、入力ファイルの basename
           を取って、.d サフィックスを適用します。

           -MD-E とともに使用されるなら、任意の -o スイッチは、依存関係出
           力ファイルを指定するために解釈されますが、-E なしで使用されるなら、
           各 -o は、ターゲットオブジェクトファイルを指定するために解釈されま
           す。

           -E が意味されないので、コンパイル処理の副作用として依存関係出力ファ
           イルを生成するために -MD を使用することができます。

       -MMD
           ユーザヘッダファイルだけを言及して、システムヘッダファイルが言及さ
           れないことを除いて、-MD に似ています。

       -fpch-deps
           プリコンパイルされたヘッダを使用するとき、このフラグによって、依存
           関係の出力フラグは、プリコンパイルされたヘッダの依存関係からもファ
           イルをリストします。指定されないなら、プリコンパイルされたヘッダの
           みがリストされ、プリコンパイルされたヘッダが使用されるとき、それら
           のファイルは調べられないので、それを作成するために使用されたファイ
           ルはリストされません。

       -fpch-preprocess
           このオプションによって、-E と共に前もってコンパイルされたヘッダを使
           用することができます。それは、前もってコンパイルされたヘッダが見つ
           けられた場所、とそのファイル名をマークするために、特別な "#pragma",
           "#pragma GCC pch_preprocess "<filename>"" を出力に挿入します。
           -fpreprocessed が使用中であるときに、GCC は、この "#pragma" を認識
           して、PCH をロードします。

           結果の前処理された出力がのみが実際に GCC への入力として適切であるの
           で、このオプションは、デフォルトでオフです。それは -save-temps に
           よって切り替えされます。

           利用者は、利用者自身のコードでこの "#pragma" を書くべきではありませ
           んが、PCH ファイルが、別の場所で利用可能であるなら、ファイル名を編
           集することは安全です。ファイル名は、絶対パスであるか、または GCC の
           カレントディレクトリと相対的です。

       -x c
       -x c++
       -x assembler-with-cpp
           ソース言語を指定します: C, C++ またはアセンブリ。これは標準の適合性
           または拡張とは無関係です。単に予想する基本の構文を選択します。これ
           らのオプションが何も与えられないなら、cpp は次のソースファイルの拡
           張子から言語を推論します: .c, .cc, .m または .S。また、C++ とアセン
           ブリのための他の一般的な拡張子も認識されます。cpp が拡張子を認識し
           ないなら、C としてそのファイルを取り扱います。これは最も一般的な
           モードです。

           注: cpp の以前のバージョンは、言語と標準適合性のレベルの両方を選択
           する -lang オプションを受け付けます。このオプションは、-l オプショ
           ンと衝突するので、削除されました。

       -std=standard
       -ansi
           コードが適合するべきである標準を指定します。現在の CPP は C と C++
           標準に関して知っています。他のものは将来追加されるかもしれません。

           standard は、次のうちの 1 つです:

           "iso9899:1990"
           "c89"
               1990 年からの ISO C 標準。c89 は、このバージョンの標準のための
               習慣的な省略形です。

               -ansi オプションは -std=c89 と同等です。

           "iso9899:199409"
               1994 年に改正された、1990 年の C 標準。

           "iso9899:1999"
           "c99"
           "iso9899:199x"
           "c9x"
               1999 年 12 月に発行された、改訂された ISO C 標準。発行される前
               は、C9X として知られていました。

           "gnu89"
               1990 年の C 標準に GNU 拡張を追加したもの。これはデフォルトで
               す。

           "gnu99"
           "gnu9x"
               1999 年の C 標準に GNU 拡張を追加したもの。

           "c++98"
               1998 年の ISO C++ 標準に改正を追加したもの。

           "gnu++98"
               -std=c++98 に GNU 拡張を追加したものと同じです。これは、C++
               コードのデフォルトです。

       -I- インクルードパスを分割します。-I- の前に -I オプションで指定された
           任意のディレクトリは、"#include "file"" で要求されたヘッダのみ検索
           されます。"#include <file>" のものは、検索されません。追加ディレク
           トリが -I- の後で -I オプションで指定されるなら、それらのディレクト
           リは、すべての #include 指示で検索されます。

           さらに、-I- は、"#include "file"" のための最初の検索ディレクトリと
           してカレントファイルディレクトリの使用を抑制します。このオプション
           は、古くて推奨されません。

       -nostdinc
           ヘッダファイルのための標準のシステムディレクトリを検索しません。利
           用者が -I オプションで指定したディレクトリ (と、適切であるなら、カ
           レントディレクトリ) のみ検索されます。

       -nostdinc++
           C++ 特有の標準ディレクトリのヘッダファイルを検索しませんが、それで
           も、他の標準ディレクトリは検索します。(このオプションは、C++ ライブ
           ラリを構築するとき使用されます。)

       -include file
           あたかも "#include "file"" が、プライマリソースファイルの最初の行に
           現れたかのように file を処理します。しかしながら、file を検索する最
           初のディレクトリは、メインソースファイルを含むディレクトリの代わり
           のプリプロセッサの作業ディレクトリです。そこで見つけられないなら、
           いつものように "#include "...""  検索チェーンの残りで検索されます。

           複数の -include オプションを与えられるなら、ファイルはそれらがコマ
           ンドラインに現れる順序でインクルードされます。

       -imacros file
           file をスキャンすることによって生成された任意の出力が捨てられること
           を除いて、-include によく似ています。それが定義するマクロは、定義さ
           れたまま残ります。これによって、利用者は、また、その宣言を処理しな
           いで、ヘッダからすべてのマクロを取得することができます。

           -imacros によって指定されたすべてのファイルは、-include によって指
           定されたすべてのファイルの前に処理されます。

       -idirafter dir
           ヘッダファイルのために dir を検索しますが、-I と共に指定されたすべ
           てのディレクトリと標準のシステムディレクトリが検索しつくされた後に
           検索します。dir はシステムインクルードディレクトリとして取り扱われ
           ます。

       -iprefix prefix
           後に続く -iwithprefix オプションのためのプレフィックスとして prefix
           を指定します。プレフィックスがディレクトリを表すなら、利用者は、最
           後に / を付けるべきです。

       -iwithprefix dir
       -iwithprefixbefore dir
           -iprefix で以前に指定されたプレフィックスに dir を追加し、結果の
           ディレクトリをインクルード検索パスに追加します。-iwithprefixbefore-I が置かれる同じ場所にそれを置きます。-iwithprefix-idirafter が置かれる場所に置きます。

       -isysroot dir
           このオプションは、--sysroot オプションに似ていますが、ヘッダファイ
           ルだけに適用されます。詳細については、--sysroot オプションを参照し
           てください。

       -imultilib dir
           ターゲット特有の C++ ヘッダを含むディレクトリのサブディレクトリとし
           て dir を使用します。

       -isystem dir
           -I によって指定されたすべてのディレクトリの後で、標準のシステムディ
           レクトリの前に、ヘッダファイルのための dir を検索します。標準のシス
           テムディレクトリに適用されるのと同じ特別な扱いを受けるために、シス
           テムディレクトリとしてそれをマークします、

       -iquote dir
           "#include "file"" で要求されたヘッダファイルのために dir のみを検索
           します。すべてのディレクトリが -I で指定される前で、標準のシステム
           ディレクトリの前に、それらは、"#include <file>" を検索しません。

       -fdollars-in-identifiers
           識別子として $ を受け付けます。

       -fextended-identifiers
           識別子で universal な文字の名前を受け付けます。このオプションは、実
           験的です。GCC の将来のバージョンでは、それは C99 と C++ のためにデ
           フォルトで有効にされるでしょう。

       -fpreprocessed
           入力ファイルが既に前処理されていることをプリプロセッサに指示しま
           す。これは、マクロ展開、トライグラフ変換、エスケープされた改行の継
           続 (newline splicing) とほとんどの指示の処理のようなものを抑制しま
           す。利用者が、-C を付けて前処理されたファイルを問題なしでコンパイラ
           に渡すことができるように、プリプロセッサは、それでもまだコメントを
           認識して削除します。このモードでは、統合化されたプリプロセッサは、
           フロントエンドのためのトークン化ツール (tokenizer) と大差ありませ
           ん。

           -fpreprocessed は、入力ファイルに拡張子 .i, .ii または .mi の 1 つ
           があるなら、暗黙に処理します。これらは GCC が -save-temps によって
           作成された前処理されたファイルに使用する拡張子です。

       -ftabstop=width
           タブストップの間隔を設定します。これは、たとえタブが行に現れても、
           プリプロセッサが警告またはエラーで正しいカラム位置を報告することを
           助けます。値が、1 未満または 100 より大きいなら、オプションは無視さ
           れます。デフォルトは 8 です。

       -fexec-charset=charset
           文字列と文字定数に使用される実行文字集合を設定します。デフォルトは
           UTF-8 です。charset はシステムの "iconv" ライブラリルーチンによって
           サポートされた任意のエンコードを指定できます。

       -fwide-exec-charset=charset
           ワイド文字列と文字定数に使用されるワイド実行文字集合を設定します。
           デフォルトは、UTF-32 または UTF-16 いずれかの "wchar_t" の幅に対応
           しているものです。-fexec-charset と同様に、charset は、"iconv" ライ
           ブラリルーチンによってサポートされた任意のエンコードを指定できま
           す。しかしながら、利用者には、"wchar_t" で正確に適合しないエンコー
           ドに関する問題があります。

       -finput-charset=charset
           入力ファイルの文字集合から GCC によって使用されるソース文字集合への
           変換に使用される、入力文字集合を設定します。ロケールが指定されてい
           ないか、または GCC がロケールからこの情報を得ることができないなら、
           デフォルトは UTF-8 です。これは、ロケールまたはコマンドラインオプ
           ションのいずれかで、上書きすることができます。競合があるなら、現
           在、コマンドラインオプションが優先されます。charset はシステムの
           "iconv" ライブラリルーチンによってサポートされた任意のエンコードを
           指定できます。

       -fworking-directory
           前処理の時点でカレント作業ディレクトリをコンパイラに知らせるプリプ
           ロセッサ出力のラインマーカ (linemarker) の生成を有効にします。この
           オプションが有効にされるとき、プリプロセッサは最初のラインマーカの
           後にカレント作業ディレクトリの後に 2 つのスラッシュが続く 2 番目の
           ラインマーカを出力します。前処理された入力にそれが存在していると
           き、いくつかのデバッグ情報形式でカレント作業ディレクトリとして出力
           されたディレクトリのように、GCC はこのディレクトリを使用します。こ
           のオプションは、デバッグ情報が有効にされるなら、暗黙的に有効にされ
           ますが、否定形式の -fno-working-directory でこれを抑制することがで
           きます。-P フラグがコマンドラインに存在しているなら、"#line" 指示は
           どんなものであれ出力されないので、このオプションは効果がありませ
           ん。

       -fno-show-column
           診断でカラム位置を印刷 (表示) しません。これは、診断が dejagnu のよ
           うな、カラム位置を理解していないプログラムによってスキャンされるな
           ら、必要です。

       -A predicate=answer
           述語 predicate と答え answer でアサーションを行います。この形式は、
           シェルの特殊文字を使用しないので、いまだにサポートされている古い形
           式 -A predicate(answer) より好まれています。

       -A -predicate=answer
           述語 predicate と答え answer でのアサーションをキャンセルします。

       -dCHARS
           CHARS は、1 つ以上の文字が続くシーケンスで、空白が先行してはいけま
           せん。他の文字は、適切なコンパイラによって解釈されるか、または GCC
           の将来のバージョンのために予約されているので黙って無視されます。振
           る舞いが競合する文字を指定するなら、結果は未定義です。

           M   通常の出力の代わりに、事前に定義されたマクロを含んで、プリプロ
               セッサの実行の間に定義されたすべてのマクロのための #define 指示
               のリストを生成します。これは、プリプロセッサのバージョンに事前
               に定義されるものを見つける方法を利用者に与えます。利用者のファ
               イル foo.h がないと仮定すると、次のコマンド

                       touch foo.h; cpp -dM foo.h

               は、事前に定義されたすべてのマクロを表示します。

           D   次の 2 つの観点を除いて M に似ています: 事前に定義されたマクロ
               を含んでいません、そして、#define 指示と前処理の結果の両方を出
               力します。両方の出力は標準出力ファイルに行きます。

           N   D に似ていますが、マクロ名のみを出力し、それらを展開しません。

           I   前処理の結果に追加されれる #include 指示を出力します。

       -P  プリプロセッサからの出力のラインマーカの生成を抑制します。これは、C
           コードでない何かでプリプロセッサを実行するとき、役に立ち、ライン
           マーカによって混乱するかもしれないプログラムに送られます。

       -C  コメントを削除しません。すべてのコメントは、指示と共に削除される、
           処理された指示のコメントを除いて、出力ファイルにそのまま渡されま
           す。

           利用者は、-C を使用するとき、副作用に備えるべきです。それによって、
           プリプロセッサは、それら自体でトークンとしてコメントを取り扱いま
           す。例えば、指示行となるものの始めに現れるコメントは、その行の最初
           のトークンがもはや # でないので、その行を普通のソース行に変える効果
           があります。

       -CC マクロ展開の間を含めてコメントを削除しません。マクロ中に含まれたコ
           メントがマクロが展開されているところで出力ファイルにそのまま渡され
           ることを除いて、これは -C に似ています。

           -C オプションの副作用に加えて、-CC オプションによって、マクロ内のす
           べての C++ スタイルコメントは、C スタイルのコメントに変換されます。
           これは、ソース行の残りを不用意にコメントアウトすることからの後のマ
           クロの使用を防ぐためのものです。

           -CC オプションは、一般的に lint コメントをサポートするために使用さ
           れます。

       -traditional-cpp
           ISO C プリプロセッサと対照的に、旧式な C プリプロセッサの振る舞いを
           模倣するように試みます。

       -trigraphs
           トライグラフシーケンスを処理します。これらは、3 文字のシーケンス
           で、すべて ?? で始まり、それは、単一文字を表す ISO C で定義されてい
           ます。例えば、??/\ を表すので、'??/n' は改行の文字定数です。デ
           フォルトでは、GCC はトライグラフを無視しますが、標準適合モードで
           は、それらを変換します。-std-ansi オプションを参照してくださ
           い。

           9 つのトライグラフとそれらの置換は次の通りです:

                   トライグラフ:   ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
                   置換:           [    ]    {    }    #    \    ^    |    ~

       -remap
           MS-DOS のような非常に短いファイル名のみを許可するファイルシステムに
           対処する特別なコードを有効にします。

       --help
       --target-help
           何らかを前処理することの代わりにすべてのコマンドラインオプションを
           説明するテキストを印刷 (表示) します。

       -v  冗長モード。実行の始めに GNU CPP のバージョン番号を印刷し、インク
           ルードパスの最終形式を報告します。

       -H  他の通常の動作に加えて、使用される各ヘッダファイルの名前を印刷しま
           す。各名前は、それが #include スタックでどれくらい深いかを示すため
           にインデント (字下がり) されます。また、プリコンパイルされたヘッダ
           ファイルは、それらが無効であることがわかっても、印刷されます。無効
           のプリコンパイルされたヘッダファイルは、...x で印刷され、有効なもの
           は、...! で印刷されます。

       -version
       --version
           GNU CPP のバージョン番号を印刷します。1 つのダッシュで、いつものよ
           うに、前処理を行います。2 つのダッシュで、直ちに終了します。

       アセンブラにオプションを渡す

       利用者はオプションをアセンブラに渡すことができます。

       -Wa,option
           オプションとして option をアセンブラに渡します。option がコンマを含
           んでいるなら、コンマで複数のオプションに分割されます。

       -Xassembler option
           オプションとして option をアセンブラに渡します。利用者は、GCC が、
           どのように認識するかを知らないシステム特有のアセンブラオプションを
           供給するために、これを使用することができます。

           引数を取るオプションを渡したいなら、利用者は、オプションのために一
           度、引数のために一度の、-Xassembler を二度使用しなければなりませ
           ん。

       リンクためのオプション

       これらのオプションは、コンパイラがオブジェクトファイルを実行形式の出力
       ファイルにリンクするとき、作用します。それらは、コンパイラがリンクス
       テップを行わないなら、無意味です。

       object-file-name
           特別に認識されるサフィックスで終わらないファイル名は、オブジェクト
           ファイルまたはライブラリを指定されたものと見なされます。(オブジェク
           トファイルは、ファイルの内容に従って、リンカによってライブラリと区
           別されます。) リンクが行われるなら、これらのオブジェクトファイル
           は、リンカへの入力として使用されます。

       -c
       -S
       -E  これらのオプションのいずれかが使用されるなら、リンカを実行されず、
           オブジェクトファイル名は、引数として使用されるべきではありません。

       -llibrary
       -l library
           リンクするとき指定された library というライブラリを検索します。(別
           々の引数としてのライブラリを指定する 2 番目の代替手段は、POSIX 準拠
           のためだけであり、推薦されません。)

           利用者がコマンドで、このオプションを書くところで違いを生じます。リ
           ンカは、ライブラリとオブジェクトファイルが指定される順序でそれらを
           検索して処理します。したがって、foo.o -lz bar.o は、ライブラリ z を
           ファイル foo.o の後で、bar.o の前に、検索します。bar.oz 中の関
           数を参照しているなら、それらの関数はロードされません。

           リンカは、実際には liblibrary.a と名前が付けられたファイルである
           library (ライブラリ) に対して標準のディレクトリのリストを検索しま
           す。そして、リンカは、まるで明確に名前で指定されたかのように、この
           ファイルを使用します。

           検索されるディレクトリは、いくつかの標準システムディレクトリと利用
           者が -L で指定するすべてのディレクトリを含みます。

           通常、この方法で見つけられるファイルは、ライブラリファイルです ---
           オブジェクトファイルがメンバとなっているアーカイブファイルです。リ
           ンカは、これまで参照されているが、定義されていないシンボルを定義す
           る (オブジェクトファイルの) メンバをスキャンすることによって、アー
           カイブファイルを操作します。しかし、見つけられたファイルが通常のオ
           ブジェクトファイルであるなら、いつもの方法でリンクされます。-l オプ
           ションを使用することと、ファイル名を指定することの唯一の違いは、-llib.alibrary を囲んで、いくつかのディレクトリを検索する
           ことです。

       -nostartfiles
           リンクするとき、標準のシステム起動ファイルを使用しません。-nostdlib
           または -nodefaultlibs が使用されていないなら、標準のシステムライブ
           ラリが通常使用されます。

       -nodefaultlibs
           リンクするとき、標準のシステムライブラリを使用しません。利用者が指
           定するライブラリのみ、リンカに渡されます。-nostartfiles が使用され
           ていないなら、標準の始動ファイルが通常使用されます。コンパイラは、
           "memcmp", "memset", "memcpy" と "memmove" への呼び出しを生成しま
           す。これらのエントリは通常、libc のエントリで解決されます。このオプ
           ションが指定されるとき、これらのエントリポイントは、ある他のメカニ
           ズムを通して、供給されるべきです。

       -nostdlib
           リンクするとき、標準のシステム起動ファイルまたはライブラリを使用し
           ません。始動ファイルなしで、利用者が指定するライブラリだけがリンカ
           に渡されます。コンパイラは、"memcmp", "memset", "memcpy" と
           "memmove" への呼び出しを生成します。これらのエントリは通常、libc の
           エントリで解決されます。このオプションが指定されるとき、これらのエ
           ントリポイントは、ある他のメカニズムを通して、供給されるべきです。

           -nostdlib-nodefaultlibs によってバイパスされる標準のライブラリ
           の 1 つは、GCC が特定のマシンの短所の克服のために使用するか、または
           いくつかの言語に特別に必要な、内部サブルーチンのライブラリである、
           libgcc.a です。

           ほとんどの場合、利用者は、他の標準のライブラリを避けたいときでも、
           libgcc.a を必要とします。言い換えれば、-nostdlib または
           -nodefaultlibs を指定するとき、利用者は、通常 -lgcc も同様に指定す
           べきです。これは、内部の GCC ライブラリサブルーチンの未解決の参照が
           ないことを保証します。(例えば、__main は、C++ コンストラクタが呼び
           出されることを保証するために使用されます。)

       -pie
           位置に依存しない実行形式をサポートするターゲットでそれを生成しま
           す。予測できる結果のために、利用者は、このオプションを指定すると
           き、(-fpie, -fPIE またはモデルのサブオプションの) コードを生成する
           ために使用される同じセットのオプションも指定しなければなりません。

       -rdynamic
           それをサポートしているターゲットで、フラグ -export-dynamic を ELF
           リンカに渡します。これは、動的なシンボルテーブルに、それだけに使用
           されていない、すべてのシンボルを加えるようにリンカに指示します。こ
           のオプションは、"dlopen" のいくつかの使用か、またはプログラム内から
           バックトレースを得ることができるために必要です。

       -s  実行形式ファイルからすべてのシンボルテーブルと再配置情報を削除しま
           す。

       -static
           ダイナミックリンクをサポートするシステムでは、これは、共有ライブラ
           リとリンクすることを抑制します。他のシステムでは、このオプションは
           効果はありません。

       -shared
           実行形式を形成する他のオブジェクトにリンクすることができる共有オブ
           ジェクトを生成します。すべてのシステムがこのオプションをサポートす
           るとは限りません。予測できる結果のために、利用者は、このオプション
           を指定するとき、(-fpic, -fPIC またはモデルのサブオプションの) コー
           ドを生成するために使用される同じセットのオプションも指定しなければ
           なりません。[1]

       -shared-libgcc
       -static-libgcc
           共有ライブラリとして libgcc を提供するシステムでは、これらのオプ
           ションはそれぞれ、共有ライブラリまたは静的ライブラリのいずれかの
           バージョンの使用を強制します。コンパイラが設定されたとき、libgcc の
           共有されないバージョンが構築されるなら、これらのオプションは効果が
           ありません。

           アプリケーションが静的なバージョンの代わりに共有された libgcc を使
           用するべきであるいくつかの状況があります。これらのなかで最も一般的
           であるのは、アプリケーションが異なる共有ライブラリを横断する例外を
           スロー (throw) してチャッチ (catch) したいときです。その場合には、
           アプリケーション自体と同様にそれぞれのライブラリは、共有された
           libgcc を使用するべきです。

           したがって、G++ と GCJ ドライバは、C++ と Java プログラムが例外を通
           常使用するので、利用者が共有ライブラリまたはメインの実行形式を構築
           するときはいつも、自動的に -shared-libgcc を追加します、それで、こ
           うすることは正しいことです。

           代わりに、共有ライブラリを作成するために GCC ドライバを使用するな
           ら、利用者は、それらが常に共有された libgcc とリンクされるわけでは
           ないことがわかります。設定時に、利用者には GNU でないリンカまたはオ
           プション --eh-frame-hdr をサポートしない GNU リンカしかないことを、
           GCC がわかると、デフォルトで libgcc の共有されたバージョンを共有ラ
           イブラリにリンクします。そうでなければ、リンカをうまく利用して、デ
           フォルトで libgcc の静的なバージョンとリンクする、libgcc の共有され
           たバージョンとリンクして最適化します。これによって、例外は、ライブ
           ラリのロード時に再配置コストを負担しないで、そのような共有ライブラ
           リを通して伝播することができます。

           しかしながら、ライブラリまたはメイン実行形式が例外をスローするか
           キャッチすることになっているなら、利用者は、プログラムで使用される
           言語に適切であるか、または共有された libgcc とリンクされるように、
           オプション -shared-libgcc を使用するように、G++ または GCJ ドライバ
           を使用してそれをリンクしなければなりません。

       -symbolic
           共有オブジェクトを構築するとき、グローバルシンボルへの参照をバイン
           ドします。(リンクエディタオプション -Xlinker -z -Xlinker defs に
           よって上書きされないなら) あらゆる未解決の参照に警告します。ほんの
           わずかのシステムのみがこのオプションをサポートしています。

       -Xlinker option
           オプションとして option をリンカに渡します。利用者は、GCC が、どの
           ようにが認識するかを知らないシステム特有のリンカオプションを供給す
           るために、これを使用することができます。

           引数を取るオプションを渡したいなら、利用者は、オプションのために一
           度、引数のために一度の、-Xlinker を二度使用しなければなりません。例
           えば、-assert definitions を渡すためには、利用者は、-Xlinker
           -assert -Xlinker definitions と書かなければなりません。-Xlinker
           "-assert definitions" と書くと動作しません、それは、リンカが予想し
           ない、ただ一つの引数として全体の文字列が渡されるからです。

       -Wl,option
           オプションとして option をリンカに渡します。option がコンマを含んで
           いるなら、コンマで複数のオプションに分割されます。

       -u symbol
           シンボルを定義しているライブラリモジュールのリンクを強制するため
           に、シンボル symbol が未定義であるふりをします。利用者は、強制的に
           追加のライブラリモジュールをロードするために異なったシンボルと共に
           -u を複数回使用することができます。

       ディレクトリ検索のためのオプション

       これらのオプションはヘッダファイル、ライブラリとコンパイラの一部を検索
       するためのディレクトリを指定します:

       -Idir
           ディレクトリ dir をヘッダファイルを検索するためのディレクトリのリス
           トの先頭に追加します。これらのディレクトリがシステムヘッダファイル
           ディレクトリの前に検索されるので、利用者自身のバージョンを置換す
           る、システムヘッダファイルを上書きするためにこれを使用することがで
           きます、しかしながら、利用者は、ベンダによって供給されたシステム
           ヘッダファイルを含むディレクトリを (そのために -isystem を使用して)
           追加するためにこのオプションを使用するべきではありません。利用者が
           複数の -I オプションを使用するなら、ディレクトリは左から右の順序で
           スキャンされます。標準のシステムディレクトリは、その後でスキャンし
           ます。

           標準システムインクルードディレクトリまたは -isystem で指定された
           ディレクトリが、-I でも指定されるなら、-I オプションは無視されま
           す。そのディレクトリは、まだ検索されますが、システムインクルード
           チェーンの通常に位置のシステムディレクトリとして検索されます。これ
           は、バグの多いシステムヘッダを修理するための GCC の手続きと
           include_next 指示のための順序付けが不注意に変更されないことを保証す
           るためのものです。本当にシステムディレクトリの検索順序を変更する必
           要があるなら、-nostdinc および/または -isystem オプションを使用しま
           す。

       -iquotedir
           #include "file" の場合のためだけにヘッダファイルが検索される、ディ
           レクトリのリストのヘッドをディレクトリ dir に追加します。それらは、
           #include <file> で検索されません、そうでなければ、単に -I に似てい
           ます。

       -Ldir
           ディレクトリ dir-l で検索されるディレクトリのリストに追加しま
           す。

       -Bprefix
           このオプションは、コンパイラ自体の実行形式、ライブラリ、インクルー
           ドファイルとデータファイルを見つけるための場所を指定します。

           コンパイラドライバプログラムはサブプログラム cpp, cc1, asld の
           1 つ以上を実行します。machine/version/ の有り無しの両方で、実行しよ
           うと試みる各プログラムのためにプレフィックスとして prefix を試みま
           す。

           各サブプログラムを実行するために、コンパイラドライバは、もしあれ
           ば、最初に、-B プレフィックスを試みます。その名前が見つけられない
           か、または -B が指定されなかったなら、ドライバは、/usr/lib/gcc//usr/local/lib/gcc/ の 2 つの標準プレフィックスを試みます。ファイル
           名のそれらの結果のどちらも見つけられないなら、変更されていないプロ
           グラム名は、利用者の PATH 環境変数で指定されたディレクトリを使用し
           て検索されます。

           コンパイラは -B によって提供されたパスがディレクトリを参照するかど
           うかを確かめるためにチェックし、必要なら、パスの終りにディレクトリ
           の区切り文字を追加します。

           コンパイラがこれらのオプションをリンカのための -L オプションに変換
           するので、ディレクトリ名を効果的に指定する -B プレフィックスは、リ
           ンカのライブラリにも適用されます。コンパイラがこれらのオプションを
           プリプロセッサのための -isystem オプションに変換するので、それら
           は、プリプロセッサでインクルードファイルにも適用されます。この場
           合、コンパイラは include をプレフィックスに付け加えます。

           また、必要であるなら、-B プレフィックスを使用して、ランタイムサポー
           トファイル libgcc.a を検索することができます。そこで見つけられない
           なら、上記の 2 つの標準プレフィックスが試みられ、それだけです。それ
           らの手段によって見つけられないなら、ファイルはリンクから除外されま
           す。

           -B プレフィックスとそっくりのプレフィックスを指定する別の方法は環境
           変数 GCC_EXEC_PREFIX を使用することです。

           特別なクラッジとして、-B によって提供されたパスが [dir/]stageN/ で
           あるなら (ここで、N は 0 から 9 までの範囲の数です)、それは、
           [dir/]include で置換されます。(訳注) クラッジ: 便宜的にトリックを
           使って問題を一時的に解決すること。これはコンパイラをブートストラッ
           プを助けることになります。

       -specs=file
           gcc ドライバプログラムが、どのスイッチを cc1, cc1plus, as, ld その
           他へ渡すかを決定するとき、使用するデフォルトを上書きするために、コ
           ンパイラが、標準の specs ファイルを読み込んだ後に file を処理しま
           す。コマンドラインで複数の -specs=file を指定することができ、それら
           は左から右の順に処理されます。

       --sysroot=dir
           ヘッダとライブラリのための論理的なルートディレクトリとして dir を使
           用します。例えば、コンパイラが通常の /usr/include のヘッダと
           /usr/lib のライブラリを検索するなら、それは代わりに dir/usr/includedir/usr/lib を検索します。

           このオプションと -isysroot オプションの両方を使用するなら、
           --sysroot オプションは、ライブラリに適用されますが、-isysroot オプ
           ションは、ヘッダファイルに適用されます。

           GNU リンカ (バージョン 2.16 で始まる) には、このオプションに必要な
           サポートがあります。利用者のリンカがこのオプションをサポートしない
           なら、--sysroot のヘッダファイルの解釈は、まだ、動作しますが、ライ
           ブラリの解釈は、動作しません。

       -I- このオプションは、非推奨です。-I- の前の -I ディレクトリに代わりに
           -iquote を使用し、-I- を削除してください。-I- オプションの前の -I
           オプションで指定する任意のディレクトリは、#include "file" の場合の
           ためだけ検索されます。それらは、#include <file> を検索しません。

           追加のディレクトリが -I- の後の -I オプションで指定されるなら、これ
           らのディレクトリは、すべての #include 指示を検索します。(通常、すべ
           ての -I ディレクトリは、このように使用されます。)

           さらに、-I- オプションは、#include "file" のための最初の検索ディレ
           クトリとして (現在の入力ファイルが来るところで) カレントディレクト
           リの使用を抑制します。この -I- の効果を上書きする方法はありません。
           -I. で、利用者は、コンパイラが呼び出されたとき、カレントを検索ディ
           レクトリとして指定することができます。それはまさにプリプロセッサが
           デフォルトで行うことと同じではありませんが、それはしばしば満足でき
           ます。

           -I- は、ヘッダファイルのための標準のシステムディレクトリの使用を抑
           制しません。したがって、-I--nostdinc は、独立しています。

       ターゲットマシンとコンパイラバージョンの指定

       GCC を実行する普通の方法は、実行形式を gcc を呼び出して実行するか、また
       はクロスコンパイルするとき、<machine>-gcc を実行するか、または、最後に
       インストールされたもの以外のバージョンを実行するためには、
       <machine>-gcc-<version> を実行します。時々、これは不便であるので、GCC
       は別のクロスコンパイラまたはバージョンに切り替わるオプションを提供して
       います。

       -b machine
           引数 machine は、コンパイルのためのターゲットマシンを指定します。

           machine のために使用する値は、クロスコンパイラとして GCC を設定する
           ときにマシンタイプとして指定されたものと同じです。例えば、クロスコ
           ンパイラが elf バイナリで arm プロセッサのためにコンパイルすること
           を意味する configure arm-elf でで設定されたなら、利用者は、そのクロ
           スコンパイラを実行するために -b arm-elf を指定するでしょう。-b で始
           まる別のオプションがあるので、設定は、ハイフンを含まなければなりま
           せん。

       -V version
           引数 version は、GCC のどのバージョンを実行するかを指定します。複数
           のバージョンがインストールされているとき、これは役に立ちます。例え
           ば、version4.0 であるなら、GCC バージョン 4.0 を実行することを
           意味します。

       -V-b オプションは、<machine>-gcc-<version> 実行形式を実行することに
       よって動作するので、利用者が単にそれを直接実行することができるなら、そ
       れらを使用する本当の理由はありません。

       ハードウェアモデルと設定

       以前に、我々は、VAX 対 68000 対  80386 のような完全に異なったターゲット
       マシン対してインストール済みの異なったコンパイラの中から選択する標準の
       オプション -b について議論しました。

       さらに、これらのターゲットマシンタイプそれぞれは、様々なハードウェアモ
       デルまたは設定の中から選択するために -m で始まるそれ自体の特別なオプ
       ションを持つことができます --- 例えば、68010 対 68020、浮動小数点コプロ
       セッサがあるかないかです。単一のインストール済みのコンパイラのバージョ
       ンは、指定されたオプションに従って、任意のモデルまたは設定に対してコン
       パイルすることができます。

       また、コンパイラのいくつかの設定は、通常同じプラットフォームで他のコン
       パイラとの互換性のために、追加の特別なオプションをサポートしています。

       ARC オプション

       これらのオプションは ARC 実装のために定義されます:

       -EL リトルエンディアンモードのためにコードをコンパイルします。これはデ
           フォルトです。

       -EB ビッグエンディアンモードのためにコードをコンパイルします。

       -mmangle-cpu
           すべてのパブリックシンボル名の先頭に cpu の名前を追加します。マルチ
           プロセッサシステムでは、異なった命令とレジスタセットの特性がある多
           くの ARC バリアント (改良型) があります。このフラグは、1 つの cpu
           のためにコンパイルされたコードが別の cpu のためにコンパイルされた
           コードにリンクされることを防止します。"ほとんど同じ" であるバリアン
           ト (改良型) を扱う機能は存在しません。これは、すべてか無しかのオプ
           ションです。

       -mcpu=cpu
           ARC バリアント (改良型) cpu のためにコードをコンパイルします。どの
           バリアントがサポートされるかは設定に依存します。すべてのバリアント
           は、-mcpu=base をサポートし、これはデフォルトです。

       -mtext=text-section
       -mdata=data-section
       -mrodata=readonly-data-section
           デフォルトで、関数、データ、読み込み専用データをそれぞれ、text-
           section, data-sectionreadonly-data-section に置きます。これは、
           "section" 属性で上書きすることができます。

       ARM オプション

       これらの -m オプションは、Advanced RISC Machines (ARM) アーキテクチャの
       ために定義されています:

       -mabi=name
           指定された ABI のためのコードを生成します。許容できる値は、次の通り
           です: apcs-gnu, atpcs, aapcs, aapcs-linuxiwmmxt-mapcs-frame
           厳密には、コードの正確な実行のために必要がなくても、すべての関数の
           ための ARM Procedure Call Standard に準拠しているスタックフレームを
           生成します。このオプションで -fomit-frame-pointer を指定することに
           よって、スタックフレームは、リーフ関数のために生成されません。デ
           フォルトは -mno-apcs-frame です。

       -mapcs
           これは -mapcs-frame と同義語です。

       -mthumb-interwork
           ARM と Thumb 命令セットの間の呼び出しをサポートするコードを生成しま
           す。このオプションがなければ、1 つのプログラム内で 2 つの命令セット
           を確実に使用することはできません。-mthumb-interwork が指定されたと
           き、わずかに大きなコードが生成されるので、デフォルトは、
           -mno-thumb-interwork です。

       -mno-sched-prolog
           関数プロローグの命令の並べ換え、またはそれらの命令を関数の本体の命
           令にマージすることを抑制します。これは、すべての関数が認識可能な命
           令のセットから始まり (または、実際には、異なった関数プロローグの小
           さなセットから選択する 1 つ)、関数が実行形式のコードの一部にあるな
           ら、開始の位置としてこの情報を使用することができることを意味しま
           す。デフォルトは -msched-prolog です。

       -mhard-float
           浮動小数点命令を含む出力を生成します。これはデフォルトです。

       -msoft-float
           浮動小数点のためのライブラリ呼び出しを含む出力を生成します。警告:
           必要なライブラリは、すべての ARM ターゲットで利用可能ではありませ
           ん。通常、マシンの普通の C コンパイラの機能は使用されますが、クロス
           コンパイルで直接行うことはできません。利用者は、利用者自身でクロス
           コンパイルのための適切なライブラリ関数を準備しなければなりません。

           -msoft-float は、出力ファイルにおける呼び出し規約を変更します。した
           がって、利用者がこのオプションですべてのプログラムをコンパイルする
           場合にだけ、役に立ちます。特に、利用者は、これが動作するためには、
           GCC に備えられているライブラリ libgcc.a-msoft-float をつけてコ
           ンパイルする必要があります。

       -mfloat-abi=name
           浮動小数点値のために使用する ABI を指定します。許容できる値は、次の
           通りです: soft, softfphardsofthard は、それぞれ -msoft-float-mhard-float と同等です。
           softfp によって、浮動小数点命令を生成することができますが、まだソフ
           ト浮動小数点呼び出し規則を使用します。

       -mlittle-endian
           リトルエンディアンモードで実行するプロセッサのためのコードを生成し
           ます。これは、すべての標準の設定ののデフォルトです。

       -mbig-endian
           ビッグエンディアンモードで実行するプロセッサのためのコードを生成し
           ます。デフォルトでは、リトルエンディアンプロセッサのためのコードを
           コンパイルすることです。

       -mwords-little-endian
           このオプションは、ビッグエンディアンプロセッサのためのコードを生成
           するときのみ適用されます。リトルエンディアンのワードの順序ですが、
           ビッグエンディアンのバイト順のコードを生成します。すなわち、
           32107654 の形式のバイト順です。注: このオプションは、2.8 以前のコン
           パイラバージョンによって生成されたビッグエンディアン ARM プロセッサ
           のためのコードとの互換性が必要である場合のみ使用されるべきです。

       -mcpu=name
           これはターゲットの ARM プロセッサの名前を指定します。GCC は、アセン
           ブリコードを生成するとき、どのような種類の命令を出力できるかを決定
           するためにこの名前を使用します。許容される名前は次の通りです: arm2,
           arm250, arm3, arm6, arm60, arm600, arm610, arm620, arm7, arm7m,
           arm7d, arm7dm, arm7di, arm7dmi, arm70, arm700, arm700i, arm710,
           arm710c, arm7100, arm7500, arm7500fe, arm7tdmi, arm7tdmi-s, arm8,
           strongarm, strongarm110, strongarm1100, arm8, arm810, arm9, arm9e,
           arm920, arm920t, arm922t, arm946e-s, arm966e-s, arm968e-s,
           arm926ej-s, arm940t, arm9tdmi, arm10tdmi, arm1020t, arm1026ej-s,
           arm10e, arm1020e, arm1022e, arm1136j-s, arm1136jf-s, mpcore,
           mpcorenovfp, arm1176jz-s, arm1176jzf-s, xscale, iwmmxt, ep9312-mtune=name
           実際のターゲットプロセッサタイプを代わりに指定し、したがって、どの
           命令を使用することができるかを制限し、GCC が、まるでターゲットがこ
           のオプションで指定されたタイプであるかのようにコードの性能を調整す
           るべきですが、いまだに -mcpu= オプションによって指定された CPU に基
           づいて生成する命令を選択するように指定することを除いて、このオプ
           ションは -mcpu= オプションと良く似ています。いくつかの ARM の実装の
           ために、このオプションを使用することによって、より良い性能を得るこ
           とができます。

       -march=name
           これはターゲットの ARM アーキテクチャの名前を指定します。GCC は、ア
           センブリコードを生成するとき、どのような種類の命令を出力できるかを
           決定するためにこの名前を使用します。このオプションを、組み合わせる
           か、または、-mcpu= オプションの代わりに使用することができます。許容
           される名前は次の通りです: armv2, armv2a, armv3, armv3m, armv4,
           armv4t, armv5, armv5t, armv5te, armv6, armv6j, iwmmxt, ep9312-mfpu=name
       -mfpe=number
       -mfp=number
           これは、どのような浮動小数点ハードウェア (または、ハードウェアエ
           ミュレーション) がターゲットで利用可能であるかを指定します。指定で
           きる名前は、次の通りです: fpa, fpe2, fpe3, maverick, vfp-mfp-mfpe は、古い GCC のバージョンとの互換性のための -mfpu=fpenumber
           と同義語です。

           -msoft-float 指定されるなら、これは浮動小数点値の形式を指定します。

       -mstructure-size-boundary=n
           すべての構造体と共用体のサイズは、このオプションによって設定された
           ビット数の倍数に切り上げられます。許容される値は、8, 32 と 64 で
           す。デフォルト値は、ツールチェイン (toolchain) の違いによって変わり
           ます。COFF をターゲットとするツールチェインでは、デフォルト値は 8
           です。基本的な ABI がそれをサポートする場合にだけ、64 の値が可能で
           す。

           より大きい数値を指定することは、より速くて、より効率的なコードを生
           成することができますが、プログラムのサイズを増加させることにもなり
           ます。異なった値は、潜在的に互換性がありません。1 つの値でコンパイ
           ルされたコードは、構造体または共用体を使用する情報を交換するなら、
           もう一方の値でコンパイルされたコードまたはライブラリで必ずしも動作
           すると期待することはできません。

       -mabort-on-noreturn
           "noreturn" 関数の終わりで、関数 "abort" への呼び出しを生成します。
           関数がリターンを試みるなら、実行されます。

       -mlong-calls
       -mno-long-calls
           最初に関数のアドレスをレジスタにロードすることによって呼び出される
           関数を実行し、次に、このレジスタでサブルーチン呼び出しを実行するこ
           とをコンパイラに伝えます。ターゲット関数がサブルーチン呼び出し命令
           のバージョンに基づくオフセットの 64 メガバイトのアドレス範囲の外に
           あるなら、このスイッチは、必要です。

           たとえこのスイッチが有効にされても、すべての関数呼び出しが、ロング
           コール (long call) に変更されるわけではありません。ヒューリスティッ
           ク (発見的) なものは、静的な関数、ショートコール (short-call) 属性
           が #pragma no_long_calls 指示のスコープ内にある関数、と現在のコンパ
           イル単位内で既にコンパイルされている定義がある関数が、ロングコール
           に変更されないということです。この規則の例外は、弱い関数定義、ロン
           グコール (long-call) 属性またはセクション (section) 属性がある関
           数、と #pragma long_calls 指示のスコープ内にある関数が、常にロング
           コールに変更されることです。

           この機能は、デフォルトで有効にされません。-mno-long-calls を指定す
           ることは、#pragma long_calls_off 指示のスコープ内にある関数呼び出し
           の状態のような、デフォルトの振る舞いに戻されます。これらのスイッチ
           は、コンパイラが関数ポインタを経由する関数呼び出しを操作するコード
           をどのように生成するかには影響がないことに注意してください。

       -mnop-fun-dllimport
           "dllimport" 属性のサポートを無効にします。

       -msingle-pic-base
           PIC アドレッシングに使用されるレジスタを、各関数のプロローグで、そ
           れをロードするよりむしろ読み込み専用として取り扱います。ランタイム
           システムは、実行が始まる前に適切な値でこのレジスタを初期化すること
           に対して責任があります。

       -mpic-register=reg
           PIC アドレッシングに使用されるレジスタを指定します。R9 が使用されて
           いるとき、スタックチェックが有効にされないなら、デフォルトは R10 で
           す。

       -mcirrus-fix-invalid-insns
           不正な Maverick 命令の組み合わせに関する問題を回避するために命令ス
           トリームに NOP を挿入します。このオプションは、-mcpu=ep9312 オプ
           ションが Cirrus Maverick 浮動小数点コプロセッサのための命令の生成を
           有効にするために使用されている場合のみ有効です。このオプションは、
           問題が、古い Maverick 実装にのみ存在しているので、デフォルトで有効
           にされていません。-mno-cirrus-fix-invalid-insns スイッチの使用に
           よってデフォルトを再び有効にすることができます。

       -mpoke-function-name
           関数プロローグの直前に、各関数の名前をテキストセクションに書き込み
           ます。生成されたコードは、次と同様です:

                        t0
                            .ascii "arm_poke_function_name", 0
                            .align
                        t1
                            .word 0xff000000 + (t1 - t0)
                        arm_poke_function_name
                            mov     ip, sp
                            stmfd   sp!, {fp, ip, lr, pc}
                            sub     fp, ip, #4

           スタックのバックトレースを実行するとき、コードは、"fp + 0" に格納さ
           れた "pc" の値を検査することができます。トレース関数が位置 "pc -
           12" を調べ、上位  8 ビットが設定されているなら、私たちは、この位置
           の直前に埋め込まれた関数名があり、"((pc[-3]) & 0xff000000)" という
           長さがあることを知ります。

       -mthumb
           16 ビット Thumb 命令セットのためにコードを生成します。デフォルト
           は、32 ビット ARM 命令セットを使用することです。

       -mtpcs-frame
           すべてのリーフでない関数のために Thumb Procedure Call Standard に適
           合したスタックフレームを生成します。(リーフ関数は、その他の関数を呼
           び出さないものです。) デフォルトは -mno-tpcs-frame です。

       -mtpcs-leaf-frame
           すべてのリーフ関数のために Thumb Procedure Call Standard に適合した
           スタックフレームを生成します。(リーフ関数は、その他の関数を呼び出さ
           ないものです。) デフォルトは -mno-apcs-leaf-frame です。

       -mcallee-super-interworking
           コンパイルされるファイルのすべての外部可視関数を、関数の残りを実行
           する前に Thumb モードに切り替わる ARM 命令セットヘッダに与えます。
           これによって、これらの関数を、non-interworking (非相互作用) コード
           から呼び出すことができます。

       -mcaller-super-interworking
           (仮想関数を含む) 関数ポインタを経由する呼び出しは、ターゲットコード
           が interworking (相互作用) で、またはなしで、コンパイルされたかどう
           かにかかわらず正しく実行することができます。このオプションが有効に
           されているなら、関数ポインタを実行するコストに関してわずかなオーバ
           ヘッドがあります。

       -mtp=name
           スレッドのローカル記憶域のポインタのためのアクセスモデルを指定しま
           す。有効なモデルは、"__aeabi_read_tp" への呼び出しを生成する、
           soft、(arm6k アーキテクチャでサポートされる) 直接 "cp15" からスレッ
           ドのポインタをフェッチする、cp15、選択されたプロセッサのために最も
           良い利用可能なメソッドを使用する、auto です。デフォルトの設定は、
           auto です。

       AVR オプション

       これらのオプションは AVR 実装のために定義されます:

       -mmcu=mcu
           ATMEL AVR 命令セットまたは MCU タイプを指定します。

           命令セット avr1 は、C コンパイラによってサポートされるのではなく、
           アセンブラプログラムだけでサポートされる、最小限の AVR コアです
           (MCU タイプ: at90s1200, attiny10, attiny11, attiny12, attiny15,
           attiny28)。

           命令セット avr2 (デフォルト) は、最大 8K のプログラムメモリス空間が
           あるクラシック AVR コアです (MCU タイプ: at90s2313, at90s2323,
           attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
           at90s8515, at90c8534, at90s8535)。

           命令セット avr3 は、最大 128K のプログラムメモリ空間があるクラシッ
           ク AVR コアです (MCU タイプ: atmega103, atmega603, at43usb320,
           at76c711)。

           命令セット avr4 は、最大 8K のプログラムメモリス空間がある機能強化
           された AVR です (MCU タイプ: atmega8, atmega83, atmega85)。

           命令セット avr5 は、最大 128K のプログラムメモリ空間がある機能強化
           された AVR です (MCU タイプ: atmega16, atmega161, atmega163,
           atmega32, atmega323, atmega64, atmega128, at43usb355, at94k)。

       -msize
           asm ファイルに命令サイズを出力します。

       -minit-stack=N
           シンボルまたは数値で、初期スタックアドレスを指定します。__stack が
           デフォルトです。

       -mno-interrupts
           生成されるコードは、ハードウェア割り込みと互換性がありません。コー
           ドサイズは、より小さくなるでしょう。

       -mcall-prologues
           適切なサブルーチンの呼び出しとして拡張された関数プロローグ/エピロー
           グです。コードサイズは、より小さくなるでしょう。

       -mno-tablejump
           時々コードサイズを増大する tablejump insn を生成しません。

       -mtiny-stack
           スタックポインタの低位 8 ビットのみを変更します。

       -mint8
           int が、8 ビットの整数であると仮定します。これは、すべてのタイプの
           サイズに影響します: char は、1 バイト、int は、1 バイト、long は、2
           バイト、および long long は、4 バイトになります。このオプションは、
           C 標準に従いませんが、より小さいコードサイズを利用者に提供すること
           に注意してください。

       Blackfin オプション

       -momit-leaf-frame-pointer
           リーフ関数のためのレジスタのフレームポインタを保持しません。これ
           で、フレームポインタを保存し、セットアップして、復元する命令を避け
           て、特別のレジスタをリーフ関数で利用可能とします。オプション
           -fomit-frame-pointer は、デバッグをより困難にするかもしれないすべて
           の関数のためのフレームポインタを削除します。

       -mspecld-anomaly
           有効にされるとき、コンパイラは、生成コードがジャンプ命令の後に推論
           的なロードを含まないことを確実にします。このオプションは、デフォル
           トで有効にされます。

       -mno-specld-anomaly
           推論的なロードが起こることを防ぐために特別のコードを生成しません。

       -mcsync-anomaly
           有効にされるとき、コンパイラは、生成コードが条件付き分岐のすぐ後に
           CSYNC または SSYNC 命令を含まないことを確実にします。このオプション
           は、デフォルトで有効にされます。

       -mno-csync-anomaly
           条件付き分岐のすぐ後に起こることから CSYNC または SSYNC 命令を防ぐ
           ための特別のコードを生成しません。

       -mlow-64k
           有効にされるとき、コンパイラは、全体のプログラムがメモリの下位 64k
           に収まるという知識をうまく利用するために解放されます。

       -mno-low-64k
           プログラムが任意に大きいと仮定します。これは、デフォルトです。

       -mid-shared-library
           ライブラリ ID メソッドを通して共有ライブラリをサポートするコードを
           生成します。これによって、仮想メモリ管理のない環境で共有ライブラリ
           を決まった位置で実行することができます。このオプションは、-fPIC の
           意味を含みます。

       -mno-id-shared-library
           ID ベースの共有ライブラリが使用されることを仮定しないコードを生成し
           ます。これは、デフォルトです。

       -mshared-library-id=n
           コンパイルされる ID ベースの共有ライブラリの識別番号を指定します。0
           の値を指定すると、よりコンパクトなコードを生成し、他の値を指定する
           と、現在のライブラリのためにその数の割り付けを強制しますが、空間が
           ないか、またはこのオプションを省略するより効率的な時間です。訳注:
           意味不明。

       -mlong-calls
       -mno-long-calls
           関数のアドレスを最初にレジスタにロードすることによって呼び出される
           関数を実行するようにコンパイラに伝えます、次に、このレジスタでサブ
           ルーチン呼び出しを実行します。このスイッチは、ターゲット関数がサブ
           ルーチン呼び出し命令のオフセットベースのバージョンの 24 ビットのア
           ドレッシング範囲の外側にあるなら、必要です。

           この機能は、デフォルトで有効にされません。-mno-long-calls を指定す
           ると、デフォルトの振る舞いが復元されます。これらのスイッチは、コン
           パイラが関数ポインタを通して関数呼び出しを扱うためにどのようなコー
           ドを生成するかに影響しないことに注意してください。

       CRIS オプション

       これらのオプションは、特に CRIS ポートのために定義されています。

       -march=architecture-type
       -mcpu=architecture-type
           指定されたアーキテクチャのためのコードを生成します。architecture-
           type ための選択は、それぞれ ETRAX 4, ETRAX 100 と ETRAX 100 LX のた
           めの v3, v8v10 です。cris-axis-linux-gnu ではデフォルトが v10
           であることを除いて、デフォルトは、v0 です。

       -mtune=architecture-type
           ABI と利用可能な命令セットを除いて、生成されたコードに関して適用で
           きるすべての architecture-type を調整します。architecture-type ため
           の選択は、-march=architecture-type に対するものと同じです。

       -mmax-stack-frame=n
           関数のスタックフレームが n バイトを超えるとき、警告します。

       -melinux-stacksize=n
           cris-axis-aout ターゲットでのみ利用可能です。プログラムのスタックが
           n バイトに設定されるべきであるカーネルローダへのプログラムの表示の
           準備をします。

       -metrax4
       -metrax100
           オプション -metrax4-metrax100 は、それぞれ -march=v3-march=v8 と同義語です。

       -mmul-bug-workaround
       -mno-mul-bug-workaround
           適用される CPU モデルのための "muls" と "mulu" 命令のバグを回避しま
           す。このオプションは、デフォルトでアクティブです。

       -mpdebug
           アセンブリコードの CRIS 特有の冗長なデバッグ関連の情報を有効にしま
           す。また、このオプションは、アセンブリファイルの始めでアセンブラの
           ための #NO_APP フォーマットされたコードインディケータをオフにする効
           果があります。

       -mcc-init
           前の命令の条件コードの結果を使用しません。常に、条件コードの使用の
           前に比較とテストの命令を出力します。

       -mno-side-effects
           ポストインクリメント以外のアドレッシングモードで副作用がある命令を
           出力しません。

       -mstack-align
       -mno-stack-align
       -mdata-align
       -mno-data-align
       -mconst-align
       -mno-const-align
           これらのオプション (no-オプション) は、スタックフレーム、個々のデー
           タ、と選択された CPU モデルのための最大の単一データアクセスサイズに
           整列される定数の準備をします (準備を排除します)。デフォルトは 32
           ビットの整列 (alignment) で整えることです。構造体のレイアウトのよう
           な ABI の詳細は、これらのオプションに影響されません。

       -m32-bit
       -m16-bit
       -m8-bit
           上記の stack- data- と const-align オプションと同様に、これらのオプ
           ションは、スタックフレーム、書き込み可能なデータと定数を、すべて 32
           ビット、16 ビットまたは 8 ビットに整列するように準備します。デフォ
           ルトは 32-ビットの整列 (alignment) です。

       -mno-prologue-epilogue
       -mprologue-epilogue
           -mno-prologue-epilogue をつけると、スタックフレームに設定する通報の
           関数プロローグとエピローグは省略され、リターン命令またはリターン
           シーケンスのコードは、生成されません。コンパイルされたコードの目視
           検査とともにそしてそれだけにこのオプションを使用します: 呼び出しで
           保存されたレジスタを保存しなければならないとき、またはローカル変数
           のための記憶域が割り付けられる必要があるとき、警告やエラーは発生し
           ません。

       -mno-gotplt
       -mgotplt
           -fpic-fPIC をつけると、(他のアーキテクチャでは伝統的な) PLT へ
           の呼び出しよりはむしろ GOT の PLT 部分から関数のためのアドレスを
           ロードする命令シーケンスを生成しません (生成します)。デフォルトは
           -mgotplt です。

       -maout
           cris-axis-aout ターゲットでのみ認識される古い no-op オプション。

       -melf
           cris-axis-elf と cris-axis-linux-gnu ターゲットでのみ認識される古い
           no-op オプション。

       -melinux
           cris-axis-aout ターゲットでのみ認識され、-march=v8 のためのファイル
           と命令セットを含む、GNU/linux のような multilib を選択します。

       -mlinux
           cris-axis-linux-gnu ターゲットでのみ認識される古い no-op オプショ
           ン。

       -sim
           cris-axis-aout と cris-axis-elf で認識されるオプションは、シミュ
           レータライブラリの入出力関数とリンクするように準備します。コード、
           初期化されたデータ、と 0 で初期化されたデータは、連続して割り付けら
           れます。

       -sim2
           -sim と似ていますが、初期化されたデータを 0x40000000 に、0 で初期化
           されたデータを 0x80000000 に位置付けるオプションをリンカに渡しま
           す。

       CRX オプション

       これらのオプションは、特に CRX ポートのために定義されています。

       -mmac
           乗累算命令の使用を有効にします。デフォルトで無効にされます。

       -mpush-args
           プッシュ命令は、関数が呼び出されるとき、外向きの引数を渡すために使
           用されます。デフォルトで有効にされます。

       Darwin オプション

       これらのオプションは、Darwin オペレーティングシステムを実行するすべての
       アーキテクチャのために定義されます。

       Darwin の FSF GCC は、"fat" オブジェクトファイルを作成しません。それは
       ターゲットに組み込まれる単一のアーキテクチャのためのオブジェクトファイ
       ルを作成します。Darwin の Apple の GCC は、複数の -arch オプションが使
       用されるなら、"fat" ファイルを作成します。それは、複数回コンパイラまた
       はリンカを実行し、lipo と共に結果を接合することによって、行われます。

       (ppc7400ppc970 または i686 のような) 作成されたファイルのサブタイプ
       は、-mcpu または -march のように、GCC がターゲットとする ISA を指定する
       フラグによって決定されます。これを上書きするために、
       -force_cpusubtype_ALL オプションを使用することができます。

       Darwin ツールは、ISA ミスマッチを示されるとき、それらの振る舞いは異なり
       ます。アセンブラ、as は、それが生成されるファイルのサブタイプのために有
       効に使用される命令のみ許可するので、ppc750 オブジェクトファイルの 64
       ビット命令を出力することができません。共有ライブラリのためのリンカ、
       /usr/bin/libtool は、その入力ファイルよりサブタイプを制限していない共有
       ライブラリを作成するように求められるなら (例えば、ppc7400 ライブラリに
       ppc970 オブジェクトファイルを出力しようと試みます)、失敗して、エラーを
       印刷します。実行形式のためのリンカ、ld は、入力ファイルの任意の最も制限
       しているサブタイプを実行形式に静かに与えます。

       -Fdir
           ヘッダファイルを検索するために、ディレクトリのリストの先頭にフレー
           ムワークディレクトリ dir を追加します。これらのディレクトリは、-I
           オプションよって指定されているそれらでインタリーブ (挟まれ) され、
           左から右の順序でスキャンされます。

           フレームワークディレクトリは、それにフレームワークがあるディレクト
           リです。フレームワークは、".framework" で終わるディレクトリが含まれ
           ている、"Headers" および/または "PrivateHeaders" ディレクトリがある
           ディレクトリです。フレームワークの名前は、".framework" を除いたこの
           ディレクトリの名前です。フレームワークに関連しているヘッダは、最初
           に検索される "Headers" がある、それらの 2 つのディレクトリの 1 つで
           見つけられます。サブフレームワークは、フレームワークの "Frameworks"
           ディレクトリにあるフレームワークディレクトリです。サブフレームワー
           クのヘッダのインクルードは、サブフレームワークを含むフレームワーク
           のヘッダ、またはシブリング (sibling) サブフレームワークのヘッダのみ
           に現れることができます。2 つのサブフレームワークは、それらが同じフ
           レームワークで起こるなら、シブリング (sibling) です。サブフレーム
           ワークは、フレームワークと同じ名前を持つべきではありません、これに
           違反するなら、警告が表示されます。現在のサブフレームワークは、サブ
           フレームワークを持つことができないので、将来、これをサポートするた
           めに、メカニズムが拡張されるかもしれません。
           "/System/Library/Frameworks""/Library/Frameworks" で標準のフ
           レームワークを見つけることができます。使用例は、フレームワークと
           header.h の名前を示す Framework"PrivateHeaders" または
           "Headers" でディレクトリで見つけられるところで、"#include
           <Framework/header.h>" のようにインクルードします。

       -gused
           使用されたシンボルのためのデバッグ情報を出力します。STABS デバッグ
           形式のために、これは -feliminate-unused-debug-symbols を有効にしま
           す。これは、デフォルトで ON です。

       -gfull
           すべてのシンボルとタイプのためのデバッグ情報を出力します。

       -mmacosx-version-min=version
           この実行形式が実行する、MacOS X の最も初期のバージョンは、version
           です。version の典型的な値は、10.1、10.2 と 10.3.9 です。

           このオプションのデフォルトは、最も役に立つように思える選択をするこ
           とです。

       -mkernel
           カーネル開発モードを有効にします。-mkernel オプションは、適用できる
           ところで、-static, -fno-common, -fno-cxa-atexit, -fno-exceptions,
           -fno-non-call-exceptions, -fapple-kext, -fno-weak-fno-rtti を設
           定します。また、このモードは、PowerPC ターゲットのために
           -mno-altivec, -msoft-float, -fno-builtin-mlong-branch を設定し
           ます。

       -mone-byte-bool
           sizeof(bool)==1 となるように、bool のためのデフォルトを上書きしま
           す。デフォルトで、sizeof(bool) は、Darwin/PowerPC でコンパイルする
           とき、4 で、Darwin/x86 でコンパイルするとき、1 です、そのため、この
           オプションは、x86 で効果がありません。

           警告: -mone-byte-bool スイッチによって、GCC は、そのスイッチなしで
           生成されるコードとバイナリ互換性のないコードを生成します。このス
           イッチを使用することは、システムライブラリを含むプログラムの他のす
           べてのモジュールを再コンパイルすることを必要とします。デフォルトで
           ないデータモデルに適合するためにこのスイッチを使用します。

       -mfix-and-continue
       -ffix-and-continue
       -findirect-data
           開発時の速いターンアラウンド (転回) に適したコードを生成します。gdb
           が、既に実行しているプログラムに ".o" ファイルを動的にロードするこ
           とを有効にする必要があります。-findirect-data-ffix-and-continue
           は、後方互換性のために提供されています。

       -all_load
           静的なアーカイブライブラリのすべてのメンバをロードします。詳細につ
           いては、マニュアル ld(1) を参照してください。

       -arch_errors_fatal
           間違ったアーキテクチャを持つファイルでエラーとなることを致命的エ
           ラーとします。

       -bind_at_load
           ファイルがロードされるか、または開始されるとき、動的なリンカが、す
           べての未定義の参照をバインドするように、出力ファイルをマークしま
           す。

       -bundle
           Mach-o バンドル形式のファイルを作成します。詳細については、マニュア
           ル ld(1) を参照してください。

       -bundle_loader executable
           このオプションは、リンクされる構築出力ファイルをロードする
           executable (実行形式) を指定します。詳細については、マニュアル
           ld(1) を参照してください。

       -dynamiclib
           このオプションが渡されるとき、GCC は、Darwin libtool コマンドを使用
           して、リンク時に、実行形式の代わりに動的なライブラリを作成します。

       -force_cpusubtype_ALL
           これによって、GCC の出力ファイルは、-mcpu または -march オプション
           によって制御されるものの代わりに ALL サブタイプを持ちます。

       -allowable_client  client_name
       -client_name
       -compatibility_version
       -current_version
       -dead_strip
       -dependency-file
       -dylib_file
       -dylinker_install_name
       -dynamic
       -exported_symbols_list
       -filelist
       -flat_namespace
       -force_flat_namespace
       -headerpad_max_install_names
       -image_base
       -init
       -install_name
       -keep_private_externs
       -multi_module
       -multiply_defined
       -multiply_defined_unused
       -noall_load
       -no_dead_strip_inits_and_terms
       -nofixprebinding
       -nomultidefs
       -noprebind
       -noseglinkedit
       -pagezero_size
       -prebind
       -prebind_all_twolevel_modules
       -private_bundle
       -read_only_relocs
       -sectalign
       -sectobjectsymbols
       -whyload
       -seg1addr
       -sectcreate
       -sectobjectsymbols
       -sectorder
       -segaddr
       -segs_read_only_addr
       -segs_read_write_addr
       -seg_addr_table
       -seg_addr_table_filename
       -seglinkedit
       -segprot
       -segs_read_only_addr
       -segs_read_write_addr
       -single_module
       -static
       -sub_library
       -sub_umbrella
       -twolevel_namespace
       -umbrella
       -undefined
       -unexported_symbols_list
       -weak_reference_mismatches
       -whatsloaded
           これらのオプションは Darwin リンカで利用可能です。Darwin リンカのマ
           ニュアルページは、詳細にそれらについて説明しています。

       DEC Alpha オプション

       これらの -m オプションは、DEC Alpha 実装のために定義されています:

       -mno-soft-float
       -msoft-float
           浮動小数点演算に対してハードウェア浮動小数点命令を使用します (使用
           しません)。-msoft-float が指定されるとき、libgcc.a の関数は、浮動小
           数点演算を実行するために使用されます。それらが、浮動小数点演算をエ
           ミュレートするルーチンによって置き換えられないか、またはそのような
           エミュレーションルーチンを呼び出すようにコンパイルされていないな
           ら、これらのルーチンは、浮動小数点演算を発行します。浮動小数点演算
           なしで Alpha のためにコンパイルしているなら、利用者は、ライブラリが
           それらを呼び出さないように構築されていることを保証しなければなりま
           せん。

           浮動小数点演算のない Alpha の実装は、浮動小数点レジスタを持つ必要が
           あることに注意してください。

       -mfp-reg
       -mno-fp-regs
           浮動小数点レジスタセットを使用する (使用しない) コードを生成しま
           す。-mno-fp-regs-msoft-float  の意味を含みます。浮動小数点レジ
           スタセットが使用されていないなら、浮動小数点オペランドはまるでそれ
           らが整数であるかのように整数レジスタで渡され、浮動小数点の結果は
           $f0 の代わりに $0 で渡されます。これは標準でない呼び出しシーケンス
           であるので、-mno-fp-regs をつけてコンパイルされたコードによって呼び
           出さる浮動小数点の引数または返り値がある任意の関数も、またそのオプ
           ションでコンパイルされなければなりません。

           このオプションの典型的な使用法は、それが使用しないで、したがって、
           浮動小数点レジスタを保存して復元する必要はないカーネルを構築するこ
           とです。

       -mieee
           Alpha アーキテクチャは最大性能のために最適化された浮動小数点ハード
           ウェアを実装しています。それは IEEE 浮動小数点標準にほぼ適合してい
           ます。しかしながら、完全に適合するためには、ソフトウェアの支援が必
           要です。このオプションは、inexact-flag が維持されていない (下記参
           照) ことを除いて、完全に IEEE 適合コードを生成します。このオプショ
           ンがオンにされるなら、プリプロセッサマクロ "_IEEE_FP" がコンパイル
           の間、定義されています。結果のコードは、効率が悪くなりますが、非正
           規化された数、と非数と正/負の無限のような例外的な IEEE 値を正しくサ
           ポートすることができます。他の Alpha コンパイラは、このオプションを
           -ieee_with_no_inexact と呼んでいます。

       -mieee-with-inexact
           これは、また、生成コードが IEEE inexact-flag を維持することを除い
           て、-mieee に似ています。このオプションをオンにすることによって、生
           成コードは、IEEE 数学ライブラリ (math) に完全に適合するように実装し
           ます。"_IEEE_FP" に加えて、"_IEEE_FP_EXACT" はプリプロセッサマクロ
           として定義されます。いくつかの Alpha 実装において、結果のコードは、
           デフォルトで生成されたコードよりかなり遅く実行します。inexact-flag
           に依存するコードがほとんどないので、通常、利用者はこのオプションを
           指定するはずがありません。他の Alpha コンパイラは、このオプションを
           -ieee_with_inexact と呼んでいます。

       -mfp-trap-mode=trap-mode
           このオプションは、どのような浮動小数点関連のトラップが有効にされる
           かを制御します。他の Alpha コンパイラは、これのオプションを -fptm
           trap-mode と呼んでいます。次の 4 つの値の 1 つにトラップモードを設
           定することができます:

           n   これはデフォルト (通常) の設定です。有効にされるトラップは、ソ
               フトウェアで無効にすることができないトラップのみです (例えば、0
               除算トラップ)

           u   n によって有効にされたトラップに加えて、アンダフロートラップも
               同様に有効にされます。

           su  u に似ていますが、命令は、ソフトウェア完了 (コンパイル?) のため
               に安全であるとマークされます (詳細については、Alpha アーキテク
               チャマニュアルを参照してください)。訳注: 原文の software
               completion は、software compilation の誤りか?

           sui su に似ていますが、不正確なトラップも同様に有効にされます。

       -mfp-rounding-mode=rounding-mode
           IEEE 丸めモードをを選択します。他の Alpha コンパイラは、これのオプ
           ションを -fprm rounding-mode と呼んでいます。rounding-mode には次の
           1 つを指定できます:

           n   通常の IEEE 丸めモード。浮動小数点数は、最も近い機械数の方向
               へ、または、もし同値 (tie) の場合には均等な機械数の方向に丸めら
               れます。

           m   負の無限の方向に丸めます。

           c   切捨て (chopped) 丸めモード。浮動小数点数は、0 の方向に丸められ
               ます。

           d   動的 (dynamic) 丸めモード。浮動小数点制御レジスタ (fpcr、Alpha
               アーキテクチャリファレンスマニュアルを参照) のフィールドは、有
               効な丸めモードを制御します。C ライブラリは、正の無限の方向に丸
               めるためにこのレジスタを初期化します。したがって、利用者のプロ
               グラムが fpcr を変更しないなら、d は、正の無限の方向の丸めに対
               応しています。

       -mtrap-precision=trap-precision
           Alpha アーキテクチャでは、浮動小数点トラップは不正確です。これは、
           ソフトウェア支援なしで、浮動小数点トラップから復旧することが不可能
           であること、そして、通常、プログラム実行は終了する必要があることを
           意味します。GCC は浮動小数点トラップを引き起こした正確な位置を決定
           するためにオペレーティングシステムのトラップハンドラを支援すること
           ができるコードを生成することができます。アプリケーションの要件に
           よって、異なったレベルの精度を選択することができます:

           p   プログラム精度。このオプションは、デフォルトであり、トラップハ
               ンドラが、どのプログラムが浮動小数点例外を引き起こしたかのみを
               特定できることを意味します。

           f   関数精度。トラップハンドラは、浮動小数点例外を引き起こした関数
               を決定することができます。

           i   命令精度。トラップハンドラは、浮動小数点例外を引き起こした正確
               な命令を決定することができます。

           他の Alpha コンパイラは、-scope_safe-resumption_safe と呼ばれる
           同等なオプションを提供しています。

       -mieee-conformant
           このオプションは生成されたコードを IEEE 適合としてマークします。ま
           た、-mtrap-precision=i-mfp-trap-mode=su または
           -mfp-trap-mode=sui のいずれかを指定していないなら、利用者は、このオ
           プションを使用してはいけません。唯一の効果は、生成されたアセンブリ
           ファイルの関数プロローグに行 .eflag 48 を出力することです。DEC Unix
           の下では、これは IEEE 適合数学 (math) ライブラリルーチンがリンクさ
           れる効果があります。

       -mbuild-constants
           通常、GCC は、2 つか 3 つの命令でより小さな定数から構築できるかどう
           か確かめるために 32 または 64 ビットの整数定数を調べます。そうする
           ことができないなら、リテラルとして定数を出力し、実行時に data セグ
           メントからそれをロードするコードを生成します。

           たとえより多くの命令を取っても (最大は 6)、コードを使用してすべての
           整数定数を構築するように、GCC に要求するためにこのオプションを使用
           ます。

           利用者は、通常、共有ライブラリの動的ローダを構築するためにこのオプ
           ションを使用するでしょう。共有ライブラリ自体、それ自体のデータセグ
           メントで変数と定数を見つけることができる前に、メモリ内のそれ自体を
           再配置しなければなりません。

       -malpha-as
       -mgas
           ベンダによって供給されたアセンブラ (-malpha-as) によってか、または
           GNU アセンブラ -mgas によって生成されたコードかどうかを選択します。

       -mbwx
       -mno-bwx
       -mcix
       -mno-cix
       -mfix
       -mno-fix
       -mmax
       -mno-max
           GCC がオプションの BWX, CIX, FIX と MAX 命令セットを使用するコード
           を生成するべきかどうかを指示します。デフォルトは、-mcpu= オプション
           によって指定された CPU タイプか、または、なにも指定されなかったな
           ら、GCC が構築されたときの CPU タイプによってサポートされた命令セッ
           トを使用することです。

       -mfloat-vax
       -mfloat-ieee
           IEEE 単精度と倍精度の代わりに VAX F と G 浮動小数点演算を使用する
           (使用しない) コードを生成します。

       -mexplicit-relocs
       -mno-explicit-relocs
           古い Alpha アセンブラは、アセンブラマクロを除いて、シンボル再配置を
           生成する方法を提供しませんでした。これらのマクロの使用は、最適の命
           令スケジューリングを許していません。バージョン 2.12 の GNU binutil
           as は、再配置がどの命令に適用するべきであるかをコンパイラが、明白に
           マークすることができる、新しい構文をサポートしています。このオプ
           ションは、GCC がそれを構築して、それに応じたデフォルトを設定すると
           き、アセンブラの能力を検出するので、主にデバッグの役に立ちます。

       -msmall-data
       -mlarge-data
           -mexplicit-relocs が有効であるとき、静的なデータは、gp-relative 再
           配置を通してアクセスされます。-msmall-data が使用されるとき、8 バイ
           ト以下のオブジェクトは、small data 領域 (".sdata" と ".sbss" セク
           ション) に置かれ、$gp レジスタから 16 ビット再配置を通してアクセス
           されます。これは、small data 領域のサイズを 64KB に制限しますが、変
           数は、単一の命令によって直接アクセスできます。

           デフォルトは -mlarge-data です。このオプションで、data 領域はちょう
           ど 2GB 未満に制限されます。2GB 以上のデータを必要とするプログラム
           は、プログラムのデータセグメントの代わりにヒープ (heap) 中にデータ
           を割り付けるために "malloc" または "mmap" を使用しなければなりませ
           ん。

           共有ライブラリのためのコードを生成するとき、-fpic は、-msmall-data
           の意味を含み、-fPIC は、-mlarge-data の意味を含みます。

       -msmall-text
       -mlarge-text
           -msmall-text 使用されるとき、コンパイラは、プログラム (または、共有
           ライブラリ) 全体のコードが 4MB に適合し、したがって、分岐命令で到達
           可能であると仮定します。-msmall-data 使用されるとき、コンパイラは、
           すべてのローカルシンボルが同じ $gp 値を共有し、したがって関数呼び出
           しに必要な命令の数を 4 から 1 に減少させると仮定することができま
           す。

           デフォルトは -mlarge-text です。

       -mcpu=cpu_type
           マシンタイプ cpu_typee のための命令セットと命令スケジューリングパラ
           メータを設定します。利用者は EV スタイル名、または対応するチップ番
           号のいずれかを指定することができます。GCC は、EV4, EV5 と EV6 ファ
           ミリのプロセッサのためのスケジューリングパラメータをサポートし、利
           用者が指定するプロセッサから命令セットのためのデフォルト値を選択し
           ます。利用者がプロセッサタイプを指定しないなら、GCC はコンパイラが
           構築されたときのプロセッサをデフォルトとします。

           cpu_type に対してサポートされている値は次の通りです。

           ev4
           ev45
           21064
               EV4 としてスケジュールし、命令セット拡張がありません。

           ev5
           21164
               EV5 としてスケジュールし、命令セット拡張がありません。

           ev56
           21164a
               EV5 としてスケジュールし、BWX 拡張をサポートします。

           pca56
           21164pc
           21164PC
               EV5 としてスケジュールし、BWX と MAX 拡張をサポートします。

           ev6
           21264
               EV6 としてスケジュールし、BWX, FIX と MAX 拡張をサポートしま
               す。

           ev67
           21264a
               EV6 としてスケジュールし、BWX, CIX, FIX と MAX 拡張をサポートし
               ます。

       -mtune=cpu_type
           マシンタイプ cpu_typee のための命令スケジューリングパラメータのみを
           設定します。命令セットは、変更されません。

       -mmemory-latency=time
           アプリケーションで見られるような典型的なメモリ参照のためにスケ
           ジューラが仮定するべきであるレイテンシ (待ち時間) を設定します。こ
           の数は、アプリケーションによって使用されるメモリアクセスパターンと
           マシンの外部キャッシュのサイズに大きく依存しています。

           time のための有効なオプションは、次の通りです。

           number
               クロックサイクルを表す 10 進数。

           L1
           L2
           L3
           main
               コンパイラは、メインメモリと同様に、レベル 1、2 と 3 キャッシュ
               (また、Dcache、Scache と Bcache と呼ばれる) のための "典型的な"
               EV4 と EV5 ハードウェアのためのクロックサイクルの数の見積りを含
               んでいます。L3 は、EV5 のためだけに有効であることに注意してくだ
               さい。

       DEC Alpha/VMS オプション

       これらの -m オプションは、DEC Alpha/VMS 実装のために定義されています:

       -mvms-return-codes
           main から VMS 条件コードを返します。デフォルトは、POSIX スタイルの
           条件 (例えば、エラー) コードを返すことです。

       FRV オプション

       -mgpr-32
           最初の 32 個の汎用レジスタのみ使用します。

       -mgpr-64
           すべての 64 個の汎用レジスタを使用します。

       -mfpr-32
           最初の 32 個の浮動小数点レジスタのみを使用します。

       -mfpr-64
           すべての 64 個の浮動小数点レジスタを使用します。

       -mhard-float
           浮動小数点演算にハードウェア命令を使用します。

       -msoft-float
           浮動小数点演算にライブラリルーチンを使用します。

       -malloc-cc
           条件コードレジスタを動的に割り付けます。

       -mfixed-cc
           条件コードレジスタを動的に割り付けません、"icc0" と "fcc0" のみ使用
           します。

       -mdword
           double ワード insn を使用するように ABI を変更します。

       -mno-dword
           double ワード命令を使用しません。

       -mdouble
           浮動小数点 double 命令を使用します。

       -mno-double
           浮動小数点 double 命令を使用しません。

       -mmedia
           media 命令を使用します。

       -mno-media
           media 命令を使用しません。

       -mmuladd
           乗算と加算/減算命令を使用します。

       -mno-muladd
           乗算と加算/減算命令を使用しません。

       -mfdpic
           関数へのポインタを表すために関数記述子を使用する、FDPIC ABI を選択
           します。任意の PIC/PIE 関連のオプションがなければ、-fPIE の意味を含
           みます。-fpic または -fpie で、GOT エントリと小さなデータが GOT
           ベースアドレスから 12 ビットの範囲内であると仮定します。-fPIC また
           は -fPIE で、GOT オフセットは、32 ビットで計算されます。

       -minline-plt
           局所的にバインドすることを知られない関数への関数呼び出しで、PLT エ
           ントリのインライン化を有効にします。-mfdpic なしは、効果はありませ
           ん。速度の最適化を行い、共有ライブラリをコンパイルするなら (すなわ
           ち、-fPIC または -fpic)、または -O3 または上記のような最適化オプ
           ションがコマンドラインに存在しているとき、デフォルトで有効にされま
           す。

       -mTLS
           スレッドローカルのコードを生成するとき、大きな TLS セグメントを仮定
           します。

       -mtls
           スレッドローカルのコードを生成するとき、大きな TLS セグメントを仮定
           しません。

       -mgprel-ro
           読み込み専用セクションにあることが知られているデータの FDPIC ABI で
           "GPREL" リロケーション (再配置) の使用を有効にします。-fpic または
           -fpie を除いて、デフォルトで有効にされます: たとえ、グローバルなオ
           フセットテーブルをより小さくすることを助けるかもしれませんが、4 の
           ための 1 つの命令を交換します。-fPIC または -fPIE で、複数のシンボ
           ルによって共有されるものの 1 つ、4 のための 3 つの命令を交換し、参
           照されたシンボルのための GOT エントリの必要性を避けるので、それはよ
           り勝利となるようです。訳注: 意味不明。そうでないなら、それを向こう
           にするために -mno-gprel-ro を使用することができます。

       -multilib-library-pic
           pic ライブラリ (FD ではないライブラリ) とリンクします。-mfdpic がな
           い -fPIC-fpic によるのと同様に、-mlibrary-pic によって意味が含
           まれます。利用者は、それを決して明白に使用する必要はないはずです。

       -mlinked-fp
           スタックフレームを割り付けるときはいつも、常にフレームポインタを作
           成する EABI 要件に従います。このオプションは、-mno-linked-fp で無効
           にすることができますが、デフォルトで有効にされます。

       -mlong-calls
           現在のコンパイル単位の外の関数を呼び出すために、間接アドレスを使用
           します。これによって、32 ビットのアドレス空間内のどこでも関数を置く
           ことができます。

       -malign-labels
           前のパケットに nop を挿入することによって、8 バイトの境界にラベルを
           整列するようにします。このオプションは、VLIW パッキングが有効にされ
           ているときのみ、効果があります。それは新しいパケットを作成しませ
           ん。それは単に既存のものに nop を加えます。

       -mlibrary-pic
           位置独立の EABI コードを生成します。

       -macc-4
           最初の 4 個の media アキュムレータレジスタのみを使用します。

       -macc-8
           すべての 8 個の media アキュムレータレジスタを使用します。

       -mpack
           VLIW 命令をパックします。

       -mno-pack
           VLIW 命令をパックしません。

       -mno-eflags
           e_flags の ABI スイッチをマークしません。

       -mcond-move
           条件付き move 命令の使用を有効にします (デフォルト)。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -mno-cond-move
           条件付き move 命令の使用を無効にします。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -mscc
           条件付き set 命令の使用を有効にします (デフォルト)。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -mno-scc
           条件付き set 命令の使用を無効にします。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -mcond-exec
           条件付き実行の使用を有効にします (デフォルト)。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -mno-cond-exec
           条件付き実行の使用を無効にします。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -mvliw-branch
           分岐を VLIW 命令にパックするパスを実行します (デフォルト)。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -mno-vliw-branch
           分岐を VLIW 命令にパックするパスを実行しません。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -mmulti-cond-exec
           条件付き実行で "&&" と "||" の最適化を有効にします (デフォルト)。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -mno-multi-cond-exec
           条件付き実行で "&&" と "||" の最適化を無効にします。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -mnested-cond-exec
           入れ子に (ネスト) された条件付き実行の最適化を有効にします (デフォ
           ルト)。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -mno-nested-cond-exec
           入れ子に (ネスト) された条件付き実行の最適化を無効にします。

           このスイッチは、主にコンパイラをデバッグするためであり、おそらく将
           来のバージョンで削除されるでしょう。

       -moptimize-membar
           このスイッチは、コンパイラが生成したコードから冗長な "membar" 命令
           を取り除きます。それはデフォルトで有効にされます。

       -mno-optimize-membar
           このスイッチは、生成されたコードから冗長な "membar" 命令を自動的に
           削除することを無効にします。

       -mtomcat-stats
           gas は tomcat 統計値を印刷します。

       -mcpu=cpu
           コードを生成するプロセッサタイプを選択します。可能な値は、frv,
           fr550, tomcat, fr500, fr450, fr405, fr400, fr300 and simple です。

       GNU/Linux オプション

       これらの -m オプションは、GNU/Linux ターゲットのために定義されています:

       -mglibc
           uClibc の代わりに GNU C ライブラリを使用します。これは、
           *-*-linux-*uclibc* ターゲットを除いて、デフォルトです。

       -muclibc
           GNU C ライブラリの代わりに uClibc を使用します。これは、
           *-*-linux-*uclibc* ターゲットでデフォルトです。

       H8/300 オプション

       これらの -m オプションは、H8/300 実装のために定義されています:

       -mrelax
           可能であるなら、リンク時に、いくつかのアドレス参照を短くします。リ
           ンカオプション -relax を使用します。

       -mh H8/300H のためのコードを生成します。

       -ms H8S のためのコードを生成します。

       -mn ノーマルモードの H8S と H8/300H のためのコードを生成します。このス
           イッチは、-mh または -ms のいずれかで使用されるべきです。

       -ms2600
           H8S/2600 のためのコードを生成します。このスイッチは、-ms で使用され
           なければなりません。

       -mint32
           デフォルトで "int" データを 32 ビットにします。

       -malign-300
           H8/300H と H8S では、H8/300 と同じ整列規則を使用します。H8/300H と
           H8S のためのデフォルトは、long と float を 4 バイト境界に整列するこ
           とです。-malign-300 によってそれらは、2 バイト境界で整列されます。
           このオプションは H8/300 では効果がありません。

       HPPA オプション

       これらの -m オプションは、HPPA ファミリコンピュータのために定義されてい
       ます:

       -march=architecture-type
           指定されたアーキテクチャのためのコードを生成します。architecture-
           type に対する選択は、PA 1.0 プロセッサのためには 1.0、PA 1.1 プロ
           セッサのためには 1.1 と PA 2.0 プロセッサのためには 2.0 です。利用
           者のマシンのために適切なアーキテクチャオプションを決定するために
           は、HP-UX システムの /usr/lib/sched.models を参照してください。下位
           の番号が付けられたアーキテクチャのためにコンパイルされたコードは、
           上位の番号が付けられたアーキテクチャで実行できますが、逆は実行でき
           ません。

       -mpa-risc-1-0
       -mpa-risc-1-1
       -mpa-risc-2-0
           それぞれ、-march=1.0, -march=1.1 および -march=2.0 と同義語です。

       -mbig-switch
           大きなスイッチテーブルに適切なコードを生成します。アセンブラ/リンカ
           がスイッチテーブル内の分岐の範囲外のエラーを出す場合のみ、このオプ
           ションを使用します。

       -mjump-in-delay
           関数呼び出しの返りポインタを条件ジャンプのターゲットに変更すること
           によって無条件ジャンプ命令で関数呼び出しの遅延スロットを埋めます。

       -mdisable-fpregs
           どんな方法でも浮動小数点レジスタが使用されないようにします。これは
           浮動小数点レジスタの遅延 (lazy) コンテキストスイッチを実行するカー
           ネルをコンパイルするために必要です。利用者がこのオプションを使用し
           て、浮動小数点演算の実行を試みるなら、コンパイラはアボートします。

       -mdisable-indexing
           コンパイラがインデックスアドレスモードを使用しないようにします。
           MACHの下で MIG 生成コードをコンパイルするとき、これは、いくつかのか
           なり不明りょうな問題を回避します。

       -mno-space-regs
           ターゲットには空間レジスタがないと仮定するコードを生成します。これ
           によって、GCC は、より速い間接的な呼び出しを生成することができ、ス
           ケーリングしない (unscaled) インデックスアドレスモードを使用するこ
           とがでいます。

           そのようなコードは、レベル 0 PA システムとカーネルに適しています。

       -mfast-indirect-calls
           呼び出しが空間境界に決して交差しないと仮定するコードを生成します。
           これによって、GCC は、より速い間接的な呼び出しを実行するコードを出
           力できます。

           このオプションは、共有ライブラリまたは入れ子にされた関数の存在の下
           では動作しません。

       -mfixed-range=register-range
           与えられたレジスタ範囲を固定レジスタとして扱うコードを生成します。
           固定レジスタは、レジスタ割り付けが使用できないものです。カーネル
           コードをコンパイルするとき、これは役に立ちます。レジスタ範囲は、
           ダッシュによって分離された 2 つのレジスタとして指定されます。コンマ
           によって分離して、複数のレジスタ範囲を指定することができます。

       -mlong-load-store
           HP-UX 10 リンカによって時々必要となる、3 命令のロードと格納シーケン
           スを生成します。これは HP コンパイラへの +k オプションと同等です。

       -mportable-runtime
           ELF システムのために HP によって提案された移植性のある呼び出し規約
           を使用します。

       -mgas
           GAS だけが理解しているアセンブラ命令文の使用を有効にします。

       -mschedule=cpu-type
           マシンタイプ cpu-type の制約に従ってコードをスケジューリングしま
           す。cpu-type のための選択は、700 7100, 7100LC, 7200, 73008000
           です。利用者のマシンのために適切なスケジューリングオプションを決定
           するためには、HP-UX システム上の /usr/lib/sched.models を参照してく
           ださい。デフォルトのスケジューリングは 8000 です。

       -mlinker-opt
           HP-UX リンカで最適化パスを有効にします。これによってシンボリックデ
           バッグが不可能となることに注意してください。また、いくつかのプログ
           ラムをリンクするとき、それらが偽のエラーメッセージを与える HP-UX 8
           と HP-UX 9 のリンカでバグの引き金となります。

       -msoft-float
           浮動小数点のためのライブラリ呼び出しを含む出力を生成します。警告:
           必要なライブラリは、すべての HPPA ターゲットで利用可能ではありませ
           ん。通常、マシンの普通の C コンパイラの機能は使用されますが、クロス
           コンパイルで直接行うことはできません。利用者は、利用者自身でクロス
           コンパイルのための適切なライブラリ関数を準備しなければなりません。
           組み込みターゲット hppa1.1-*-pro は、ソフトウェア浮動小数点のサポー
           トを提供しています。

           -msoft-float は、出力ファイルにおける呼び出し規約を変更します。した
           がって、利用者がこのオプションですべてのプログラムをコンパイルする
           場合のみ、役に立ちます。特に、利用者は、これが動作するために、
           -msoft-float をつけて GCC に装備されているライブラリ、libgcc.a をコ
           ンパイルする必要があります。

       -msio
           サーバ IO のために事前に定義される "_SIO" を生成します。デフォルト
           は -mwsio です。これは、ワークステーション IO のために事前に定義さ
           れる "__hp9000s700", "__hp9000s700__" と "_WSIO" を生成します。これ
           らのオプションは HP-UX と HI-UX の下で利用可能です。

       -mgnu-ld
           GNU ld 特有のオプションを使用します。これは、共有ライブラリを構築す
           るとき、ld に -shared を渡します。GCC が GNU リンカで明示的または暗
           黙的に設定されるときのデフォルトです。このオプションは、どの ld が
           呼び出されるかに影響はなく、どんなパラメータがその ld に渡されるか
           を変更するだけです。呼び出される ld は、--with-ld 設定オプション、
           GCC のプログラム検索パス、と最後にユーザの PATH によって決定されま
           す。GCC によって使用されるリンカは、which `gcc -print-prog-name=ld`
           を使用して印刷することができます。このオプションは、64 ビット HP-UX
           GCC でのみ利用可能です、すなわち、hppa*64*-*-hpux* をつけて設定され
           ています。

       -mhp-ld
           HP ld 特有のオプションを使用します。これは、共有ライブラリをを構築
           するとき、ld に -b を渡し、すべてのリンクでは、ld に +Accept
           TypeMismatch を渡します。GCC が HP リンカで明示的または暗黙的に設定
           されるときのデフォルトです。このオプションは、どの ld が呼び出され
           るかに影響はなく、どんなパラメータがその ld に渡されるかを変更する
           だけです。呼び出される ld は、--with-ld 設定オプション、GCC のプロ
           グラム検索パス、と最後にユーザの PATH によって決定されます。GCC に
           よって使用されるリンカは、which `gcc -print-prog-name=ld` を使用し
           て印刷することができます。このオプションは、64 ビット HP-UX GCC で
           のみ利用可能です、すなわち、hppa*64*-*-hpux* をつけて設定されていま
           す。

       -mlong-calls
           ロング呼び出しシーケンスを使用するコードを生成します。これは、呼び
           出しがリンカが生成するスタブに常に到達できることを保証します。デ
           フォルトは、呼び出しサイトから関数または変換ユニットの始まりまでの
           距離が、場合によって、使用されている分岐タイプによって設定される事
           前に定義された制限を超えるときにのみ、ロング呼び出しを生成すること
           です。通常の呼び出しの制限は、それぞれ PA 2.0 と PA 1.X アーキテク
           チャのための 7,600,000 と 240,000 バイトです。sibcall は常に
           240,000 バイトに制限されています。

           距離は、-ffunction-sections オプションを使用するとき、または SOM リ
           ンカで HP-UX の下で -mgas-mno-portable-runtime オプションを使用
           するとき、関数の始まりから測定されます。

           性能が落ちるので、通常、このオプションを使用することは望ましくあり
           ません。しかしながら、特に部分リンクがアプリケーションを構築するた
           めに使用されているとき、大きなアプリケーションで役に立ちます。

           使用されるロング呼び出しのタイプは、アセンブラとリンカの能力、と生
           成されるコードのタイプに依存します。ロング絶対呼び出しと、ロング
           pic シンボル差分 (symbol-difference) または PC 相対呼び出しをサポー
           トするシステムでの影響は、比較的小さいはずです。しかしながら、間接
           呼び出しは、pic コードで 32 ビットの ELF システムで使用され、かなり
           長いものです。

       -munix=unix-std
           指定された UNIX 標準のためのコンパイラの事前の定義と開始ファイルの
           選択を生成します。unix-std のための選択は、93, 9598 です。93
           は、すべての HP-UX バージョンでサポートされます。95 は、HP-UX 10.10
           以降で利用可能です。98 は、HP-UX 11.11 以降で利用可能です。デフォル
           ト値は、HP-UX 10.00 のための 93、HP-UX 10.10 から 11.00 のための
           95、と HP-UX 11.11 以降のための 98 です。

           -munix=93 は、GCC 3.3 と 3.4 と同じ事前の定義を提供します。
           -munix=95 は、"XOPEN_UNIX" と "_XOPEN_SOURCE_EXTENDED" のための追加
           の事前の定義と開始ファイル unix95.o を提供します。-munix=98 は、
           "_XOPEN_UNIX", "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE"
           と "_INCLUDE_XOPEN_SOURCE_500" のための追加の事前の定義と開始ファイ
           ル unix98.o を提供します。

           このオプションが様々なライブラリルーチンのためにインタフェースを変
           更することに注意することは重要です。また、それは、C ライブラリの操
           作上の振る舞いに影響します。したがって、このオプションを使用で、極
           度の注意が必要です。

           1 つ以上の UNIX 標準で動作する目的があるライブラリコードは、必要に
           応じて変数 __xpg4_extended_mask をテスト、設定と復元しなければなり
           ません。ほとんどの GNU ソフトウェアは、この能力を提供しません。

       -nolibdld
           -static オプションが HP-UX 10 以降で指定されるとき、libdld.sl を検
           索するためにリンクオプションの生成を抑制します。

       -static
           libc 中の setlocale の HP-UX 実装は libdld.sl に依存しています。
           libdld.sl のアーカイブバージョンがありません。したがって、-static
           オプションが指定されるとき、特別なリンクオプションが、この依存関係
           を解決するために必要です。

           HP-UX 10 以降では、GCC ドライバは、-static オプションが指定されると
           き、libdld.sl とリンクするために必要なオプションを追加します。これ
           によって、結果のバイナリを動的にできます。64 ビットのポートでは、リ
           ンカは、どのような場合でも、デフォルトで動的なバイナリを生成しま
           す。GCC ドライバが、これらのリンクオプションを追加することを防ぐた
           めに -nolibdld オプションを使用することができます。

       -threads
           HP-UX の下で dce thread ライブラリを使用するマルチスレッド化のサ
           ポートを追加します。このオプションはプリプロセッサとリンカの両方の
           ためのフラグを設定します。

       Intel 386AMD x86-64 オプション

       これらの -m オプションは、i386 と x86-64 ファミリコンピュータのために定
       義されています:

       -mtune=cpu-type
           ABI と利用可能な命令セットを除いて、生成するコードに関して適用でき
           るすべてのものを cpu-type に調整します。cpu-type のための選択は次の
           通りです:

           generic
               最も一般的な IA32/AMD64/EM64T プロセッサのために最適化された
               コードを作成します。利用者のコードが実行される CPU を知っている
               なら、利用者は、-mtune=generic の代わりに対応する -mtune オプ
               ションを使用するべきです。しかし、利用者のアプリケーションの
               ユーザが、何の CPU があるかを知らないなら、このオプションを使用
               するべきです。

               新しいプロセッサが、市場で配備されるように、このオプションの振
               る舞いは、変化します。したがって、利用者が、GCC のより新しい
               バージョンにアップグレードするなら、コード生成オプションは、GCC
               のそのバージョンがリリースされたとき、最も一般的であったプロ
               セッサを反映するために変更されます。

               -march は、コンパイラが使用できる命令セットを示し、すべてのプロ
               セッサに適切な一般的な命令セットがないので、-march=generic オプ
               ションは、ありません。対照的に、-mtune は、コードが最適化されて
               いるプロセッサ (または、この場合プロセッサの収集) を示します。

           native
               これは、コンパイルするマシンのプロセッサタイプを決定することに
               よって、コンパイル時間の調整するために CPU を選択します。
               -mtune=native を使用すると、選択された命令セットの制約の下で
               ローカルマシンのために最適化されたコードを作成します。
               -march=native を使用すると、ローカルマシンによってサポートされ
               たすべての命令のサブセットを有効にします (したがって、結果は異
               なったマシンで実行できないかもしれません)。

           i386
               オリジナルの Intel の i386 CPU。

           i486
               Intel の i486 CPU。(このチップのために実装する計画はありませ
               ん。)

           i586, pentium
               MMX サポートのない Intel Pentium CPU。

           pentium-mmx
               MMX 命令セットのサポート付きの Pentium コアをベースとした Intel
               PentiumMMX CPU。

           pentiumpro
               Intel PentiumPro CPU。

           i686
               "generic" と同様ですが、"march" オプションとして使用されると
               き、PentiumPro 命令セットが使用されるので、コードはすべての
               i686 ファミリチップで動作します。

           pentium2
               MMX 命令セットのサポート付きの PentiumPro コアをベースとした
               Intel Pentium2 CPU。

           pentium3, pentium3m
               MMX と SSE 命令セットのサポート付きの PentiumPro コアをベースと
               した Intel Pentium3 CPU。

           pentium-m
               MMX、SSE と SSE2 命令セットのサポート付きの Intel Pentium3 CPU
               の省電力バージョン。Centrino ノートブックで使用されています。

           pentium4, pentium4m
               MMX、SSE と SSE2 命令セットのサポート付きの Intel Pentium4
               CPU。

           prescott
               MMX、SSE、SSE2 と SSE3 命令セットのサポート付きの Intel
               Pentium4 CPU の改良版。

           nocona
               64 ビット拡張、MMX、SSE、SSE2 と SSE3 命令セットのサポート付き
               の Intel Pentium4 CPU の改良版。

           core2
               64 ビットの拡張、MMX、SSE、SSE2、SSE3 と SSSE3 命令セットのサ
               ポート付きの Intel Core2 CPU。

           k6  MMX 命令セットのサポート付きの AMD K6 CPU。

           k6-2, k6-3
               MMX and 3dNOW! 命令セットのサポート付きの AMD K6 CPU の改良版。

           athlon, athlon-tbird
               MMX、3dNOW!、強化版 3dNOW! と SSE プリフェッチ命令サポート付き
               の AMD Athlon CPU。

           athlon-4, athlon-xp, athlon-mp
               MMX、3dNOW!、強化版 3dNOW! と完全 SSE 命令セットのサポート付き
               の改良版 AMD Athlon CPU。

           k8, opteron, athlon64, athlon-fx
               x86-64 命令セットのサポート付きの AMD K8 コアをベースとした
               CPU。(これは、MMX、SSE、SSE2、3dNOW!、強化版 3dNOW! と 64 ビッ
               ト命令セット拡張のスーパセットです。)

           k8-sse3, opteron-sse3, athlon64-sse3
               SSE3 命令セットのサポートがある k8、opteron と athlon64 の改良
               されたバージョン。

           winchip-c6
               追加 MMX 命令セットのサポート付きの i486 と同じ方法で取扱われる
               IDT Winchip C6 CPU。

           winchip2
               追加 MMX と 3dNOW! 命令セットのサポート付きの i486 と同じ方法で
               取扱われる IDT Winchip2 CPU。

           c3  MMX と 3dNOW! 命令セットのサポート付きの Via C3 CPU。(このチッ
               プのために実装する計画はありません。)

           c3-2
               MMX and SSE 命令セットのサポート付きの Via C3-2 CPU。(このチッ
               プのために実装する計画はありません。)

           geode
               MMX と 3dNOW! 命令セットのサポート付きの組み込み AMD CPU。

           特定の cpu-type を選ぶことは、その特定のチップのために適切なものを
           スケジュールしたとはいえ、コンパイラは、使用されている -march=cpu-
           type オプションなしでも i386 で実行しないコードは生成しません。

       -march=cpu-type
           マシンタイプ cpu-type のための命令を生成します。cpu-type のための選
           択は、-mtune のためと同じです。そのうえに、-march=cpu-type を指定す
           ることは、-mtune=cpu-type の意味を含みます。

       -mcpu=cpu-type
           -mtune のための古くて推奨されない同義語です。

       -m386
       -m486
       -mpentium
       -mpentiumpro
           これらのオプションは、それぞれ -mtune=i386, -mtune=i486,
           -mtune=pentium および -mtune=pentiumpro と同義語です。これらの同義
           語は、古くて推奨されません。

       -mfpmath=unit
           選択されたユニット unit のための浮動小数点演算を生成します。unit た
           めの選択は次の通りです:

           387 チップの大多数に存在する標準の 387 浮動小数点コプロセッサを使用
               し、そのほかは、エミュレートされます。このオプションつきでコン
               パイルされたコードは、ほとんどすべての点で動作します。一時的な
               結果は、他のチップの大部分と比べて、わずかに異なった結果をもた
               らすタイプによって指定された精度の代わりに 80 ビットの精度で計
               算されます。より詳細な記述については -ffloat-store を参照してく
               ださい。

               これは i386 コンパイラのためのデフォルトの選択です。

           sse SSE 命令セットに存在するスカラ浮動小数点命令を使用します。この
               命令セットは Pentium3 以降、Athlon-4, Athlon-xp と Athlon-mp
               チップによる AMD 系列でサポートされます。SSE 命令セットの初期の
               バージョンは、単精度演算のみをサポートし、そのため、倍精度と拡
               張精度演算は、まだ 387 を使用して行われます。後のバージョン、
               Pentium4 でのみ存在し、将来の AMD x86-64 チップは、倍精度演算も
               サポートしています。

               i386 コンパイラに関して、利用者は、SSE 拡張を有効にして、このオ
               プションが効果があるようにするために、-march=cpu-type, -msse ま
               たは -msse2 スイッチを使用する必要があります。x86-64 コンパイラ
               について、これらの拡張はデフォルトで有効にされています。

               結果のコードは、大多数の場合にかなり速くなり、387 コードの数値
               不安定性問題を避けるべきですが、一時的なものを 80 ビットと期待
               するいくつかの既存のコードを壊すかもしれません。

               これは x86-64 コンパイラのためのデフォルトの選択です。

           sse,387
               すぐに両方の命令セットを利用することを試みます。事実上、これ
               は、387 のために分離された実行ユニットがあるチップで利用可能な
               レジスタの量を倍にして、SSE 実行リソースもそうです。GCC レジス
               タアロケータは、不安定性能をもたらす分離された機能ユニットをモ
               デル化しないので、まだ実験的であり、このオプションは、注意して
               使用してください。

       -masm=dialect
           選択された方言 (dialect) を使用して asm 命令を出力します。サポート
           されている選択は、intel または att (デフォルト) です。Darwin は、
           intel をサポートしていません。

       -mieee-fp
       -mno-ieee-fp
           コンパイラが IEEE 浮動小数点比較を使用するかどうかを制御します。こ
           れらは、比較の結果が順序付けられていない場合に正しく扱います。

       -msoft-float
           浮動小数点のためのライブラリ呼び出しを含む出力を生成します。警告:
           必要なライブラリは GCC の一部ではありません。通常、マシンの普通の C
           コンパイラの機能は使用されますが、クロスコンパイルで直接行うことは
           できません。利用者は、利用者自身でクロスコンパイルのための適切なラ
           イブラリ関数を準備しなければなりません。

           関数が 80387 レジスタスタックに浮動小数点の結果を返すマシンでは、い
           くつかの浮動小数点オペコードは、たとえ -msoft-float が使用されてい
           ても、出力されます。

       -mno-fp-ret-in-387
           関数の返り値に FPU レジスタを使用しません。

           通常の呼び出し規則は、たとえ FPU がなくても、FPU レジスタにタイプ
           "float" と "double" の値を返す関数があります。このアイデアは、オペ
           レーティングシステムが FPU をエミュレートするべきであるということで
           す。

           オプション -mno-fp-ret-in-387 によって、そのような値は、代わりに通
           常の CPU レジスタで返されます。

       -mno-fancy-math-387
           いくつかの 387 エミュレータは 387 の "sin", "cos" と "sqrt" 命令を
           サポートしません。それらの命令の生成を回避するために、このオプショ
           ンを指定します。このオプションは FreeBSD、OpenBSD と NetBSD でのデ
           フォルトです。-march が、ターゲット cpu には FPU が常にあるので、命
           令がエミュレーションを必要としないことを示すとき、このオプションは
           上書きされます。リビジョン 2.6.1 現在で、これらの命令は、利用者が
           -funsafe-math-optimizations スイッチを使用しないなら、生成されませ
           ん。

       -malign-double
       -mno-align-double
           GCC が 2 ワード境界または 1 ワード境界で "double", "long double" と
           "long long" 変数を整列するかどうか制御します。2 ワード境界で
           "double" 変数を整列することは、より多くのメモリを犠牲にして Pentium
           で、いくらか速く実行するコードを生成します。

           x86-64 では、-malign-double は、デフォルトで有効にされます。

           警告: 利用者が -malign-double スイッチを使用するなら、上記のタイプ
           を含む構造体が、386 のために公開されているアプリケーションバイナリ
           インタフェース仕様と異なって整列され、そのスイッチなしでコンパイル
           されたコードの構造体とバイナリ互換となりません。

       -m96bit-long-double
       -m128bit-long-double
           これらのスイッチは "long double" タイプのサイズを制御します。i386
           アプリケーションバイナリインタフェースは、96 ビットとなるようにサイ
           ズを指定するので、-m96bit-long-double は、32 ビットのモードのデフォ
           ルトです。

           現代のアーキテクチャ (Pentium 以降) は、"long double" が 8 または
           16 バイト境界に整列されることを好みます。ABI に適合している配列また
           は構造体では、これは可能ではありません。したがって、
           -m128bit-long-double を指定することは、追加の 32 ビットの 0 で
           "long double" をパディングすることによって "long double" を 16 バイ
           ト境界に整列します。

           x86-64 コンパイラでは、その ABI は、"long double" が 16 バイト境界
           で整列されることを指定するので、-m128bit-long-double はデフォルトの
           選択です。

           これらのオプションのどちらも "long double" のための 80 ビットの x87
           標準を越える任意の特別な精度も有効でないことに注意してください。

           警告: 利用者のターゲット ABI のためにデフォルト値を上書きするなら、
           "long double" を取る関数のための関数呼び出し規約が変更されるのと同
           様に "long double" 変数を含む構造体と配列は、それらのサイズを変更し
           ます。したがって、それらはそのスイッチなしでコンパイルされたコード
           の配列または構造体とバイナリ互換となりません。

       -mmlarge-data-threshold=number
           -mcmodel=medium が指定されるとき、threshold より大きなデータは、
           large data セクションに置かれます。この値は、バイナリにリンクされた
           すべてのオブジェクトに渡って同じでなければなりません、デフォルト
           は、65535 です。

       -msvr3-shlib
       -mno-svr3-shlib
           GCC が、初期化されていないローカル変数を "bss" または "data" セグメ
           ントに置くかどうかを制御します。-msvr3-shlib は、それらを "bss" に
           置きます。これらのオプションは、System V Release 3 でのみ意味があり
           ます。

       -mrtd
           返り時にそれらの引数をポップする、"ret" num 命令で返る固定数の引数
           を取る関数である、異なった関数呼び出し規約を使用します。そこで引数
           をポップする必要がないので、これは呼び出し側で 1 つの命令を節約しま
           す。

           利用者は、個々の関数が関数属性 stdcall をつけて、この呼び出しシーケ
           ンスで呼び出されることを指定することができます。また、利用者は、関
           数属性 cdecl を使用することによって、-mrtd オプションを上書きするこ
           とができます。

           警告: この呼び出し規約は、通常、Unix で使用されるものと非互換である
           ので、Unix コンパイラでコンパイルされたライブラリを呼び出す必要が
           あっても、利用者は、それを使用することができません。

           また、利用者は、("printf" を含んで) 可変数の引数を取る、すべての関
           数のために関数プロトタイプを提供しなければなりませんそうでなけれ
           ば、それらの関数への呼び出しのために不正なコードが生成されます。

           さらに、利用者があまりに多くの引数で関数を呼び出すなら、著しく不正
           なコードの結果となります。(通常、余分な引数は害を及ぼさない形で無視
           されます。)

       -mregparm=num
           どのくらい多くのレジスタが整数引数を渡すために使用されるかを制御し
           ます。デフォルトでは、レジスタは引数を渡すために使用されません、多
           くても 3 つのレジスタを使用することができます。利用者は、関数属性
           regparm を使用することによって、指定された関数のためのこの振る舞い
           を制御することができます。

           警告: 利用者がこのスイッチを使用して、num が 0 でないなら、任意のラ
           イブラリを含めて、同じ値ですべてのモジュールを構築しなければなりま
           せん。これは、システムライブラリとスタートアップモジュールを含んで
           います。

       -msseregparm
           float と double の引数、と返り値のために SSE レジスタ引き渡し規約を
           使用します。利用者は、関数属性 sseregparm を使用することによって、
           この特有の関数のための振る舞いを制御できます。

           警告: このスイッチを使用するなら、利用者は、任意のライブラリを含ん
           で、同じ値ですべてのモジュールを構築しななければなりません。これ
           は、システムライブラリと開始モジュールを含んでいます。

       -mstackrealign
           エントリでスタックを再整列します。Intel x86 では、-mstackrealign オ
           プションは、ランタイムスタックを再整列する交互のプロローグとエピ
           ローグを生成します。これは、SSE 互換性のために 16 バイトのスタック
           を保持する最新のコードで 4 バイトで整列されたスタックを保持する古い
           コードの混合をサポートします。交互のプロローグとエピローグは、通常
           のものよりさらに遅くて大きく、交互のプロローグは、特別のスクラッチ
           レジスタを必要とします。これは、"regparm" 属性に関連して使用される
           なら、利用可能なレジスタの数を下げます。-mstackrealign オプション
           は、入れ子にされた関数プロローグで互換性がありません。これは困難な
           エラーと見なされます。また、個々の関数に適用できる属性
           "force_align_arg_pointer" を参照してください。

       -mpreferred-stack-boundary=num
           整列されたスタック境界を 2 から num バイト境界に上げて、保持するこ
           とを試みます。-mpreferred-stack-boundary が指定されないなら、デフォ
           ルトは、4 (16 バイトまたは 128 ビット) です。

           Pentium と PentiumPro では、"double" と "long double" 値は、8 バイ
           ト境界 (-malign-double 参照) に整列されるべきです、または重要なラン
           タイム性能に不利益を被るはずです。Pentium III では、Streaming SIMD
           Extension (SSE) (ストリーミング SIMD 拡張) データタイプ "__m128"
           は、それが 16 バイトに整列されていないなら、たぶん動作しません。

           スタックでこの値の適切な整列を保証するするために、スタック境界は、
           スタック上に保存された任意の値によって要求されるのと同じように整列
           されなければなりません。さらに、あらゆる関数は、整列されたスタック
           を保持するように生成されなければなりません。したがって、より低い優
           先スタック境界でコンパイルされた関数からより高い優先スタック境界で
           コンパイルされた関数を呼び出すことは、たぶんスタックを誤って整列し
           ます。コールバックを使用するライブラリは、常にデフォルトの設定を使
           用することをお勧めします。

           この余分な整列は、余分なスタック空間を消費して、一般的に、コードサ
           イズを増大します。組み込みシステムとオペレーティングシステムカーネ
           ルのような、スタック空間の使用に敏感なコードは、優先の整列を
           -mpreferred-stack-boundary=2 まで減らしたいかもしれません。

       -mmmx
       -mno-mmx
       -msse
       -mno-sse
       -msse2
       -mno-sse2
       -msse3
       -mno-sse3
       -mssse3
       -mno-ssse3
       -m3dnow
       -mno-3dnow
           これらのスイッチは、MMX, SSE, SSE2, SSE3, SSSE3 または 3DNow! 拡張
           命令セットの命令の使用を有効にするか、または無効にします。また、こ
           れらの拡張は、次の組み込み関数で利用可能です: これらのスイッチに
           よって有効にされ、無効にされる関数の詳細については、X86 組み込み関
           を参照してください。

           (387 命令とは対照的に) 浮動小数点のコードから自動的に生成された
           SSE/SSE2 命令を得るためには、-mfpmath=sse を参照してください。

           これらのオプションは、GCC が -mfpmath=sse がなくても生成されたコー
           ドにこれらの拡張命令を使用することを有効にします。ランタイム CPU 検
           出を実行するアプリケーションは、適切なフラグを使用して、各サポート
           されたアーキテクチャのための個別のファイルをコンパイルしなければな
           りません。特に、CPU 検出コードを含むファイルは、これらのオプション
           なしでコンパイルされるべきです。

       -mpush-args
       -mno-push-args
           出力パラメータを格納するために PUSH 操作を使用します。このメソッド
           は、SUB/MOV 操作を使用するメソッドとしてより短くて、通常同様に速
           く、デフォルトで有効にされます。ある場合には、無効にすることは、改
           良されたスケジューリングと減少する依存関係のために性能を向上するか
           もしれません。

       -maccumulate-outgoing-args
           有効にされるなら、出力引数に必要な空間の最大の量は、関数プロローグ
           で計算されます。これは、優先スタック境界が 2 と等しくないときに、減
           少された依存関係、改良されたスケジューリングと減少されたスタックの
           使用量のために、ごく最近の CPU では、より速くなります。欠点はコード
           サイズの顕著な増加です。このスイッチは -mno-push-args の意味を含み
           ます。

       -mthreads
           Mingw32 でスレッドセーフ例外操作をサポートします。スレッドセーフ例
           外操作に依存するコードは、-mthreads オプションですべてのコードをコ
           ンパイルして、リンクしなければなりません。コンパイルするとき、
           -mthreads-D_MT を定義します。リンクするとき、スレッド例外操作
           データ毎にクリーンにする特別なスレッドヘルパライブラリ -lmingwthrd
           をリンクします。

       -mno-align-stringops
           インライン化された文字列操作の宛先を整列しません。このスイッチは、
           宛先が既に整列されている場合には、コードサイズを減少させて、性能を
           向上させますが、GCC は、それに関して知りません。

       -minline-all-stringops
           デフォルトでは、宛先が少なくとも 4 バイト境界に整列されていることが
           わかっている場合にだけ、GCC は、文字列操作をインライン化します。こ
           れは、より多くのインライン化を有効にし、コードサイズを増大します
           が、短い長さのために速い memcpy、strlen と memset に依存するコード
           の性能を向上させます。

       -momit-leaf-frame-pointer
           リーフ関数のためのレジスタのフレームポインタを保持しません。これ
           は、フレームポインタを保存し、セットアップし、復元するための命令を
           避けて、リーフ関数の特別なレジスタを利用可能とします。オプション
           -fomit-frame-pointer は、デバッグをより困難にするかもしれないすべて
           の関数のためのフレームポインタを削除します。

       -mtls-direct-seg-refs
       -mno-tls-direct-seg-refs
           TLS 変数が TLS セグメントレジスタ (32 ビットでは %gs、64 ビットでは
           %fs) からのオフセットでアクセスされるかどうか、またはスレッドベース
           ポインタを追加しなければならないかどうかを制御します。これが正当で
           あるかどうかは、オペレーティングシステムに依存し、全体の TLS 領域を
           カバーするためにセグメントをマップするかどうかに依存します。

           GNU libc を使用するシステムにおいて、デフォルトはオンです。

       これらの -m スイッチは、上記に加えて 64 ビットの環境の AMD x86-64 プロ
       セッサでサポートされます。

       -m32
       -m64
           32 ビットまたは 64 ビットの環境のためにコードを生成します。32 ビッ
           トの環境では、int、long とポインタを 32 ビットに設定し、任意の i386
           システムで実行するコードを生成します。64 ビットの環境では、int を
           32 ビットに、long とポインタを 64 ビットに設定し、AMD の x86-64
           アーキテクチャのためのコードを生成します。darwin のみに関して、-m64
           オプションは、-fno-pic-mdynamic-no-pic オプションをオフにしま
           す。

       -mno-red-zone
           x86-64 コードのためにいわゆるレッドゾーンを使用しません。レッドゾー
           ンは x86-64 ABI によって強制され、シグナルまたは割り込みハンドラに
           よって変更されないスタックポインタの位置を超えた 128 バイトの領域で
           す、そのために、スタックポインタを調整しないで一時的なデータに使用
           することができます。フラグ -mno-red-zone は、このレッドゾーンを無効
           にします。

       -mcmodel=small
           スモール (small) コードモデルのためのコードを生成します: プログラム
           とそのシンボルは、アドレス空間の下位 2 GB にリンクされなければなり
           ません。ポインタは 64 ビットです。静的または動的にプログラムをリン
           クすることができます。これはデフォルトのコードモデルです。

       -mcmodel=kernel
           カーネル (kernel) コードモデルのためのコードを生成します。カーネル
           は、アドレス空間の負の 2 GB で実行します。このモデルは Linux カーネ
           ルコードで使用されなければなりません。

       -mcmodel=medium
           ミディアム (medium) モデルのためのコードを生成しません: プログラム
           は、アドレス空間の下位 2 GB でリンクされますが、アドレス空間のどこ
           にでもシンボルを位置付けすることができます。静的または動的にプログ
           ラムをリンクすることができますが、共有ライブラリの構築はミディアム
           モデルでサポートされません。

       -mcmodel=large
           ラージ (large) モデルのためのコードを生成します: このモデルは、セク
           ションのアドレスとサイズに関する仮定を行いません。現在のところ、GCC
           は、このモデルを実装していません。

       IA-64 オプション

       これらは Intel IA-64 アーキテクチャのために定義された -m オプションで
       す。

       -mbig-endian
           ビッグエンディアンのターゲットのためのコードを生成します。これは、
           HP-UX のデフォルトです。

       -mlittle-endian
           リトルエンディアンのターゲットのためのコードを生成します。これは、
           AIX5 と GNU/Linux のデフォルトです。

       -mgnu-as
       -mno-gnu-as
           GNU アセンブラのためのコードを生成します (または生成しません)。これ
           はデフォルトです。

       -mgnu-ld
       -mno-gnu-ld
           GNU リンカのためのコードを生成します (または生成しません)。これはデ
           フォルトです。

       -mno-pic
           グローバルなポインタレジスタを使用しないコードを生成します。結果
           は、位置独立のコードではなく、IA-64 ABI に違反します。

       -mvolatile-asm-stop
       -mno-volatile-asm-stop
           揮発性 (volatile) の asm 文の直前と直後にストップビットを生成します
           (または生成しません)。

       -mregister-names
       -mno-register-names
           スタックされたレジスタのための in, locout レジスタ名を生成しま
           す (または生成しません)。これは、アセンブラ出力をより読みやすくしま
           す。

       -mno-sdata
       -msdata
           スモールデータセクションを使用する最適化を無効にします (有効にしま
           す)。これはオプティマイザのバグを回避することに役に立つかもしれませ
           ん。

       -mconstant-gp
           単一の定数グローバルポインタ値を使用するコードを生成します。これ
           は、カーネルコードをコンパイルするとき、役に立ちます。

       -mauto-pic
           自己リロケータブル (再配置可能) なコードを生成しします。これは
           -mconstant-gp の意味を含みます。これは、ファームウェアコードをコン
           パイルするとき、役に立ちます。

       -minline-float-divide-min-latency
           最小のレイテンシ (待ち時間) アルゴリズムを使用して、浮動小数点値の
           インライン除算のためのコードを生成します。

       -minline-float-divide-max-throughput
           最大のスループットアルゴリズムを使用して、浮動小数点値のインライン
           除算のためのコードを生成します。

       -minline-int-divide-min-latency
           最小のレイテンシ (待ち時間) アルゴリズムを使用して、整数値のインラ
           イン除算のためのコードを生成します。

       -minline-int-divide-max-throughput
           最大のスループットアルゴリズムを使用して、整数値のインライン除算の
           ためのコードを生成します。

       -minline-sqrt-min-latency
           最小のレイテンシ (待ち時間) アルゴリズムを使用して、インライン平方
           根のためのコードを生成します。

       -minline-sqrt-max-throughput
           最大のスループットアルゴリズムを使用して、インライン平方根のための
           コードを生成します。

       -mno-dwarf2-asm
       -mdwarf2-asm
           DWARF2 行番号デバッグ情報のためのアセンブラコードを生成しません (生
           成します)。これは、GNU アセンブラを使用しないとき、役に立ちます。

       -mearly-stop-bits
       -mno-early-stop-bits
           ストップビットは、ストップビットの引き金となった命令の直前より前に
           位置付けることができます。これは、命令スケジューリングを改良するこ
           とができますが、常にそうするというわけではありません。

       -mfixed-range=register-range
           固定レジスタとして与えられたレジスタ範囲を扱うコードを生成します。
           固定レジスタはレジスタアロケータが使用することができないものです。
           これは、カーネルコードをコンパイルするとき、役に立ちます。レジスタ
           範囲は、ダッシュで区切られた 2 つのレジスタとして指定されます。コン
           マで区切って複数のレジスタ範囲を指定することができます。

       -mtls-size=tls-size
           即値の TLS オフセットのビットサイズを指定します。有効な値は、14、22
           と 64 です。

       -mtune=cpu-type
           特定の CPU のための命令スケジューリングを調整します。有効な値は、
           itanium, itanium1, merced, itanium2 と mckinley です。

       -mt
       -pthread
           POSIX スレッドライブラリを使用するマルチスレッド化のサポートを追加
           します。このオプションはプリプロセッサとリンカの両方のためのフラグ
           を設定します。コンパイラによって生成されたオブジェクトコード、また
           はコンパイラと共に供給されたライブラリのスレッドセーフに影響しませ
           ん。これらは HP-UX 特有のフラグです。

       -milp32
       -mlp64
           32 ビットまたは、64 ビット環境のためにコードを生成します。32 ビット
           環境では、int、long とポインタを 32 ビットに設定します。64 ビット環
           境では、int を 32 ビットに設定し、long とポインタを 64 ビットに設定
           します。これらは HP-UX 特有のフラグです。

       -mno-sched-br-data-spec
       -msched-br-data-spec
           再ロードの前にデータの推論的なスケジューリングを (無効/有効) にしま
           す。これは、ld.a 命令と対応するチェック命令 (ld.c / chk.a) を生成す
           る結果となります。デフォルトは、'無効にする' です。

       -msched-ar-data-spec
       -mno-sched-ar-data-spec
           再ロードの後にデータの推論的なスケジューリングを (有効/無効) にしま
           す。これは、ld.a 命令と対応するチェック命令 (ld.c / chk.a) を生成す
           る結果となります。デフォルトは、'有効にする' です。

       -mno-sched-control-spec
       -msched-control-spec
           推論的なスケジューリングの制御を (無効/有効) にします。この特徴は、
           リージョン (領域) スケジューリング (すなわち、再ロードの前) の間の
           み利用可能です。これは、ld.s 命令と対応するチェック命令 chk.s の生
           成の結果となります。デフォルトは、'無効にする' です。

       -msched-br-in-data-spec
       -mno-sched-br-in-data-spec
           再ロードの前にデータの推論的なロードに依存する命令の推論的なスケ
           ジューリングを (有効/無効) にします。これは、-msched-br-data-spec
           が有効にされているときのみ有効です。デフォルトは、'有効にする' で
           す。

       -msched-ar-in-data-spec
       -mno-sched-ar-in-data-spec
           再ロードの後にデータの推論的なロードに依存する命令の推論的なスケ
           ジューリングを (有効/無効) にします。これは、-msched-ar-data-spec
           が有効にされているときのみ有効です。デフォルトは、'有効にする' で
           す。

       -msched-in-control-spec
       -mno-sched-in-control-spec
           推論的なロードの制御に依存する命令の推論的なスケジューリングを (有
           効/無効) にします。これは、-msched-control-spec が有効にされている
           ときのみ有効です。デフォルトは、'有効にする' です。

       -msched-ldc
       -mno-sched-ldc
           ld.c の単純なデータの推論的なチェックの使用を (有効/無効) にしま
           す。無効にされるなら、chk.a 命令だけが、データの推論的なロードを
           チェックするために出力されます。デフォルトは、'有効にする' です。

       -mno-sched-control-ldc
       -msched-control-ldc
           推論的なロードの制御をチェックするために ld.c 命令の使用を (無効/有
           効) にします。有効にされるなら、推論的にスケジュールされた依存する
           命令のない推論的なロードを制御する場合に、このロードは、ld.sa と
           ld.c がそれをチェックするために使用されるように出力されます。デフォ
           ルトは、'無効にする' です。

       -mno-sched-spec-verbose
       -msched-spec-verbose
           推論的なモーションに関する情報の印刷を (無効/有効) にします。

       -mno-sched-prefer-non-data-spec-insns
       -msched-prefer-non-data-spec-insns
           有効にされるなら、現在のところ他の選択がない場合にだけ、データの推
           論的な命令は、スケジュールのために選択されます。これで、データの推
           論的な使用をさらに保守的なものにします。デフォルトは、'無効にする'
           です。

       -mno-sched-prefer-non-control-spec-insns
       -msched-prefer-non-control-spec-insns
           有効にされるなら、現在のところ他の選択がない場合にだけ、データの推
           論的な命令は、スケジュールのために選択されます。これで、データの推
           論的な使用をさらに保守的なものにします。デフォルトは、'無効にする'
           です。

       -mno-sched-count-spec-in-critical-path
       -msched-count-spec-in-critical-path
           有効にされるなら、推論的な依存は、命令プライオリティの計算の間に見
           なされます。これで、推論的な使用をやや保守的なものにします。デフォ
           ルトは、'無効にする' です。

       M32C オプション

       -mcpu=name
           コードが生成される CPU を選択します。name は、R8C/Tiny シリーズのた
           めの r8c、M16C (/60 まで) シリーズのための m16c、M16C/80 シリーズの
           ための m32cm または M32C/80 シリーズのための m32c の 1 つです。

       -msim
           プログラムがシミュレータで実行されることを指定します。これによっ
           て、交互のランタイムライブラリは、例えば、ファイル I/O、のサポート
           でリンクされます。実際のハードウェアで実行されるプログラムを生成す
           るとき、利用者は、このオプションを使用してはいけません。利用者は、
           I/O 関数が必要とするものは何でも、利用者自身のランタイムライブラリ
           を提供しなければなりません。

       -memregs=number
           GCC がコード生成の間に使用するメモリベースの擬似レジスタの数を指定
           します。これらの擬似レジスタは、実際のレジスタのように使用されるの
           で、利用可能なレジスタにコードを適合する GCC の能力と、レジスタの代
           わりにメモリを使用する性能のペナルティの間には、トレードオフがあり
           ます。プログラムのすべてのモジュールは、このオプションと同じ値でコ
           ンパイルしなければならないことに注意してください。そのために、利用
           者は、gcc で構築したデフォルトランタイムライブラリで、このオプショ
           ンを使用してはいけません。

       M32R/D オプション

       これらの -m オプションは、Renesas M32R/D アーキテクチャのために定義され
       ています:

       -m32r2
           M32R/2 のためのコードを生成します。

       -m32rx
           M32R/X のためのコードを生成します。

       -m32r
           M32R のためのコードを生成します。これはデフォルトです。

       -mmodel=small
           すべてのオブジェクトが下位 16MB のメモリに存在すると仮定します (そ
           のため、"ld24" 命令で、それらのアドレスをロードすることができ、すべ
           てのサブルーチンは "bl" 命令で到達可能であると仮定します)。これはデ
           フォルトです。

           "model" 属性で特定のオブジェクトのアドレス指定能力を設定することが
           できます。

       -mmodel=medium
           オブジェクトが 32 ビットのアドレス空間のどこかにあると仮定し (コン
           パイラは、それらのアドレスをロードするために "seth/add3" 命令を生成
           します)、すべてのサブルーチンは "bl" 命令で到達可能であると仮定しま
           す。

       -mmodel=large
           オブジェクトが 32 ビットのアドレス空間のどこかにあると仮定し (コン
           パイラは、それらのアドレスをロードするために "seth/add3" 命令を生成
           します)、サブルーチンは "bl" 命令で到達可能でないと仮定します (コン
           パイラは、より遅い "seth/add3/jl" 命令シーケンスを生成します)。

       -msdata=none
           スモール (small) データ領域の使用を無効にします。("section" 属性が
           指定されていななら) 変数は、.data, bss または .rodata の 1 つに置か
           れます。これはデフォルトです。

           スモール (data) データ領域は、セクション .sdata.sbss で構成され
           ます。オブジェクトは、これらのセクションの 1 つを使用して "section"
           属性があるスモール (data) データ領域に明示的に置かれます。

       -msdata=sdata
           スモール (data) データ領域にスモールグローバルデータとスモール静的
           データを置きますが、それらを参照するための特別なコードを生成しませ
           ん。

       -msdata=use
           スモール (data) データ領域にスモールグローバルデータとスモール静的
           データを置き、それらを参照するための特別な命令を生成します。

       -G num
           num バイト以下のグローバルとオブジェクトを通常の data または bss セ
           クションの代わりにスモール data または bss セクションに置きます。
           num のデフォルト値は 8 です。-msdata オプションは、このオプションの
           効果があるように sdata または use の 1 つに設定されなければなりませ
           ん。

           すべてのモジュールは、同じ -G num 値でコンパイルされるべきです。異
           なった num の値でコンパイルすることは、動作するかもしれませんし、動
           作しないかもしれません。動作しないなら、リンカはエラーメッセージを
           出し --- 不正なコードは生成されません。

       -mdebug
           コンパイラの M32R 特有のコードは、プログラムをデバッグするのに役に
           たつかもしれないいくつかの統計値を表示するようにします。

       -malign-loops
           すべてのループを 32 バイトの境界に整列します。

       -mno-align-loops
           ループのための 32 バイトの整列を強制しません。これはデフォルトで
           す。

       -missue-rate=number
           サイクルごとに number 命令を出力します。number は、1 または 2 のみ
           を指定できます。

       -mbranch-cost=number
           number は、1 または 2 のみを指定できます。1 であるなら、分岐は条件
           付きのコードより優先されます、2 であるなら、この反対となります。

       -mflush-trap=number
           キャッシュをフラッシュするために使用されるトラップ番号を指定しま
           す。デフォルトは 12 です。有効な数は、両端を含んで 0 と 15 の間で
           す。

       -mno-flush-trap
           トラップを使用することによってフラッシュできないキャッシュを指定し
           ます。

       -mflush-func=name
           キャッシュをフラッシュするために呼び出されるオペレーティングシステ
           ムの関数の名前を指定します。デフォルトは _flush_cache ですが、関数
           呼び出しは、トラップが利用可能でない場合にのみ使用されます。

       -mno-flush-func
           キャッシュをフラッシュするための OS 関数がないことをを示します。

       M680x0 オプション

       これらは 68000 シリーズのために定義された -m オプションです。これらのオ
       プションのデフォルト値は、コンパイラが設定されたとき、68000 のどの形式
       が選択されたかに依存します。最も一般的な選択のためのデフォルトは、次に
       与えられます。

       -m68000
       -mc68000
           68000 のための出力を生成します。これは、コンパイラが 68000 ベースの
           システムのために設定されるときのデフォルトです。

           このオプションは、68008, 68302, 68306, 68307, 68322, 68328 と 68356
           を含む、68000 または EC000 コアのマイクロコントローラで使用します。

       -m68020
       -mc68020
           68020 のための出力を生成します。これは、コンパイラが 68020 ベースの
           システムのために設定されるときのデフォルトです。

       -m68881
           浮動小数点のための 68881 命令を含む出力を生成します。これは、コンパ
           イラが設定されたとき、--nfp が指定されなかった場合の、ほとんどの
           68020 システムのためのデフォルトです。

       -m68030
           68030 のための出力を生成します。これは、コンパイラが 68030 ベースの
           システムのために設定されるときのデフォルトです。

       -m68040
           68040 のための出力を生成します。これは、コンパイラが 68040 ベースの
           システムのために設定されるときのデフォルトです。

           このオプションは 68040 のソフトウェアによってエミュレートされなけれ
           ばならない 68881/68882 命令の使用を抑制します。利用者の 68040 に
           は、それらの命令をエミュレートするためのコードがないなら、このオプ
           ションを使用します。

       -m68060
           68060 のための出力を生成します。これは、コンパイラが 68060 ベースの
           システムのために設定されるときのデフォルトです。

           このオプションは 68060 のソフトウェアによってエミュレートされなけれ
           ばならない 68881/68882 命令の使用を抑制します。利用者の 68060 に
           は、それらの命令をエミュレートするためのコードがないなら、このオプ
           ションを使用します。

       -mcpu32
           CPU32 のための出力を生成します。これは、コンパイラが CPU32 ベースの
           システムのために設定されるときのデフォルトです。

           このオプションは、68330, 68331, 68332, 68333, 68334, 68336, 68340,
           68341, 68349 と 68360 を含む、CPU32 または CPU32+ コアのマイクロコ
           ントローラで使用します。

       -m5200
           520X "coldfire" ファミリ cpu のために出力を生成します。これは、コン
           パイラが 520X ベースのシステムのために設定されるときのデフォルトで
           す。

           このオプションは、MCF5202, MCF5203, MCF5204 と MCF5202 を含む、5200
           コアのマイクロコントローラで使用します。

       -mcfv4e
           ColdFire V4e ファミリ CPU (例えば、547x/548x) のための出力を生成し
           ます。これは、ハードウェア浮動小数点命令の使用を含んでいます。

       -m68020-40
           新しい命令をなにも使用しないで、68040 のための出力を生成します。こ
           れは 68020/68881 または 68030 または 68040 のいずれかを比較的効率的
           に実行できるコードをもたらします。生成されたコードは、68040 でエ
           ミュレートされる 68881 命令を使用します。

       -m68020-60
           新しい命令をなにも使用しないで、68060 のための出力を生成します。こ
           れは 68020/68881 または 68030 または 68040 のいずれかを比較的効率的
           に実行できるコードをもたらします。生成されたコードは、68060 でエ
           ミュレートされる 68881 命令を使用します。

       -msoft-float
           浮動小数点のためのライブラリ呼び出しを含む出力を生成します。警告:
           必要なライブラリは、すべての m68k ターゲットで利用可能ではありませ
           ん。通常、マシンの普通の C コンパイラの機能は使用されますが、クロス
           コンパイルで直接行うことはできません。利用者は、利用者自身でクロス
           コンパイルのための適切なライブラリ関数を準備しなければなりません。
           組み込みターゲットの m68k-*-aoutm68k-*-coff は、ソフトウェア浮
           動小数点サポートを提供します。

       -mshort
           タイプ "int" を "short int" のような 16 ビット幅とみなします。ま
           た、さらに、スタックで渡されたパラメータは、API が 32 ビットへの促
           進を強制するターゲットで 16 ビットの偶数の境界に整列されます。

       -mnobitfield
           ビットフィールド命令を使用しません。-m68000, -mcpu32-m5200 オプ
           ションは -mnobitfield の意味を含みます。

       -mbitfield
           ビットフィールド命令を使用しません。-m68020 オプションは -mbitfield
           の意味を含みます。これは、利用者が 68020 のために設計された設定を使
           用する場合のデフォルトです。

       -mrtd
           返り時にそれらの引数をポップする "rtd" 命令で返る引数の固定の数を取
           る関数で異なった関数呼び出し規約 (コンベンション) を使用します。こ
           れは、そこで引数をポップする必要がないので、呼び出し側で 1 つの命令
           を節約します。

           この呼び出し規約は通常、Unix で使用されるものと互換性がないので、
           Unix コンパイラでコンパイルされたライブラリを呼び出す必要があるな
           ら、利用者は、それを使用することはできません。

           また、利用者は、("printf") を含んで) 可変数の引数を取るすべての関数
           のための関数プロトタイプを提供しなければなりません。そうでなけれ
           ば、それらの関数呼び出しのための不正確なコードが生成されます。

           さらに、利用者があまりに多くの引数がある関数を呼び出すなら、著しく
           不正確なコードをもたらします。(通常、余分な引数は害を及ぼさない形で
           無視されます。)

           "rtd" 命令は、68010, 68020, 68030, 68040, 68060 と CPU32 プロセッサ
           によってサポートされていますが、68000 または 5200 ではサポートされ
           ていません。

       -malign-int
       -mno-align-int
           GCC が "int", "long", "long long", "float", "double" と "long
           double" 変数を 32 ビット境界 (-malign-int) または 16 ビット境界
           (-mno-align-int) に整列するかどうかを制御します。32 ビット境界に変
           数を整列することは、より多くのメモリを犠牲にして 32 ビットバスがあ
           るプロセッサでいくらか速く実行するコードを生成します。

           警告: -malign-int スイッチを使用するなら、GCC は、ほとんどの m68k
           の公開されたアプリケーションのバイナリインタフェース仕様と異なって
           いる上記のタイプを含む構造体を整列します。

       -mpcrel
           グローバルオフセットテーブルを使用する代わりに、直接 68000 の PC 相
           対アドレッシングモードを使用します。現在のところ、このオプション
           は、多くても PC 相対アドレッシングのための 16 ビットオフセットを認
           める、-fpic の意味を含みます。-fPIC は、現在 -mpcrel でサポートされ
           ていませんが、これは、68020 以上のプロセッサでサポートされていま
           す。

       -mno-strict-align
       -mstrict-align
           整列されていないメモリの参照をシステムによって扱われると仮定しませ
           ん (仮定します)。

       -msep-data
           データセグメントがテキストセグメントと異なるメモリ領域に位置するこ
           とができるコードを生成します。これは、仮想メモリ管理がない環境で、
           適切に実行できます。このオプションは -fPIC の意味を含みます。

       -mno-sep-data
           データセグメントがテキストセグメントに続くと仮定するコードを生成し
           ます。これはデフォルトです。

       -mid-shared-library
           ライブラリ ID メソッドによって共有ライブラリをサポートするコードを
           生成します。これは、仮想メモリ管理がない環境で、共有ライブラリと適
           切に実行できます。このオプションは -fPIC の意味を含みます。

       -mno-id-shared-library
           ID ベースの共有ライブラリが使用されていると仮定しないコードを生成し
           ます。これはデフォルトです。

       -mshared-library-id=n
           コンパイルされる ID ベースの共有ライブラリの識別番号を指定します。0
           の値を指定することは、よりコンパクトなコードを生成し、他の値を指定
           することは、その数を現在のライブラリに強制的に割り付けますが、空間
           と時間が効率的でないのは、このオプションを省略することと同じです。

       M68hc1x オプション

       これらは 68hc11 と 68hc12 マイクロコントローラのために定義された -m オ
       プションです。これらのオプションのためのデフォルト値は、コンパイラが設
       定されたとき、どの形式のマイクロコントローラが選択されたかに依存しま
       す。最も一般的な選択のためのデフォルトは、次に与えられます。

       -m6811
       -m68hc11
           68HC11 のために出力を生成します。これは、コンパイラが 68HC11 ベース
           のシステムのために設定されるときのデフォルトです。

       -m6812
       -m68hc12
           68HC12 のために出力を生成します。これは、コンパイラが 68HC12 ベース
           のシステムのために設定されるときのデフォルトです。

       -m68S12
       -m68hcs12
           68HCS12 のために出力を生成します。

       -mauto-incdec
           68HC12 のプレとポスト (前と後ろ) 自動インクリメントと自動デクリメン
           トのアドレッシングモードの使用を有効にします。

       -minmax
       -nominmax
           68HC12 の min と max 命令使用を有効にします。

       -mlong-calls
       -mno-long-calls
           すべての呼び出しを far away (near) と取り扱います。呼び出しが far
           away であると仮定されるなら、コンパイラは、関数の呼び出しに "call"
           命令を使用し、関数の返りには、"rtc" 命令を使用します。

       -mshort
           タイプ "int" を "short int" のような 16 ビット幅とみなします。

       -msoft-reg-count=count
           コード生成に使用される疑似ソフトレジスタの数を指定します。最大の数
           は 32 です。より多くの疑似ソフトレジスタを使用すると、プログラムに
           依存するより良いコードとなるかどうかわかりません。デフォルトは、
           68HC11 では 4、68HC12 では 2 です。

       MCore オプション

       これらは Motorola M*Core プロセッサのために定義された -m オプションで
       す。

       -mhardlit
       -mno-hardlit
           2 つ以下の命令で行うことができるなら、定数をコードストリームにイン
           ライン化します。

       -mdiv
       -mno-div
           除算命令を使用します。(デフォルトで有効です)。

       -mrelax-immediate
       -mno-relax-immediate
           ビット演算で任意のサイズの即値 (immediate) を許可します。

       -mwide-bitfields
       -mno-wide-bitfields
           常にビットフィールド int サイズとして取り扱います。

       -m4byte-functions
       -mno-4byte-functions
           すべての関数を 4 バイト境界に整列することを強制します。

       -mcallgraph-data
       -mno-callgraph-data
           コールグラフ (callgraph) 情報を出力します。

       -mslow-bytes
       -mno-slow-bytes
           バイト量を読み込むとき、ワードアクセスを使用します。

       -mlittle-endian
       -mbig-endian
           リトルエンディアンのターゲットのためのコードを生成します。

       -m210
       -m340
           210 プロセッサのためのコードを生成します。

       MIPS オプション

       -EB ビッグエンディアンのコードを生成します。

       -EL リトルエンディアンのコードを生成します。これは、mips*el-*-* 設定の
           デフォルトです。

       -march=arch
           一般的な MIPS ISA の名前、または特定のプロセッサの名前を指定できる
           arch で実行するコードを生成します。ISA の名は次の通りです: mips1,
           mips2, mips3, mips4, mips32, mips32r2mips64。プロセッサ名は次の
           通りです: 4kc, 4km, 4kp, 5kc, 5kf, 20kc, 24k, 24kc, 24kf, 24kx,
           m4k, orion, r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000,
           r8000, rm7000, rm9000, sb1, sr71000, vr4100, vr4111, vr4120,
           vr4130, vr4300, vr5000, vr5400 and vr5500。特別の値 from-abi は、選
           択された ABI のために最も互換性のあるアーキテクチャを選択します (す
           なわち、32 ビットの ABI のためには mips1 と 64 ビットの ABI のため
           には mips3 です)。

           プロセッサ名では、最後の 000k と簡略化することができます (例え
           ば、-march=r2k)。プレフィックスはオプションで、vrr と書くことが
           できます。

           GCC は、このオプションの値に基づく 2 つのマクロを定義します。1 番目
           は、文字列としてターゲットアーキテクチャの名前を与える _MIPS_ARCH
           です。2 番目は、foo_MIPS_ARCH の値を大文字とした形式
           _MIPS_ARCH_foo があります。例えば、-march=r2000_MIPS_ARCH"r2000" に設定し、マクロ _MIPS_ARCH_R2000 を定義します。

           _MIPS_ARCH マクロは、上記に与えられたプロセッサ名を使用することに注
           意してください。言い換えれば、完全なプレフィックスがあり、000k
           と簡略化しません。from-abi の場合では、マクロは、決定されたアーキテ
           クチャ ("mips1" または "mips3" のいずれか) を指定します。-march オ
           プションが与えられないとき、デフォルトのアーキテクチャを指定しま
           す。

       -mtune=arch
           arch に対して最適化します。特に、このオプションは、命令がスケジュー
           ルされる方法と算術演算の認識されているコストを制御します。arch 値の
           リストは、-march に対するものと同じです。

           このオプションが使用されていないとき、GCC は -march によって指定さ
           れたプロセッサに対して最適化します。-march-mtune を一緒に使用す
           ることによって、プロセッサファミリで実行するコードを生成することが
           可能ですが、そのファミリの 1 つの特定のメンバのためにコードを最適化
           します。

           -mtune は、前述の -march と同様に動作する、マクロ _MIPS_TUNE_MIPS_TUNE_foo を定義します。

       -mips1
           -march=mips1 と同等です。

       -mips2
           -march=mips2 と同等です。

       -mips3
           -march=mips3 と同等です。

       -mips4
           -march=mips4 と同等です。

       -mips32
           -march=mips32 と同等です。

       -mips32r2
           -march=mips32r2 と同等です。

       -mips64
           -march=mips64 と同等です。

       -mips16
       -mno-mips16
           MIPS16 コードを生成します (生成しません)。GCC が MIPS32 または
           MIPS64 アーキテクチャをターゲットするなら、MIPS16e ASE を使用しま
           す。

       -mabi=32
       -mabi=o64
       -mabi=n32
       -mabi=64
       -mabi=eabi
           与えられた ABI のためのコードを生成します。

           EABI には 32 ビットと 64 ビットのバリアント (改良型) があることに注
           意してください。GCC は通常、利用者が 64 ビットアーキテクチャを選択
           するとき、64 ビットのコードを生成しますが、代わりに 32 ビットのコー
           ドを得るために -mgp32 を使用することができます。

           O64 ABI に関する情報については、
           <http://gcc.gnu.org/projects/mipso64-abi.html> を参照してください。

       -mabicalls
       -mno-abicalls
           SVR4 スタイルのダイナミックオブジェクトに適切なコードを生成します
           (生成しません)。-mabicalls は SVR4 ベースのシステムのデフォルトで
           す。

       -mshared
       -mno-shared
           完全に位置独立 (position-independent) であるコードを生成します (生
           成しません)、したがって共有ライブラリにリンクできます。このオプショ
           ンは、-mabicalls のみに影響します。

           すべての -mabicalls コードには、-fPIC-fpic のようなオプションに
           かかわらず、伝統的に位置独立 (position-independent) になっていま
           す。しかしながら、拡張として、GNU toolchain によって、実行形式は、
           局所的にバインドされたシンボルに絶対的なアクセスを使用することがで
           きます。また、より短い GP 初期化シーケンスを使用して、局所的に定義
           された関数への直接呼び出しを生成することができます。このモードは、
           -mno-shared よって選択されます。

           -mno-shared は、binutils 2.16 以上に依存し、GNU リンカだけが、リン
           クすることができる、オブジェクトを生成します。しかしながら、オプ
           ションは、最後の実行形式の ABI に影響しません。それは、リロケータブ
           ルオブジェクトの ABI のみに影響します。一般的に、-mno-shared を使用
           することは、実行形式を、より小さくてより速くします。

           -mshared が、フォルトです。

       -mxgot
       -mno-xgot
           グローバルオフセットテーブル (GOT) のサイズで普通の制限を取り除きま
           す (取り除きません)。

           GCC は通常、GOT から値をロードするために単一の命令を使用します。こ
           れは比較的効率的ですが、GOT が約 64k より小さい場合にだけ、動作しま
           す。より大きいものによって、リンカは次のようなエラーを報告します:

                   relocation truncated to fit: R_MIPS_GOT16 foobar

           これが起こるなら、利用者は -mxgot をつけてコードを再コンパイルする
           べきです。次に、非常に大きな GOT と共に動作するべきですが、グローバ
           ルシンボルの値をフェッチ (取得) するために 3 つの命令を要するので、
           効率的が悪くなります。

           いくつかのリンカは複数の GOT を作成することができることに注意してく
           ださい。そのようなリンカがあるなら、利用者は、単一のオブジェクト
           ファイルが 64k の値以上の GOT エントリをアクセスするときのみ、
           -mxgot を使用する必要があるはずです。ほとんどない行いません。

           これらのオプションは、GCC が位置独立コードを生成していないなら、効
           果はありません。

       -mgp32
           汎用レジスタが 32 ビット幅であると仮定します。

       -mgp64
           汎用レジスタが 64 ビット幅であると仮定します。

       -mfp32
           浮動小数点レジスタが 32 ビット幅であると仮定します。

       -mfp64
           浮動小数点レジスタが 64 ビット幅であると仮定します。

       -mhard-float
           浮動小数点コプロセッサ命令を使用します。

       -msoft-float
           浮動小数点コプロセッサ命令を使用しません。代わりにライブラリ呼び出
           しを使用する浮動小数点演算を実装します。

       -msingle-float
           浮動小数点コプロセッサが単精度演算のみをサポートすると仮定します。

       -mdouble-float
           浮動小数点コプロセッサが倍精度演算をサポートすると仮定します。これ
           はデフォルトです。

       -mdsp
       -mno-dsp
           MIPS DSP ASE を使用します (使用しません)。

       -mpaired-single
       -mno-paired-single
           対にされた単一の浮動小数点命令を使用します (使用しません)。このオプ
           ションは、64 ビットのコードを生成し、ハードウェアの浮動小数点のサ
           ポートが有効にされるときのみ使用することができます。

       -mips3d
       -mno-mips3d
           MIPS-3D ASE を使用します (使用しません)。オプション -mips3d は、
           -mpaired-single の意味を含みます。

       -mlong64
           "long" タイプが 64 ビット幅であることを強制します。デフォルトとポイ
           ンタサイズが決定される方法の説明については -mlong32 を参照してくだ
           さい。

       -mlong32
           "long", "int" とポインタタイプが 32 ビット幅であることを強制しま
           す。

           "int", "long" とポインタのデフォルトサイズは、ABI に依存します。す
           べてのサポートされた ABI は 32 ビット "int" を使用します。n64 ABI
           は、64 ビット EABI で行うように、64 ビット "long" を使用します。他
           のものは 32 ビット "long" を使用します。ポインタは、"long" と同じサ
           イズまたは整数レジスタと同じサイズのいずれか小さいサイズです。

       -msym32
       -mno-sym32
           すべてのシンボルには、選択された ABI にかかわらず 32 ビットの値があ
           ることを仮定します (仮定しません)。このオプションは、GCC が、シンボ
           ルアドレスへのより短くて、より速い参照を生成することができるので、
           -mabi=64-mno-abicalls と組み合わせて役に立ちます。

       -G num
           num バイト以下のグローバルで静的な項目を通常の data または bss セク
           ションの代わりにスモール (small) data または bss セクションに置きま
           す。これによって、単一の命令を使用してデータをアクセスすることがで
           きます。

           すべてのモジュールは、同じ -G num 値をつけてコンパイルされるべきで
           す。

       -membedded-data
       -mno-embedded-data
           可能であれば、最初に読み込み専用の data セクションに変数を割り付
           け、次に、可能であれば、スモール data セクションに割り付け、そうで
           なければ、data セクションに割り付けます。これはデフォルトよりわずか
           に遅いコードを与えますが、実行するときに必要な RAM の量を減少させま
           す、したがって、いくつかの組み込みシステムに望ましいでしょう。

       -muninit-const-in-rodata
       -mno-uninit-const-in-rodata
           初期化されていない "const" 変数を読み込み専用 data セクションに置き
           ます。このオプションは -membedded-data と関連するときのみ意味があり
           ます。

       -msplit-addresses
       -mno-split-addresses
           "%hi()" と "%lo()" アセンブラ再配置演算子の使用を有効にします (無効
           にします)。このオプションは、-mexplicit-relocs に取って代わりました
           が、後方互換性のために保持されています。

       -mexplicit-relocs
       -mno-explicit-relocs
           シンボリックアドレスを処理するとき、アセンブラ再配置演算子を使用し
           ます (使用しません)。-mno-explicit-relocs によって選択された代替手
           段は、代わりにアセンブラマクロを使用することです。

           -mexplicit-relocs は、GCC が、再配置オペレータをサポートするアセン
           ブラを使用するように設定されたなら、デフォルトです。

       -mcheck-zero-division
       -mno-check-zero-division
           整数 0 除算でトラップします (トラップしません)。デフォルトは
           -mcheck-zero-division です。

       -mdivide-traps
       -mdivide-breaks
           MIPS システムは、条件付きのトラップか、または break 命令のいずれか
           を生成することによって、0 除算がないかどうかチェックします。トラッ
           プを使用することは、より小さいコードをもたらしますが、MIPS II 以降
           でのみサポートされています。また、Linux カーネルのいくつかのバー
           ジョンには、罠が、適切なシグナル ("SIGFPE") を生成することからト
           ラップ防ぐバグがあります。-mdivide-traps を使用して、break の使用を
           強制するために、それらと -mdivide-breaks をサポートするアーキテク
           チャで条件付きのトラップを行うことができます。

           デフォルトは、通常 -mdivide-traps ですが、--with-divide=breaks を使
           用して時間の設定で、これを上書きすることができます。
           -mno-check-zero-division を使用して 0 除算チェックを完全に無効にす
           ることができます。

       -mmemcpy
       -mno-memcpy
           重要なブロック転送 (move) のために "memcpy()" の使用を強制します
           (強制しません)。デフォルトは、GCC がほとんどの一定のサイズのコピー
           をインライン化できる、-mno-memcpy です。

       -mlong-calls
       -mno-long-calls
           "jal" 命令の使用を無効にします (無効にしません)。"jal" を使用する関
           数を呼び出すことは、より効率的ですが、呼び出し側と呼び出され側が同
           じ 256 メガバイトのセグメントにある必要があります。

           このオプションは abicall コードで効果がありません。デフォルトは
           -mno-long-calls です。

       -mmad
       -mno-mad
           R4650 ISA によって提供されている、"mad", "madu" と "mul" 命令の使用
           を有効にします (無効にします)。

       -mfused-madd
       -mno-fused-madd
           利用可能であるとき、浮動小数点の乗算アキュムレイト命令の使用を有効
           にします (無効にします)。デフォルトは -mfused-madd です。

           乗算アキュムレイト命令が使用されるとき、中間プロダクトは、無限の精
           度で計算され、FCSR Flush to Zero ビットに制約されません。これはいく
           つかの状況で望ましくないかもしれません。

       -nocpp
           ユーザアセンブラファイル (.s サフィックスがある) をアセンブルすると
           き、プリプロセッサを実行しないように MIPS アセンブラに伝えます。

       -mfix-r4000
       -mno-fix-r4000
           特定の R4000 CPU のエラッタ (ハードの不具合) に対処します:

           -   倍の語 (double-word) または可変シフトは、整数除算を開始する直後
               に実行されるなら、不正確な結果を与えます。

           -   倍の語 (double-word) または可変シフトは、整数乗法が進行している
               間に実行されるなら、不正確な結果を与えます。

           -   整数除算は、取られたブランチ (branch) またはジャンプ (jump) の
               遅延スロットで開始されるなら、不正確な結果を与えます。

       -mfix-r4400
       -mno-fix-r4400
           特定の R4400 CPU のエラッタ (ハードの不具合) に対処します:

           -   倍の語 (double-word) または可変シフトは、整数除算を開始する直後
               に実行されるなら、不正確な結果を与えます。

       -mfix-vr4120
       -mno-fix-vr4120
           特定の VR4120 のエラッタ (ハードの不具合) に対処します:

           -   "dmultu" は、常に正しい結果を生むというわけではありません。

           -   "div" と "ddiv" は、オペランドの 1 つが負であるなら、常に正しい
               結果を生むというわけではありません。

           乗除エラッタの回避方法は、libgcc.a の特別な関数を当てにします。現在
           のところ、これらの関数は、"mips64vr*-elf" 設定によってのみ提供され
           ます。

           他の VR4120 エラッタは、nop が命令の特定の組の間に挿入されることを
           必要とします。これらのエラッタは、GCC 自体によって処理されるのでは
           なく、アセンブラによって処理されます。

       -mfix-vr4130
           VR4130 "mflo"/"mfhi" のエラッタ (ハードの不具合) に対処します: 回避
           方法は、GCC によってではなくアセンブラによって実装されますが、GCC
           は、"mflo" と "mfhi" の使用を避け、VR4130 の "macc", "macchi",
           "dmacc" と "dmacchi" 命令が利用可能であるなら、代わりに使用します。

       -mfix-sb1
       -mno-fix-sb1
           特定の SB-1 CPU コアのエラッタ (不具合) を回避します。(このフラグ
           は、現在 SB-1 リビジョン 2 "F1" と "F2" 浮動小数点エラッタを回避し
           ます。)

       -mflush-func=func
       -mno-flush-func
           I と D キャッシュをフラッシュするために呼び出す関数を指定するか、ま
           たはそのような関数を何も呼び出しません。呼び出されるなら、関数は一
           般的な "_flush_func()" と同じ引数を取らなければなりません。すなわ
           ち、キャッシュがフラッシュされているメモリ範囲のアドレス、メモリ範
           囲のサイズ、と数値 3 (両方のキャッシュをフラッシュ) です。デフォル
           トは、GCC が設定されたターゲットに依存しますが、一般的に
           _flush_func または __cpu_flush のいずれかです。

       -mbranch-likely
       -mno-branch-likely
           選択されたアーキテクチャのためのデフォルトにかかわらず、Branch
           Likely 命令のの使用を有効にするか、または無効にします。デフォルトで
           は、それらが選択されたアーキテクチャによってサポートされているな
           ら、Branch Likely 命令を生成します。例外は MIPS32 と MIPS64 アーキ
           テクチャおよびそれらのアーキテクチャを実装するプロセッサです。それ
           らに関しては、MIPS32 と MIPS64 アーキテクチャが、それらの使用ははっ
           きりと推奨されないので、Branch Likely 命令はデフォルトで生成されま
           せん。

       -mfp-exceptions
       -mno-fp-exceptions
           FP 例外が有効にされるかどうか指定します。これは、我々がいくつかのプ
           ロセッサのために FP 命令をどのようにスケジュールするかに影響しま
           す。デフォルトは、FP 例外が有効にされることです。

           例えば、SB-1 では、FP 例外が無効であり、我々が、64 ビットコードを出
           力するなら、我々は、両方の FP パイプを使用することができます。そう
           でなければ、我々は、1 つの FP パイプしか使用することができません。

       -mvr4130-align
       -mno-vr4130-align
           VR4130 パイプラインは、双方向のスーパスケーラですが、最初のものが 8
           バイトで整列されるなら、2 つの命令しか一緒に出力できません。このオ
           プションが有効にされるとき、GCC は、それが平行で実行するべきである
           と考えられる命令の組を整列します。

           このオプションには、VR4130 の最適化を行うときだけ、効果があります。
           最適化レベル -O3 でデフォルトで有効にされます。

       MMIX オプション

       これらのオプションは MMIX のために定義されます:

       -mlibfuncs
       -mno-libfuncs
           本来備わっているライブラリ関数がサイズを問わず、レジスタのすべての
           値を渡してコンパイルされることを指定します。

       -mepsilon
       -mno-epsilon
           "rE" イプシロンレジスタに対して比較する浮動小数点の比較命令を生成し
           ます。

       -mabi=mmixware
       -mabi=gnu
           グローバルレジスタ $231 以降を使用する GNU ABI と対照的に、レジスタ
           $0 以降として見られる (呼び出された関数で) 関数パラメータと返り値を
           渡すコードを生成します。

       -mzero-extend
       -mno-zero-extend
           64 ビットより短いサイズでメモリからデータを読み込むとき、サイン拡張
           するより、デフォルトの 0 拡張する load 命令を使用します (使用しませ
           ん)。

       -mknuthdiv
       -mno-knuthdiv
           除算の剰余が除数と同じ符号を持つようにします。デフォルトの、
           -mno-knuthdiv では、剰余の符号は被除数の符号に従います。どちらの方
           法も算術的には正当で、後者がほぼ例外なく使用されています。

       -mtoplevel-symbols
       -mno-toplevel-symbols
           "PREFIX" アセンブリ命令文とともにアセンブリコードを使用することがで
           きるように、すべてのグローバルシンボルの先頭に : を追加します (追加
           しません)。

       -melf
           mmix シミュレータによって使用されるデフォルトの mmo 形式でなく、ELF
           形式の実行正式を生成します。

       -mbranch-predict
       -mno-branch-predict
           静的な分岐予測が予想される分岐を示すとき、予想分岐 (probable
           branch) 命令を使用します (使用しません)。

       -mbase-addresses
       -mno-base-addresses
           ベースアドレス (base addresses) を使用するコードを生成します (生成
           しません)。ベースアドレスを使用することは、グローバルジスタに設定さ
           れる定数のための (アセンブラとリンカによって操作される) 要求を自動
           的に生成します。レジスタは、レジスタに保持された値から 0 から 255
           までの範囲中で、1 つ以上のベースアドレス要求のために使用されます。
           一般的に短くて速いコードをロードしますが、アドレス指定することがで
           きる異なったデータ項目の数は、制限されます。これは、多くの静的な
           データを使用するプログラムが -mno-base-addresses を必要とすることを
           意味します。

       -msingle-exit
       -mno-single-exit
           各関数で単一の終了ポイントを持つコードを生成することを強制します
           (強制しません)。

       MN10300 オプション

       これらの -m オプションは、Matsushita MN10300 アーキテクチャのために定義
       されています:

       -mmult-bug
           MN10300 プロセッサのための乗算命令のバグを回避するコードを生成しま
           す。これはデフォルトです。

       -mno-mult-bug
           MN10300 プロセッサの乗算命令のバグを回避するコードを生成しません。

       -mam33
           AM33 プロセッサに特有の機能を使用するコードを生成します。

       -mno-am33
           AM33 プロセッサに特有の機能を使用するコードを生成しません。これはデ
           フォルトです。

       -mreturn-pointer-on-d0
           ポインタを返す関すを生成するとき、"a0" と "d0" の両方のポインタを返
           します。そうでなければ、ポインタは、a0 だけが返され、プロトタイプの
           ない関数を呼び出す試みは、エラーをもたらすでしょう。このオプション
           は、デフォルトでオンであることに注意してください。それを無効にしる
           ためには、-mno-return-pointer-on-d0 を使用します。

       -mno-crt0
           C ランタイム初期化オブジェクトファイルをリンクしません。

       -mrelax
           短い (shorten) 分岐、呼び出しと絶対メモリアドレスへの緩和最適化パス
           を実行するべきであることをリンカに指示します。このオプションは、最
           終的なリンクステップのためにコマンドラインで使用されるときのみ効果
           があります。

           このオプションで、シンボリックデバッグを不可能にします。

       MT オプション

       これらの -m オプションは Morpho MT アーキテクチャのために定義されます:

       -march=cpu-type
           特定のプロセッサタイプを洗わすシステムの名前である、cpu-type で実行
           するコードを生成します。cpu-type で指定できる値は、ms1-64-001,
           ms1-16-002, ms1-16-003ms2 です。

           このオプションが使用されていないとき、デフォルトは、
           -march=ms1-16-002 です。

       -mbacc
           コードを生成するとき、バイトのロードと格納を使用します。

       -mno-bacc
           コードを生成するとき、バイトのロードと格納を使用しません。

       -msim
           シミュレータランタイムを使用します。

       -mno-crt0
           C ランタイム初期化オブジェクトファイル crti.o をリンクしません。
           startup.oexit.o のような、他のランタイム初期化と終了ファイル
           は、リンカコマンドラインにまだ含まれています。

       PDP-11 オプション

       これらのオプションは PDP-11 のために定義されます:

       -mfpu
           ハードウェア FPP 浮動小数点を使用します。これはデフォルトです。
           (PDP-11/40 で FIS 浮動小数点は、サポートされていません。)

       -msoft-float
           ハードウェア浮動小数点を使用しません。

       -mac0
           ac0 (Unix アセンブラ構文では fr0) に浮動小数点の結果を返します。

       -mno-ac0
           メモリに浮動小数点の結果を返します。これはデフォルトです。

       -m40
           PDP-11/40 のためのコードを生成します。

       -m45
           PDP-11/45 のためのコードを生成します。これはデフォルトです。

       -m10
           PDP-11/10 のためのコードを生成します。

       -mbcopy-builtin
           メモリをコピーするためにインライン "movmemhi" パターンを使用しま
           す。これはデフォルトです。

       -mbcopy
           メモリをコピーするためにインライン "movmemhi" パターンを使用しませ
           ん。

       -mint16
       -mno-int32
           16 ビット "int" を使用します。これはデフォルトです。

       -mint32
       -mno-int16
           32 ビット "int" を使用します。

       -mfloat64
       -mno-float32
           64 ビット "float" を使用します。これはデフォルトです。

       -mfloat32
       -mno-float64
           32 ビット "float" を使用します。

       -mabshi
           "abshi2" パターンを使用します。これはデフォルトです。

       -mno-abshi
           "abshi2" パターンを使用しません。

       -mbranch-expensive
           分岐が高価であることにします。これは、コード生成のみを実験するもの
           です。

       -mbranch-cheap
           分岐が高価であることにしません。これはデフォルトです。

       -msplit
           命令とデータ分割 (split I&D) されたシステムのためのコードを生成しま
           す。

       -mno-split
           命令とデータ分割 (split I&D) されないシステムのためのコードを生成し
           ます。これはデフォルトです。

       -munix-asm
           Unix アセンブラ構文を使用します。これは、pdp11-*-bsd の設定時のデ
           フォルトです。

       -mdec-asm
           DEC アセンブラ構文を使用します。これは、pdp11-*-bsd 以外の任意の
           PDP-11 ターゲットのために設定されるときのデフォルトです。

       PowerPC オプション

       これらは、下にリストされています。

       IBM RS/6000PowerPC オプション

       これらの -m オプションは、IBM RS/6000 と PowerPC のために定義されていま
       す:

       -mpower
       -mno-power
       -mpower2
       -mno-power2
       -mpowerpc
       -mno-powerpc
       -mpowerpc-gpopt
       -mno-powerpc-gpopt
       -mpowerpc-gfxopt
       -mno-powerpc-gfxopt
       -mpowerpc64
       -mno-powerpc64
       -mmfcrf
       -mno-mfcrf
       -mpopcntb
       -mno-popcntb
       -mfprnd
       -mno-fprnd
           GCC は、RS/6000 と PowerPC のための 2 の関連する命令セットアーキテ
           クチャをサポートしています。POWER 命令セットは、オリジナルの
           RS/6000 システムで使用されている rios チップセットによってサポート
           されている命令で、PowerPC 命令セットは、Freescale MPC5xx、MPC6xx、
           MPC8xx マイクロプロセッサと IBM 4xx, 6xx と後続のマイクロプロセッサ
           のアーキテクチャです。

           どちらのアーキテクチャも、もう一方のサブセットではありません。しか
           しながら、両方でサポートされている命令の大きな共通サブセットがあり
           ます。MQ レジスタは、POWER アーキテクチャをサポートしているプロセッ
           サに含まれています。

           利用者は、どの命令が利用者が使用しているプロセッサで利用可能である
           かを指定するためにこれらのオプションを使用します。これらのオプショ
           ンのデフォルト値は、GCC を設定するとき決定されます。-mcpu=cpu_type
           を指定することは、これらのオプションの指定を上書きします。我々は、
           利用者が上にリストされたオプションよりむしろ -mcpu=cpu_type オプ
           ションを使用することを勧めます。

           -mpower オプションによって、GCC は、POWER アーキテクチャだけに備え
           られた命令を生成でき、MQ レジスタを使用できます。-mpower2 を指定す
           ることは、-power の意味を含み、また、GCC は、オリジナルの POWER
           アーキテクチャに存在している命令ではなく、POWER2 アーキテクチャに存
           在している命令を生成できます。

           -mpowerpc オプションによって、GCC は PowerPC アーキテクチャの 32
           ビットのサブセットだけに備えられた命令を生成できます。
           -mpowerpc-gpopt を指定することは、-mpowerpc の意味を含み、また、GCC
           は、浮動小数点の平方根を含んで、汎用 (General Purpose) グループでオ
           プションの PowerPC アーキテクチャ命令を使用できます。
           -mpowerpc-gfxopt を指定することは、-mpowerpc の意味を含み、また、
           GCC は、浮動小数点の選択を含み、グラフィック (Graphics) グループで
           オプションの PowerPC アーキテクチャ命令を使用できます。

           -mmfcrf オプションによって、GCC は、PowerPC V2.01 アーキテクチャを
           サポートする POWER4 プロセッサと他のプロセッサで実装された条件レジ
           スタフィールド命令から move を生成することができます。-mpopcntb オ
           プションによって、GCC は、PowerPC V2.02 アーキテクチャをサポートす
           る POWER5 プロセッサと他のプロセッサで実装された popcount と倍精度
           の FP 逆数評価命令を生成することができます。-mfprnd オプションに
           よって、GCC は、PowerPC V2.03 アーキテクチャをサポートする POWER5+
           プロセッサと他のプロセッサで実装された FP を整数に丸める命令を生成
           することができます。

           -mpowerpc64 オプションによって、GCC は完全な PowerPC64 アーキテク
           チャに備えられた追加 64 ビット命令を生成することができ、ダブルワー
           ド量の 64 ビットとして GPR を扱うことができます。GCC は
           -mno-powerpc64 をデフォルトとします。

           利用者が -mno-power-mno-powerpc の両方を指定するなら、GCC は、
           両方のアーキテクチャの共通サブセットといくつかの特別な AIX 共通モー
           ド呼び出しのみを使用し、MQ レジスタを使用しません。-mpower-mpowerpc の両方を指定することは、GCC がいずれかのアーキテクチャの
           任意の命令を使用することを許可し、MQ レジスタの使用を許可します。こ
           れは、Motorola MPC601 に対して指定します。

       -mnew-mnemonics
       -mold-mnemonics
           生成するアセンブラコードにどのニーモニックを使用するかを選択しま
           す。-mnew-mnemonics をつけると、GCC は、PowerPC アーキテクチャのた
           めに定義されたアセンブラニーモニックを使用します。-mold-mnemonics
           をつけると、POWER アーキテクチャのために定義されたアセンブラニーモ
           ニックを使用します。1 つのアーキテクチャのみで定義された命令は、1
           つのニーモニックのみとなります。これらのオプションのどれが指定され
           るかにかかわりなく GCC はそのニーモニックを使用します。

           GCC は使用中のアーキテクチャに適切なニーモニックをデフォルトとしま
           す。-mcpu=cpu_type を指定すると、これらのオプションの値を時々上書き
           します。クロスコンパイラを構築していないなら、通常、利用者は、
           -mnew-mnemonics または -mold-mnemonics のいずれかを指定すべきではあ
           りませんが、代わりにデフォルトを受け付けるべきです。

       -mcpu=cpu_type
           マシンタイプ cpu_type のためのアーキテクチャタイプ、レジスタ使用
           法、ニーモニックの選択と命令スケジューリングパラメータを設定しま
           す。ポートされている cpu_type の値は 401, 403, 405, 405fp, 440,
           440fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740, 7400,
           7450, 750, 801, 821, 823, 860, 970, 8540, ec603e, G3, G4, G5,
           power, power2, power3, power4, power5, power5+, power6, common,
           powerpc, powerpc64, rios, rios1, rios2, rscrs64 です。

           -mcpu=common は、完全に一般的なプロセッサを選択します。このオプショ
           ンの下で生成されるコードは、あらゆる POWER または PowerPC プロセッ
           サでも動作します。GCC は、両方のアーキテクチャの共通のサブセットの
           命令のみを使用して、MQ レジスタを使用しません。GCC はスケジューリン
           グ目的のための一般的なプロセッサモデルを仮定します。

           -mcpu=power, -mcpu=power2, -mcpu=powerpc-mcpu=powerpc64 は、適
           切にスケジューリング目的のために仮定される汎用モデルである、一般的
           な POWER, POWER2, 純粋な 32 ビット PowerPC (すなわち、MPC601 でな
           い)、と 64 ビット PowerPC アーキテクチャマシンタイプを指定します。

           他のオプションは、特定のプロセッサを指定します。それらのオプション
           で生成されたコードは、そのプロセッサで最適に動作し、他のプロセッサ
           でまったく動作しないかもしれません。

           -mcpu オプションは、自動的に次のオプションを有効にするか、または無
           効にします: -maltivec, -mfprnd, -mhard-float, -mmfcrf, -mmultiple,
           -mnew-mnemonics, -mpopcntb, -mpower, -mpower2, -mpowerpc64,
           -mpowerpc-gpopt, -mpowerpc-gfxopt, -mstring, -mmulhw, -mdlmzb。特定
           の CPU に設定する特定のオプションは、どんな設定がその CPU に最適な
           コードを作成するように思えるかによって、コンパイラバージョンの間で
           異なります。必ずしも、実際のハードウェアの能力を反映するというわけ
           ではありません。個々のオプションを特定の値に設定したいなら、利用者
           は、-mcpu=970 -mno-altivec のように -mcpu オプションの後にそれを指
           定することができます。

           AIX では、-maltivec-mpowerpc64 オプションは、AIX にはこれらのオ
           プションの完全なサポートがないので、現在のところ -mcpu オプションに
           よって有効にも無効にもされません。利用者の環境で動作することを確信
           しているなら、個別にそれらを有効にするか、または無効にすることがで
           きます。

       -mtune=cpu_type
           マシンタイプ cpu_type のための命令スケジューリングパラメータを設定
           しますが、-mcpu=cpu_type が行うような、アーキテクチャタイプ、レジス
           タの使用法、またはニーモニックの選択を設定しません。-mcpu に間し
           て、cpu_type に対する同じ値は、-mtune に使用されます。両方が指定さ
           れるなら、生成されるコードは、-mcpu によって設定されたアーキテク
           チャ、レジスタ、とニーモニックを使用しますが、スケジューリングパラ
           メータは -mtune によって設定します。

       -mswdiv
       -mno-swdiv
           増加されたスループットのための機会を作成して、相互的な評価と繰り返
           しの改良点として、除算を計算するコードを生成します。この機能は、次
           を必要とします: 単精度のためのオプションの PowerPC Graphics 命令
           セットと倍精度のための FRE 命令、除算を仮定することは、ユーザの目に
           見えるトラップを生成することができません、ドメイン値は、無限、非正
           規化、または 0 の非正規化子を含みません。

       -maltivec
       -mno-altivec
           AltiVec 命令を使用する (使用しない) コードを生成します、また、
           AltiVec 命令セットへのより多くの直接アクセスを許す組み込み関数の使
           用を有効にします。また、利用者は、AltiVec ABI エンハンスメント (強
           化) で現在の ABI を調整するために -mabi=altivec を設定する必要もあ
           ります。

       -mvrsave
       -mno-vrsave
           AltiVec コードを生成するとき、VRSAVE 命令を生成します。

       -msecure-plt
           ld と ld.so が、実行形式と non-exec .plt と .got セクションがある共
           有ライブラリを構築することができるコードを生成します。これは、
           PowerPC 32-bit SYSV ABI オプションです。

       -mbss-plt
           ld.so に書き込まれる、BSS .plt セクションを使用し、書き込み可能で、
           かつ実行可能な .plt と .got セクションを必要とするコードを生成しま
           す。これは、PowerPC 32-bit SYSV ABI オプションです。

       -misel
       -mno-isel
           このスイッチは、ISEL 命令の生成を有効にするか、または無効にします。

       -misel=yes/no
           このスイッチは、非推奨です。代わりに -misel-mno-isel を使用しま
           す。

       -mspe
       -mno-spe
           このスイッチは、SPE simd 命令の生成を有効にするか、または無効にしま
           す。

       -mspe=yes/no
           このオプションは、非推奨です。代わりに -mspe-mno-spe を使用しま
           す。

       -mfloat-gprs=yes/single/double/no
       -mfloat-gprs
           このスイッチは、浮動小数点演算をサポートするアーキテクチャのための
           汎用レジスタでの浮動小数点演算の生成を有効にするか、または無効にし
           ます。

           引数 yes または single は、単精度浮動小数点操作の使用を有効にしま
           す。

           引数 double は、単精度と倍精度浮動小数点操作の使用を有効にします。

           引数 no は、汎用レジスタでの浮動小数点操作を無効にします。

           このオプションは現在、MPC854x でのみ利用可能です。

       -m32
       -m64
           (GNU/Linux を含んで) Darwinと SVR4 ターゲットの 32 ビットまたは、64
           ビット環境のためのコードを生成します。32 ビットの環境は、int、long
           とポインタを 32 ビットに設定し、PowerPC 変異型で実行するコードを生
           成します。64 ビットの環境は、int 32 ビット、long とポインタを 64
           ビットに設定し、-mpowerpc64 のような、PowerPC64 のためのコードを生
           成します。

       -mfull-toc
       -mno-fp-in-toc
       -mno-sum-in-toc
       -mminimal-toc
           あらゆる実行形式ファイルのために作成される、TOC (Table Of Contents)
           の生成を変更します。-mfull-toc オプションがデフォルトで選択されま
           す。その場合には、GCC は、利用者のプログラム内のそれぞれのユニーク
           な非自動変数の参照のために少なくとも 1 つの TOC のエントリを割り付
           けます。また、GCC は、浮動小数点定数を TOC に置きます。しかしなが
           ら、16,384 エントリだけが TOC で利用可能です。

           利用可能な TOC 空間がオーバフローしたと示すリンカエラーメッセージを
           受け取るなら、利用者は、-mno-fp-in-toc-mno-sum-in-toc オプショ
           ンで使用される TOC 空間の総量を減少させることができます。
           -mno-fp-in-toc は、GCC が TOC に浮動小数点定数を置くことを防ぎ、
           -mno-sum-in-toc によって、GCC は TOC にその合計を置くことの代わりに
           実行時にアドレスと定数の合計を計算するためのコードを強制的に生成し
           ます。利用者は、これらのオプションの 1 つまたは両方を指定することが
           できます。それぞれ、GCC は、TOC 空間を節約することを犠牲にしてわず
           かに遅くて大きなコードを生成します。

           これらのオプションの両方を指定するときでさえ、それでも TOC の空間を
           使い果たすなら、代わりに -mminimal-toc を指定します。このオプション
           によって、GCC は、各ファイルごとに 1 つの TOC エントリのみとしま
           す。このオプションを指定するとき、GCC は、より遅くてより大きいコー
           ドですが、極めて少ない TOC 空間を使用するコードを生成します。利用者
           は、より少ない頻繁で実行されるコードを含むファイルだけで、このオプ
           ションを使用したいかもしれません。

       -maix64
       -maix32
           64 ビットの AIX ABI と呼び出し規約を有効にします: 64 ビットポイン
           タ、64 ビット "long" タイプとインフラストラクチャ (基盤) は、それら
           をのサポートする必要とします。-maix64 を指定することは、-mpowerpc64-mpowerpc の意味を含み、一方 -maix32 は、64 ビットの ABI を無効
           にし、-mno-powerpc64 の意味を含みます。GCC は -maix32 をデフォルト
           とします。

       -mxl-compat
       -mno-xl-compat
           AIX 互換の ABI を使用するとき、IBM XL コンパイラセマンティクスによ
           り厳密に適合するコードを生成します。浮動小数点の引数を引数 FPR に追
           加されたスタック上でレジスタ保存領域 (RSA) を超えでプロトタイプされ
           た関数に渡します。128 ビット long double 値の最上位の double は、値
           を比較するとき、適切に丸められることを仮定しません、double に変換さ
           れます。long double をサポートするルーチンのために XL シンボル名を
           使用します。

           AIX 呼び出し規約は、拡張されましたが、宣言されるより少な引数でその
           引数のアドレスを取る関数を呼び出すあいまいな K&R C の場合の扱いは最
           初に文書化されませんでした。IBM XL コンパイラは、サブルーチンが最適
           化なしでコンパイルされるとき、スタックから RSA に適合しない浮動小数
           点引数をアクセスします。浮動小数点の引数を常にスタックに格納するこ
           とは、効率が悪くめったに必要でないので、このオプションは、デフォル
           トで有効にされず、最適化なしで IBM XL コンパイラによってコンパイル
           されたサブルーチンを呼び出すときだけ必要です。

       -mpe
           IBM RS/6000 SP Parallel Environment (PE) をサポートします。メッセー
           ジの引き渡しを使用するように書かれたアプリケーションをアプリケー
           ションが実行することを有効にする特別なスタートアップコードとリンク
           します。システムは、標準の位置 (/usr/lpp/ppe.poe/) にインストールさ
           れた PE がなければならないか、または specs ファイルを、適切なディレ
           クトリ位置を指定するために -specs= オプションで上書きしなければなり
           ません。Parallel Environment は、スレッドをサポートしないので、-mpe
           オプションと -pthread オプションは両立しません。

       -malign-natural
       -malign-power
           AIX、32 ビット Darwin と 64 ビットの PowerPC GNU/Linux では、オプ
           ション -malign-natural は、浮動小数点 double のような、ABI で定義さ
           れた大きいなタイプの整列を、それらの自然なサイズに基づいた境界に上
           書きします。オプション -malign-power は、ABI で指定された整列規則に
           従うように GCC に指示します。GCC は ABI で定義された標準の整列をデ
           フォルトとします。

           64 ビットの Darwin では、自然な整列は、デフォルトで、-malign-power
           は、サポートされていません。

       -msoft-float
       -mhard-float
           浮動小数点レジスタセットを使用しない (使用する) コードを生成しま
           す。-msoft-float オプションを使用するなら、ソフトウェア浮動小数点エ
           ミュレーションが提供され、リンクするとき、そのオプションを GCC に渡
           します。

       -mmultiple
       -mno-multiple
           複数ワード命令のロードと複数ワード命令の格納を使用する (使用しない)
           コードを生成します。これらの命令は、デフォルトで POWER システムで生
           成されて、PowerPC システムでは生成されません。プロセッサがリトルエ
           ンディアンモードであるとき、それらの命令が動作しないので、リトルエ
           ンディアンの PowerPC システムで -mmultiple を使用しないでください。
           例外は、リトルエンディアンモードでこの命令の使用を可能とする PPC740
           と PPC750 です。

       -mstring
       -mno-string
           複数のレジスタに保存するために、および小さいブロックを転送 (move)
           するために load string 命令と store string word 命令を使用する (使
           用しない) コードを生成します。これらの命令は、デフォルトで POWER シ
           ステムで生成されて、PowerPC システムでは生成されません。プロセッサ
           がリトルエンディアンモードであるとき、それらの命令が動作しないの
           で、リトルエンディアンの PowerPC システムで -mstring を使用しないで
           ください。例外は、リトルエンディアンモードでこの命令の使用を可能と
           する PPC740 と PPC750 です。

       -mupdate
       -mno-update
           ベースレジスタを計算されたメモリ位置のアドレスに更新する、load また
           は store 命令を使用する (使用しない) コードを生成します。これらの命
           令はデフォルトで生成されます。-mno-update を使用するなら、スタック
           ポインタが更新される時間と前のフレームのアドレスが格納される時間の
           間には小さい窓があります。これは、割り込みまたはシグナルを横断して
           スタックフレームを歩くコードが、壊れたデータを得るかもしれないこと
           を意味します。

       -mfused-madd
       -mno-fused-madd
           浮動小数点の乗算とアキュムレイト (accumulate) 命令を使用する (使用
           しない) コードを生成します。これらの命令は、ハードウェア浮動小数点
           が使用されているなら、デフォルトで生成されます。

       -mmulhw
       -mno-mulhw
           IBM 405 と 440 プロセッサでハーフワード乗算と乗算累積命令を使用する
           (使用ない) コードを生成します。それらのプロセッサをターゲットとする
           とき、これらの命令は、デフォルトで生成されます。

       -mdlmzb
       -mno-dlmzb
           IBM 405 と 440 プロセッサで文字列検索 dlmzb 命令を使用する (使用な
           い) コードを生成します。それらのプロセッサをターゲットとするとき、
           この命令は、デフォルトで生成されます。

       -mno-bit-align
       -mbit-align
           System V.4 と組み込みの PowerPC システムでは、ビットフィールドを含
           む構造体と共用体がビットフィールドのベースタイプに整列されることを
           強制しません (強制します)。

           例えば、長さ 1 の 8 つの "unsigned" ビットフィールドを含み、ほかは
           何もない構造体は、デフォルトで、4 バイト境界に整列され、4 バイトの
           サイズとなります。-mno-bit-align を使用することによって、構造体は、
           1 バイト境界に整列され、1 バイトのサイズとなります。

       -mno-strict-align
       -mstrict-align
           System V.4 と組み込みの PowerPC システムでは、整列されていないメモ
           リの参照は、システムによって扱われると仮定しません (仮定します)。

       -mrelocatable
       -mno-relocatable
           組み込みの PowerPC システムでは、プログラムが実行時に異なったアドレ
           スに再配置できる (できない) コードを生成します。任意のモジュールで
           -mrelocatable を使用するなら、一緒にリンクされるすべてのオブジェク
           トは、-mrelocatable または -mrelocatable-lib をつけてコンパイルされ
           なければなりません。

       -mrelocatable-lib
       -mno-relocatable-lib
           組み込みの PowerPC システムでは、プログラムが実行時に異なったアドレ
           スに再配置できる (できない) コードを生成します。-mrelocatable-lib
           をつけてコンパイルされたモジュールは、-mrelocatable-mrelocatable-lib なしでコンパイルされたモジュール、または
           -mrelocatable オプションをつけてコンパイルされたモジュールのいずれ
           かとリンクすることができます。

       -mno-toc
       -mtoc
           System V.4 と組み込みの PowerPC システムでは、レジスタ 2 がプログラ
           ムで使用されるアドレスを指すグローバル領域へのポインタを含むと仮定
           しません (仮定します)。

       -mlittle
       -mlittle-endian
           System V.4 と組み込みの PowerPC システムでは、リトルエンディアン
           モードのプロセッサのためのコードをコンパイルします。-mlittle-endian
           オプションは -mlittle と同じです。

       -mbig
       -mbig-endian
           System V.4 と組み込みの PowerPC システムでは、ビッグエンディアン
           モードのプロセッサのためのコードをコンパイルします。-mbig-endian オ
           プションは -mbig と同じです。

       -mdynamic-no-pic
           Darwin と Mac OS X システムでは、再配置可能でないが、外部参照が再配
           置可能であるようにコードをコンパイルします。結果のコードは、アプリ
           ケーションに適していますが、共有ライブラリには適していません。

       -mprioritize-restricted-insns=priority
           このオプションは 2 番目のスケジューリングパスの間にディスパッチス
           ロットの制限された命令に割り当てられる優先順位を制御します。引数
           priority は、ディスパッチスロット制限命令に
           no/highest/second-highest (なし/最高/2番目に最高) 優先順位を割り当
           てるための値 0/1/2 を取ります。

       -msched-costly-dep=dependence_type
           このオプションは、指示スケジューリングの間、どの依存関係がターゲッ
           トによってコストがかかると考えられるかを制御します。引数
           dependence_type は次の値の 1 つを取ります: no: 依存状態はコストがか
           かりません。all: すべての依存状態はコストがかかります。
           true_store_to_load: 格納 (store) からロード (load) の真の依存状態は
           コストがかかります。store_to_load: 格納 (store) からロード (load)
           の任意の依存状態はコストがかかります。number: レイテンシ (latency)
           >= number である任意の依存状態はコストがかかります。

       -minsert-sched-nops=scheme
           このオプションは、どの nop 挿入スキームが 2 番目のスケジューリング
           パスの間に使用されるかを制御します。引数 scheme は次の値の 1 つを取
           ります: no: nop を挿入しません。pad: スケジューラのグループ分けにし
           たがって、空の発行スロット (vacant issue slot) がある、任意のディス
           パッチグループの nop を埋めます。regroup_exact: コストがかかる依存
           関係 insns を別々のグループに強制的に nop を挿入します。予測される
           プロセッサのグループ分けにしたがって、新しいグループに insn を強制
           するために必要である、ちょうど同じくらい多くの nop を挿入します。
           number: コストがかかる依存関係の insn を強制的に別々のグループに
           nop を挿入します。新しいグループに insn を強制的に number 個の nop
           を挿入します。

       -mcall-sysv
           System V.4 と組み込みの PowerPC システムでは、the March 1995 draft
           of the System V Application Binary Interface, PowerPC processor
           supplement (1995 年 3 月の草稿 System V アプリケーションバイナリイ
           ンタフェース、PowerPC プロセッサ補足) を順守するする呼び出し規約を
           使用するコードをコンパイルします。両者が powerpc-*-eabiaix を使用し
           て GCC を設定しなかったなら、これがデフォルトです。

       -mcall-sysv-eabi
           -mcall-sysv-meabi オプションの両方を指定します。

       -mcall-sysv-noeabi
           -mcall-sysv-mno-eabi オプションの両方を指定します。

       -mcall-solaris
           System V.4 と組み込みの PowerPC システムでは、Solaris オペレーティ
           ングシステムのためのコードをコンパイルします。

       -mcall-linux
           System V.4 と組み込みの PowerPC システムでは、Linux ベースの GNU シ
           ステムのためのコードをコンパイルします。

       -mcall-gnu
           System V.4 と組み込みの PowerPC システムでは、Hurd ベースの GNU シ
           ステムのためのコードをコンパイルします。

       -mcall-netbsd
           System V.4 と組み込みの PowerPC システムでは、NetBSD オペレーティン
           グシステムのためのコードをコンパイルします。

       -maix-struct-return
           (AIX ABI によって指定されるように) メモリですべての構造体を返しま
           す。

       -msvr4-struct-return
           (SVR4 ABI によって指定されるように) レジスタで 8 バイトより小さい構
           造体を返します。

       -mabi=abi-type
           特定の拡張子で現在の ABI を拡張するか、またはそのような拡張子を削除
           します。有効な値は、altivec, no-altivec, spe, no-spe,
           ibmlongdouble, ieeelongdouble です。

       -mabi=spe
           SPE ABI 拡張子で現在の ABI を拡張します。これは、デフォルトの ABI
           を変更しないで、代わりに、現在の ABI に SPE ABI 拡張子を追加しま
           す。

       -mabi=no-spe
           現在の ABI のための Booke SPE ABI 拡張子を無効にします。

       -mabi=ibmlongdouble
           現在の ABI を変更して、IBM 拡張精度 long double を使用します。これ
           は、PowerPC 32 ビット SYSV ABI オプションです。

       -mabi=ieeelongdouble
           現在の ABI を変更して、IEEE 拡張精度 long double を使用します。これ
           は、PowerPC 32 ビット Linux ABI オプションです。

       -mprototype
       -mno-prototype
           System V.4 と組み込みの PowerPC システムでは、可変引数関数へのすべ
           ての呼び出しが適切にプロトタイプ宣言されていると仮定します。そうで
           なければ、コンパイラは、浮動小数点値が、可変引数を取る関数の場合に
           浮動小数点レジスタで渡されるかどうかを示すために、条件コードレジス
           タ (CR) のビット 6 をセットするかクリアするためにすべてのプロトタイ
           プ宣言されていない呼び出しの前に、命令を挿入しなければなりません。
           -mprototype をつけると、プロトタイプ宣言された可変引数関数への呼び
           出しのみが、このビットをセットするか、またはクリアします。

       -msim
           組み込みの PowerPC システムでは、スタートアップモジュールが
           sim-crt0.o と呼ばれ、標準の C ライブラリが libsim.alibc.a であ
           ることを仮定します。これは、powerpc-*-eabisim 設定のデフォルトで
           す。

       -mmvme
           組み込みの PowerPC システムでは、スタートアップモジュールが crt0.o
           と呼ばれ、標準の C ライブラリが libmvme.alibc.a であることを仮
           定します。

       -mads
           組み込みの PowerPC システムでは、スタートアップモジュールが crt0.o
           と呼ばれ、標準の C ライブラリが libads.alibc.a であることを仮定
           します。

       -myellowknife
           組み込みの PowerPC システムでは、スタートアップモジュールが crt0.o
           と呼ばれ、標準の C ライブラリが libyk.alibc.a であることを仮定
           します。

       -mvxworks
           System V.4 と組み込みの PowerPC システムでは、利用者が VxWorks シス
           テムのためにコンパイルすることを指定します。

       -mwindiss
           利用者が WindISS シミュレーション環境のためにコンパイルしていると指
           定します。

       -memb
           組み込みの PowerPC システムでは、eabi 拡張再配置が使用されているこ
           とを示すために ELF フラグヘッダの PPC_EMB ビットを設定します。

       -meabi
       -mno-eabi
           System V.4 と組み込みの PowerPC システムでは、System V.4 仕様の 1
           組の変更である the Embedded Applications Binary Interface (eabi)
           (組み込みアプリケーションバイナリインタフェース) を順守します (順守
           しません)。-meabi を選択することは、スタックが 8 バイト境界に整列さ
           れ、関数 "__eabi" が、eabi 環境をセットアップするために "main" から
           呼び出され、-msdata オプションが 2 つの別々のスモール data 領域を指
           すために "r2" と "r13" の両方を使用できることを意味します。
           -mno-eabi を選択することは、スタックが 16 バイト境界に整列され、
           "main" から初期化関数を呼び出さず、-msdata オプションが単一のスモー
           ル data 領域を指すために "r13" のみを使用することを意味します。
           -meabi オプションは、利用者が powerpc*-*-eabi* オプションの 1 つを
           使用して GCC を設定するなら、デフォルトでオンです。

       -msdata=eabi
           System V.4 と組み込みの PowerPC システムでは、小さな初期化された
           "const" グローバルと静的データをレジスタ "r2" よって指される
           .sdata2 セクションに置きます。小さな初期化された非-"const" グローバ
           ルと静的データをレジスタ "r13" よって指される .sdata セクションに置
           きます。小さな初期化されていないグローバルと静的データを .sdata セ
           クションに隣接した .sbss セクションに置きます。-msdata=eabi オプ
           ションは -mrelocatable オプションと両立しません。また、-msdata=eabi
           オプションは -memb オプションも設定します。

       -msdata=sysv
           System V.4 と組み込みの PowerPC システムでは、小さなグローバルと静
           的なデータをレジスタ "r13" よって指される .sdata セクションに置きま
           す。小さな初期化されていないグローバルと静的データを .sdata セク
           ションに隣接した .sbss セクションに置きます。-msdata=sysv オプショ
           ンは -mrelocatable オプションと両立しません。

       -msdata=default
       -msdata
           System V.4 と組み込みの PowerPC システムでは、-meabi が使用されてい
           るなら、-msdata=eabi と同じコードをコンパイルし、そうでなければ、
           -msdata=sysv と同じコードをコンパイルます。

       -msdata-data
           System V.4 と組み込みの PowerPC システムでは、小さなグローバルデー
           タを .sdata セクションに置きます。小さな初期化されていないグローバ
           ルデータを .sbss セクションに置きます。しかしながら、小さいデータを
           アドレス付けするレジスタ "r13" を使用しません。他の -msdata オプ
           ションが使用されていないなら、これはデフォルトの振る舞いです。

       -msdata=none
       -mno-sdata
           組み込みの PowerPC システムでは、すべての初期化されているグローバル
           と静的データを .data セクションに置き、すべての初期化されていない
           データを .bss セクションに置きます。

       -G num
           組み込みの PowerPC システムでは、num バイト以下のグローバルと静的項
           目を、通常の data または bss セクションの代わりに、スモール data ま
           たは bss セクションに置きます。デフォルトでは、num は 8 です。ま
           た、-G num スイッチもリンカに渡されます。すべてのモジュールは、同じ
           -G num 値でコンパイルされるべきです。

       -mregnames
       -mno-regnames
           System V.4 と組み込みの PowerPC システムでは、シンボル形式を使用し
           てアセンブリ言語出力にレジスタ名を出力します (出力しません)。

       -mlongcall
       -mno-longcall
           すべての呼び出しは、より長いより高価な呼び出しシーケンスが必要であ
           るように、far away (より遠い) であると、デフォルトで仮定します。こ
           れは、現在の位置から 32 メガバイト (33,554,432 ) より遠い呼び出しに
           必要です。コンパイラが、呼び出しがそんなに遠い (far away) はずがな
           いことを知っているなら、ショートコール (short call) が生成されま
           す。"shortcall" 関数属性、または "#pragma longcall(0)" によって、こ
           の設定を上書きすることができます。

           いくつかのリンカは、範囲外の呼び出しを検出して、オンザフライで (複
           数の処理をまとめて) グルー (glue) コードを生成することができます。
           これらのシステムでは、ロング呼び出しは不要で、より遅いコードを生成
           します。これを書いている時点で、AIX リンカは、PowerPC/64 のための
           GNU リンカのように、これを行うことができます。なお、この特徴を、32
           ビットの PowerPC システムのための GNU リンカに追加することが計画さ
           れています。

           Darwin/PPC システムで、"#pragma longcall" は、"jbsr callee, L42" と
           "branch island" (glue code) を生成します。2 つのターゲットアドレス
           は、呼び出し先と "branch island" を表します。Darwin/PPC リンカは、
           最初のアドレスの方を好みますが、PPC "bl" 命令が直接呼び出し先に到達
           するなら、"bl callee" を生成します。そうでなければ、リンカは、
           "branch island" を呼び出すために "bl L42" を生成します。"branch
           island" は、呼び出し関数の本体に付け加えられます。それは、呼び出し
           先の完全な 32 ビットのアドレスを計算して、そこへジャンプします。

           Mach-O (Darwin) システムでは、このオプションは、コンパイラに、すべ
           ての直接呼び出しのためのグルー (glue) を出力するするように指示し、
           Darwin リンカは、それを使用するか破棄するかどうかを決定します。

           将来は、リンカがグルーを生成させることが知られているとき、私たち
           は、GCC がすべてのロング呼び出し (longcallO 仕様を無視するようにす
           るかもしれません。

       -pthread
           pthreads ライブラリによるマルチスレッド化のサポートを追加します。こ
           のオプションはプリプロセッサとリンカの両方のためのフラグを設定しま
           す。

       S/390zSeries オプション

       これらは S/390 と zSeries アーキテクチャのために定義された -m オプショ
       ンです。

       -mhard-float
       -msoft-float
           浮動小数点演算のためのハードウェア浮動小数点命令とレジスタを使用し
           ます (使用しません)。-msoft-float が指定されるとき、libgcc.a の関数
           は、浮動小数点演算を実行するために使用されます。-mhard-float が指定
           されるとき、コンパイラは IEEE 浮動小数点命令を生成します。これはデ
           フォルトです。

       -mlong-double-64
       -mlong-double-128
           これらのスイッチは、"long double" タイプのサイズを制御します。64
           ビットのサイズでは、"long double" タイプは、"double" タイプと同等に
           なります。これは、デフォルトです。

       -mbackchain
       -mno-backchain
           呼び出し先のスタックフレームに、逆方向のチェーン (backchain) のポイ
           ンタとして呼び出し側のフレームのアドレスを格納します (格納しませ
           ん)。逆方向のチェーンは、DWARF-2 呼び出しフレーム情報を理解していな
           いツールを使用してデバッグを許可する必要があります。
           -mno-packed-stack が採用されるときに、逆方向のチェーンのポインタ
           は、スタックフレームの下端に格納されます。-mpacked-stack が採用され
           るときに、逆方向のチェーンは、96/160 バイトのレジスタ退避領域の最上
           部のワードに置かれます。

           一般的に、-mbackchain でコンパイルされたコードは、-mmo-backchain で
           コンパイルされたコードと呼び出し互換性があります。しかしながら、通
           常、デバッグ目的のための逆方向のチェーンの使用は、すべてのバイナリ
           が、-mbackchain で構築される必要があります。-mbackchain,
           -mpacked-stack-mhard-float の組み合わせは、サポートされないこと
           に注意してください。linux カーネルを構築するためには、-msoft-float
           を使用します。

           デフォルトは、逆方向のチェーンを維持しないことです。

       -mpacked-stack
       -mno-packed-stack
           パックされたスタックレイアウトを使用します (使用しません)。
           -mno-packed-stack が指定されるとき、コンパイラは、デフォルト目的の
           ためだけに 96/160 バイトのレジスタ退避領域のすべてのフィールドを使
           用します。未使用のフィールドは、まだスタック空間を取っています。
           -mpacked-stack が指定されるとき、レジスタ保存スロットは、レジスタ退
           避領域の先頭で高密度にパックされます。未使用の空間は、利用可能なス
           タック空間のより効率的な使用を考慮して、他の目的のために再利用され
           ます。しかしながら、また、-mbackchain が採用されるときに、退避領域
           の最上のワードは、逆方向のチェーン (backchain) を格納するために常に
           使用され、返りアドレスのレジスタは、逆方向のチェーンの下の 2 つの
           ワードに常に保存されます。

           スタックフレーム逆方向のチェーン (backchain) が使用されないならば、
           -mpacked-stack で生成されたコードは、-mno-packed-stack で生成された
           コードと呼び出し互換性があります。S/390 または zSeries のための GCC
           2.95 のいくつかの非 FSF リリースは、デバッグ目的だけではなく、ラン
           タイム時にスタックフレーム逆方向のチェーンを使用するコードを生成す
           ることに注意してください。そのようなコードは、-mpacked-stack でコン
           パイルされたコードと呼び出し互換性がありません。また、-mbackchain,
           -mpacked-stack-mhard-float の組み合わせは、サポートされないこと
           に注意してください。linux カーネルを構築するためには、-msoft-float
           を使用します。

           デフォルトは、パックされたスタックレイアウトを使用しないことです。

       -msmall-exec
       -mno-small-exec
           サブルーチン呼び出しを行うために "bras" 命令を使用するコードを生成
           します (または生成しません)。これは、実行形式の合計のサイズが 64k
           を超えない場合にのみ、確実に動作します。デフォルトは、この制限がな
           い、"basr" 命令を代わりに使用することです。

       -m64
       -m31
           -m31 が指定されるとき、S/390 ABI のための GNU/Linux に適合するコー
           ドを生成します。-m64 が指定されるとき、zSeries ABI のための
           GNU/Linux に適合するコードを生成します。これによって、特に GCC は
           64 ビット命令を生成することができます。s390 ターゲットのためのデ
           フォルトは -m31 ですが、一方 s390x ターゲットのデフォルトは -m64 で
           す。

       -mzarch
       -mesa
           -mzarch が指定されるとき、z/Architecture で利用可能な命令を使用する
           コードを生成します。-mesa が指定されるとき、ESA/390 で利用可能な命
           令を使用するコードを生成します。-mesa-m64 で利用可能でないこと
           に注意してください。S/390 ABI のための GNU/Linux に適合するコードを
           生成するとき、デフォルトは -mesa です。zSeries ABI のための
           GNU/Linux に適合するコードを生成するとき、デフォルトは -mzarch で
           す。

       -mmvcle
       -mno-mvcle
           ブロック転送 (move) を実行するために "mvcle" 命令を使用するコードを
           生成します (または生成しません)。-mno-mvcle が指定されるとき、代わ
           りに "mvc" ループを使用します。サイズに対する最適化をしないなら、こ
           れはデフォルトです。

       -mdebug
       -mno-debug
           コンパイルするとき、追加デバッグ情報を印刷します (または印刷しませ
           ん)。デフォルトは、デバッグ情報を印刷しないことです。

       -march=cpu-type
           特定のプロセッサタイプを代表するシステムの名前である、cpu-type で実
           行するコードを生成します。cpu-type のための利用可能な値は、g5, g6,
           z900z990 です。z/Architecture 利用可能な命令を使用するコードを
           生成するとき、デフォルトは -march=z900 です。そうでなければ、デフォ
           ルトは -march=g5 です。

       -mtune=cpu-type
           ABI と利用可能な命令のセットを除いて、生成するコードに関して適用可
           能なすべての cpu-type を調整します。cpu-type 値のリストは、-march
           に対するもと同じです。デフォルトは -march のために使用する値です。

       -mtpf-trace
       -mno-tpf-trace
           オペレーティングシステムでルーチンをトレースするために TPF OS 特有
           のブランチを追加する (追加しない) コードを生成します。このオプショ
           ンは、TPF OS のためにコンパイルするときさえ、デフォルトでオフです。

       -mfused-madd
       -mno-fused-madd
           浮動小数点の乗算とアキュムレイト (accumulate) 命令を使用する (使用
           しない) コードを生成します。これらの命令は、ハードウェア浮動小数点
           が使用されているなら、デフォルトで生成されます。

       -mwarn-framesize=framesize
           現在の関数が与えられたフレームサイズを超えているなら、警告を出力し
           ます。これは、コンパイル時にチェックされるので、プログラムが実行す
           るとき、実際の問題となることはありません。最も可能性があるスタック
           オーバフローを引き起こす関数を識別することを目的としています。制限
           されたスタックサイズのある環境での使用で役に立つちます、例えば、
           linux カーネル。

       -mwarn-dynamicstack
           関数が alloca を呼び出すか、または動的なサイズの配列を使用するな
           ら、警告を出力します。一般的に、これは制限されたスタックサイズがあ
           る悪い考えです。

       -mstack-guard=stack-guard
       -mstack-size=stack-size
           これらの引数は、常に同時に使用されなければなりません。それらが存在
           しているなら、s390 バックエンドは、スタックサイズが、stack-size よ
           り上の stack-guard バイトであるなら (s390 のスタックが下の方に増え
           ることを覚えていてください)、トラップをトリガする関数プロローグで追
           加命令を出力します。これらのオプションは、スタックオーバフロー問題
           をデバッグすることを助けるのに使用されることを目的としています。さ
           らに、出力されたコードによって、ほとんどオーバヘッドがなく、した
           がって、より大きい性能低下のないシステムのような生産に使用すること
           ができます。与えられた値は、正確な 2 の冪乗でなければならず、stack-
           size は、64k を超えない stack-guard より大きくなければなりません。
           効率的になるように、特別のコードは、スタックが stack-size よって与
           えられた値に整列されたアドレスで始動するという仮定を行います。

       Score オプション

       これらのオプションは、Score 実装のために定義されています:

       -meb
           ビッグエンディアンモードのためのコードをコンパイルします。これは、
           デフォルトです。

       -mel
           リトルエンディアンモードのためのコードをコンパイルします。

       -mnhwloop
           bcnz 命令の生成を無効にします。

       -muls
           整列されていないロードと格納命令の生成を有効にします。

       -mmac
           乗累算命令の使用を有効にします。デフォルトで無効にされます。

       -mscore5
           ターゲットアーキテクチャとして SCORE5 を指定します。

       -mscore5u
           ターゲットアーキテクチャの SCORE5U を指定します。

       -mscore7
           ターゲットアーキテクチャとして SCORE7 を指定します。これは、デフォ
           ルトです。

       -mscore7d
           ターゲットアーキテクチャとして SCORE7D を指定します。

       SH オプション

       これらの -m オプションは、SH 実装のために定義されています:

       -m1 SH1 のためのコードを生成します。

       -m2 SH2 のためのコードを生成します。

       -m2e
           SH2e のためのコードを生成します。

       -m3 SH3 のためのコードを生成します。

       -m3e
           SH3e のためのコードを生成します。

       -m4-nofpu
           浮動小数点ユニットなしの SH4 のためのコードを生成します。

       -m4-single-only
           単精度演算のみをサポートする浮動小数点ユニットがある SH4 のための
           コードを生成します。

       -m4-single
           デフォルトで単精度モードの浮動小数点ユニットを仮定する SH4 のための
           コードを生成します。

       -m4 SH4 のためのコードを生成します。

       -m4a-nofpu
           浮動小数点ユニットが使用されていないような方法で、SH4al-dsp または
           SH4a のためのコードを生成します。

       -m4a-single-only
           倍精度浮動小数点操作が使用されていないような方法で、SH4a のための
           コードを生成します。

       -m4a-single
           浮動小数点ユニットがデフォルトで単精度モードであると仮定する SH4a
           のためのコードを生成します。

       -m4a
           SH4a のためのコードを生成します。

       -m4al
           暗黙的に -dsp をアセンブラに渡すことを除いて、-m4a-nofpu と同じで
           す。GCC は、現在のところ、少しもも DSP 命令を生成しません。

       -mb ビッグエンディアンモードでプロセッサのためにコードをコンパイルしま
           す。

       -ml リトルエンディアンモードでプロセッサのためにコードをコンパイルしま
           す。

       -mdalign
           double を 64 ビット境界に整列します。これが呼び出し規約を変更し、そ
           の結果、利用者が最初に、-mdalign でそれを再コンパイルしないなら、標
           準 C ライブラリのいくつかの関数は動作しないことに注意してください。

       -mrelax
           可能であるなら、リンク時に、いくつかのアドレス参照を短くします。リ
           ンカオプション -relax を使用します。

       -mbigtable
           "switch" テーブルに 32 ビットのオフセットを使用します。デフォルト
           は、16 ビットのオフセットを使用します。

       -mfmovd
           命令 "fmovd" の使用を有効にします。

       -mhitachi
           Renesas によって定義された呼び出し規約に従います。

       -mrenesas
           Renesas によって定義される呼び出し規約に従います。

       -mno-renesas
           Renesas 規約が利用可能になる前に GCC のために定義される呼び出し規約
           に従います。このオプションは、sh-symbianelf 以外の SH toolchain の
           すべてのターゲットのためのデフォルトです。

       -mnomacsave
           たとえ -mhitachi が与えられても、"MAC" レジスタを call-clobbered と
           マークします。

       -mieee
           浮動小数点コードの IEEE コンプライアンス (順守) を強めます。現在の
           ところ、これは -fno-finite-math-only と同等です。16 ビットの SH
           opcodes を生成するとき、IEEE-適合を取得することは、あらゆる浮動小数
           点比較で余分なオーバヘッドを被る NAN / 無限の比較のための結果となり
           ます、したがって、デフォルトは、-ffinite-math-only に設定されます。

       -misize
           アセンブリコードの命令サイズと位置をダンプします。

       -mpadstruct
           このオプションは古くて推奨されません。SH ABI と互換性がありません
           が、構造体を 4 バイトの倍数にパディング (詰め物) します。

       -mspace
           速度の代わりにサイズを最適化します。-Os を暗黙に定義します。

       -mprefergot
           位置に依存しないコードを生成するとき、Procedure Linkage Table の代
           わりに Global Offset Table を使用して関数呼び出しを出力します。

       -musermode
           トランポリン (trampoline) を修理した後に、命令キャッシュエントリを
           無効にするためにライブラリ関数呼び出しを生成します。このライブラリ
           関数呼び出しは、メモリアドレス空間全体に書き込むことができると仮定
           しません。これは、ターゲットが "sh-*-linux*" であるとき、デフォルト
           です。

       -multcost=number
           乗算の insn を仮定する費用を設定します。

       -mdiv=strategy
           SHmedia コードの使用に除算戦略を設定します。strategy (戦略) は、次
           の 1 つでなければなりません: call, call2, fp, inv, inv:minlat,
           inv20u, inv20l, inv:call, inv:call2, inv:fp。"fp" は、浮動小数点の
           操作を実行します。これは、非常に高い待ち時間 (latency) があります
           が、ほんのいくつかの命令を必要とするので、利用者のコードに、コンパ
           イラが他の命令と共に浮動小数点命令をスケジュールすることができる十
           分簡単にセキュリティホールとなる ILP があるなら、それは良い選択であ
           るかもしれません。0 除算は、浮動小数点例外を引き起こします。"inv"
           は、除数の逆を計算するために整数操作を使用して、次に、逆がある被除
           数を掛けます。この戦略によって、逆の計算の cse と hoisting ができま
           す。0 除算は、不特定の結果を計算しますが、トラップしません。
           "inv:minlat" は、cse / hoisting の機会が見つからないところで、"inv"
           の変異型であるか、または全体の操作が同じ場所で hoist されているな
           ら、逆の計算の最後のステージが、もう少しの命令を使用することを犠牲
           にして、総合的な待ち時間 (latency) を減少させるために最後の乗算で結
           び付けられ、その結果、他のコードで、より少ないスケジューリングの機
           会を提供します。"call" は、通常、inv:minlat 戦略を実装するライブラ
           リ関数を呼び出します。これは、m5-*media-nofpu コンパイルのための高
           いコード密度を与えます。"call2" は、cse / コード hoisting 最適化へ
           のロードされたポインタを公開する、検索テーブルへのポインタが既に
           セットアップされたと仮定する同じライブラリ関数の異なったエントリポ
           イントを使用します。"inv:call", "inv:call2" と "inv:fp" は、すべて
           初期のコードを生成する "inv" アルゴリズムを使用しますが、コードが最
           適化されないままで残っているなら、それぞれ "call", "call2" または
           "fp" 戦略に戻ります。0 除算の潜在的なトラップの副作用は、別々の命令
           で扱われるので、すべての整数命令が hoisted out されますが、副作用の
           ためのマーカは、それがあるところに留まることが可能であることに注意
           してください。fp 操作または call との再結合の場合は、可能ではありま
           せん。"inv20u" と "inv20l" は、"inv:minlat" 戦略の変異型です。逆さ
           の計算が、乗算から切り離される場合には、この場合の操作の数をスキッ
           プするテストを挿入することによって、それらは、被除数が 20 ビット
           (適切なところでのプラス記号) に収まる除算をスピードアップします。こ
           のテストは、より大きな被除数の場合にスピードを落します。inv20u は、
           そのような小さい被除数の場合がありそうもないと仮定し、inv20l は、そ
           れがありそうであると仮定します。

       -mdivsi3_libfunc=name
           32 ビット符号付き除算のために使用されるライブラリ関数の名前を name
           に設定します。これは、call と inv:call 除算戦略で使用される名前だけ
           に影響し、コンパイラは、いまだに、まるでこのオプションが存在してい
           ないかのように、入力/出力/上書き (input/output/clobbered) レジスタ
           の同じセットを予期します。

       -madjust-unroll
           ターゲットレジスタを thrash することを避けるために、unrolling を抑
           制します。このオプションは、gcc コードベースが、
           TARGET_ADJUST_UNROLL_MAX ターゲットフックをサポートする場合にだけ、
           効果があります。

       -mindexed-addressing
           SHmedia32/SHcompact のためのインデックス付けされたアドレッシング
           モードの使用を有効にします。ハードウェア、および/または、OS が、イ
           ンデックス付けされたアドレッシングモードのために 32 ビットラップア
           ラウンド (wrap-around) セマンティクスを実装する場合にだけ、これは安
           全です。アーキテクチャによって、OS が、32 ビットアドレッシングを得
           ることを必要としているなら、64 ビット MMU があるプロセッサを実装す
           ることができますが、現在のハードウェア実装は、これをサポートしない
           し、32 ビット ABI を使用するために、インデックス付けされたアドレッ
           シングモードを安全にするいかなる他の方法もないので、デフォルトは、
           -mno-indexed-addressing です。

       -mgettrcost=number
           gettr 命令のために仮定された費用を number に設定します。-mpt-fixed
           が採用されるなら、デフォルトは、2 で、そうでなければ、100 です。

       -mpt-fixed
           pt*  命令がトラップしないと仮定します。これは、一般的によりよくスケ
           ジュールされているコードを生成しますが、現在のハードウェアで危険で
           す。現在のアーキテクチャ定義は、3 で論理和 (and) されたターゲットが
           3 であるとき、ptabs と ptrel トラップられると書いてあります。これに
           は、ブランチの前で ptabs / ptrel をスケジュールするか、またはループ
           の外でそれを hoist することを危険にするという意図的でない効果があり
           ます。例えば、プログラムのスタートアップでコンストラクタを実行する
           libgcc の一部、__do_global_ctors は、-1 のよって区切られるリストで
           関数を呼び出します。-mpt-fixed オプションで、ptabs は、-1 に対して
           テストする前に行われます。それは、すべてのコンストラクタが、少し迅
           速に実行されることを意味しますが、ループがリストの終わりに来ると
           き、ptabs がターゲットレジスタに -1 をロードするので、プログラム
           は、クラッシュします。現在の構造仕様を実装する任意のハードウェアに
           対して、このオプションが危険であるので、デフォルトは、-mno-pt-fixed
           です。ユーザが、-mgettrcost で特別のコストを指定しないなら、
           -mno-pt-fixed は、また -mgettrcost=100 の意味を含みます。これは、普
           通の整数を格納するためにターゲットレジスタを使用するレジスタ割り付
           けを阻止します。

       -minvalid-symbols
           シンボルが、無効であるかもしれないと仮定します。コンパイラによって
           生成される普通の関数のシンボルは、movi/shori/ptabs または
           movi/shori/ptrel でロードするために常に有効になりますが、アセンブ
           ラ、および/または、リンカのトリックで、ptabs / ptrel がトラップする
           シンボルを生成することは可能です。このオプションは、-mno-pt-fixed
           が採用されるときのみ、重要です。そして、それは、クロスベーシックブ
           ロック (cross-basic-block) cse、hoisting とシンボルロードのほとんど
           のスケジューリングを防ぎます。デフォルトは、-mno-invalid-symbols で
           す。

       SPARC オプション

       これらの -m オプションは SPARC でサポートされています:

       -mno-app-regs
       -mapp-regs
           SPARC SVR4 ABI がアプリケーションのために予約されているグローバルレ
           ジスタ 2 から 4 を使用する出力を生成するために、-mapp-regs を指定し
           ます。これは、デフォルトです。

           いくらかの性能の損失を犠牲にして、完全な SVR4 ABI に準拠するため
           に、-mno-app-regs を指定します。利用者は、このオプションをつけてラ
           イブラリとシステムソフトウェアをコンパイルするべきです。

       -mfpu
       -mhard-float
           浮動小数点命令を含む出力を生成します。これはデフォルトです。

       -mno-fpu
       -msoft-float
           浮動小数点のためのライブラリ呼び出しを含む出力を生成します。警告:
           必要なライブラリは、すべての SPARC ターゲットで利用可能ではありませ
           ん。通常、マシンの普通の C コンパイラの機能は使用されますが、クロス
           コンパイルで直接行うことはできません。利用者は、利用者自身でクロス
           コンパイルのための適切なライブラリ関数を準備しなければなりません。
           組み込みターゲット sparc-*-aoutsparclite-*-* は、ソフトウェア浮
           動小数点サポートを提供します。

           -msoft-float は、出力ファイルにおける呼び出し規約を変更します。した
           がって、利用者がこのオプションですべてのプログラムをコンパイルする
           場合にだけ、役に立ちます。特に、利用者は、これを動作するために GCC
           とともに備えられているライブラリ libgcc.a-msoft-float をつけて
           コンパイルする必要があります、

       -mhard-quad-float
           クワッドワード (long double) 浮動小数点命令を含む出力を生成します。

       -msoft-quad-float
           クワッドワード (long double) 浮動小数点命令のライブラリ呼び出しを含
           む出力を生成します。呼び出される関数は、SPARC ABI で指定されたもの
           です。これはデフォルトです。

           これが書かれている時点で、クワッドワード浮動小数点命令のハードウェ
           アサポートがある SPARC の実装はありません。それらは、すべて、これら
           の命令の 1 つのためのトラップハンドラを呼び出し、次に、トラップハン
           ドラは、命令の効果をエミュレートします。トラップハンドラのオーバ
           ヘッドのために、これは ABI ライブラリルーチンを呼び出すより、はるか
           に遅くなります。したがって、-msoft-quad-float オプションがデフォル
           トです。

       -mno-unaligned-doubles
       -munaligned-doubles
           double には 8 バイトの整列があると仮定します。これはデフォルトで
           す。

           -munaligned-doubles をつけると、GCC は、double が別のタイプに含まれ
           ているか、または絶対アドレスがある場合のみ、double が 8 バイトで整
           列されると仮定します。そうでなければ、それらは 4 バイトで整列される
           と仮定します。このオプションを指定することで、他のコンパイラによっ
           て生成されるコードのいくつかのまれな互換性の問題を避けられます。特
           に浮動小数点コードの性能の損失をもたらすので、デフォルトではありま
           せん。

       -mno-faster-structs
       -mfaster-structs
           -mfaster-structs をつけると、コンパイラは、構造体が 8 バイトで整列
           されると仮定します。これは構造体の代入で、2 倍の "ld" と "st" ペア
           の代わりに、コピーのために "ldd" と "std" 命令の組を使用することを
           有効にします。しかしながら、この変更された整列の使用は、直接 SPARC
           ABI に違反します。したがって、開発者が、それらの結果のコードが ABI
           の規則と直接一致しないことを認めるターゲットでの使用のみを対象とし
           ています。

       -mimpure-text
           -shared に追加して使用される -mimpure-text は、共有オブジェクトをリ
           ンクするとき、-z text をリンカに渡さないようにコンパイラに伝えま
           す。このオプションを使用して、利用者は位置依存コードを共有オブジェ
           クトにリンクすることができます。

           -mimpure-text は "relocations remain against allocatable but non
           writable sections" (再配置は割り付け可能だが、書き込み不可能なセク
           ションに対して残っている) リンカエラーメッセージを抑制します。しか
           しながら、必要な再配置はトリガ (引き金) となる、コピーオンライト
           (copy-on-write) で、共有オブジェクトは実際にプロセス間で共有されま
           せん。-mimpure-text を使用することの代わりに、利用者は -fpic または
           -fPIC をつけてすべてのソースコードをコンパイルするべきです。

           このオプションは SunOS と Solaris でのみ利用可能です。

       -mcpu=cpu_type
           マシンタイプ cpu_type のための命令セット、レジスタセットと命令スケ
           ジューリングパラメータを設定します。cpu_type のためにサポートされて
           いる値は、v7, cypress, v8, supersparc, sparclite, f930, f934,
           hypersparc, sparclite86x, sparclet, tsc701, v9, ultrasparc,
           ultrasparc3, and niagara です。

           デフォルトの命令スケジューリングパラメータは、実装ではなく、アーキ
           テクチャを選択する値に使用されます。これらは、v7, v8, sparclite,
           sparclet, v9 です。

           ここに、それぞれのサポートされたアーキテクチャとそれらのサポートさ
           れた実装のリストを示します。

                       v7:             cypress
                       v8:             supersparc, hypersparc
                       sparclite:      f930, f934, sparclite86x
                       sparclet:       tsc701
                       v9:             ultrasparc, ultrasparc3, niagara

           デフォルトで (別の方法で設定されないなら)、GCC は SPARC アーキテク
           チャの V7 バリアント (改良型) のためのコードを生成します。
           -mcpu=cypress をつけると、コンパイラは、SPARCStation/SPARCServer
           3xx シリーズで使用されるように、Cypress CY7C602 チップのためにさら
           にそれを最適化します。また、より古い SPARCStation 1, 2, IPX などの
           ためにも適切です。

           -mcpu=v8 をつけると、GCC は、SPARC アーキテクチャの V8 バリアント
           (改良型) のためのコードを生成します。V7 コードとの唯一の違いは、
           SPARC-V8 には存在するが SPARC-V7 には存在しない、整数の乗算と整数の
           除算命令を出力することです。-mcpu=supersparc をつけると、コンパイラ
           は、SPARCStation 10, 1000 と 2000 シリーズで使用されるように、
           SuperSPARC チップのためにさらにそれを最適化します。

           -mcpu=sparclite をつけると、GCC は、SPARC アーキテクチャの
           SPARClite バリアント (改良型) のためのコードを生成します。これは、
           SPARClite には存在するが SPARC-V7 には存在しない、整数の乗算、整数
           の除算ステップとスキャン ("ffs") 命令を追加します。訳注: 原文は命令
           の並びがおかしく正確に訳せません。-mcpu=f930 をつけると、コンパイラ
           は、FPU がない、オリジナルの SPARClite である、Fujitsu MB86930 チッ
           プのためにさらにそれを最適化します。-mcpu=f934 をつけると、コンパイ
           ラは、FPU がある最近の SPARClite である、Fujitsu MB86934 チップのた
           めにさらにそれを最適化します。

           -mcpu=sparclet をつけると、GCC は、SPARC アーキテクチャの SPARClet
           バリアント (改良型) のためのコードを生成します。これは、SPARClite
           には存在するが SPARC-V7 には存在しない、整数の乗算、乗算/アキュムレ
           イト、整数の除算ステップとスキャン ("ffs") 命令を追加します。訳注:
           原文は命令の並びがおかしく正確に訳せません。-mcpu=tsc701 をつける
           と、コンパイラは、TEMIC SPARClet チップのためにさらにそれを最適化し
           ます。

           -mcpu=v9 をつけると、GCC は、SPARC アーキテクチャの V9 バリアント
           (改良型) のためのコードを生成します。これは、64 ビットの整数、浮動
           小数点の move 命令、3 つの追加の浮動小数点の条件コードレジスタと条
           件付き move 命令を追加します。-mcpu=ultrasparc をつけると、コンパイ
           ラは、Sun UltraSPARC I/II/IIi チップのためにさらにそれを最適化しま
           す。-mcpu=ultrasparc3 をつけると、コンパイラは、Sun UltraSPARC
           III/III+/IIIi/IIIi+/IV/IV+ チップのためにさらにそれを最適化します。
           -mcpu=niagara で、コンパイラは、Sun UltraSPARC T1 チップのためにそ
           れをさらに最適化します。

       -mtune=cpu_type
           cpu_type のための命令スケジューリングパラメータを設定しますが、オプ
           ション -mcpu=cpu_type で設定するような、命令セットまたはレジスタ
           セットは設定しません。

           -mcpu=cpu_type の同じ値を、-mtune=cpu_type のために使用できますが、
           唯一役に立つ値は、特定の cpu 実装を選択する値です。それらは、
           cypress, supersparc, hypersparc, f930, f934, sparclite86x, tsc701,
           ultrasparc, ultrasparc3niagara です。

       -mv8plus
       -mno-v8plus
           -mv8plus をつけると、GCC は、SPARC-V8+ ABI のためのコードを生成しま
           す。V8 ABI との違いは、global と out レジスタが 64 ビット幅と見なさ
           れることです。これは、すべての SPARC-V9 プロセッサのために 32 ビッ
           トモードの Solaris でデフォルトで有効にされます。

       -mvis
       -mno-vis
           -mvis をつけると、GCC は、UltraSPARC 仮想命令セット拡張をうまく利用
           するコードを生成します。デフォルトは -mno-vis です。

       これらの -m オプションは、上記に加えて、64-ビット環境の SPARC-V9 プロ
       セッサでサポートされます:

       -mlittle-endian
           リトルエンディアンモードで実行するプロセッサのためのコードを生成し
           ます。少しの設定での利用可能であり、Solaris と Linux では、特に利用
           可能ではありません。

       -m32
       -m64
           32 ビットまたは 64 ビット環境のためのコードを生成します。32 ビット
           環境では、int、long とポインタを 32 ビットに設定します。64 ビット環
           境では、int を 32 ビットに、long とポインタを 64 ビットに設定しま
           す。

       -mcmodel=medlow
           Medium/Low コードモデルのためのコードを生成します: 64 ビットアドレ
           スであり、プログラムは、低位の 32 ビットメモリにリンクされなければ
           なりません。静的または動的にプログラムをリンクすることができます。

       -mcmodel=medmid
           Medium/Middle コードモデルのためのコードを生成します: 64 ビットアド
           レスであり、プログラムは、低位の 44 ビットメモリにリンクされなけれ
           ばなりません、テキストとデータセグメントは、2GB 未満のサイズでなけ
           ればなりません、そして、データセグメントは、テキストセグメントの
           2GB 以内に位置していなければなりません。

       -mcmodel=medany
           Medium/Anywhere コードモデルのためのコードを生成します: 64 ビットア
           ドレスであり、プログラムは、メモリのどこにでもリンクできます、テキ
           ストとデータセグメントは、2GB 未満のサイズでなければなりません、
           データセグメントは、テキストセグメントの 2GB 以内に位置していなけれ
           ばなりません。

       -mcmodel=embmedany
           組み込みシステムのための Medium/Anywhere コードモデルのためのコード
           を生成します: 64 ビットアドレスであり、テキストとデータセグメント
           は、2GB 未満のサイズでなければなりません、両セグメントの (リンク時
           に決定される) メモリのどこからでも開始します。グローバルレジスタ
           %g4 は、データセグメントのベースを指しています。プログラムは静的に
           リンクされ、PIC ではサポートされていません。

       -mstack-bias
       -mno-stack-bias
           -mstack-bias をつけると、GCC は、スタックポインタとフレームポインタ
           が存在しているなら、スタックフレーム参照を行うとき、逆に追加しなけ
           ればならない -2047 のオフセットであると仮定します。これは 64-ビット
           モードのデフォルトです。そうでなければ、そのようなオフセットが存在
           していないと仮定します。

       これらのスイッチは、上記に加えて Solaris でサポートされています:

       -threads
           Solaris スレッドライブラリを使用するマルチスレッド化のサポートを追
           加します。このオプションはプリプロセッサとリンカの両方のためのフラ
           グを設定します。このオプションは、コンパイラによって生成されたオブ
           ジェクトコードまたはコンパイラとともに供給されたライブラリのオブ
           ジェクトコードのスレッドの安全性に影響しません。

       -pthreads
           POSIX スレッドライブラリを使用するマルチスレッド化のサポートを追加
           します。このオプションはプリプロセッサとリンカの両方のためのフラグ
           を設定します。このオプションは、コンパイラによって生成されたオブ
           ジェクトコードまたはコンパイラとともに供給されたライブラリのオブ
           ジェクトコードのスレッドの安全性に影響しません。

       -pthread
           これは、-pthreads と同義語です。

       System V のためのオプション

       これらの追加オプションは、System V Release 4 で、それらのシステムで他の
       コンパイラとの互換性のために利用可能です:

       -G  共有オブジェクトを作成します。-symbolic または -shared が代わりに使
           用されることはお勧めです。

       -Qy 出力において ".ident" アセンブラ命令文で、コンパイラによって使用さ
           れるそれぞれのツールのバージョンを識別します。

       -Qn ".ident" 命令文を出力ファイルに追加するのをやめます (これはデフォル
           トです)。

       -YP,dirs
           -l で指定されたライブラリのために、ディレクトリ dirs を検索し、他は
           検索しません。

       -Ym,dir
           M4 プリプロセッサを見つけるためにディレクトリ dir を検索します。ア
           センブラは、このオプションを使用します。

       TMS320C3x/C4x オプション

       これらの -m オプションは、TMS320C3x/C4x 実装のために定義されています:

       -mcpu=cpu_type
           マシンタイプ cpu_type のための命令セット、レジスタセット、と命令ス
           ケジューリングパラメータを設定します。cpu_type のためにサポートされ
           ている値は、c30, c31, c32, c40c44 です。デフォルトは TMS320C40
           のためのコードを生成する c40 です。

       -mbig-memory
       -mbig
       -msmall-memory
       -msmall
           ビッグ (big) またはスモール (small) メモリモデルのためのコードを生
           成します。スモールメモリモデルは、すべてのデータが 1 つ 64K ワード
           ページに適合すると仮定します。実行時に、データページ ((DP) レジスタ
           は、.bss と .data プログラムセクションを含む 64K ページを指すように
           設定されなければなりません。ビッグメモリモデルは、デフォルトであ
           り、すべての直接メモリアクセスのための DP レジスタの再ロードを必要
           とします。

       -mbk
       -mno-bk
           ブロックカウントレジスタ BK に一般的な整数オペランドの割り付けを許
           可します (許可しません)。

       -mdb
       -mno-db
           デクリメントアンドブランチ (減少して分岐) DBcond(D) 命令を使用し
           て、コードの生成を有効にします (無効にします)。これは C4x に対して
           デフォルトで有効にされています。用心のために、これは、C3x の最大の
           繰り返しカウントが 2^{23 + 1} (しかし、誰が C3x で 2^{23} 回以上
           ループを繰り返しますか?) であるので、C3x に対して無効にされていま
           す。GCC は、ループを逆にしようとするので、デクリメントアンドブラン
           チ (減少して分岐) 命令を利用することができますが、ループ内に 1 つ以
           上のメモリ参照があるなら、あきらめることに注意してください。した
           がって、ループカウンタが減少されるループは、RPTB 命令を利用すること
           ができない場合に、わずかに効率的なコードを生成することができます。

       -mdp-isr-reload
       -mparanoid
           DP レジスタが割り込みサービスルーチン (ISR) の入口で保存され、デー
           タセクションを指すように再ロードされ、ISR からの出口で復旧されるこ
           とを強制します。たとえば、オブジェクトライブラリ中で、だれかが DP
           レジスタを変更することによってスモールメモリモデルに違反していない
           なら、これを必要とするべきではありません。

       -mmpyi
       -mno-mpyi
           C3x ために、32 ビットの結果を保証するためのライブラリ呼び出しの代わ
           りに整数乗算のための 24 ビット MPYI 命令を使用します。オペランドの
           1 つが定数であるなら、乗算はシフトと加算を使用して実行されることに
           注意してください。C3x のために -mmpyi オプションが指定されないな
           ら、二乗操作は、ライブラリ呼び出しの代わりにインラインで実行されま
           す。

       -mfast-fix
       -mno-fast-fix
           浮動小数点値を整数値に変換する C3x/C4x FIX 命令は、最も近い整数より
           むしろ浮動小数点以下で最も近い整数を選択します。したがって、浮動小
           数点が負であるなら、不正に先端を切り詰められる結果となり、このよう
           な場合、追加コードが検出して修正するために必要です。結果を修正する
           ために必要な追加コードの生成を無効にするために、このオプションを使
           用することができます。

       -mrptb
       -mno-rptb
           オーバヘッドが 0 のループのために RPTB 命令を使用して、反復ブロック
           シーケンスの生成を有効にします (無効にします)。RPTB 構造は、ループ
           の限界を横断する関数またはジャンプを呼び出さない最も深いループのた
           めだけに使用されます。RC, RS と RE レジスタを保存して、復旧するため
           に必要なオーバヘッドのためにネストされた RPTB ループがある利点があ
           りません。これは、-O2 とともにデフォルトで有効にされます。

       -mrpts=count
       -mno-rpts
           単一命令反復命令 RPTS の使用を有効にします (無効にします)。反復ブ
           ロックが単一の命令を含んでいて、ループカウントが値 count 未満である
           ことを保証することができるなら、GCC は RPTB の代わりに RPTS 命令を
           出力します。値が指定されないなら、ループのカウントをコンパイル時に
           決定することができなくでも、RPTS は出力されます。RPTS に続く反復さ
           れる命令は、繰り返しごとにメモリから再ロードする必要はありません、
           したがって、オペランドのために CPU バスを解放することに注意してくだ
           さい。しかしながら、割り込みは、この命令によってブロックされるの
           で、それはデフォルトで無効にされます。

       -mloop-unsigned
       -mno-loop-unsigned
           RPTS と RPTB (と、C40 では DB) を使用するときの最大の繰り返しカウン
           トは、繰り返しカウントがループを終了するために負であるなら、これら
           の命令がテストするので、2^{31 + 1} です。繰り返しカウントが符号無し
           であるなら、最大の繰り返しカウントが 2^{31 + 1} を超える可能性があ
           ります。このスイッチは符号無しの繰り返しカウントを許可します。

       -mti
           TI アセンブラ (asm30) が満足しているアセンブラ構文を出力することを
           試みます。また、これは TI C3x C コンパイラによって採用されている
           API との互換性を強制します。例えば、long double は浮動小数点レジス
           タというよりむしろ構造体として渡されます。

       -mregparm
       -mmemparm
           関数に引数を渡すためにレジスタ (スタック) を使用するコードを生成し
           ます。デフォルトで、引数は、スタックに引数をプッシュするよりもむし
           ろ可能であれば、レジスタで渡されます。

       -mparallel-insns
       -mno-parallel-insns
           並列命令の生成を許可します。これは、-O2 とともにデフォルトで有効に
           されます。

       -mparallel-mpy
       -mno-parallel-mpy
           -mparallel-insns も指定されるという条件で、MPY||ADD と MPY||SUB 並
           列命令の生成を許可します。これらの命令には、大きな関数のコード生成
           をペシマシズ (pessimize) することができる厳しいレジスタ規制がありま
           す。訳注: pessimize の意味不明。

       V850 オプション

       これらの -m オプションは、V850 実装のために定義されています:

       -mlong-calls
       -mno-long-calls
           すべての呼び出しを far away (near) として扱います。呼び出しが far
           away であると想定されるなら、コンパイラは常に関数アドレスをレジスタ
           にロードし、ポインタを通して間接的に呼び出します。

       -mno-ep
       -mep
           "ep" レジスタにポインタをコピーし、より短い "sld" と "sst" 命令を使
           用するために同じインデックスポインタを 4 回以上使用する基本ブロック
           を最適化しません (最適化します)。最適化するなら、-mep オプションは
           デフォルトでオンです。

       -mno-prolog-function
       -mprolog-function
           関数のプロローグとエピローグでレジスタを保存して復旧するために外部
           機能を使用しません (使用します)。外部関数は、より遅いですが、1 つ以
           上の関数が同じ数のレジスタを保存するなら、より少ないコード空間を使
           用します。最適化するなら、-mprolog-function オプションはデフォルト
           でオンです。

       -mspace
           コードをできるだけ小さくするように試みます。現在のところ、これは単
           に -mep-mprolog-function オプションをオンにします。

       -mtda=n
           サイズが n バイト以下である静的変数またはグローバル変数をレジスタ
           "ep" が指すとても小さい (tiny) データ領域に置きます。とても小さい
           データ領域は、合計で最大 256 バイト (バイト参照のためには 128 バイ
           ト) まで保持することができます。

       -msda=n
           サイズが n バイト以下である静的変数またはグローバル変数をレジスタ
           "gp" が指す小さい (small) データ領域に置きます。小さいデータ領域
           は、最大 64 キロバイトまで保持することができます。

       -mzda=n
           サイズが n バイト以下である静的変数またはグローバル変数をメモリの最
           初の 32 キロバイトに置きます。

       -mv850
           ターゲットのプロセッサが V850 であると指定します。

       -mbig-switch
           大きなスイッチテーブルに適切なコードを生成します。このオプション
           は、スイッチテーブル内の範囲外の分岐に関してアセンブラ/リンカがエ
           ラーを出す場合のみ使用します。

       -mapp-regs
           このオプションによって、r2 と r5 は、コンパイラによって生成された
           コードで使用されます。この設定がデフォルトです。

       -mno-app-regs
           このオプションによって、r2 と r5 は、固定レジスタとして扱われます。

       -mv850e1
           ターゲットのプロセッサが V850E1 であると指定します。このオプション
           が使用されているなら、プリプロセッサ定数の __v850e1____v850e__
           が定義されます。

       -mv850e
           ターゲットのプロセッサが V850E であると指定します。このオプションが
           使用されているなら、プリプロセッサ定数の __v850e__ が定義されます。

           -mv850 または -mv850e または -mv850e1 のいずれも定義されないなら、
           デフォルトターゲットプロセッサが選択され、関連する __v850*__ プリプ
           ロセッサ定数が定義されます。

           どのプロセッサバリアント (改良型) がターゲットであるかにかかわら
           ず、プリプロセッサ定数の __v850 and __v851__ が常に定義されます。

       -mdisable-callt
           このオプションは v850 アーキテクチャの v850e と v850e1 種のための
           CALLT 命令の生成を抑制します。デフォルトは、CALLT 命令を使用するこ
           とができる -mno-disable-callt です。

       VAX オプション

       これらの -m オプションは VAX のために定義されています:

       -munix
           VAX の Unix アセンブラが長い範囲を越えて操作できない、特定のジャン
           プ命令 ("aobleq" など) を出力しません。

       -mgnu
           利用者が GNU アセンブラでアセンブルするという前提で、それらのジャン
           プ命令を出力しません。

       -mg d-形式の代わりに g-形式の浮動小数点数のコードを出力します。

       x86-64 オプション

       これらは、下にリストされています。

       Xstormy16 オプション

       これらのオプションは Xstormy16 のために定義されます:

       -msim
           シミュレータに適切なスタートアップファイルとリンカスクリプトを選択
           します。

       Xtensa オプション

       これらのオプションは、Xtensa ターゲットのためにサポートされています:

       -mconst16
       -mno-const16
           定数値をロードするための "CONST16" 命令の使用を有効にするか、または
           無効にします。"CONST16" 命令は現在のところ、Tensilica の標準オプ
           ションではありません。有効にされるとき、"CONST16" 命令は、常に、標
           準の "L32R" 命令の代わりに使用されます。"L32R" 命令が利用可能でない
           場合にだけ、"CONST16" の使用は、デフォルトで有効にされます。

       -mfused-madd
       -mno-fused-madd
           浮動小数点オプションで fused multiply/add (乗算/加算) と
           multiply/subtract (乗算/減算) 命令の使用を有効にするか、または無効
           にします。これは、浮動小数点オプションもまた有効でないなら、効果が
           ありません。fused multiply/add (乗算/加算) と multiply/subtract (乗
           算/減算) 命令を無効にすることは、加算/減算操作のために別々のの命令
           を使用するようにコンパイラに強制します。これは厳密な IEEE 754 準拠
           の結果が要求されるいくつかの場合に価値があります: fused multiply
           add/subtract (乗算/加算と乗算/減算) 命令は、中間結果を丸めません、
           それによって、IEEE 標準で指定されるよりより多いビットの精度で結果を
           生成します。また、fused multiply add/subtract (乗算/加算と乗算/減
           算) 命令は、プログラム出力が乗算と加算/減算操作を組み合わせるコンパ
           イラの能力に敏感でないことを確実にします。

       -mtext-section-literals
       -mno-text-section-literals
           リテラルプールの処理を制御します。デフォルトは、出力ファイルの別々
           のセクションにリテラルが置かれる -mno-text-section-literals です。
           これによって、リテラルプールは、データ RAM/ROM に置くことができ、ま
           た、リンカは、冗長なリテラルを削除し、コードサイズを改良するために
           別々のオブジェクトファイルのリテラルプールを結合することができま
           す。-mtext-section-literals をつけると、リテラルは、それらを参照す
           るため、できるだけ近くにそれらを保持するためにテキストセクションに
           まき散らされます。これは、大きなアセンブリファイルのために必要であ
           るかもしれません。

       -mtarget-align
       -mno-target-align
           このオプションが有効にされるとき、GCC は、いくらかのコードの密度を
           犠牲にして分岐の不利益を削減するために、命令を自動的に整列するよう
           にアセンブラに指示します。アセンブラは、分岐ターゲットと呼び出し
           (call) 命令に続く命令を整列するために密度命令を広くすることを試みま
           す。ターゲットを整列するために先行する安全な密度命令が十分でないな
           ら、広げることは実行されません。デフォルトは -mtarget-align です。
           これらのオプションは、アセンブラが密度命令を広くするか、または no
           op 命令を挿入するかのいずれかによって、常に整列される、"LOOP" のよ
           うな自動整列命令の処理に影響しません。

       -mlongcalls
       -mno-longcalls
           このオプションが有効にされるとき、GCC は、直接呼び出しのターゲット
           が呼び出し命令によって許容された範囲にあることを決定することができ
           ないなら、直接呼び出しを間接呼び出しに変換するようにアセンブラに指
           示します。この変換は、他のソースファイル中の関数を呼び出しのために
           一般的に起こります。特に、アセンブラは、直接 "CALL" 命令を "L32R"
           に続く "CALLX" 命令に変換します。デフォルトは -mno-longcalls です。
           このオプションは、呼び出しターゲットが潜在的に範囲外になるかもしれ
           ないプログラムで使用されるべきです。このオプションは、コンパイラで
           はなく、アセンブラに実装されるので、GCC によって生成されたアセンブ
           リコードは、まだ直接呼び出し命令を示します --- 実際の命令を調べるた
           めには、オブジェクトコード逆アセンブルして見ます。アセンブラは、あ
           らゆるファイルを交差する呼び出しのために間接呼び出しを使用し、前述
           の実際に範囲外となる呼び出しでないことに注意してください。

       zSeries オプション

       これらは、下にリストされています。

       コード生成規則のためのオプション

       これらのマシン独立オプションは、コード生成に使用されるインタフェース規
       約を制御します。

       それらのほとんどには、肯定形式と否定形式があります。-ffoo の否定形式
       は、-fno-foo となります。下記のテーブルでは、形式の 1 つだけがリストさ
       れています --- デフォルトでないものです。利用者は、no- を取り除くか、ま
       たは追加するることによって、もう片方の形式を見当つけることができます。

       -fbounds-check
           それをサポートするフロントエンドのために、配列にアクセスするために
           使用されるインデックスが宣言されている範囲内であるかチェックする追
           加コードを生成します。これは現在 Java と Fortran のフロントエンドに
           よってのみサポートされ、このオプションは、それぞれ true と false を
           デフォルトとしています。

       -ftrapv
           このオプションは、加算、減算、乗算操作で符号付きオーバフローのため
           のトラップを生成します。

       -fwrapv
           このオプションは、2 補数の表現を使用して包み込む、加算、減算、乗算
           の符号付き算術オーバフローを仮定するようにコンパイラに指示します。
           このフラグは、いくつかの最適化を有効にして、その他を無効にします。
           このオプションは、Java 言語仕様で要求される、Java フロントエンドの
           ためにデフォルトで有効にされます。

       -fexceptions
           例外操作を有効にします。例外を伝播するために必要な特別のコードを生
           成します。いくつかのターゲットのために、これは、実行に影響しません
           が、意味のあるデータサイズのオーバヘッドを生成することができる、す
           べての関数のためのフレームアンワインド (frame unwind) 情報を GCC が
           生成するという意味を含みます。利用者がこのオプションを指定しないな
           ら、GCC は、通常例外操作を必要とする C++ のような言語のためにデフォ
           ルトでそれを有効にして、通常それを必要としない C のような言語のため
           にそれを無効にします。しかしながら、利用者は、C++ で書かれている例
           外ハンドラで適切に同時使用する必要がある C コードをコンパイルすると
           き、このオプションを有効にする必要があります。また、利用者は、例外
           操作を使用しない古い C++ プログラムをコンパイルしているなら、このオ
           プションを無効にしたいかもれません。

       -fnon-call-exceptions
           トラップ命令が例外をスロー (throw) することができるコードを生成しま
           す。どこにも存在しないプラットフォーム特有のランタイムサポートを必
           要とすることに注意してください。さらに、トラッピング命令が例外をス
           ローすることができるだけです、すなわち、メモリ参照、または浮動小数
           点命令です。"SIGALRM" のような任意のシグナルハンドラから例外をス
           ローすることはできません。

       -funwind-tables
           必要な静的なデータを生成するだけですが、いかなる他の方法で生成され
           たコードに影響しないことを除いて、-fexceptions と同様です。通常、利
           用者はこのオプションを有効にしません。代わりに、この取り扱いを必要
           とする言語プロセッサは、利用者代わってそれを有効にするでしょう。

       -fasynchronous-unwind-tables
           ターゲットマシンによってサポートされるなら、dwarf2 形式でアンワイン
           ドテーブル (unwind table) を生成します。テーブルは、それぞれの命令
           境界で正確であるので、非同期イベント (デバッガまたはガーベージコレ
           クタのような) からアンワインドされたスタックに使用することができま
           す。

       -fpcc-struct-return
           レジスタでというよりむしろメモリのようなより長いもので "短い"
           "struct" と "union" 値を返します。この規約は、あまり効率的ではあり
           ませんが、GCC でコンパイルされたファイルと特に Portable C コンパイ
           ラ (pcc) のような他のコンパイラ、でコンパイルされたファイル間の相互
           呼び出し可能とする利点があります。

           メモリの構造体を返すための正確な規約は、ターゲットの設定マクロに依
           存します。

           短い構造体と共用体は、サイズと整列がいくつかの整数タイプに適合する
           ものです。

           警告: -fpcc-struct-return スイッチをつけてコンパイルされたコード
           は、-freg-struct-return スイッチをつけてコンパイルされたコードとバ
           イナリ互換ではありません。デフォルトでないアプリケーションバイナリ
           インタフェースに適合するためにそれを使用します。

       -freg-struct-return
           可能であれば、レジスタに "struct" と "union" 値を返します。これは、
           小さい構造体のためには、-fpcc-struct-return より効率的です。

           利用者が -fpcc-struct-return-freg-struct-return も指定しないな
           ら、GCC は、ターゲットのための標準のいずれかの規約をデフォルトにし
           ます。標準の規約がないなら、GCC は、GCC が主要なコンパイラである
           ターゲットを除いて、-fpcc-struct-return をデフォルトとします。その
           ような場合、我々は標準を選ぶことができ、より効率的なレジスタリター
           ン代替手段を選びました。

           警告: -freg-struct-return スイッチをつけてコンパイルされたコード
           は、-fpcc-struct-return スイッチをつけてコンパイルされたコードとバ
           イナリ互換ではありません。デフォルトでないアプリケーションバイナリ
           インタフェースに適合するためにそれを使用します。

       -fshort-enums
           あり得る値の宣言された範囲で必要とするのと同じくらい多くのバイトを
           "enum" タイプにだけに割り付けます。明確に、"enum" タイプは、十分に
           格納できる最小の整数型と同等になります。

           警告: -fshort-enums スイッチによって、GCC は、そのスイッチなしで生
           成されるコードとバイナリ互換でないコードを生成します。デフォルトで
           ないアプリケーションバイナリインタフェースに適合するためにそれを使
           用します。

       -fshort-double
           "double" のために "float" と同じサイズを使用します。

           警告: -fshort-double スイッチによって、GCC は、そのスイッチなしで生
           成されるコードとバイナリ互換でないコードを生成します。デフォルトで
           ないアプリケーションバイナリインタフェースに適合するためにそれを使
           用します。

       -fshort-wchar
           wchar_t の基礎タイプを、ターゲットのためのデフォルトの代わりに
           short unsigned int に上書きします。このオプションは、WINE の元で実
           行されるプログラムを構築するために役に立ちます。

           警告: -fshort-wchar スイッチによって、GCC は、そのスイッチなしで生
           成されるコードとバイナリ互換でないコードを生成します。デフォルトで
           ないアプリケーションバイナリインタフェースに適合するためにそれを使
           用します。

       -fno-common
           C では、共通ブロックとしてそれらを生成するよりむしろオブジェクト
           ファイルのデータセクションの初期化されていないグローバル変数でも割
           り付けます。これは、同じ変数が 2 つの異なったコンパイルで ("extern"
           なしで) 宣言されるなら、それらをリンクするとき、エラーとなる効果が
           あります。これが役に立つかもしれない唯一の理由は、プログラムがこの
           ように常に動作する他のシステムで動作するか検証したい場合です。

       -fno-ident
           #ident 指示を無視します。

       -finhibit-size-directive
           ".size" アセンブラ指示、または関数が中央で分離され、2 つの部分がメ
           モリ内の遠く離れた位置に置かれる場合に、問題を起こしそうなものを出
           力しません。このオプションは、crtstuff.c をコンパイルするとき使用さ
           れます。利用者は、他の何かのためにそれを使用する必要はないはずで
           す。

       -fverbose-asm
           生成されたアセンブリコードに特別のコメント情報を入れて、それをより
           読みやすくします。このオプションは一般的に、(おそらくコンパイラ自体
           をデバッグしている間に) 実際に生成されたアセンブリコードを読む必要
           がある人々のみに役に立ちます。

           デフォルトである、-fno-verbose-asm によって、特別の情報を省略するこ
           とができ、2 つのアセンブラファイルを比較するとき、役に立ちます。

       -fpic
           ターゲットマシンでサポートされているなら、共有ライブラリでの使用に
           適した位置独立のコード (PIC) を生成します。そのようなコードはグロー
           バルオフセットテーブル (GOT) を通してすべての定数アドレスにアクセス
           します。ダイナミックローダはプログラムが開始するとき GOT エントリを
           解決します (ダイナミックローダは GCC の一部ではありません。それはオ
           ペレーティングシステムの一部です)。リンクされた実行形式の GOT サイ
           ズがマシン特有の最大サイズを超えるなら、利用者は -fpic が動作しない
           ことを示すリンカからのエラーメッセージを得ます。その場合には、代わ
           りに -fPIC をつけて再コンパイルします。(これらの最大は、SPARC では
           8k および m68k と RS/6000 では 32k です。386 には、そのような制限は
           ありません。)

           位置独立コードは、特別なサポートを必要とし、したがって、特定のマシ
           ンだけで動作します。386 について、GCC は、Sun 386i に対してではな
           く、System V に対して PIC をサポートします。IBM RS/6000 のために生
           成されたコードは、常に位置独立です。

           このフラグが設定されるとき、マクロ "__pic__" と "__PIC__" は、1 と
           定義されます。

       -fPIC
           ターゲットマシンでサポートされているなら、ダイナミックリンクに適切
           でグローバルオフセットテーブルのサイズでの制限をさける、位置独立
           コードを出力します。このオプションは m68k, PowerPC と SPARC で効果
           があります。

           位置独立コードは、特別なサポートを必要とし、したがって、特定のマシ
           ンだけで動作します。

           このフラグが設定されるとき、マクロ "__pic__" と "__PIC__" は、2 と
           定義されます。

       -fpie
       -fPIE
           これらのオプションは -fpic-fPIC と同様ですが、生成される位置独
           立コードを、実行形式にだけリンクすることができます。通常、これらの
           オプションは、-pie GCC オプションがリンクの間に使用されるとき、使用
           されます。

       -fno-jump-tables
           他のコードの生成戦略より効率的であるところでさえ、スイッチ文にジャ
           ンプテーブルを使用しません。このオプションは、ジャンプテーブルのア
           ドレスを参照することができない、動的なリンカの一部を形成するコード
           を構築するために -fpic または -fPIC と関連して使用されます。いくつ
           かのターゲットでは、ジャンプテーブルは、GOT を必要とせず、このオプ
           ションは、必要ではありません。

       -ffixed-reg
           固定レジスタとして reg と名前が付けられたレジスタを取り扱います。生
           成されたコードは、(おそらくスタックポインタ、フレームポインタまたは
           ある他の固定ロール (役割) を除いて) それを決して参照するべきではあ
           りません。

           reg はレジスタの名前でなければなりません。受け付けられるレジスタ名
           は、マシン特有であり、マシン記述マクロファイル中の "REGISTER_NAMES"
           マクロで定義されます。

           3 通りの選択を指定するので、このフラグには、否定形式がありません。

       -fcall-used-reg
           関数呼び出しによって上書きされる割り付けられたレジスタとして reg と
           名前が付けられたレジスタを取り扱います。呼び出しを越えて生きていな
           いテンポラリまたは変数のために割り付けることができます。このように
           してコンパイルされた関数は、レジスタ reg を保存して復旧しません。

           フレームポインタまたはスタックポインタでこのフラグを使用するとエ
           ラーとなります。マシンの実行モデルにおいて固定された広範囲なロール
           (役割) がある他のレジスタのためにこのフラグを使用することは、破滅的
           な結果を生みます。

           3 通りの選択を指定するので、このフラグには、否定形式がありません。

       -fcall-saved-reg
           関数によって保存された割り付けされたレジスタとして reg と名前が付け
           られたレジスタを取り扱います。呼び出しを越えて生きていないテンポラ
           リまたは変数のために割り付けることができます。このようにコンパイル
           された関数は、レジスタ reg を使用するなら、保存して復元します。

           フレームポインタまたはスタックポインタでこのフラグを使用するとエ
           ラーとなります。マシンの実行モデルにおいて固定された広範囲なロール
           (役割) がある他のレジスタのためにこのフラグを使用することは、破滅的
           な結果を生みます。

           それぞれ違った災難は、関数の値が返されるレジスタに対してこのフラグ
           の使用することから生じます。

           3 通りの選択を指定するので、このフラグには、否定形式がありません。

       -fpack-struct[=n]
           指定された値がないなら、ホールなしで一緒に、すべての構造体のメンバ
           をパックします。値が指定されるとき (ちいさな 2 の冪乗でなければなり
           ません)、最大の整列を表す、この値に従って構造体のメンバをパックしま
           す (すなわち、これより大きいデフォルトの整列要求があるオブジェクト
           は、潜在的に次の適合する位置で整列されないで出力されます)。

           警告: -fpack-struct スイッチによって、GCC は、そのスイッチなしで生
           成されるコードとバイナリ互換でないコードを生成します。さらに、コー
           ドの準最適化を行います。デフォルトでないアプリケーションバイナリイ
           ンタフェースに適合するためにそれを使用します。

       -finstrument-functions
           関数の入口と出口のために計装呼び出しを生成します。関数入口の直後と
           関数出口の直前に、次のプロファイル関数は、現在の関数のアドレスとそ
           の呼び出しサイトで呼び出されます。(いくつかのプラットフォームでは、
           "__builtin_return_address" は、現在の関数を超えて動作しないので、呼
           び出しサイト情報は、プロファイル関数その他で利用可能でないかもしれ
           ません。)

                   void __cyg_profile_func_enter (void *this_fn,
                                                  void *call_site);
                   void __cyg_profile_func_exit  (void *this_fn,
                                                  void *call_site);

           最初の引数は、シンボルテーブルで正確に検索される、現在の関数の開始
           アドレスです。

           また、この計装は、他の関数で拡張された関数のインラインで行われま
           す。プロファイルを行う呼び出しは、概念的に、インライン関数に入って
           出る場所を示します。これは、そのような関数のアドレス可能なバージョ
           ンが、利用可能でなければならないことを意味します。利用者が使用する
           すべての関数が拡張インラインであるなら、これはコードサイズがさらに
           増大することを意味します。利用者が C コードで extern inline を使用
           するなら、そのような関数のアドレス可能なバージョンが、提供されなけ
           ればなりません。(これは、とにかく通常の場合ですが、利用者が幸運であ
           り、オプティマイザが、常にインラインで関数を拡張するなら、静的なコ
           ピーを提供しないで、逃げたかもしれません。)

           属性 "no_instrument_function" が関数に与えられる場合、計装は、行わ
           れません。これは、例えば、上記にリストされたプロファイル関数におい
           て、高い優先度の割り込みルーチン、プロファイル関数を安全に呼び出す
           ことができない、任意の関数 (プロファイルルーチンが出力を生成する
           か、またはメモリを割り付けるなら、おそらくシグナルハンドラ) を使用
           することができます。

       -fstack-check
           スタックの境界を越えないことを検証するコードを生成します。複数のス
           レッドの環境で実行しているなら、このフラグを指定するべきですが、ス
           タックオーバフローが、1 つのスタックしかないほとんどすべてのシステ
           ムで自動的に検出されるので、単一のスレッド環境でそれをまれに指定す
           る必要があります。

           このスイッチによって実際にチェックが行われないことに注意してくださ
           い。オペレーティングシステムが、それを行わなければなりません。ス
           イッチによって、コードの生成は、オペレーティングシステムが、スタッ
           クが拡張されるのを調べることを保証します。

       -fstack-limit-register=reg
       -fstack-limit-symbol=sym
       -fno-stack-limit
           スタックが、レジスタの値またはシンボルのアドレスのいずれかの特定の
           値を超えて成長しないことを保証するコードを生成します。スタックが値
           を超えて成長するなら、シグナルが起こされます。ほとんどのターゲット
           のために、スタックが境界をオーバラン (超過) する前にシグナルが起こ
           されるので、特別な予防措置をしなくてもシグナルをキャッチすることは
           可能です。

           例えば、スタックが絶対アドレス 0x80000000 で始まり、下向きに成長す
           るなら、利用者は、スタックの制限である 128KB を強制するために、フラ
           グ -fstack-limit-symbol=__stack_limit-Wl,--defsym,__stack_limit=0x7ffe0000 をを使用することができますこ
           れは GNU リンカでのみ動作することに注意してください。

       -fargument-alias
       -fargument-noalias
       -fargument-noalias-global
       -fargument-noalias-anything
           パラメータ間とパラメータとグローバルデータの間の可能な関係を指定し
           ます。

           -fargument-alias は、引数 (パラメータ) は、お互いにエイリアスし、グ
           ローバルな記憶域をエイリアスすることを指定します。
           -fargument-noalias は、引数は、お互いにエイリアスしませんが、グロー
           バルな記憶域をエイリアスすることを指定します。
           -fargument-noalias-global は、引数は、お互いにエイリアスせず、グ
           ローバルな記憶域もエイリアスしないことを指定します。
           -fargument-noalias-anything は、引数が、その他の記憶域をエイリアス
           しないことを指定します。

           各言語は、オプションが言語標準によって必要とされるものは何でも自動
           的に使用します。利用者は、自身でこれらのオプションを使用する必要は
           ないはずです。

       -fleading-underscore
           このオプションとその否定形式の対応物 -fno-leading-underscore は、C
           シンボルがオブジェクトファイルで表現される方法を強制的に変更しま
           す。この使用は、古いアセンブリコードでリンクするのを助けることで
           す。

           警告: -fleading-underscore スイッチによって、GCC は、そのスイッチな
           しで生成されるコードとバイナリ互換でないコードを生成します。デフォ
           ルトでないアプリケーションバイナリインタフェースに適合するためにそ
           れを使用します。すべてのターゲットがこのスイッチのための完全なサ
           ポートを提供するというわけではありません。

       -ftls-model=model
           スレッドローカル記憶域 (thread-local storage model) モデルを使用す
           るように変更します。model 引数は、"global-dynamic",
           "local-dynamic", "initial-exec" または "local-exec" の 1 つであるべ
           きです。

           -fpic なしのデフォルトは、"initial-exec" です。-fpic ありのデフォル
           トは、"global-dynamic" です。

       -fvisibility=default|internal|hidden|protected
           デフォルトの ELF イメージシンボルの可視性を指定されたオプションに設
           定します --- すべてのシンボルは、コードで上書きされないなら、これで
           マークされます。この特徴を使用することは、共有オブジェクトライブラ
           リのリンクとロード時間を大幅に改良し、より最適化されたコードを作成
           し、完ぺきに近い API エクスポートを提供し、シンボルの衝突を防ぐこと
           ができます。利用者が配布する任意の共有オブジェクトでこれを使用する
           ことを強くお勧めします。

           用語にもかかわらず、"default" は、常にパブリック ie を意味します。
           共有オブジェクトの外側からリンクされるために、利用可能です。
           "protected" と "internal" は、実際の世界の使用法で全く役に立たない
           ので、他の唯一の一般的に使用されるオプションは、"hidden" (隠) され
           ます。-fvisibility が指定されないなら、デフォルトは、"default" で
           す、すなわち、すべてのシンボルをパブリックにします --- これは GCC
           の旧バージョンと同じ振る舞いをもたらします。

           正しい可視性がある確実な ELF シンボルによって提供される、ためになる
           良い説明は、Ulrich Drepper による "How To Write Shared Libraries"
           (それは、<http://people.redhat.com/~drepper/> にあります) によって
           与えられます --- しかしながら、デフォルトがパブリックであるときに隠
           されたものをマークするために、このオプションによって可能にされた優
           れた解決策は、デフォルトを隠して、これをパブリックとマークすること
           です。これは、利用者が、同じ構文があるほとんど同じセマンティクスを
           得る "__declspec(dllexport)" の代わりに Windows の DLL および
           -fvisibility=hidden と "__attribute__ ((visibility("default")))" を
           つける標準です。これは、クロスプラットフォームプロジェクトと共に動
           作しているものへのすばらしい恩恵です。

           可視性のサポートを既存のコードに追加するものに関して、利用者は、役
           に立つ #pragma GCC visibility を見つけます。これは、(例えば)
           #pragma GCC visibility push(hidden)#pragma GCC visibility pop
           のための可視性を設定したい宣言を囲むことによって動作します。シンボ
           ルの可視性が API インタフェース規約の一部として見なされるべきであ
           り、その結果、それがデフォルト ie でないときに、すべての新しいコー
           ドが常に可視性を指定するべきであることを覚えておいてください。局所
           的な DSO 内の使用のためだけの宣言は、PLT 間接指定のオーバヘッドを避
           けるために隠されるように常に明白にマークされるべきです --- また、こ
           れを極めて明白にすることは、コードの読み易さと自己文書化を支援しま
           す。ISO C++ の仕様書要求事項のために、オペレータ new とオペレータ
           delete は、常に可視性をデフォルトとしなければならないことに注意して
           ください。

           利用者のプロジェクトの外側からのヘッダ、特に、利用者が使用する任意
           の他のライブラリからのシステムヘッダとヘッダ、は、デフォルト以外の
           可視性でコンパイルされると予想されないかもしれないことを留意してく
           ださい。利用者は、何かそのようなヘッダを含む前に、明白に #pragma
           GCC visibility push(default) と記述する必要があります。

           extern 宣言は、-fvisibility によって影響されないので、変更なしで
           -fvisibility=hidden を付けて多くのコードを再コンパイルすることがで
           きます。しかしながら、明白な可視性なしで extern 関数を呼び出すこと
           は、PLT を使用するので、どの extern 宣言が隠されるように扱われるべ
           きであるかをコンパイラに伝えるために、__attribute ((visibility)) お
           よび/または #pragma GCC visibility を使用することは、より効果的で
           す。

           -fvisibility は、C++ のあいまいなリンケージ実体に影響することに注意
           してください。これは、例えば、DSO の間で thrown される例外クラス
           が、DSO の間で type_info ノードを統一できるように、デフォルトの可視
           性で明白にマークしなければならない、ことを意味します。

           これらの技術の概観、それらの利点、とそれらをどのように使用するか
           は、<http://gcc.gnu.org/wiki/Visibility> にあります。

環境変数
       このセクションは、GCC がどのように動作するかに影響するいくつかの環境変
       数について説明しています。これらのいくつかは、様々な種類のファイルを検
       索するとき使用するディレクトリまたはプレフィックスを指定することによっ
       て働きます。いくつかは、コンパイル環境の他の局面を指定するために使用さ
       れます。

       また、-B, -I-L のようなオプションを使用して検索する場所を指定するこ
       とができることに注意してください。これらは、GCC の設定によって指定され
       るものに優先する環境変数を使用することで指定される場所に優先します。

       LANG
       LC_CTYPE
       LC_MESSAGES
       LC_ALL
           これらの環境変数は、GCC が異なった国別の規約で動作することができる
           地域化情報を GCC が使用する方法を制御します。GCC は、LC_CTYPELC_MESSAGES がそうするために設定されていたなら、ロケールカテゴリを
           検査します。利用者のインストールによってサポートされる任意の値をこ
           れらのロケールカテゴリを設定することができます。典型的な値は、UTF-8
           でエンコードされた英国 (the United Kingdom) の英語のための
           en_GB.UTF-8 です。

           LC_CTYPE 環境変数は文字の分類を指定します。GCC は文字列の文字境界を
           決定するためにそれを使用します。これは、マルチバイトでなければ文字
           列の終りまたはエスケープとして解釈される、クォート (引用) とエス
           ケープ文字を含むいくつかのマルチバイトのエンコードのために必要で
           す。

           LC_MESSAGES 環境変数は診断メッセージに使用する言語を指定します。

           LC_ALL 環境変数が設定されているなら、LC_CTYPELC_MESSAGES の値を
           上書きします。そうでなければ、LC_CTYPELC_MESSAGES は、LANG 環境
           変数の値をデフォルトとします。これらの変数がなにも設定されていな
           ら、GCC は、伝統的な C 英語の振る舞いをデフォルトとします。

       TMPDIR
           TMPDIR が設定されているなら、それは一時ファイルのために使用するディ
           レクトリを指定します。GCC は次のステージの入力として使用される、コ
           ンパイルの 1 つのステージの出力を保存するために一時ファイルを使用し
           ます: 例えば、コンパイラ自体への入力である、プリプロセッサの出力で
           す。

       GCC_EXEC_PREFIX
           GCC_EXEC_PREFIX が設定されているなら、それはコンパイラによって実行
           されるサブプログラムの名前に使用されるプレフィックスを指定します。
           このプレフィックスがサブプログラムの名前と組み合わされるとき、ス
           ラッシュは追加されませんが、利用者が望むなら、スラッシュで終わるプ
           レフィックスを指定することができます。

           GCC_EXEC_PREFIX が設定されていないなら、GCC は、それが呼び出された
           パス名に基づいて使用される適切なプレフィックスを見つけ出すことを試
           みます。

           GCC が指定されたプレフィックスを使用するサブプログラムを見つけるこ
           とができないなら、サブプログラムのための通常の場所で検索を試みま
           す。

           GCC_EXEC_PREFIX のデフォルト値は、prefix/lib/gcc/ であり、ここで
           prefix は、利用者が configure スクリプトを実行したときの "prefix"
           の値です。

           -B で指定された他のプレフィックスは、このプレフィックスに優先しま
           す。

           また、このプレフィックスは、リンクするために使用される crt0.o のよ
           うなファイルを見つけるためにも使用されます。

           さらに、プレフィックスはヘッダファイルを検索するためにディレクトリ
           を見つける通常でない方法で使用されます。通常、名前が
           /usr/local/lib/gcc (もっと正確に言えば GCC_INCLUDE_DIR の値) で始ま
           る各標準ディレクトリのために、GCC は、代替のディレクトリ名を生成す
           るために指定されたプレフィックスの始まりを置き換えることを試みま
           す。したがって、-Bfoo/ をつけると、GCC は、通常 /usr/local/lib/bar
           を検索するところで、foo/bar を検索します。これらの代替ディレクトリ
           が最初に検索されます。標準のディレクトリは次に行われます。

       COMPILER_PATH
           COMPILER_PATH の値は、PATH にそっくりのコロンで区切られたディレクト
           リのリストです。GCC は、GCC_EXEC_PREFIX を使用してサブプログラムを
           見つけることができないなら、サブプログラムを検索するとき、このよう
           に指定されたディレクトリを試みます。

       LIBRARY_PATH
           LIBRARY_PATH の値は、PATH にそっくりのコロンで区切られたディレクト
           リのリストです。ネイティブコンパイラとして設定されるとき、GCC は、
           GCC_EXEC_PREFIX を使用してそれらを見つけることができないなら、特別
           なリンカファイルを検索するときこのように指定されたディレクトリを試
           みます。また、GCC を使用してリンクすることは、-l オプションのための
           通常のライブラリを検索するとき、これらのディレクトリも使用します
           (が、-L で指定されたディレクトリが最初に検索されます)。

       LANG
           この変数は、ロケール情報をコンパイラに渡すために使用されます。この
           情報が使用される 1 つの方法は、文字リテラル、文字列リテラルとコメン
           トが C と C++ で解析されるとき、使用される文字セットを決定するため
           です。コンパイラがマルチバイト文字を許可するために設定されるとき、
           次の LANG のための値が認識されます:

           C-JIS
               JIS 文字を認識します。

           C-SJIS
               SJIS 文字を認識します。

           C-EUCJP
               EUCJP 文字を認識します。

           LANG 定義されていないか、またはある他の値があるなら、コンパイラは、
           マルチバイト文字を認識して、変換するためにデフォルトのロケールに
           よって定義されているように mblen と mbtowc を使用します。

       いくつかの追加の環境変数は、プリプロセッサの振る舞いに影響します。

       CPATH
       C_INCLUDE_PATH
       CPLUS_INCLUDE_PATH
           各変数の値は、ヘッダファイルを検索する PATH にそっくりの特殊文字に
           よって区切られたディレクトリのリストです。特殊文字 "PATH_SEPARATOR"
           は、ターゲットに依存していて、GCC の構築時に決定されます。Microsoft
           Windows ベースのターゲットでは、セミコロンで、他のほとんどすべての
           ターゲットではコロンです。

           CPATH は、まるで -I で指定されているように、ディレクトリのリストを
           指定しますが、コマンドラインの -I オプションで与えられたパスの後で
           す。この環境変数は、どの言語が前処理されているかにかかわらず使用さ
           れます。

           残りの環境変数は、示された特定の言語を前処理するときだけ適用されま
           す。それぞれ、まるで -isystem で指定されているように検索されるディ
           レクトリのリストを指定しますが、コマンドラインの -isystem オプショ
           ンで与えられたパスの後です。

           これらのすべての変数において、空の要素は、カレント作業ディレクトリ
           を検索するようにコンパイラに指示します。空の要素は、パスの始めか終
           りに現れることができます。例えば、CPATH の値が ":/special/include"
           であるなら、-I. -I/special/include と同じ効果があります。

       DEPENDENCIES_OUTPUT
           この変数が設定されるなら、その値はコンパイラによって処理された非シ
           ステムヘッダファイルに基づく Make に依存を出力する方法を指定しま
           す。システムヘッダファイルは依存出力で無視されます。

           DEPENDENCIES_OUTPUT の値は、単にファイル名を指定するかもしれませ
           ん、その場合に、Make 規則は、ソースファイル名からターゲット名を推測
           して、そのファイルに書き込まれます。または、値は形式 file target で
           あるかもしれません、その場合に、規則は、ターゲット名として target
           を使用してファイル file に書き込まれます。

           言い換えれば、この環境変数は、任意の -MT スイッチもつけて、オプショ
           ンの -MM-MF の組み合わせと同等です。

       SUNPRO_DEPENDENCIES
           この変数は、システムヘッダファイルが無視されないので、-MM よりむし
           ろ -M の意味を含むことを除いて、DEPENDENCIES_OUTPUT (上記参照) と同
           じです、しかしながら、メイン入力ファイルでの依存関係は、省略されま
           す。

バグ
       バグを報告する指示書に関しては、<http://gcc.gnu.org/bugs.html> を参照し
       てください。

脚注
       1.  いくつかのシステムでは、gcc -shared はコンストラクタが動作するため
           の補助的なスタブ (stub) コードを構築するために必要です。複数のライ
           ブラリがある (multi-libbed) システムでは、gcc -shared はリンクに対
           して正しくサポートされたライブラリを選択しなければなりません。正し
           いフラグを供給しないことは、微妙な欠陥を導くかもしれません。それら
           が必要でない場合にそれらを供給しても無害です。

関連項目
       gpl(7), gfdl(7), fsf-funding(7), cpp(1), gcov(1), as(1), ld(1), gdb(1),
       adb(1), dbx(1), sdb(1)gcc, cpp, as, ld, binutilsgdb の Info エ
       ントリ。

作者
       gcc の Info エントリ、または GCC への貢献者については、
       <http://gcc.gnu.org/onlinedocs/gcc/Contributors.html> を参照してくださ
       い。

COPYRIGHT
       Copyright (c) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
       1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
       Foundation, Inc.

       Permission is granted to copy, distribute and/or modify this document
       under the terms of the GNU Free Documentation License, Version 1.2 or
       any later version published by the Free Software Foundation; with the
       Invariant Sections being "GNU General Public License" and "Funding Free
       Software", the Front-Cover texts being (a) (see below), and with the
       Back-Cover Texts being (b) (see below).  A copy of the license is
       included in the gfdl(7) man page.

       (a) The FSF's Front-Cover Text is:

            A GNU Manual

       (b) The FSF's Back-Cover Text is:

            You have freedom to copy and modify this GNU Manual, like GNU
            software.  Copies published by the Free Software Foundation raise
            funds for GNU development.



gcc-4.2.1                         2011-03-07                            GCC(1)

Table of Contents

FreeBSD マニュアル検索