WOODWOOD77777のHP


参照ページ

gccの使い方 ・・・やっと多少なりとも、まともな説明を加えました。06/02/09

GCC(1)                      GNU Tools                      GCC(1)



名称
     gcc, g++ - GNU プロジェクト C, C++ コンパイラ (第 2.4 版)

形式
     gcc [ option | filename ]...
     g++ [ option | filename ]...

注意
     このマニュアルに書かれた情報は GNU C コンパイラの完全なドキュ
     メンテー ションからの抜粋であり、オプションの意味の記述にとど
     める。

     このマニュアルはボランティアのメンテナンスが行なわれた時の み
     に更新され るもので、常に最新の情報を示してはいない。もしソフ
     トウェアとこのマニュ アルの間に矛盾を発見した 場 合 は、Info
     ファ イ ル を チェックして欲しい。信 頼すべき情報はそちらにあ
     る。

     もしこの man ページが重大な混乱や多くの苦情を引き起こすほどに
     現状とかけ はなれた場合は、我々はこのマニュアルの配布を停止す
     る。Info が更新され た時に同時にマニュアルを更新するという 選
     択は我々にとって不可能である。 なぜなら、GNU C コンパイラをメ
     ンテナンスするために我々は多くの時間を 使っ  て し まっ て お
     り、man  ペー ジの更新に割く時間は残されていないためである。
     GNU プロジェクトは man ページはすでに時代おくれのものであり、
     何か他の もので置き換えられるべきであると考えている。

     完全な現在のドキュメンテーションが必要な場合は、Info ファイル
     の`gcc'  ま た は マニュアルの Using and Porting GNU CC (for
     version 2.0) を参照して欲しい.  この双方は Texinfo の ソー ス
     ファイル gcc.texinfo から生成される。

解説
     C と C++ のコンパイラは統合化されている。どちらの場合も、入力
     ファイル は以下の 4 つの処理のステージのうち 1 つ以上のステー
     ジを踏んで処理される。こ れらは、プリプロセス、コンパイル、ア
     セ ン ブル、リンクである。ソースファ イルの拡張子は通常ソース
     ファイルの言語を表しているが、以下の名前に関して は、それぞれ
     のコンパイラがデフォルトの言語の仮定をしており、それを使用 す
     ることになる。

     gcc  はプリプロセス済みの (.i) ファイルを C 言語のファイル と
          仮定し、C スタイルのリンクを行なう。

     g++  はプリプロセス済みの(.i) ファイルを C++ のファイルと仮定
          し、C++ スタイルのリンクを行なう。

     ファイル名の拡張子はその言語とどのような処理が行なわれるべ き
     かを示す。

     .c    C 言語ソース; プリプロセス, コンパイル, アセンブル
     .C    C++ ソース; プリプロセス, コンパイル, アセンブル



GNU Tools             Last change: 94/03/29                     1






GCC(1)                      GNU Tools                      GCC(1)



     .cc   C++ ソース; プリプロセス, コンパイル, アセンブル
     .cxx  C++ ソース; プリプロセス, コンパイル, アセンブル
     .m    Objective-C ソース; プリプロセス, コンパイル, アセンブル
     .i    プリプロセス済みの C 言語; コンパイル, アセンブル
     .ii   プリプロセス済みの C++; コンパイル, アセンブル
     .s    アセンブラソース; アセンブル
     .S    アセンブラソース; プリプロセス, アセンブル
     .h    プリプロセッサファイル; 通常はコマンドラインには現れな
     い

     それ以外の拡張子を持つファイルはリンカに渡される。通常は次 の
     ファイルで ある。

     .o    オブジェクトファイル
     .a    アーカイブファイル

     オプション -c, -S, -E を指定して抑制しなかった場合は、最後 の
     ス テー ジとしてリンクが行な われる (またはコンパイルエラーに
     よってすべての処理が中断する)。リンク のステージにおいて は、
     ソー スファイルに対応したすべての .o ファイルと -l によるライ
     ブラリと理解できなかったファイル名 (名前として .o を持つオ ブ
     ジェ クトファイルや .a を持つアーカイブを含む) は、コマンドラ
     インに並べられた順番でリンカに渡される。

オプション
     オプションは分割されていなければならない。すなわち `-dr'  は
     `-d -r 'とは異なった扱いを受ける

     ほとんどの `-f' と `-W' 形式のオプションは -fname  -fno-name
     (ま たは -Wname -Wno-name) の形式で指定、または抑制ができる。
     ここではデフォルトでない形式の みを示す。

     すべてのオプションをタイプ別に分けてここにまとめる。詳しい 解
     説は以 下の章で行なう。

     全体的なオプション
          -c -S -E -o file -pipe -v -x language

     言語オプション
          -ansi -fall-virtual -fcond-mismatch
          -fdollars-in-identifiers -fenum-int-equiv
          -fexternal-templates -fno-asm -fno-builtin
          -fno-strict-prototype -fsigned-bitfields -fsigned-char
          -fthis-is-variable -funsigned-bitfields -funsigned-char
          -fwritable-strings -traditional -traditional-cpp
          -trigraphs

     警告オプション
          -fsyntax-only -pedantic -pedantic-errors -w -W -Wall
          -Waggregate-return -Wcast-align -Wcast-qual
          -Wchar-subscript -Wcomment -Wconversion -Wenum-clash
          -Werror -Wformat -Wid-clash-len -Wimplicit -Winline



GNU Tools             Last change: 94/03/29                     2






GCC(1)                      GNU Tools                      GCC(1)



          -Wmissing-prototypes -Wnested-externs -Wno-import
          -Wparentheses -Wpointer-arith -Wredundant-decls
          -Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch
          -Wtemplate-debugging -Wtraditional -Wtrigraphs
          -Wuninitialized -Wunused -Wwrite-strings

     デバッグオプション
          -a -dletters -fpretend-float -g -glevel -gcoff -gxcoff
          -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+ -ggdb -p -pg
          -save-temps -print-libgcc-file-name

     最適化オプション
          -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
          -fdelayed-branch -felide-constructors
          -fexpensive-optimizations -ffast-math -ffloat-store
          -fforce-addr -fforce-mem -finline-functions
          -fkeep-inline-functions -fmemoize-lookups
          -fno-default-inline -fno-defer-pop -fno-function-cse
          -fno-inline -fno-peephole -fomit-frame-pointer
          -frerun-cse-after-loop -fschedule-insns
          -fschedule-insns2 -fstrength-reduce -fthread-jumps
          -funroll-all-loops -funroll-loops -O -O2

     プリプロセッサオプション
          -Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H
          -idirafter dir -include file -imacros file -iprefix
          file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P
          -Umacro -undef

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

     リンカオプション
          -llibrary -nostartfiles -nostdlib -static -shared
          -symbolic -Xlinker option -Wl,option -u symbol

     ディレクトリオプション
          -Bprefix -Idir -I- -Ldir

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

     コンフィギュレーション依存オプション
          M680x0 オプション
          -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
          -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield -mrtd
          -mshort -msoft-float

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

          SPARC オプション



GNU Tools             Last change: 94/03/29                     3






GCC(1)                      GNU Tools                      GCC(1)



          -mepilogue -mfpu -mhard-float -mno-fpu -mno-epilogue
          -msoft-float -msparclite -mv8

          Convex オプション
          -margcount -mc1 -mc2 -mnoargcount

          AMD29K オプション
          -m29000 -m29050 -mbw -mdw -mkernel-registers -mlarge
          -mnbw -mnodw -msmall -mstack-check -muser-registers

          M88K オプション
          -m88000 -m88100 -m88110 -mbig-pic -mcheck-zero-division
          -mhandle-large-shift -midentify-revision
          -mno-check-zero-division -mno-ocs-debug-info
          -mno-ocs-frame-position -mno-optimize-arg-area
          -mno-seriazlize-volatile -mno-underscores
          -mocs-debug-info -mocs-frame-position
          -moptimize-arg-area -mserialize-volatile
          -mshort-data-num -msvr3 -msvr4 -mtrap-large-shift
          -muse-div-instruction -mversion-03.00
          -mwarn-passed-structs

          RS6000 オプション
          -mfp-in-toc -mno-fop-in-toc

          RT オプション
          -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
          -mfull-fp-blocks -mhc-struct-return -min-line-mul
          -mminimum-fp-blocks -mnohc-struct-return

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

          i386 オプション
          -m486 -mno-486 -msoft-float -mno-fp-ret-in-387

          HPPA オプション
          -mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs
          -mno-shared-libs -mlong-calls -mdisable-fpregs
          -mdisable-indexing -mtrailing-colon

          i960 オプション
          -mcpu-type -mnumerics -msoft-float -mleaf-procedures
          -mno-leaf-procedures -mtail-call -mno-tail-call
          -mcomplex-addr -mno-complex-addr -mcode-align
          -mno-code-align -mic-compat -mic2.0-compat
          -mic3.0-compat -masm-compat -mintel-asm -mstrict-align



GNU Tools             Last change: 94/03/29                     4






GCC(1)                      GNU Tools                      GCC(1)



          -mno-strict-align -mold-align -mno-old-align

          DEC Alpha オプション
          -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float

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

     コード生成オプション
          -fcall-saved-reg -fcall-used-reg -ffixed-reg
          -finhibit-size-directive -fnonnull-objects -fno-common
          -fno-ident -fno-gnu-linker -fpcc-struct-return -fpic
          -fPIC -freg-struct-returno -fshared-data -fshort-enums
          -fshort-double -fvolatile -fvolatile-global
          -fverbose-asm

全体的なオプション
     -x language
          このオプションに続くファイルの言語を language に仮 定 す
          る  (拡張子に基づくデフォルトよりも優先される)。このオプ
          ショ ンは次の `-x' オプションが出てくるまでの全ての入 力
          ファ イ ル に対して適用される。language としては、 `c',
          `objective-c', `c-header', `c++', `cpp-output', `assem-
          bler', `assembler-with-cpp' をとることが可能である。

     -x none
          言語の指定を解除する。このオプションに続くファイルにはそ
          れ らの拡張子に よって (あたかも何の `-x' オプションも使
          用されたことがないように) 扱われる。

     もし、4 つのステージ (プリプロセス、コンパイル、アセンブ ル、
     リ ン ク) の 一部のみが必要な場合は、 `-x' オプション (または
     ファイル名の拡張子) を使用して gcc に対してどのステージから開
     始 するかを伝え, さらに `-c', `-S', `-E' のオプションのうちの
     どれかを使用して gcc に対してどこで処理を停止させるかを指定す
     る こ と が 可 能である。ここで いくつかの組合せ (例えば `-x
     cpp-output -E') は gcc に対して何の動作も行なわないように指定
     することになる事実に注意する 必要がある。

     -c   ソースファイルをコンパイル、またはアセンブルするが、リン
          ク をしない。コ ンパイラの出力は、それぞれのソースファイ
          ルに対応したオブジェクトファイ ルとなる。

          デフォルトでは、GCC はオブジェクトファイルのファイル名と
          して、拡張子 `.c', `.i', `.s' 等を `.o' で置き換えたもの
          を使用する。 -o オプションを使用することによって、他の名
          前を指定することも可能であ る。

          GCC は -c オプションを使用した場合、理解できない ファ イ
          ル  (コンパイルやアセンブ ルを必要としないファイル) を無
          視する。




GNU Tools             Last change: 94/03/29                     5






GCC(1)                      GNU Tools                      GCC(1)



     -S   コンパイルが終った所で処理を停止する。アセンブラでない入
          力 ファイルが指 定されていた場合は、出力はアセンブラコー
          ドのファイルになる。

          デフォルトでは GCC はアセンブラファイルのファイル名と し
          て、拡張子 `.c', `.i' 等を `.s' で置き換えたものを使用す
          る。 -o オプションを使用することによって、他の名前を指定
          することも可能であ る。

          GCC はコンパイルを必要としない入力ファイルを全て無 視 す
          る。

     -E   プリプロセス処理が終了したところで停止する。コンパイラは
          起 動されない。 出力はプリプロセス済みのソースコードであ
          り、標準出力へと送られる。

          GCC はプリプロセスを必要としない入力ファイルを全て無視す
          る。

     -o file
          出力先を file に指定する。このオプションは GCC が実行 可
          能 ファイル、オブジェクトファ イル、アセンブラファイル、
          プリプロセス済み C 言語などの、いかなる種類 の出力を行な
          う場合も適用可能である。

          ここで指定できるのはただ 1 つのファイル名のみで あ り、
          `-o'  を複数の入力ファイルをコンパイルする際に使用するこ
          とは、実行ファ イルを出力する時以外は無意味である。

          `-o'オプションを指定しなかった場合のデフォルトは、 実 行
          ファ  イ  ル  の  場   合  `a.out'  と い う 名 前 で あ
          る。`source.suffix' の形式のファイル名を持ったソースファ
          イルのオブジェクトファイルは `source.o' であり、アセンブ
          ラのファイルは `source.s' である。 プリプロセス済みの C
          言語は、全て標準出力に送られる。

     -v   (標準エラー出力に対して) コンパイルの各ステージで実行 さ
          れ る コ マンドを 表示する。コンパイラドライバ、プリプロ
          セッサ、コンパイラの各バージョン 番号も表示する。

     -pipe
          コンパイル時のステージの間のデータの受け渡しに、一時ファ
          イ ルではなくパ イプを使用する。いくつかのシステムではア
          センブラがパイプからの入力を受け 付けることができない た
          め に、このオプションを指定すると失敗する。しかし、 GNU
          アセンブラは問題なく使用できる。

言語オプション
     以下のオプションはコンパイラが受け付ける C の方言に関する指定
     を行なう。

     -ansi



GNU Tools             Last change: 94/03/29                     6






GCC(1)                      GNU Tools                      GCC(1)



          全ての ANSI 標準の C プログラムをサポートする。

          このオプションは、GNU C が持つ ANSI C との非互換性を全て
          抑 制する。例え ば、asm, inline, typeof などのキーワード
          や、unix や vax などの現在使用しているシステムを規定する
          定 義済みマクロなどが抑制される。 さらに、好ましくなくか
          つほとんど使用されない ANSI のトライグラフの機能を使  用
          可 能とし、さらに `$' を識別子の一部として使用不可能にす
          る。

          代替キー ワー ド  __asm__,  __extension__,  __inline__,
          __typeof__ は `-ansi' が指定された場合も、使用することが
          可能である。もちろんこれらの ANSI C プログラムにおける使
          用が望ましくないことは当然であるが、`-ansi' をつけてコン
          パイルされる場合でも、インクルードされるヘッダファイル中
          に  これらが記述できるということは有用である。 __unix__
          や __vax__ などの代替定義済みマクロは、 `-ansi' が指定さ
          れた場合も指定されなかった場合も、使用することが可能であ
          る。

          `-ansi' オプションは、非 ANSI プログラムを意味もなく拒否
          す る こ とはない。 もしこのような動作を行なわせたい場合
          は`-pedantic' オプションを `-ansi'に加えて指定する必要が
          ある。

          プリプロセッサ定義済みマクロ __STRICT_ANSI__ が `-ansi'
          オ プ ションを使用した際には指定される。いくつかのヘッダ
          ファイルはこのマ クロを利用して、ANSI 標準が望まない関数
          や マクロの定義を抑制する。この オプションそれらの関数や
          マクロと同じ名前を別の目的で使用するプログラム を扱う 場
          合の混乱を防ぐために使用される。

     -fno-asm
          asm, inline , typeof をキーワードとして解釈しない。 これ
          ら の 単 語は識別子として解釈される。これらの代用として
          __asm__, __inline__, __typeof__ が使用できる。  `-ansi'
          の指定は、暗黙のうちに `-fno-asm' を含む。

     -fno-builtin
          ビルトイン関数のうち、2 つのアンダースコアで始まるもの以
          外の使用を抑制する。 現在、この指定は_exit, abort, abs,
          alloca, cos, exit, fabs,  labs,  memcmp,  memcpy,  sin,
          sqrt, strcmp, strcpy, strlen の関数に影響を及ぼす。

          `-ansi' オプションを指定すると、alloca と _exit はビルト
          イン関数として扱われなくなる。

     -fno-strict-prototype
          `int foo ();' のような、引数を指定しない関数宣言を、C 言
          語 のように引数の数や 型について何の仮定もしないという扱
          いにする (C++ のみ)。通常はこのよう な宣言は、C++ で は
          foo という関数が 1 つも引数をとらないことを意味する。



GNU Tools             Last change: 94/03/29                     7






GCC(1)                      GNU Tools                      GCC(1)



     -trigraphs
          ANSI C のトライグラフを使用可能とする。`-ansi' オプ ショ
          ンの指定は暗黙のうちに `-trigraphs' を含む。

     -traditional
          伝統的な C コンパイラのいくつかの特徴をサポートする。 詳
          しくは GNU C の マニュアルを参照して欲しい。以前はここに
          そのリストの複製を載せていたが、 それらが完全に時代遅 れ
          になった時の混乱を避けるため、削除した。

          しかし、1 つだけ C++ のプログラムについて (C ではな い)
          特 記 しておくこと がある。 `-traditional' オプションは
          C++ に対して 1 つだけ特別な効果を持つ。これは this へ の
          代 入を可能とする。これは `-fthis-is-variable'オプション
          によって指定される効果と同一のものである。

     -traditional-cpp
          伝統的な C プリプロセッサのいくつかの特徴をサ ポー ト す
          る。 これは上に挙 げた中で特にプリプロセッサに関係したも
          のを含むが、 `-traditional' の指定によって引き起こされる
          以外の効果を及ぼすことはない。

     -fdollars-in-identifiers
          識別子中の `$'  の 使 用 を 許 可 す る  (C++  の み)。
          `-fno-dollars-in-identifiers' を使用することによって、明
          示的に `$'の使用を禁止することも可能である。(GNU C++  が
          デ フォルトで `$' の機能を許可しているシステムと、禁止し
          ているシステムがある)。

     -fenum-int-equiv
          int から列挙型への暗黙の変換を許可する (C++ のみ)。通 常
          は  GNU C++ は enum から int への変換は許可しているが、
          逆は許していない。

     -fexternal-templates
          テンプレート関数について、その関数が定義された場所にのみ
          単 一のコピー を生成することによって、テンプレート宣言に
          対してより小さなコードを生成 する (C++ のみ)。この オ プ
          ショ ンを使用して正しいコードを得るためには、 テンプレー
          トを使用する全てのファイルにおいて、`#pragma  implemen-
          tation'  (定義) または `#pragma interface' (宣言) を記述
          しておく必要がある。

          `-fexternal-templates' を指定してコンパイルを行なう場 合
          に は、全てのテンプレートの 実体は external となる。全て
          の使用される実体はインプリメンテーションファ イル中に ま
          とめて記述しておかなければならない。これはその必要とされ
          る実 体に対応した typedef 宣言を行なうことによって実現で
          き  る。   逆  に、  デ  フォ  ル  ト  の オ プ ショ ン
          `-fno-external-templates' でコンパイルした場合には全ての
          テンプレートの実体は internal となる。




GNU Tools             Last change: 94/03/29                     8






GCC(1)                      GNU Tools                      GCC(1)



     -fall-virtual
          可能な限り全てのメンバ関数を暗黙のうちに仮想関数として扱
          う。 全てのメン バ関数 (コンストラクタと new , delete メ
          ンバ演算子を除く) は、出現した時点でそのクラスの仮想関数
          とし て扱われる。

          これは、全ての場合においてメンバ関数への呼び出しが仮想関
          数 のための内部 テーブルを参照して間接的に決定されるとい
          うことを意味しない。特定の状況 においては、コンパイラ は
          与 えられた仮想関数への呼び出しを直接決定できる。 このよ
          うな場合には関数呼び出しは常に直接呼び出しとして取 り 扱
          う。

     -fcond-mismatch
          条件演算子の第 2, 第 3 引数の型が異なる記述を許す。こ の
          式の型は void となる。

     -fthis-is-variable
          this への代入を許可する (C++ のみ)。ユーザ定義による記憶
          管 理が可 能となった現在では、 `this' への代入は時代遅れ
          のものとなった。従ってデフォルトでは、クラスの メンバ 関
          数からの this への代入は不当なものとして扱われている。し
          かし、後方互換性のために、 `-fthis-is-variable' を指定す
          ることによってこの効果を得ることができる。

     -funsigned-char
          char 型を unsigned char のように符号無しとして扱う。

          それぞれのマシンには char がどちらであるべきかとい う デ
          フォルトがある。 これはデフォルトで unsigned char である
          こともあるし、デフォルトで signed char であるこ と も あ
          る。

          理想的には、可搬性のあるプログラムは、オブジェクトの符号
          の 有無に依 存する記述を行なう場合には常に signed char、
          もしくは unsigned char を使用すべきである。 しかし実際に
          は多くのプログラムが単なる char を用いて記述されており、
          さらにそのプログラムを記述した 環境に依存して、符号付 き
          で ある、あるいは符号無しであるという暗黙の仮定が 行なわ
          れている。このオプション、あるいはこの逆のオプションは、
          デ フォル トと逆の動作を行なわせることにより、これらのプ
          ログラムを正しく動作させ ることを可能とする。

          char 型は常に signed char あるいは unsigned char とは 区
          別された型として扱われる。たとえ常にそれらの振舞いがその
          どち らかと全く同じであるということに関わらず、このよ う
          な扱いを行なう。

     -fsigned-char
          char 型を signed char  型のように符号付きとして扱う。

          ただし、このオプションは `-fno-unsigned-char' と等価であ



GNU Tools             Last change: 94/03/29                     9






GCC(1)                      GNU Tools                      GCC(1)



          る。 こ れ は  `-funsigned-char'の 否定形である。同様に
          `-fno-signed-char' は `-funsigned-char' と等価である。

     -fsigned-bitfields

     -funsigned-bitfields

     -fno-signed-bitfields

     -fno-unsigned-bitfields
          これらのオプションは、明示的に `signed'  ま た は  `un-
          signed' の指定が行なわれていないビットフィールドが符号付
          きであるか、ある いは符号無しであるかを制御する。デ フォ
          ル トではこのようなビットフィール ドは符号つきとなってい
          る。なぜなら、基本的な int のような基本的な型は符号付 で
          あるという点で、整合性があるからである。

          ところが、`-traditional' を指定した場合は、ビット フィー
          ルドは常に全て符号無しであるとされ る。

     -fwritable-strings
          文字定数を書き込み可能なデータセグメントに配置し、同内容
          の 文 字 列を 1 つの共有オブジェクトにする処理を行なわな
          い。これは、文字定数に書き込む ことができることを仮定 し
          た 昔 の プ ロ グラムとの互換性をとるために提供され てい
          る。`-traditional' オプションも同様の効果を含む。

          文字定数に書き込むという考えは非常に良くない 考 え で あ
          る。"定数" は定数であるべきである。

プリプロセッサオプション
     これらのオプションは C プリプロセッサを制御する。C プリ プ ロ
     セッ サはそ れぞれの C のソースファイルについて、実際のコンパ
     イルが行なわれる前に 起動される。

     `-E' オプションを使用すると、GCC はプリプロセス以外の処理を行
     な わない。 以下に示すオプションのいくつかは、`-E' と同時に使
     用された時のみ意味を持つ。これらのオプションによって実 際のコ
     ン パ イ ルには不適当なプリプロセッサ出力が生成されるためであ
     る。

     -include file
          file を、通常の入力ファイルが処理されるよりも前に処理 す
          る。結果的に file に含まれる内容は、一番最初にコンパイル
          されることになる。コマンドラ インに指定されたすべ て の
          `-D'  や `-U' オプションは、その記述された順番に関わらず
          常に `-include file' が処理される前に処理される。全ての
          `-include'  や `-imacros' オプションは、それらが記述され
          た順番通りに処理される。

     -imacros file
          file を入力として処理するが、通常の入力ファイルを処理 す



GNU Tools             Last change: 94/03/29                    10






GCC(1)                      GNU Tools                      GCC(1)



          る 前にその結果の 出力を捨てる。従って、 file によって生
          成された出力は捨てられ、唯一 `-imacros file' の処理結 果
          と し て、file  中に記述されたマクロのみが、メインの入力
          ファイル中で使用可能になる。 プリプロセッサはコマンド ラ
          インから与えられた全ての `-D' や `-U' オプションを、それ
          らが記述された順番に関わらず `-imacrosfile' を処理する前
          に 評価する。全ての `-include' and `-imacros' オプション
          は、それらが記述された順番通りに処理される。

     -idirafter dir
          ディレクトリ dir を第 2 インクルードパスに加える。第  2
          イ ンクルードパス中のディレク トリは、メインインクルード
          パス (オプション `-I' によって追加される) 中にヘッダファ
          イルを探した結果発見できな かった場合に検索される。

     -iprefix prefix
          prefix を、続く `-iwithprefix' オプションのプレフィッ ク
          スとして使用する。

     -iwithprefix dir
          ディレクトリを第 2 インクルードパスに追加する。ディレ ク
          ト リ名は prefix と dir を連結することによって得られる。
          ここで prefix は、`-iprefix' オプションによって指定さ れ
          る。

     -nostdinc
          ヘッダファイルのための標準のシステムディレクトリを検索し
          な い。`-I' オプションによって指定したディレクトリ (また
          はカレントディレクト リ) のみを検索する。

          `-nostdinc' と `-I-'を使用することにより、インク ルー ド
          ファ イルの検索パスを明示的に指 定したディレクトリのみに
          限定することが可能となる。

     -nostdinc++
          ヘッダファイルのための標準の C++-固有のディレクトリを 検
          索 し な い。ただ しそれ以外の標準ディレクトリは検索され
          る。 (このオプションは `libg++' の構築に使用される)

     -undef
          標準でない定義済みマクロを定義しない。(アーキテクチャ フ
          ラグを含む)

     -E   C プリプロセッサの処理のみを行なう。指定され全ての C  の
          ソー スファイル に対してプリプロセスの処理を行ない、標準
          出力、または指定された出力ファ イルに対して出力 を 行 な
          う。

     -C   プリプロセッサに対してコメントの削除を行なわないように指
          定する。 `-E' オプションとともに使用される。

     -P   プリプロセッサに対して `#line' コマンドを生成しないよ う



GNU Tools             Last change: 94/03/29                    11






GCC(1)                      GNU Tools                      GCC(1)



          に指定する。 `-E' オプションとともに使用される。

     -M   プリプロセッサに対してmake で使用可能な、オブジェクト 間
          の 依存関係を記述した出力を生成するように指 定する。それ
          ぞれのソースファイルに対して、プリプロセッサは make のた
          めの規則を出力として与える。この出力はターゲットとしてオ
          ブジェ クトファイルのファイル名をとり、ソースファイルに
          `#include'  された全てのファイルが依存性のあるファイルと
          して与えられる。この 規則は 1 行、あるいは長 い 場 合 に
          は`\' による改行を入れて出力される。この規則のリストは、
          プリプロセス済 みの C プログラムのかわりに、標準出力へと
          出力される。

          `-M' は暗黙のうちに `-E' を含む。

     -MM  `-M' と似ているが、`#include file"'によってインクルー ド
          さ れ る ユーザ定義のヘッダファイルのみを対象に した出力
          ファイルを生成する。`#include ' によってインクルー
          ドされるシステムヘッダファイルは省略される。

     -MD  `-M' と似ているが、依存性情報は出力ファイル名の最 後 の
          `.o'  を `.d' に置き換えたファイル名のファイルに対して出
          力される。 `-MD' を指定したファイルのコンパイルもこれ に
          加えて行なわれ、 `-M' のように通常のコンパイルを抑制する
          ことはない。

          Mach のユーティリティ `md' はこれらの複数の `.d' ファ イ
          ルを `make' コマンドによって使用できる単一の依存性ファイ
          ルへとマージする用途に使用 することができる。

     -MMD `-MD' と似ているが、ユーザヘッダファイルのみを対象とし、
          システムヘッダ ファイルを無視する。

     -H   通常の動作に加えて、使用されたヘッダファイルの名前を表示
          する。

     -Aquestion(answer)
          questionに対するアサーション answer  を定義する。これは
          `#if  #question(answer)'  のようなプリプロセッサ条件節に
          よってテストされる。`-A-' は標準のアサーションを禁 止 す
          る。 通常はこれはターゲットマシンに関 する情報を表してい
          る。

     -Dmacro
          マクロ macro に対して文字列 `1' を定義として与える。

     -Dmacro=defn
          マクロ macro を defn に定義する。コマンドライン上の全 て
          の `-D' オプションは `-U' オプションの処理を行なう前に処
          理される。

     -Umacro



GNU Tools             Last change: 94/03/29                    12






GCC(1)                      GNU Tools                      GCC(1)



          マクロ macro の定義を無効にする。`-U' オプションは 全 て
          の  `-D'  オ プ ションの処理が終了した後、`-include' と
          `-imacros' オプションの処理の前に処理される。

     -dM  プリプロセッサに対して、プリプロセス終了時に有効であった
          マ ク ロの定義の みを出力とすることを指定する。`-E' オプ
          ションとともに使用する。

     -dD  プリプロセッサに対して、全てのマクロ定義を適切な順番で出
          力中にそのまま 出力するように指定する。

     -dN  `-dD' と似ているが、マクロの引数と内容 を 削 除 す る。
          `#define name' のみが、出力として与えられる。

アセンブラオプション
     -Wa,option
          オプション option をアセンブラに対するオプションとして渡
          す。option  がコンマを含む場合は、そのコンマで区切られた
          複数のオプションとして与え られる。

リンカオプション
     これらのオプションはコンパイラがオブジェクトファイル群をリ ン
     ク して 1 つ の実行可能ファイルを出力する際に使用されるもので
     ある。これらはコンパイ ラがリンク段階を行なわない場合には意味
     を持たない。

     object-file-name
          特別に認識される拡張子で終っていないファイル名は、 オ ブ
          ジェ ク ト ファ イ ル、 またはライブラリであると認識され
          る。(オブジェクトファイルとライブラリ ファイルの違いはそ
          の 内容に従ってリンカによって区別される。) GCC がリン ク
          段階を行なう場合は、これらのファイルはリンカへの入力とし
          て使用される。

     -llibrary
          library をライブラリとしてリンク時に使用する。

          リンカは標準のライブラリ用ディレクトリのリスト中に、実際
          の 名 前 とし て `liblibrary.a' を持ったファイルを検索す
          る。リンカはこのファイルを、直接にファイル 名で指定さ れ
          た場合と同様に使用する。

          検索されるディレクトリは、いくつもの標準システムディレク
          トリと、`-L' によって指定されるディレクトリを含む。

          通常は、この方法で発見されるファイルはライブラリ ファ イ
          ル、 つまり複数の オブジェクトファイルをメンバとして含む
          アーカイブファイルである。 リンカは、参照されているが 定
          義 されていないシンボルを含む、アーカイブファ イル中のメ
          ンバを検索する。しかしリンカは、ライブラリでない通常のオ
          ブ ジェ  ク トファイルを発見した場合は、そのオブジェクト
          ファイルを通常の方法でリ ンクする。`-l' オプションを使用



GNU Tools             Last change: 94/03/29                    13






GCC(1)                      GNU Tools                      GCC(1)



          する場合とファイル名を直接指定する場合の違いは、`-l' は
          library を `lib' と `.a' で囲み、いくつものディレクト リ
          を検索することだけである。

     -lobjc
          Objective C のプログラムをリンクする場合は、この特別 な
          -l オプションを指定する必要がある。

     -nostartfiles
          標準のシステムスタートアップファイルをリンク時に使用しな
          い。標準ライブ ラリは通常通りに使用される。

     -nostdlib
          標準のシステムライブラリとスタートアップファイルをリンク
          時 に 使 用しない。 指定したファイルのみがリンカに渡され
          る。

     -static
          ダイナミックリンクをサポートするシステムにおいて、このオ
          プ ションは共有 ライブラリとのリンクを抑制する。それ以外
          のシステムではこのオプションは 意味を持たない。

     -shared
          他のオブジェクトとリンクして実行可能プログラムを形成し得
          る 共 有 オブジェ クトを生成する。ごく少数のシステムでの
          み、このオプションはサポートされ ている。

     -symbolic
          共有オブジェクトを構築する際に、グローバルなシンボルへの
          参 照をバインド する。全ての解決できなかった参照に対して
          警告を与える (ただしリンクエディ タオプション `-Xlinker
          -z  -Xlinker defs' によってこれを無効化した場合を除く)。
          ごく少数のシステムでのみ、 このオプションはサポートさ れ
          ている。

     -Xlinker option
          オプション option をリンカに対して渡す。これはシステム固
          有のリンカのオプションで GNU CC が理解しないオプションを
          使用する時に利用できる。

          引数を持ったオプションを渡したい場合は、 `-Xlinker'  を
          2 度使用すればよい。1 度目でオプションを渡し、2 度目で引
          数を 渡す。例えば `-assert definitions' を渡 す に は、
          `-Xlinker -assert -Xlinker definitions' のように記述すれ
          ばよい。 `-Xlinker "-assert definitions"' のように指定し
          た場合は正常に動作しない。なぜならこれは、文字列全 体を
          1 つの引数として渡してしまい、リンカの期待する形式 と 異
          なってしま うからである。

     -Wl,option
          オプション option をリンカに渡す。option がコンマを含 む
          場 合は、それらのコンマで複数のオプションとして分割さ れ



GNU Tools             Last change: 94/03/29                    14






GCC(1)                      GNU Tools                      GCC(1)



          る。

     -u symbol
          シンボル symbol が未定義であるかのように振舞う。これは強
          制 的にこのシンボルを定義してい るライブラリモジュールを
          リンクするために使用する。`-u' は異なったシンボルに対 し
          て 複数回使用することができる。これによっ て、さらに多く
          のライブラリモジュールを読み込ませることができる。

ディレクトリオプション
     これらのオプションは、ヘッダファイル、ライブラリ、コンパイ ラ
     の一部を検 索するディレクトリを指定するために使用される。

     -Idir
          ディレクトリ dir を、インクルードファイルの検索リスト 中
          に追加する。

     -I-  `-I-' オプション指定前に `-I' オプションによって指定され
          た 全てのディレクトリは、 `#include "file"' によってのみ
          検索される。 これらのディレクトリは `#include ' に
          よっては検索されない。

          ` -I-' オプション指定後に `-I' で指定したディレ ク ト リ
          は、 全 て の  `#include' ディレクティブによって検索され
          る。(通常は 全ての `-I' で指定されたディレクトリは こ の
          方法で検索される。)

          これに加えて `-I-' オプションは、カレントディレク ト リ
          (現 在 の 入力ファイルが存在する ディレクトリ) が `#in-
          clude "file"' に対する最初の検索対象となることを抑 制 す
          る。`-I-'に よるこの効果を抑制する方法はない。`-I.' を指
          定することによって、コンパイラが起動されたディレクトリが
          検 索 されることを指定することは可能である。これはプリプ
          ロセッサが行なうデフォ ルトの動作とは異なるが、しばし ば
          これで十分である。

          `-I-' は、ヘッダに対する標準のシステムディレクトリの検索
          を 抑制しない。 従って、`-I-' と `-nostdinc' は 独立であ
          る。

     -Ldir
          ディレクトリdir を  `-l' による検索が行なわれるリスト に
          加える。

     -Bprefix
          このオプションはコンパイラ自身の実行形式、ライブ ラ リ、
          データファイルの 検索場所を指定する。

          コンパイラドライバは 1 つ、あるいはそれ以上のサブプロ グ
          ラ ム  `cpp',  `cc1' (または C++ においては `cc1plus'),
          `as', そして`ld' を起動する。コンパイラドライバは  pre-
          fix に `machine/version/' をつけたものとつけないものの双



GNU Tools             Last change: 94/03/29                    15






GCC(1)                      GNU Tools                      GCC(1)



          方を起動するプログラムのプレフィッ クスとして使用する。

          コンパイラドライバは起動するサブプログラムとして、 `-B'
          プレフィックスの指定がある限りは、それを最初に使用する。
          もしその 名前が見つからなければ、または `-B' が指定さ れ
          て い な け れ ば、 ドライバは 2 つの標準プレフィックス
          `/usr/lib/gcc/' と `/usr/local/lib/gcc-lib/' を試み る。
          こ のどちらにも見つからなければ、コンパイラドライバは、
          環境変数 `PATH' を利用して、そのプログラム名 を 検 索 す
          る。

          ランタイムサポートファイル `libgcc.a' も、必要 な ら ば
          `-B'  プレフィックスを用いて検索される。もしそこに見つか
          らなければ、2 つの標準プレフィックスが試みられるが、それ
          で 終りである。この場合はリン クの対象から外される。ほと
          んどの場合、またほとんどのマシンでは、 `libgcc.a' は実際
          には重要ではない。

          これと同じ効果を、環境変数 GCC_EXEC_PREFIX によっても 得
          る ことができる。もしこの環境変数が定義されていれば、こ
          の値がプレフィックスとして同様に使用される。もし `-B' オ
          プ ションと GCC_EXEC_PREFIX 環境変数の双方が存在した場合
          は、 `-B' オプションが最初に使用され、環境変数は次に使用
          される。

警告オプション
     警告は、本質的に間違いであるわけではないが、危険な構造を報 告
     したり、そ こにエラーが含まれ得るような部分に対する示唆を行な
     う診断メッセージであ る。

     以下のオプションは、GNU CC が生成する警告の量と種類を制 御 す
     る。

     -fsyntax-only
          コードの文法エラーをチェックするが、一切出力は行な わ な
          い。

     -w   全ての警告メッセージを抑制する。

     -Wno-import
          #import の結果として生じる警告メッセージを抑制する。

     -pedantic
          厳密な ANSI 標準 C 言語による全ての警告を表示し、許さ れ
          ていない拡張を 使用したプログラムを全て拒否する。

          正当な ANSI 標準 C プログラムは、このオプションの有無 に
          関 わらずコンパ イルできるべきである (もっとも、ほんのわ
          ずかではあるが `-ansi' を必要とするものはある)。しかし、
          このオプションを使用しない場合、 GNU 拡張や伝統的な C の
          特徴も、これに加えてサポートされる。このオプショ ンを 使
          用 すれば、それらは拒絶される。このオプションを使う 理由



GNU Tools             Last change: 94/03/29                    16






GCC(1)                      GNU Tools                      GCC(1)



          はないが、衒学者たちを満足させるためにのみ、存在し て い
          る。

          `-pedantic' は、`__' で始まる代替キーワードの使用につ い
          ては、警告を行なわない。ペダン ティックな警告は、 __ex-
          tension__ に続く表現についても抑制される。しかし、システ
          ム ヘッダファイルのみ がこの抜け道を使用すべきであり、ア
          プリケーションプログラムはこれを避け るべきである。

     -pedantic-errors
          `-pedantic' と似ているが、警告のかわりにエラーを出す。

     -W   以下のイベントに対して、特別な警告メッセージ を 表 示 す
          る。

        o+ Volatile でない自動変数が longjmp への呼び出しによって変
          更 され得る。これらの警告は最適化コンパイルの 時のみ、問
          題になり得る。

          コンパイラは setjmp への呼び出しのみを考慮する。コンパイ
          ラ は、どこで longjmp が呼び出されるかを知ることはできな
          い。実際には、シグナルハンドラは コード中の任意の場所で
          longjmp  を 呼 び 出 す こ とができる。従って、実際には
          longjmp への呼び出しが危険な部分からは行なわれていないた
          め に問題のないプ ログラムについても、警告が発せられるこ
          とになる。

        o+ 関数は値を伴っても、伴わなくても、リターンすることができ
          る。(関数の最 後を抜けていくことは、値を伴わずに関数をリ
          ターンするとみなされる。) 例 えば、次の関数はこのよう な
          警告を引き起こす。

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

          いくつかの関数 (abort や longjmp を含む) がリターンし な
          い と いうことを GNU CC が理解しないために、非論理的な警
          告 が発生し得る。

        o+ 一切の副作用を含まない expression-statement。

        o+ 符号無しの値が 0 と `>' または `<=' で比較されている。

     -Wimplicit
          関数やパラメータに対する暗黙の宣言に対して常 に 警 告 す
          る。

     -Wreturn-type
          関数の戻り値の型がデフォルトで int に定義された時に常 に



GNU Tools             Last change: 94/03/29                    17






GCC(1)                      GNU Tools                      GCC(1)



          警告する。同時に、戻り値の型が voidでない関数内でreturn
          文に対して戻り値が与えられなかった場合にも常に警告を与え
          る。

     -Wunused
          ローカル変数が宣言されたにも関わらず使用されていな い 場
          合、 静的に宣言さ れた関数の実体が定義されていない場合、
          結果を計算する文がありながら、そ の値が実際には使用さ れ
          ていない場合の全てを警告する。

     -Wswitch
          switch 文が、インデックスとして列挙型をとっている時、 そ
          の 列挙型中のいくつ かに対する case が欠けている時に常に
          警告する。(default ラベルが存在する場合、この警告は抑 制
          される)  列挙型の範囲を越えたcase ラベルも、このオプショ
          ンを使用した場合には常に警告される。

     -Wcomment
          コメントの開始文字列 `/*' がコメント中に現れた時に常に警
          告する。

     -Wtrigraphs
          トライグラフの出現を常に警告する (トライグラフが使用可能
          であると仮定す る)。

     -Wformat
          printf , scanf などへの呼びだしに対して、与えられた引 数
          が、 フォーマット文字列の指 定を満足する型を持っているか
          を検査する。

     -Wchar-subscripts
          配列の添字の型が char であった場合に警告する。これはよく
          あ る間違いのもとである。 いくつかのマシンにおいてはこの
          型が符号付きであることを、プログラマはし ばしば忘れて し
          まう。

     -Wuninitialized
          初期化されていない自動変数が使用されている。

          これらの警告は最適化コンパイルを行なう時のみ発生する。な
          ぜ な ら これらの 警告は最適化を行なう時にのみ計算される
          データフロー情報を必要とするから である。もし `-O' を 指
          定しなかった場合はこれらの警告を得ることはできない。

          これらの警告はレジスタ割り当ての対象となった変数について
          の み 発 生する。 従って volatile であると宣言された変数
          や、使用するアドレスを求めた変数、サイズ が 1, 2, 4,  あ
          るいは 8 バイト以外の変数に関してはこれらの警告は発生し
          ない。さらに、構造体、共用体、配列については、たとえそれ
          ら がレジスタに 割り当てられたとしても、これらの警告は発
          生しない。




GNU Tools             Last change: 94/03/29                    18






GCC(1)                      GNU Tools                      GCC(1)



          ある変数によって計算された値が結局使用されないような変数
          に ついては一切 の警告が生じないことに注意。これらの計算
          はデータフロー解析によって、警 告が表示される前に削除 さ
          れる。

          これらの警告をオプショナルにした理由としては、GNU CC  は
          あ るコードが間 違いを含むかのように見えるが実は正しいか
          も知れないという理由を理解する のに十分なほど賢くはな い
          ということが挙げられる。ここにその 1 つの例を 挙げる。

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

          もし y の値が常に 1, 2 あるいは 3 である限りは x は常に
          初期化される。しかし GNU CC はこれを知ることはできない。
          もう 1 つの一般 的な例を挙げる。

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

          これはバグを含まない。なぜなら save_y は、その値が設定さ
          れた時のみ使用されるからである。

          いくつかの見かけの警告は、使用する全てのリターンしない関
          数に対して volatile と宣言することによって防ぐことが可能
          である。

     -Wparentheses
          ある特定の文脈中で括弧が省略されていた場合に警告する。

     -Wtemplate-debugging
          C++ プログラムにおいてテンプレートを使用している際に、デ
          バッグが完全に 可能でない場合を警告する (C++ のみ)。

     -Wall
          全ての上に挙げた `-W' オプションを結合したもの。こ れ ら
          は、 たとえマクロとの組合わせにお いても、避けることが望
          まれ、また避けることが容易であると我々が信じてい る慣 用



GNU Tools             Last change: 94/03/29                    19






GCC(1)                      GNU Tools                      GCC(1)



          に対応するものである。

     残りの `-W...' オプションは `-Wall' によっては暗黙のうちに 指
     定 さ れない。なぜならこれらは、クリーンなプ ログラムにおいて
     も、ある状況においては使用することが妥当であると我々が 考える
     構造についての警告を行なうオプションだからである。

     -Wtraditional
          伝統的な C と ANSI C において異なった振舞いをする特定 の
          構造について警 告する。

        o+ マクロ胴部中の文字定数に含まれるマクロ引数。これらは伝統
          的 な C におい ては引数への置換が行なわれたが、ANSI C に
          おいては定数の一部として扱わ れる。

        o+ ブロック内で外部宣言され、かつそのブロックの終端の後で使
          用されている関 数。

        o+ オペランドとして long 型をとる switch 文。

     -Wshadow
          ローカル変数が他のローカル変数を隠している時に常に警告す
          る。

     -Wid-clash-len
          2 つの識別子の最初の len 文字が一致した時に警告する。 こ
          れ は旧式のおばかさんコンパイラでコンパイ ルされ得るプロ
          グラムを作る場合に役に立つ。

     -Wpointer-arith
          関数型や void の "サイズ" への依存を全て警告する。GNU C
          は こ れ らに対して、 サイズ 1 を割り当てている。これは
          void * ポインタと関数へのポインタにおける計算を簡便に す
          るためである。

     -Wcast-qual
          型の修飾子を無効にするようなポインタのキャストについて全
          て警告する。例 えば const char * を 通常の char * にキャ
          ストした場合に警告がなされる。

     -Wcast-align
          ポインタのキャストにおいて、型に要求されるアラインメント
          が 厳しくなるよ うなキャストを全て警告する。例えば char
          * が int * へとキャストすると、整数が 2、あるいは 4 バイ
          ト 境界でしかアクセスで きないマシンにおいては警告が行な
          われる。

     -Wwrite-strings
          文字定数に対して、型 const char[length]  を 与 え、 非-
          const の char * ポインタへのアドレスのコピーに対する警告
          を可能とする。宣言とプロ トタイプにおける const の使用を
          非 常に注意深く行なう限りにおいて、これらの警告は文 字列



GNU Tools             Last change: 94/03/29                    20






GCC(1)                      GNU Tools                      GCC(1)



          定数への書き込みをコンパイル時に発見することを助けるが、
          そ うでない場 合は有害無益な指定である。これが我々がこの
          警告を `-Wall' が要求する警告に含めなかった理由である。

     -Wconversion
          同じ引数が与えられた時に、プロトタイプが存在する場合とプ
          ロ トタイプが 存在しない場合とで、異なった型変換を引き起
          こす場合について警告する。これは 固定小数点から浮動小 数
          点 への変換やその逆、デフォルトの動作と異なる固定 小数点
          引数の幅や符号の有無の変換が含まれる。

     -Waggregate-return
          構造体や共用体を返す関数の定義やそれらへの呼び出しを全て
          警告する。(配 列を返すことができる言語においても、これは
          警告を引き起こす。)

     -Wstrict-prototypes
          引数の型を指定せずに関数を宣言、あるいは定義した場合に警
          告 す る。(以前 に引数の型を指定した宣言が存在する場合に
          は、旧式の関数宣言に対しても警 告なしに使用を許す。)

     -Wmissing-prototypes
          先行するプロトタイプ宣言なしにグローバルな変数が定義され
          た 場合に警告す る。この警告はたとえ定義それ自身がプロト
          タイプを含んでいたとしても発生 する。この警告の 目 的 は
          ヘッ ダファイル中にグローバル関数の定義を忘れるこ とを防
          ぐことにある。

     -Wredundant-decls
          同一スコープ中で複数回、同一対象を宣言した場合に、たとえ
          それが正当で何も 変化させない場合であっても警告する。

     -Wnested-externs
          関数内で extern 宣言を行なった場合に警告する。

     -Wenum-clash
          異なる列挙型間で変換を行なった際に警告する (C++ のみ)。

     -Woverloaded-virtual
          (C++ のみ。) 導出クラスにおいて、仮想関数の定義は基底 ク
          ラ スで定義された仮想関数の型 の記述と一致していなければ
          ならない。このオプションを使用することによっ て、基底 ク
          ラスにおける仮想関数と同一の名前を持ち、基底クラスのいか
          なる 仮想関数とも異なった型の記述を持つ関数に対して警 告
          が 行なわれる。これに よって、導出クラスが仮想関数を定義
          しようとして失敗する場合を警告するこ とができる。

     -Winline
          関数がイ ン ラ イ ン 宣 言 さ れ て い る、 あ る い は
          -finline-functions  オプションが与えられている場合に、関
          数をインライン展開できなかった場合 に警告する。




GNU Tools             Last change: 94/03/29                    21






GCC(1)                      GNU Tools                      GCC(1)



     -Werror
          警告をエラーとして扱う。警告の後にコンパイル を 中 断 す
          る。

デバッグオプション
     GNU CC はユーザのプログラムや GCC の双方をデバッグするため の
     多くのオプ ションを備えている。

     -g   オペレーティングシステムのネイティ ブ の フォー マッ ト
          (stabs,  COFF,  XCOFF,  DWARF)  で デ バッグ情報を生成す
          る。GDB はこのデバッグ情報に基づい て動作することがで き
          る。

          Stabs フォーマットを使用するほとんどのシステムにお い て
          は、`-g' は GDB のみが使用できる特別のデバッグ情報を使用
          することを可能と する。この特別の情報は GDB に対してより
          よ いデバッグを行なうことを可能 とするが、おそらく他のデ
          バッガに対してクラッシュ、あるいはプログラムを 読みと り
          不 能 に す る。 この特別な情報の生成を制御するためには
          `-gstabs+',    `-gstabs',    `-gxcoff+',     `-gxcoff',
          `-gdwarf+', `-gdwarf' を使用する (下記参照).

          多くの他の C コンパイラと異な り、GNU  CC  は  `-g'  を
          `-O'とともに使用することを許している。最適化されたコード
          が使用する近 道は、しばしば驚くべき結果を生み出す。定 義
          し たはずの変数が存在 しなくなり、制御の流れは予想もしな
          かった場所に移行し、定 数の結果が計算される文や、ある い
          は その結果がすでに手元にある文は実行 されなくなり、ある
          文がループの外に追い出され、異なった場所で実行された  り
          する。

          それにも関わらず、このオプションは最適化された出力 の デ
          バッ グを可能とし ている。これはバグを含むかも知れないプ
          ログラムに対してオプティマイザを 使用することを妥当な も
          のとしている。

     以下のオプションは GNU CC 生成時に 1 つ以上のデバッ グ フォー
     マットを扱 う能力を設定した場合に有用である。

     -ggdb
          (もしサポートされていれば)ネイティブのフォーマット で デ
          バッ グ 情報を生成 する。これは全ての可能な GDB 拡張を含
          む。

     -gstabs
          (もしサポートされていれば) stabs フォーマットでデバッ グ
          情 報 を生成する。 ただし GDB 拡張は含まない。このフォー
          マットはほとんどの BSD システムで DBX によって使用される
          フォーマットである。

     -gstabs+
          (もしサポートされていれば) stabs フォーマットでデバッ グ



GNU Tools             Last change: 94/03/29                    22






GCC(1)                      GNU Tools                      GCC(1)



          情 報を生成する。 ただし GNU デバッガ (GDB) によってのみ
          理解される GNU 拡張を使用する。 これらの拡張を使用 す る
          と、 他のデバッガに対してはクラッシュやプログラム を読み
          とり不能にするなどの影響を及ぼし得る。

     -gcoff
          (サポートされていれば) COFF フォーマットでデバッグ情報を
          生成する。これ はほとんどの System V Release 4 より前の
          System V システムにおいて SDB によって使用され る フォー
          マットである。

     -gxcoff
          (サポートされていれば) XCOFF フォーマットでデバッグ情 報
          を 生成する。こ れは IBM RS/6000 システムにおいて DBX デ
          バッガによって使用されるフォー マットである。

     -gxcoff+
          (もしサポートされていれば) XCOFF フォーマットでデバッ グ
          情報の生成を行 なう。ただし、GNU デバッガ (GDB) によって
          のみ理解され得る GNU 拡張を使 用する。これらの拡張を使用
          す ると、他のデバッガに対してはクラッシュやプ ログラムを
          読みとり不能にするなどの影響を及ぼし得る。

     -gdwarf
          (もしサポートされていれば) DWARF フォーマットでデバッ グ
          情 報の生成を行 なう。これはほとんどの System V Release
          4 システムにおいて SDB によっ て使用される形式である。

     -gdwarf+
          (もしサポートされていれば) DAWRF フォーマットでデバッ グ
          情報の生成を行 なう。ただし、GNU デバッガ (GDB) によって
          のみ理解され得る GNU 拡張を使 用する。これらの拡張を使用
          す ると、他のデバッガに対してはクラッシュやプ ログラムを
          読みとり不能にするなどの影響を及ぼし得る。

     -glevel
     -ggdblevel
     -gstabslevel
     -gcofflevel -gxcofflevel

     -gdwarflevel
          デバッグ情報を要求するが、同時に level によってどの程 度
          の 情 報が必要かを指定する。デフォルトのレベルは 2 で あ
          る。

          レベル 1 は、デバッグを予定しないプログラムの部分に対 し
          て バックトレー スを生成するに十分な最低限の情報を生成す
          る。これは関数と外部変数の記述 を含むが、ローカル変数 や
          行番号に関する情報は含まない。

          レベル 3 はプログラムに含まれる全てのマクロ定義などの 特
          別 な情報を含む。 いくつかのデバッガは `-g3'の使用によっ



GNU Tools             Last change: 94/03/29                    23






GCC(1)                      GNU Tools                      GCC(1)



          てマクロの展開をサポートする。

     -p   プログラム prof によって使用されるプロファイル情報を書き
          込む特別なコードを生成する。

     -pg  プログラム gprof によって使用されるプロファイル情報を 書
          き込む特別なコードを生成する。

     -a   基本ブロックのプロファイル情報を書き込む特別なコードを生
          成 する。これは それぞれのブロックが何回実行されたかを記
          録する。このデータは tcov のようなプログラムによって解析
          さ れる。ただし、このデータフォーマッ トが tcov が期待す
          るものとは異なっている。最終的には、 GNU gprof が処理 で
          きるように拡張されるべきである。

     -dletters
          コンパイル中の letters で指定されるタイミングに、デ バッ
          グ 用のダンプを生成するように指示す る。これはコンパイラ
          をデバッグするために使用される。ほとんどのダンプのファイ
          ル  名 は ソー ス ファ イル名に 1 単語をつなげたものにな
          る。(例えば、`foo.c.rtl' や `foo.c.jump'など)。

     -dM  全てのマクロ定義をダンプし、プリプロセス終了時に出力に書
          き出す。

     -dN  全てのマクロ名をダンプし、プリプロセス終了時に出力に書き
          出す。

     -dD  全てのマクロ定義をプリプロセス終了時に通常の出力に加えて
          ダンプする。

     -dy  パース中にデバッグ情報を標準エラー出力にダンプする。

     -dr  RTL 生成後に `file.rtl' に対してダンプする。

     -dx  関数をコンパイルするかわりに、RTL を生成するのみの処理を
          行なう。通常は `r'とともに使用される。

     -dj  最初のジャンプ最適化の後に、`file.jump'に対してダンプ す
          る。

     -ds  共通部分式削除 (しばしば共通部分式削除に続くジャンプ最適
          化も含む) 終了 時に `file.cse' に対してダンプする。

     -dL  ループ最適化終了時に `file.loop' に対してダンプする。

     -dt  第 2 共通部分式削除段階 (しばしば共通部分式削除 に 続 く
          ジャ ンプ最適化も 含む) 終了時に、`file.cse2' に対してダ
          ンプする。

     -df  フロー解析終了後に、`file.flow' に対してダンプする。




GNU Tools             Last change: 94/03/29                    24






GCC(1)                      GNU Tools                      GCC(1)



     -dc  命令コンビネーション終了時に `file.combine' に対してダン
          プする。

     -dS  第 1 命令スケジューリング段階終了時に `file.sched' に 対
          してダンプする。

     -dl  ローカルレジスタ割り当て終了時に `file.lreg' に対して ダ
          ンプする。

     -dg  グローバルレジスタ割り当て終了時に `file.greg' に対し て
          ダンプする。

     -dR  第 2 命令スケジューリング段階終了時に `file.sched2' に対
          してダンプする。

     -dJ  最終ジャンプ最適化終了時に `file.jump2' に対してダンプす
          る。

     -dd  遅延分岐スケジューリング終了時に `file.dbr' に対してダン
          プする。

     -dk  レジスタからスタックへの転換終了時に `file.stack' に対し
          てダンプする。

     -da  以上の全てのダンプを生成する。

     -dm  処理の終了時に、メモリ使用に関する統計情報を標準エラー出
          力に出力する。

     -dp  どのようなパターンや選択肢が使用されたかを示すコメントを
          アセンブラ出力 中のコメントで解説する。

     -fpretend-float
          クロスコンパイラで処理を行なう際に、ホストマシンと同じ浮
          動 小数点フォー マットをターゲットマシンが持つかのように
          振舞わせる。これは浮動小数点定 数の誤った出力を引き起 こ
          す が、実際の命令列はおそらく GNU CC をターゲッ トマシン
          で起動した場合と同じものとなるだろう。

     -save-temps
          通常の "一時" 中間ファイルを消去せずに保存する。これらは
          カ レン トディレクトリに置かれ、ソースファイルに基づいた
          名前が付けられる。従っ て、 `foo.c' を `-c -save-temps'
          を 使 用 してコンパイルした場合は、 `foo.cpp' , `foo.s'
          が、`foo.o' と同様に生成される。

     -print-libgcc-file-name
          ライブラリファイル`libgcc.a' の完全な絶対名を表示す る。
          こ のファイルはリンクの際のみに使用され、 それ以外の働き
          はない。このオプションが指定された場合は、GNU CC はコン
          パイルやリンクを何も行なわず、ただファイル名を表示するの
          みである。



GNU Tools             Last change: 94/03/29                    25






GCC(1)                      GNU Tools                      GCC(1)



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

     -O

     -O1  最適化を行なう。最適化コンパイルは幾分長めの処理時間と、
          大きな関数に対 する非常に多くのメモリを必要とする。

          `-O' が指定されなかった場合は、コンパイラの目標はコン パ
          イ ルのコストを 低減することや、目的の結果を得るためのデ
          バッグを可能とすることに置かれ る。それぞれの文は独立 し
          て いる。つまり、ブレークポイントでプログラムを 停止させ
          ることによって、任意の変数に新し い値を代入したり、プ ロ
          グ ラムカウンタを他の文へと変更することを可能とし、 その
          ソースコードにプログラマが望む正しい結果を得ることを可能
          とする。

          `-O' を指定しなかった場合は、register と宣言した変数のみ
          が レジスタへと割り当てられる。コンパイルの結果と して得
          られるコードは、PCC を `-O' なしで使用した場合と比較して
          若干良くないものとなる。

          `-O' が指定されると、コンパイラはコードのサイズと実行 時
          間を減少させる ことを試みる。

          `-O' を指定するこ と に よっ て、  `-fthread-jumps'  と
          `-fdelayed-branch'  のフラグが指定される。いくつかのマシ
          ンではさらにその他のフラグが 指定される。

     -O2  さらに最適化を行なう。ほとんどのサポートされている最適化
          手 段のうち、空 間と速度のトレードオフを含まないものは全
          て使用される。 -O, と比較して、このオプションはコンパ イ
          ル時間と生成コードの性能の双方を増 加させる。

          -O2 は、 -funroll-loops, -funroll-all-loops ,  そ し て
          -fomit-frame-pointer  以外の全ての -fflag オプションを有
          効化し、さらに強力な最適化を可能とする。

     -O0  最適化を行なわない。

          複数の -O オプションを指定した場合は、レベル番号の有無に
          関わらず、最後に指定した ものが有効になる。

     `-fflag' の形式を持ったオプションは、マシン独立のフラグ で あ
     る。 ほ と ん どの フラグは有効形式と無効形式の双方を持ってい
     る。`-ffoo' の無効形式は `-fno-foo'である。以下のリストでは、
     デ フォルトではないどちらか 1 つの形式の みを示す。これに対し
     て `no-' を削除する、あるいは追加することによって双方の形式を
     生成すること が可能である。

     -ffloat-store
          浮動小数点変数をレジスタに格納しない。このオプション は



GNU Tools             Last change: 94/03/29                    26






GCC(1)                      GNU Tools                      GCC(1)



          68000 のように (68881 の) 浮動小数点レジスタが double よ
          りも高い精度を持っていると思われるマシンにおいて、望まな
          い超過精 度を抑制することを可能とする。

          ほとんどのプログラムにおいては、超過精度は単に良い結果を
          生 むだけである が、いくつかのプログラムは正確な IEEE の
          浮動小数点フォーマット定義に依 存している。 このようなプ
          ログラムに対して `-ffloat-store' を使用する。

     -fmemoize-lookups

     -fsave-memoized
          コンパイルを高速に行なうために、ヒューリスティックな方法
          を 使用する (C++ のみ)。これらのヒューリスティックスはデ
          フォルトでは有効になってい ない。なぜなら、これはある 種
          の 入力ファイルにしか効果がなく、その他の ファイルではか
          えってコンパイルが低速になるからである。

          最初に、コンパイラはメンバ関数への呼びだし (あるいはデー
          タメンバへの参 照) を構築する。これは (1) どのクラスでそ
          の名前のメンバ関数が実装さ れているかを決定し、(2) ど の
          メンバ関数への呼び出しであるかという問題 (これはどの種類
          の型変換が必要となるかという決定も含む) を解決し、(3) 呼
          び出し側に対するその関数の可視性を検査するという作業を行
          なう必要があ る。これらは全て、コンパイルをより低速に し
          てしまう。通常は、そのメンバ 関数への 2 度目の呼び出しが
          起こった場合も、この長い処理がまた行なわれ るこ と に な
          る。これは次のようなコード

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

          は、これらの 3 つの手順を 6 回繰り返すということを意味す
          る。 これに対し て、ソフトウェアキャッシュを使用すると、
          そのキャッシュへの"ヒット "は、コストを劇的に低減する こ
          と が期待できる。不幸なことに、キャッ シュの導入によって
          異なったレイヤの機構を実装することが必要となり、それ  自
          身 のオーバヘッドが生じてしまう。 `-fmemoize-lookups' は
          このソフトウェアキャッシュを有効にする。

          メンバとメンバ関数へのアクセス特権 (可視性) はある関数に
          お けるコンテク ストと、別の関数におけるものとでは異なる
          ために、 g++ はキャッシュをフラッシュしなければ な ら な
          い。`-fmemoize-lookups' フラグを使用すると、全ての関数を
          コンパイルするたびに毎回 キャッ シュ を  フ ラッ シュ す
          る。`-fsave-memoized'  フ ラグは同一のソフトウェアキャッ
          シュについて、コンパイラが前回コ ンパイルした関数のコ ン
          テ クストが、次にコンパイルするのコンテクストと同 一のア
          クセス特権を有しているとみなせる時には、キャッシュを保持
          す る。こ れは同一クラス中に多くのメンバ関数を定義してい
          る時にとくに有効である。 他のクラスのフレンドになって い
          る メンバ関数を除き、同一のクラスに属して いる全てのメン
          バ関数のアクセス特権は、全て同一である。このような 場 合



GNU Tools             Last change: 94/03/29                    27






GCC(1)                      GNU Tools                      GCC(1)



          は キャッシュをフラッシュする必要はない。

     -fno-default-inline
          クラススコープ中に定義されたメンバ関数をデフォルトでイン
          ライン関数とす る処理を行なわない (C++ のみ)。

     -fno-defer-pop
          それぞれの関数呼び出しに対して、関数のリターン直後に常に
          引 数をポップす る。関数呼出後に引数をポップしなければな
          らないマシンにおいては、コンパ イラは通常、いくつかの 関
          数の引数をスタックに積んで、それらを同時にポッ プする。

     -fforce-mem
          メモリオペランドに対して、それらに対する演算が行なわれる
          前 に、レジ スタにコピーする。これは全てのメモリ参照を、
          潜在的な共通部分式であると 定めることによって、より良 い
          コー ド を 生成する。もしそれが共通部分式でな かった場合
          は、命令コンビネーションによってレジスタへの読み込 み は
          削  除される。私はこれがどのような違いを生み出すかという
          ことに興味がある。

     -fforce-addr
          メモリアドレス定数について、それらに対する演算が行なわれ
          る前にレジスタ にコピーする。これは `-fforce-mem' と同じ
          手法でより良いコードを生成する。私はこれがどのような違い
          を 生み出すかということに興味がある。

     -fomit-frame-pointer
          フレームポインタをレジスタに格納する必要のない関数におい
          て、 こ の 処理を 行なわない。これはフレームポインタの保
          存、設定、復帰にかかる命令を省略 し、さらに、多くの関 数
          で レジスタ変数として使用できる余分なレジスタを 得ること
          を           可           能            と            す
          る。ただし、このオプションはほとんどのマシンにおいてデバッグを不可能とする。

          Vax などのいくつかのマシンでは、このフラグは効果を持たな
          い。 なぜならこ れらのマシンでは標準の呼びだし手続きが自
          動的にフレームポインタの設定を 行なってしまい、これが 存
          在 しないとしたところで何も節約ができないからで ある。マ
          シン記述マクロ FRAME_POINTER_REQUIRED が、ターゲットマシ
          ンがこのフラグをサポートするかどうかを制御してい る。

     -finline-functions
          全ての単純な関数を呼びだし側に組み込んでしまう。コンパイ
          ラ はヒューリス ティックに、どの関数がこの方法で組み込む
          に足りるほど単純かを決定する。

          もし、ある関数に対する全ての呼び出しを組み込むこと が で
          き、 かつその関数 が static と宣言されていた場合は、GCC
          はその関数を独立したアセンブラコードと しては出力をし な
          い。




GNU Tools             Last change: 94/03/29                    28






GCC(1)                      GNU Tools                      GCC(1)



     -fcaller-saves
          関数呼び出しにおいて破壊されるであろう値を、レジスタに保
          持 することを可 能とする。これはこのような呼び出しの周囲
          にレジスタに対する保存、復帰の 特別なコードを出力する こ
          と によって実現される。このような割り当ては、そ れが通常
          よりも良いコードを出力するとみなされる場合にのみ行なわれ
          る。

          このオプションは特定のマシンではデフォルトで有効となって
          い る。これらは 通常、このオプションの処理の代わりに使う
          ことができる呼び出し時保存 レジスタが存在しないマシン で
          ある。

     -fkeep-inline-functions
          ある関数への呼び出しが全て呼びだし側に組み込むことができ
          て、 かつその関 数が static と宣言されていたとしても、そ
          の関数の独立したランタイムバージョンを 生成する。

     -fno-function-cse
          関数のアドレスをレジスタに置かない。つまり、定まった関数
          を 呼び出すコー ドは、それぞれ明示的な関数のアドレスを含
          むコードとなる。

          このオプションは効率の低いコードを生成するが、アセンブラ
          出 力を書き換え るようなハックを行なう場合には、このオプ
          ションを使用しなければ 混乱させられることだろう。

     -fno-peephole
          マシン固有のピープホール最適化を禁止する。

     -ffast-math
          このオプションは生成コードのスピードのために、GCC に対し
          て、 いくつかの ANSI または IEEE の規則/規格を侵させる。
          例えば、このオプションは sqrt 関数の引数は非負の数である
          ことを仮定する。

          このオプションはどの `-O' オプションによっても有効とされ
          な い。なぜなら、このオプションは数 学関数に関する IEEE
          または ANSI の規則/規格の厳密な実装に依存して書かれたプ
          ログラムに対して誤った出力を与えるからである。

     以下のオプションは特殊な最適化に関する制御を行なう。`-O2'  オ
     プションは`-funroll-loops' と `-funroll-all-loops' を除くこれ
     らの全てのオプションを有効にする。

     `-O' オプションは通常 `-fthread-jumps' と `-fdelayed-branch'
     を 有効とする。ただし、特殊なマシンではデフォルトの最適化に対
     して 変更が加えられているかも知れない。

     最適化に関する "きめ細かいチューニング" が必要な場合に、以 下
     の フラグを使用することが可能である。




GNU Tools             Last change: 94/03/29                    29






GCC(1)                      GNU Tools                      GCC(1)



     -fstrength-reduce
          ループのストレングスリダクションと繰り返し変数の除去を行
          なう。

     -fthread-jumps
          分岐ジャンプによってある場所にジャンプした時に、最初の分
          岐 に包括される 比較が存在した時に、最初の分岐のジャンプ
          先を後者の分岐先に変更する。こ の変更先は、後者の分岐 条
          件 の真偽によって、その分岐のジャンプ先か、ある いはその
          分岐の直後に定められる。

     -funroll-loops
          ループ展開の最適化を行なう。これはループの繰り返し数がコ
          ン パイル時、あ るいはランタイムに決定できる時においての
          み、実行される。

     -funroll-all-loops
          ループ展開の最適化を行なう。これは全てのループに対して行
          な われる。この オプションは大抵、より遅く動作するプログ
          ラムを生成する。

     -fcse-follow-jumps
          共通部分式削除の処理において、ジャンプ命令の行先が 他 の
          経路から到達できない場合は、そのジャンプ命令を考慮してス
          キャンを行 なう。例えば、共通部分式削除処理中に else  節
          を 伴った if  文にであった場合、共通部分式削除は、分岐条
          件が偽であった時も継続さ れる。

     -fcse-skip-blocks
          これは `-fcse-follow-jumps' に似ているが、ブロックを跨ぐ
          ジャ ンプに対しても共通部分式削除を継 続する。共通部分式
          削除処理中に、else 節を持たない単純な if 文に で あっ た
          時、  `-fcse-skip-blocks' は if を跨いだジャンプに対する
          共通部分式削除処理を継続する。

     -frerun-cse-after-loop
          ループ最適化が行なわれた後に、再度共通部分式削除の処理を
          行なう。

     -felide-constructors
          コンストラクタへの呼び出しが省略できるように思われる場合
          に、 その呼び出 しを省略する (C++ のみ)。このフラグを指
          定した場合は、GNU C++ は以下のコードに対して、一時 オ ブ
          ジェ クトを経由せ ずに y を foo への呼び出しの結果から直
          接初期化する。

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

          このオプションを使用しない場合は、GNU C++ は最 初 に  y
          をA 型の適切なコンストラクタを呼び出すことによって初期化
          する。そして、 foo の結果を一時オブジェクトに格納し、 最
          終的には `y' の値を一時オブジェクトの値に入れ換える。



GNU Tools             Last change: 94/03/29                    30






GCC(1)                      GNU Tools                      GCC(1)



          デフォルトの振舞い (`-fno-elide-constructors') が、ANSI
          C++  標準のドラフトには規定されている。コンストラクタ が
          副作用を含むプログラムに対し て、`-felide-constructors'
          を指定すると、そのプログラムは異なった動作をする可能性が
          ある。な ぜなら、いくつかのコンストラクタの呼び出しが 省
          略されるからである。

     -fexpensive-optimizations
          比較的コストの高いいくつかの些細な最適化を行なう。

     -fdelayed-branch
          ターゲットマシンにおいてこのフラグがサポートされている場
          合 は、 遅 延分岐 命令後の命令スロットを命令の順番変更に
          よって利用するように設定する。

     -fschedule-insns
          ターゲットマシンにおいてこのフラグがサポートされている場
          合 は、必要な データを利用可能になるまで待つことによる実
          行の遅滞を防ぐために、命令 の順番の変更を行なう。これ は
          遅 い浮動小数点命令やメモリ読み込み命令の実 行において、
          それらの結果を必要とする命令の前に他の命令を詰め 込む 処
          理に使用される。

     -fschedule-insns2
          `-fschedule-insns' と似ているが、レジスタ割当て処理の 後
          に もう一度命令スケジューリン グの段階を置く。これは、比
          較的レジスタ数が少なく、メモリロード命令 が 1 サイクルよ
          りも多くを要するマシンにおいて、特に効果的である。

ターゲットオプション
     デフォルトでは、GNU CC コンパイラは、現在使用しているマシンと
     同 じタイ プのコードをコンパイルする。しかし、GNU CC はクロス
     コンパイ ラとしてもインストールすることが可能である。実 際 に
     は、 異 なったターゲッ トマシンのための様々なコンフィギュレー
     ションの GNU CC は、同時にいくつ もインストールすることが可能
     で あ る。 そ こ で、 どの GNU CC を使用するかを 指定するため
     に、`-b' オプションを使用することができる。

     これに加えて、古い、あるいはより新しいバージョンの GNU CC  も
     同 時 にいく つもインストールしていくことができる。これらのう
     ち 1 つ (おそらくもっ とも新しいもの) がデフォルトとなる。 し
     かし、ひょっとしたら別のものを使 いたくなるかも知れない。

     -b machine
          引数 machine は、コンパイルのターゲットマシンを 規 定 す
          る。 これは GNU CC をクロス コンパイラとしてインストール
          した時に有用である。

          machine に指定する値は、GNU CC をクロスコンパイラとし て
          コ ンフィギュレーショ ンした時に与えたマシンタイプと同じ
          である。例えば、80386 上の System V で実行されるプログラ
          ム のために `configure i386v' というコンフィギュレーショ



GNU Tools             Last change: 94/03/29                    31






GCC(1)                      GNU Tools                      GCC(1)



          ンを行なったクロスコンパイラを起動した い 場 合 は、`-b
          i386v' と指定すれば良い。

          `-b' の設定を省略した場合は、通常は使用しているマシン と
          同タイプのマシ ンのためのコンパイルが行なわれる。

     -V version
          引数 version は、起動される GNU CC のバージョンを規定 す
          る。 これは複数のバージョ ンがインストールされている場合
          に有用である。例えば、 version が `2.0' ならば、GNU  CC
          バージョン 2.0 を起動することを意味する。

          `-V' を指定しなかった場合のデ フォ ル ト の バー ジョ ン
          は、GNU  CC  をインス トールする時に調整可能である。通常
          は、もっとも一般的な使用に勧 めることができるバージョ ン
          がここに指定される。

マシン依存オプション
     それぞれのターゲットマシンのタイプは、それぞれの特別 な オ プ
     ショ ンを持つ ことが可能である。`-m' で始まるオプション群は、
     様々なハードウェアモデルやコンフィギュレー  ショ ン-例 え ば
     68010  と 68020、浮動小数点コプロセッサの有無- などを選択でき
     る。こ のオプションを指定することによって、コンパイラは ど れ
     か  1 つのモデル、 あるいはコンフィギュレーションに対するコン
     パイルが可能である。

     いくつかのコンフィギュレーションは、通常はそのプラッ トホーム
     上 の他のコンパイラとのコマンドラインに関するの互換性をとるた
     め の特別なオプションを用意している。

     以下は 68000 シリーズのために定義された `-m' オプション で あ
     る。

     -m68000

     -mc68000
          68000 のためのコードを生成する。これは 68000 ベースの シ
          ス テムに対して コンフィギュレーションを行なったコンパイ
          ラのデフォルトである。

     -m68020

     -mc68020
          (68000 ではなく) 68020 のためのコードを生成する。これは
          68020  ベースの システムに対してコンフィギュレーションを
          行なったコンパイラのデフォルト である。

     -m68881
          浮動小数点演算のために 68881 命令を含んだ出力を行な う。
          これは 68020 ベー スのシステムにおいて、コンパイラのコン
          フィギュレーション時に -nfp を指定されなかった場合 の デ
          フォルトである。



GNU Tools             Last change: 94/03/29                    32






GCC(1)                      GNU Tools                      GCC(1)



     -m68030
          68030 のためのコードを生成する。これは 68030 ベースの シ
          ス テムに対して コンフィギュレーションを行なったコンパイ
          ラのデフォルトである。

     -m68040
          68040 のためのコードを生成する。これは 68040 ベースの シ
          ス テムに対して コンフィギュレーションを行なったコンパイ
          ラのデフォルトである。

     -m68020-40
          68040 のためのコードを生成するが、新しい命令を使用 し な
          い。 こ の 結 果とし て得られるコードは、68020/68881 や
          68030, 68040 のいずれのシステムにお いても、比較的高い性
          能を持つ。

     -mfpa
          浮動小数点演算のために Sun FPA 命令を含んだ出力 を 行 な
          う。

     -msoft-float
          浮動小数点演算のためにライブラリを呼び出す出 力 を 行 な
          う。  警告: この必須のライブラリは GNU CC の一部としては
          含まれない。通常はそのマシ ンの一般的な C コンパイラの提
          供 するものを使用するが、これは通常の方法 ではクロスコン
          パイルで直接使用することはできない。クロスコンパイ ル を
          行  ないたい場合は、自分自身で必要なライブラリ関数を用意
          する必要がある。

     -mshort
          int 型を short int 型のように 16 ビット幅とみなす。

     -mnobitfield
          ビットフィールド命令を使用しない。`-m68000' は暗黙のうち
          に `-mnobitfield' を含む。

     -mbitfield
          ビットフィールド命令を使用する。`-m68020' は暗黙の う ち
          に `-mbitfield' を含む。これは変更されていないソースの場
          合のデフォルトである。

     -mrtd
          固定個数の引数をとる関数に対して、異なった関数呼び出し方
          式を使用する。 これは、リターン時に引数をポップする rtd
          命令を利用するものである。これは呼びだし側で引数をポップ
          さ せる必要がな いために、1 命令を省略することが可能とな
          る。

          この呼びだし方式は通常の Unix で使用されている方式とは互
          換性がない。そ のため、Unix コンパイラでコンパイルされた
          ライブラリを呼び出す必要があ る限りは、使用することは で
          きない。



GNU Tools             Last change: 94/03/29                    33






GCC(1)                      GNU Tools                      GCC(1)



          さらに、全ての可変引数をとり得る関数 ( printfを含む)  に
          対 し て、関数プロトタイプを用意する必要がある。さもない
          と、こ れらの関数に対して誤ったコードが生成される。

          さらに、関数に対して多過ぎる引数をつけて呼び出すコードを
          書いた場合、こ れは深刻な誤ったコードを生成する。(通常は
          多過ぎる変数は害を及ぼすこと なく無視される。)

          rtd 命令は 68010 と 68020 によってサポートさ れ る が、
          68000 では使用でき ない。

     以下は Vax のために定義された `-m' オプションである。

     -munix
          特定のいくつかのジャンプ命令 (aobleq 等) を出力しな い。
          こ れ らの命令で長いレンジを使用した場合、Vax 用の Unix
          ア センブラはこれを処理できない。

     -mgnu
          これらのジャンプ命令を出力する。アセンブルには GNU ア セ
          ンブラの使用 を仮定する。

     -mg  浮動小数点数について、d-フォーマットでは な く、g-フォー
          マットのためのコー ドを出力する。

     以下は SPARC でサポートされている `-m' スイッチである。

     -mfpu

     -mhard-float
          浮動小数点命令を含む出力を行なう。これはデフォルト で あ
          る。

     -mno-fpu

     -msoft-float
          浮動小数点の処理のためにライブラリを呼び出す出力を 行 な
          う。 警告: SPARC 用の GNU 浮動小数点ライブラリは存在しな
          い。 通常はそのマシ ンの一般的な C コンパイラの提供す る
          も のを使用するが、これは通常の方法 ではクロスコンパイル
          で直接使用することはできない。クロスコンパイルを行 な い
          たい場合は、自分自身で必要なライブラリ関数を用意する必要
          がある。

          -msoft-float は呼びだし方式を変更する。 し た がっ て、
          全て  の プ ログラムをこのオプションでコンパイルしない限
          り、このオプションは意 味をなさない。

     -mno-epilogue

     -mepilogue
          -mepilogue を指定することによって (デフォルト)、コンパイ



GNU Tools             Last change: 94/03/29                    34






GCC(1)                      GNU Tools                      GCC(1)



          ラ は 関 数を抜けるため のコードを常に関数の最後に出力す
          る。関数の途中で関数を抜けるコードは全て、 関数の最後 の
          終了コードへのジャンプとして生成される。

          -mno-epilogue を設定することによって、コンパイラは関数か
          ら抜けるコードをインライン化 することを試みる。

     -mv8

     -msparclite
          これらの 2 つのオプションは SPARC アーキテクチャの バ リ
          エーションを選択 するために使用される。

          デフォルトでは、(Fujitsu SPARClite 用にコンフィギュ レー
          ションしない限 りは) GCC は SPARC アーキテクチャ v7 用の
          コードを生成する。

          -mv8 は、SPARC v8 用コードを生成する。v7 コードとの違 い
          は、 整数の乗算と整数 の除算が v7 では存在しないが v8 に
          は存在するという点のみである。

          -msparclite は、SPARClite 用のコードを生成する。これ は
          v7 には存在せず SPARClite に存在する、整数乗算、整数除算
          とスキャン (ffs) 命令を追加する。

     これらは Convex のために定義された `-m' オプションである。

     -mc1 C1 用の出力を行なう。これはコンパイラが C1 用にコン フィ
          ギュレーション を行なわれた時のデフォルトである。

     -mc2 C2 用の出力を行なう。これはコンパイラが C2 用にコン フィ
          ギュレーション を行なわれた時のデフォルトである。

     -margcount
          引数列に先立ち、引数のワード数を置くコードを生成する。い
          く つ かの可搬性 のない Convex や Vax のプログラムはこの
          ワードを必要とする。(デバッガは 不定長引数リストを持つ関
          数 を除いて、このワードを必要としない。これらの 情報はシ
          ンボルテーブルに書かれる。)

     -mnoargcount
          引数の数を示すワードを省略する。これは変更されてい な い
          ソースを使用した 場合のデフォルトである。

     これらは、AMD Am29000 のために定義された `-m' オプションで あ
     る。

     -mdw DW ビットが立っていることを仮定したコードを出力する。 こ
          れ は、ハードウェ アによってバイト操作やハーフワード操作
          がサポートされているということを 意味する。これはデ フォ
          ルトである。




GNU Tools             Last change: 94/03/29                    35






GCC(1)                      GNU Tools                      GCC(1)



     -mnodw
          DW ビットが立っていないことを仮定したコードを出力する。

     -mbw システムがバイト操作やハーフワード操作をサポートしている
          こ と を 仮定した コードを生成する。これはデフォルトであ
          る。

     -mnbw
          システムがバイト操作やハーフワード操作をサポートしていな
          い こ とを仮定し たコードを生成する。これは暗黙のうちに
          `-mnodw' を含む。

     -msmall
          スモールメモリモデルを使用する。これは全ての関数のアドレ
          ス が単一の 256KB のセグメント内に入ることと、関数の絶対
          アドレスが 256K 以下にある ことを仮定する。このオプ ショ
          ンは call 命令を const, consth, calli シーケンスの代わり
          に使用することを可能とする。

     -mlarge
          call 命令が使用できることを仮定しない。これはデフォル ト
          である。

     -m29050
          Am29050 用のコードを生成する。

     -m29000
          Am29000 用のコードを生成する。これはデフォルトである。

     -mkernel-registers
          gr96-gr127 レジスタへの参照の代わりに gr64-gr95 を参照す
          る コードを生成する。このオプションは、ユーザのコードか
          ら使用できるグローバルレジスタから区別されたグローバルレ
          ジ スタの集合 を利用するカーネルのコードをコンパイルする
          時に使用できる。

          ただし、このオプションが使用されている時にも `-f' flags
          フラグは通常のユーザモードでの名前を使用する。

     -muser-registers
          通常のグローバルレジスタの集合 gr96-gr127 を使用する。こ
          れはデフォルトである。

     -mstack-check
          __msp_check への呼び出しをそれぞれのスタック調整の後に挿
          入 する。これはしばしば カーネルのコードにおいて用いられ
          る。

     これらは、モトローラ 88K アーキテクチャのために定義 さ れ た
     `-m' オプションである。

     -m88000



GNU Tools             Last change: 94/03/29                    36






GCC(1)                      GNU Tools                      GCC(1)



          m88100 と m88110 の双方で比較的高性能で動作するコード を
          生成する。

     -m88100
          m88100 に最適なコードを生成する。ただし m88110 におい て
          も動作する。

     -m88110
          m88110 に最適なコードを生成する。ただし m88100 におい て
          も動作する。

     -midentify-revision
          アセンブラ出力中に、ソースファイル名、コンパイラ名とバー
          ジョ ン、タイム スタンプ、使用されたコンパイルフラグを記
          した ident ディレクティブを挿入する。

     -mno-underscores
          シンボル名の最初にアンダースコアキャラクタをつけないアセ
          ン ブ ラ 出力を生 成する。デフォルトでは個々の名前に対し
          て、アンダースコアをプレフィック スとして使用する。

     -mno-check-zero-division

     -mcheck-zero-division
          初期の 88K のモデルはゼロによる除算の処理に問題を持っ て
          い た。特に、そ れらの多くにおいてトラップが生じなかった
          ことは問題であった。これ らのオプションを使用すること に
          よっ て、ゼロ除算を発見し、例外を知らせる コードを埋め込
          むことを禁止 (あるいは明示的に許可) することがで き る。
          全  て の  88K  用 の  GCC  の コンフィギュレーションは
          `-mcheck-zero-division' をデフォルトとして使 用 し て い
          る。

     -mocs-debug-info

     -mno-ocs-debug-info
          88Open Object Compatibility Standard "OCS" で定義された
          (そ れぞれのスタックフレーム中で使用されるレジスタに関す
          る) 付加的なデ バッグ情報を取り込む (または省略する)。こ
          れ ら の 付 加 的 な 情 報は GDB によっ ては必要とされな
          い。DGUX, SVr4, Delta 88 SVr3.2 ではデフォルトでこの 情
          報 を 含 める。その他の 88K コンフィギュレーションではデ
          フォルトで省略 する。

     -mocs-frame-position

     -mno-ocs-frame-position
          OCS で規定されているように、レジスタの値に対して、スタッ
          ク フレーム中の 特定の場所に保存されるという動作を強制す
          る (あるいは要求しない)。 DG/UX, Delta88 SVr3.2, BCS  の
          コ ン フィギュレーションでは `-mocs-frame-position' をデ
          フォルトとして、それ以外の 88k コンフィギュレーション で



GNU Tools             Last change: 94/03/29                    37






GCC(1)                      GNU Tools                      GCC(1)



          は  `-mno-ocs-frame-position' をデフォルトとして使用して
          いる。

     -moptimize-arg-area

     -mno-optimize-arg-area
          関数の引数がどのような方法でスタックフレームに格納される
          か を指定する。 `-moptimize-arg-area' はスペースを節約す
          るが、いくつかのデバッガ (GDB は含まれない)  を ク  ラッ
          シュ させる。`-mno-optimize-arg-area' はより標準に従って
          いる。デフォルトでは GCC は引数エリアの最適化 を行なわな
          い。

     -mshort-data-num
          データ参照時に、それらの処理を r0 からの相対参照で行なう
          ことによって小さなコードにすることを可能とす る。 これは
          値のロードを (その他の場合は 2 命令かかるところを) 1  命
          令 で行な うことを可能とする。num をこのオプションととも
          に指定することによって、どのデータ参照が影響 を受ける か
          を指定することができる。例えば `-mshort-data-512' を指定
          すると、512 バイト以内のディスプレースメントのデータ参照
          が  影 響を受けることになる。 `-mshort-data-num' は num
          が 64K よりも大きな時は効果を持たない。

     -mserialize-volatile

     -mno-serialize-volatile
          Volatile なメモリへの参照について、シーケンシャルな整 合
          性を持ったコー ドを生成する、あるいは生成しない。

          GNU CC はデフォルトではどのプロセッササブモデルを選ん だ
          場 合においても、 整合性を常に保証する。これがどのように
          実現されているかは、サブモデルに 依存している。

          m88100 プロセッサはメモリ参照の順番を入れ換えないの で、
          常にシーケンシャ ルな整合性は保たれる。もし `-m88100' を
          使用した場合は、GNU CC はシーケンシャルな整合性を保つ た
          めの特 別な命令を生成しない。

          m88110 プロセッサにおけるメモリ参照の順番は、必ずしも そ
          れ らの要求を行 なった命令の順番とは一致しない。特に、読
          み込み命令は、先行する書き込み 命令よりも先に実行され 得
          る。このような順番の入れ換えは、volatile なメ モリの参照
          におけるシーケンシャルな整合性を崩してしまう。`-m88000'
          または `-m88110' を指定した場合には、GNU CC は、必要な場
          合は特別な命令を生成し、 命令の実行が正しい順番で行な わ
          れることを強制する。

          ここで生成される整合性を保証するための特別な命令はアプリ
          ケー ションの性 能に対して影響を及ぼす。もしこの保証無し
          で問題がないということがわかっ てい る 場 合 は、`-mno-
          serialize-volatile' を使用することができる。



GNU Tools             Last change: 94/03/29                    38






GCC(1)                      GNU Tools                      GCC(1)



          `-m88100' オプションを使用しているが、m88110 における 実
          行 時 に シー ケ ン シャ  ル な 整合性が必要とされる場合
          は、`-mserialize-volatile' を使用するべきである。

     -msvr4

     -msvr3
          System V release 4 (SVr4) に関連したコンパイラの拡張を有
          効 (`-msvr4') あるいは無効 (`-msvr3') にする。これは以下
          の内容を制御する。

        o+ 生成するアセンブラの 文 法 の 種 類  (こ れ は  `-mver-
          sion-03.00' を使用することによって独立に制御できる)。

        o+ `-msvr4' は C プリプロセッサに対して `#pragma weak' を理
          解させる。

        o+ `-msvr4' は、GCC に SVr4 によって使用されている付加的 な
          宣言ディレクティブ を生成させる。

     `-msvr3' は、SVr4 を除く全ての m88K コンフィギュレーション に
     おけるデフォ ルトである。

     -mtrap-large-shift

     -mhandle-large-shift
          31 ビットより大きいビットシフトを検出するコードを埋め 込
          む。 これらのオ プションを指定することによって、それぞれ
          トラップ、あるいは適切に処理す るコードが埋め込まれ る。
          デフォルトでは GCC は大きなビットシフトには 特別な対策を
          行なわない。

     -muse-div-instruction
          非常に初期の 88K アーキテクチャのモデルは除算命令を 持っ
          て いない。従っ て、GCC はデフォルトでは除算命令を生成し
          ない。このオプションは除算命令 が安全に使用できるとい う
          ことを指定する。

     -mversion-03.00
          DG/UX コンフィギュレーションには、2 つの SVr4 の種類があ
          る。 こ の オ プ ショ  ン は  -msvr4 オプションによって
          hybrid-COFF または real-ELF が使用されるか どうかを選 択
          する。他のコンフィギュレーションはこのオプションを無視す
          る。

     -mwarn-passed-structs
          関数に対して構造体を渡した場合と、関数が構造体を返した場
          合に警告する。 構造体を渡す手法は C 言語の発展の中で変化
          しており、移植性の問題をしば しば生じることに な る。 デ
          フォルトでは GCC はこの警告を行なわない。





GNU Tools             Last change: 94/03/29                    39






GCC(1)                      GNU Tools                      GCC(1)



     これらのオプションは IBM RS6000 のために定義されたも の で あ
     る。

     -mfp-in-toc

     -mno-fp-in-toc
          浮動小数点定数を Table of Contents (TOC) に入れるかど う
          か を指定する。 このテーブルは全てのグローバル変数と関数
          のアドレスを格納する。デフォル トでは GCC は浮動小数点定
          数 を ここに格納する。もし TOC がオーバーフロー する場合
          は、`-mno-fp-in-toc' を使用することによって TOC のサイズ
          を 小さくすることが可能であり、 オーバーフローを防ぐこと
          ができるだろう。

     これらは IBM RT PC 用に定義された `-m' オプションである。

     -min-line-mul
          整数の乗算に対してインラインのコード列を生成する。これは
          デフォルトであ る。

     -mcall-lib-mul
          整数の乗算に対して lmul$$ を呼び出す。

     -mfull-fp-blocks
          フルサイズの浮動小数点データブロックを生成する。これ は
          IBM  によって推 奨されている最低限のスクラッチスペースの
          量を包含する。これはデフォルト である。

     -mminimum-fp-blocks
          浮動小数点データブロック内に特別なスクラッチスペースを含
          め ない。これに よって、より小さなコードが生成されるが、
          実行は遅くなる。なぜならスクラッ チスペースが動的に確 保
          されるからである。

     -mfp-arg-in-fpregs
          IBM の関数呼び出し方式とは互換性のない呼び出し方式を使用
          す る。この方 式は浮動小数点引数を浮動小数点レジスタに入
          れて渡す。このオプションを指 定 す る と、varargs.h  や
          stdarg.h  で浮動小数点オペランドが使用できなくなることに
          注意。

     -mfp-arg-in-gregs
          浮動小数点に対して通常の関数呼び出し方式を使用する。これ
          はデフォルトで ある。

     -mhc-struct-return
          1 ワードより大きな構造体を返す時に、レジスタではなくメモ
          リを使用して 返す。これは MetaWare HighC (hc) コンパイラ
          との互換性を提供する。`-fpcc-struct-return' を使用するこ
          とによって Portable C Compiler (pcc) との互換性を得 るこ
          とができる。




GNU Tools             Last change: 94/03/29                    40






GCC(1)                      GNU Tools                      GCC(1)



     -mnohc-struct-return
          1 ワードより大きな構造体を返す時に、レジスタによって返さ
          れ る場合がある。 これはその方が便利であると考えられる時
          に使用される。これはデフォルトで ある。IBM が提供する コ
          ンパイラとの互換性を得るためには、`-fpcc-struct-return'
          と `-mhc-struct-return' の双方を使用する。

     これらは MIPS ファミリのために定義された `-m' オプションで あ
     る。

     -mcpu=cpu-type
          命令スケジューリング時に、デフォルトのマシンタ イ プ を
          cpu-type に仮定する。デフォルトの cpu-type は default で
          ある。この選択はすべてのマシンに対する最長のサイクル数を
          元 に コードを 生成する。これは、生成されるコードがどの
          MIPS cpu においても適当な速度 で処理されるようにするため
          で あ る。 こ れ以外の cpu-type の選択としては、 r2000,
          r3000, r4000, r6000 がある。特定の cpu-type を選択した場
          合 は、 そ の 特定のチップに適したスケジュールが行なわれ
          る。 コンパイラは、 -mips2 または -mips3 スイッチが使 用
          されていない場合は、MIPS ISA (instruction set architec-
          ture) のレベル 1 に合致しないコードを生成するこ と は な
          い。

     -mips2
          MIPS ISA のレベル 2 (branch likely 命令, 平方根命令)  に
          よ る 命 令群 を出力する。 -mcpu=r4000 と -mcpu=r6000 ス
          イッチは、 -mips2 と共に使用される必要がある。

     -mips3
          MIPS ISA のレベル 3 (64 ビット命令) を含む命令群を出力す
          る。  -mcpu=r4000 スイッチは、 -mips2 と同時に使用する必
          要がある。

     -mint64

     -mlong64

     -mlonglong128
          これらのオプションは現在動作しない。

     -mmips-as
          MIPS アセンブラのためのコードを生成し、 mips-tfile を 起
          動 して通常のデバッグ情報を追加する。これは OSF/1 標準プ
          ラットフォー ム以外の全てのプラットフォームにお け る デ
          フォ ルトである。OSF/1 標準プラッ トフォームは OSF/rose
          オブジェクトフォーマットを使用する。 ス イッ チ  -ggdb,
          -gstabs,  -gstabs+  の う ちのどれかが使用されている場合
          は、 mips-tfile プログラムは、stabs を MIPS ECOFF 中にカ
          プセル化する。

     -mgas



GNU Tools             Last change: 94/03/29                    41






GCC(1)                      GNU Tools                      GCC(1)



          GNU アセンブラ用のコードを生成する。これは OSF/1 標準 プ
          ラッ ト フォー ム におけるデフォルトである。OSF/1 標準プ
          ラットフォームは OSF/rose オブジェ クトフォーマットを 使
          用する。

     -mrnames

     -mno-rnames
          -mrnames スイッチは出力コードにおいて、レジスタの名前 と
          し て、ハードウェア名の代 わりに MIPS ソフトウェア名を使
          用することを指定する。(つまり、 a0 を $4 の代わりに使 用
          する).  GNU アセンブラは -mrnames スイッチをサポートしな
          い。MIPS アセンブラはソースファイルに対して MIPS C プ リ
          プ ロ セッ サを起動するだろう。 -mno-rnames スイッチがデ
          フォルトである。

     -mgpopt

     -mno-gpopt
          -mgpopt スイッチは、全てのデータ宣言をテキストセクション
          中 の全命令の前に書き出 すことを指定する。これによって、
          全ての MIPS アセンブラは、ショートグロー バル、あるい は
          静 的 なデータアイテムに対して、2 ワードではなく、1 ワー
          ド のメモリ参照命令を生成する。これは最適化が指定され た
          場合のデフォルトで ある。

     -mstats

     -mno-stats
          -mstats が指定された場合は、コンパイラによってインライン
          で ない関数が処理される ごとに、標準エラー出力ファイルに
          対して、そのプログラムに対する統計情報 を示す 1 行のメッ
          セー ジを出力する。このメッセージは、保存したレジスタ の
          数、スタックのサイズなどを示す。

     -mmemcpy

     -mno-memcpy
          -mmemcpy スイッチは、全てのブロック転送に対して、イン ラ
          イ ン コー ド を生成する代わ りに、適切なストリング関数
          (memcpy または bcopy) を呼び出すコードを生成する。

     -mmips-tfile

     -mno-mips-tfile
          -mno-mips-tfile スイッチを指定すると、コンパイラは オ ブ
          ジェクトファイルの mips-tfile を使用した後処理を行なわな
          い。MIPS アセンブラはデバッグサポートを行な うためにこれ
          を生成する。 mips-tfile が実行されないと、デバッガからは
          ローカル変数を扱うことができない。 さらに、  stage2  と
          stage3  のオブジェクトはアセンブラに渡される一時的なファ
          イル名をオブジェクトファ イル中に埋め込まれて 持っ て お



GNU Tools             Last change: 94/03/29                    42






GCC(1)                      GNU Tools                      GCC(1)



          り、 このためそれらを比較した場合に同一のも のとはみなさ
          れない。

     -msoft-float
          浮動小数点演算のためにライブラリを呼び出す出 力 を 行 な
          う。  警告: この必須のライブラリは GNU CC の一部としては
          含まれない。通常はそのマシ ンの一般的な C コンパイラの提
          供 するものを使用するが、これは通常の方法 ではクロスコン
          パイルで直接使用することはできない。クロスコンパイ ル を
          行  ないたい場合は、自分自身で必要なライブラリ関数を用意
          する必要がある。

     -mhard-float
          浮動小数点命令を含んだ出力を生成する。これは変更されない
          ソースを使用し た場合のデフォルトである。

     -mfp64
          ステータスワード中の FR ビットが立っていることを仮 定 す
          る。 これは 32 個の 32 ビット浮動小数点レ ジスタの代わり
          に、32 個の 64 ビットの浮動小数点レジスタが存在するとい
          う ことを示す。この場合は、同時に -mcpu=r4000 と -mips3
          スイッチを指定する必要がある。

     -mfp32
          32 個の 32 ビット浮動小数点レジスタが存在するというこ と
          を仮定する。こ れはデフォルトである。

     -mabicalls

     -mno-abicalls
          いくつかの System V.4 の移植が位置独立コードのために使用
          する疑似命令 .abicalls, .cpload, .cprestore を出力する、
          あるいは出力しない。

     -mhalf-pic

     -mno-half-pic
          -mhalf-pic スイッチは、テキストセクション中に参照を配 置
          す る代わりに、外部参照を行 なうポインタをデータセクショ
          ンに配置し、それをロードする動作を指定する。 こ の オ プ
          ションは現在まだ動作しない。 -Gnum は num バイト以下のグ
          ローバル、あるいは静的なアイテムを、通常のデータや  bss
          セ クションではなく、小さなデータ、または bss セクション
          に配置すること を指定する。これはアセンブラに対して、 グ
          ロー バルポインタ (gp または $28) を基準とした参照を行な
          う場合に、通常では 2 ワード必要なところを 1 ワー ドの メ
          モ リ参照命令を生成することを可能とする。デフォルトでは
          MIPS アセ ンブラが使用される場合、 num は 8 であ る。 ま
          た、GNU アセンブラが使用される場合のデフォルトは 0 であ
          る。 -Gnum スイッチはアセンブラ、リンカにも同様に渡さ れ
          る。全てのモジュールは同一 の -Gnum の値でコンパイルされ
          なければならない。



GNU Tools             Last change: 94/03/29                    43






GCC(1)                      GNU Tools                      GCC(1)



     -nocpp
          MIPS アセンブラに、ユーザアセンブラファイル (`.s' 拡張子
          を持つ) に対するアセンブル時のプリプロセッサの起動を抑制
          さ せる。

     これらは、Intel 80386 ファミリ用に定義された `-m' オプショ ン
     である。

     -m486

     -mno-486
          386 ではなく 486 に最適化されたコードを出力する、ある い
          は その逆を行な う指定を行なう。486 用に生成されたコード
          は 386 で実行可能であり、逆も また可能である。

     -msoft-float
          浮動小数点演算のためにライブラリを呼び出す出 力 を 行 な
          う。  警告: この必須のライブラリは GNU CC の一部としては
          含まれない。通常はそのマシ ンの一般的な C コンパイラの提
          供 するものを使用するが、これは通常の方法 ではクロスコン
          パイルで直接使用することはできない。クロスコンパイ ル を
          行  ないたい場合は、自分自身で必要なライブラリ関数を用意
          する必要がある。

          関数が浮動小数点数を返す時に 80387 レジスタスタックを 使
          用するマシンに おいては、`-msoft-float' を使用した場合で
          も、いくつかの浮動小数点命令が生成される。

     -mno-fp-ret-in-387
          関数からの返り値に FPU のレジスタを使用しない。

          通常の関数呼びだし方式は、たとえ FPU が存在しなく て も
          float  と  double  の結果を FPU レジスタに入れて返してく
          る。したがってこの場合、オペレー ティングシステムは FPU
          をエミュレートしなければならない。

          `-mno-fp-ret-in-387' オプションを指定すると、浮動小数 点
          数も通常の CPU レジスタに入れ て返される。

     これらは HPPA ファミリ用に定義された `-m' オプションである。

     -mpa-risc-1-0
          PA 1.0 プロセッサ用のコードを出力する。

     -mpa-risc-1-1
          PA 1.1 プロセッサ用のコードを出力する。

     -mkernel
          カーネルに適したコードを生成する。特に、引数の 1 つと し
          て DP レジスタを とる add 命令の使用を抑制し、その代わり
          に、addil 命令を生成する。これは HP-UX リンカの深刻な バ
          グを避けるための措置で ある。



GNU Tools             Last change: 94/03/29                    44






GCC(1)                      GNU Tools                      GCC(1)



     -mshared-libs
          HP-UX 共有ライブラリとリンクさせるコードを生成する。この
          オ プ ションはま だ完全に動作しているわけではなく、どの
          PA ターゲットにおいてもデフォル トになっていない。このオ
          プ ションを指定すると、コンパイラは誤ったコード を出力し
          得る。

     -mno-shared-libs
          共有ライブラリとリンクしないコードを生成する。これは全て
          の PA ターゲッ トにおいてデフォルトのオプションである。

     -mlong-calls
          関数の呼び出し先と呼び出し元が同一ファイルに含まれ た 場
          合、 呼び出し時の 距離が 256K 以上の場合でも動作するよう
          なコードを出力する。このオプショ ン は、 リ ン カ か ら
          "branch out of range errors" でリンクを拒否さ れた時以外
          には使用しないように。

     -mdisable-fpregs
          いかなる形においても、浮動小数点レジスタの使用を禁 止 す
          る。 これは浮動小 数点レジスタに配慮しないコンテクストス
          イッチを行なうカーネルに対して有 効である。このオプ ショ
          ン を使用して、浮動小数点処理を行なおうとすると、 コンパ
          イラはアボートする。

     -mdisable-indexing
          コンパイラに対して、indexing addressing mode を使用し な
          いように指定する。 これによって MACH において MIG によっ
          て生成されたコードをコンパイルす る際の、どちらかとい え
          ばあいまいないくつかの問題を防ぐことができる。

     -mtrailing-colon
          ラベル定義の後にコロンを加える (ELF アセンブラ用)。

     これらは、Intel 80960 ファミリ用に定義された `-m' オプショ ン
     である。

     -mcpu-type
          デフォルトのマシンタイプを cpu-type に仮定する。これは生
          成 する命令とアドレッシングモード、そしてアラインメ ント
          に関係する。 デフォルトの cpu-type は kb である。その 他
          の選択としては ka, mc, ca, cf, sa, sb がある。

     -mnumerics

     -msoft-float
          -mnumerics オプションはプロセッサが浮動小数点命 令 を サ
          ポートすることを示す。 -msoft-float オプションは浮動小数
          点サポートを仮定しないことを示す。

     -mleaf-procedures




GNU Tools             Last change: 94/03/29                    45






GCC(1)                      GNU Tools                      GCC(1)



     -mno-leaf-procedures
          葉に位置する手続きについて、 call 命令と同様に bal 命 令
          でも呼び出すことを可能とする (あるいは、しない)。これは
          bal 命令がアセンブラ、またはリンカによって置き換えられ得
          る 場合には、直接呼 び出しに対して効率の良いコードを得る
          ことができる。ただし、それ以外の場 合は効率の良 く な い
          コー ドを生成する。例えば、関数へのポインタ経由の呼び 出
          しや、この最適化をサポートしないリンカを使用しなかった場
          合などがこれ に該当する。

     -mtail-call

     -mno-tail-call
          (マシン非依存の部分を越えて) 末尾再帰を分岐に変換する 処
          理 に関するさ らなる最適化を行なう。この手法の適用が正当
          でないということに関する判断 が完全ではないので、まだ こ
          の オプションを使用することは適当でないかも知 れない。デ
          フォルトは -mno-tail-call である。

     -mcomplex-addr

     -mno-complex-addr
          この i960 の実装では複雑なアドレッシングモードの使用が優
          位 であると仮定 する (あるいは仮定しない) 複雑なアドレッ
          シングモードは K-シリーズでは 使用する価値はないが、C-シ
          リー ズ で は 確 か に 使 用 す る 価 値がある。 現在は
          -mcomplex-addr が、CB と CC を除く全てのプロセッサにおけ
          るデフォルトである。

     -mcode-align

     -mno-code-align
          より高速なフェッチのためにコードを 8 バイトにアライン す
          る  (または何も しない)。現在では C シリーズの実装におい
          てのみデフォルトで有効にしてい る。

     -mic-compat

     -mic2.0-compat

     -mic3.0-compat
          iC960 v2.0 または v3.0 との互換性を持たせる。

     -masm-compat

     -mintel-asm
          iC960 アセンブラとの互換性を持たせる。

     -mstrict-align

     -mno-strict-align
          アラインされないアクセスを許可しない (あるいは許可する)



GNU Tools             Last change: 94/03/29                    46






GCC(1)                      GNU Tools                      GCC(1)



     -mold-align
          Intel による gcc リリースバージョン 1.3 (gcc  1.37  ベー
          ス)  と の 構造体の アラインメントに関する互換性を持たせ
          る。現在は、 #pragma align 1 が同時に仮定されてしま い、
          無効化できないというバグを持っている。

     これらは、DEC Alpha 用に定義された `-m' オプションである。

     -mno-soft-float

     -msoft-float
          浮動小数点操作に対して、ハードウェアによる浮動小数点命令
          を 使用する (し ない)。もし、-msoft-float が指定された場
          合は、`libgcc1.c' 内の関数が浮動小数点演算に使用される。
          た だし、これらのルーチンが 浮動小数点演算をエミュレート
          するルーチンによって置き換えられているか、 そのような エ
          ミュレーションルーチンを呼び出すようにコンパイルされてい
          る のでない限り、これらのルーチンは浮動小数点演 算 を 行
          なってしまう。浮動小 数点演算のない Alpha のためのコンパ
          イルを行なうためには、ライブラリも これらを呼び出さな い
          ようにコンパイルされていなければならない。

          浮動小数点演算のない Alpha の実装は、浮動小数点レジス タ
          を必要とすると いうことに注意。

     -mfp-reg

     -mno-fp-regs
          浮動小数点レジスタセットを使用する (使用しない)コード を
          生成する。 -mno-fp-regs は暗黙のうちに -msoft-float を含
          む。浮動小数点レジスタセットが使用されない場合は、浮動小
          数 点オ ペランドは整数レジスタに入れられて渡され、浮動小
          数点の結果は $f0 では なく $0 に入れて返される。これは非
          標 準の関数呼び出し形式であり、浮動小 数点の引数や返り値
          を持つ関数で、-mno-fp-regs をつけてコンパイルされた コー
          ド から呼び出される関数はすべてこのオプ ションをつけてコ
          ンパイルされている必要がある。

          このオプションの典型的な用法は、浮動小数点レジスタを使用
          せ ず、したがっ て浮動小数点レジスタへのセーブもリストア
          も必要のないカーネルを構築する 時などがあるだろう。

     ここに追加するオプションは System V Release 4 において、こ れ
     らのシステ ム上の他のコンパイラとの互換性のために提供されるも
     のである。

     -G   SVr4 システムにおいて、gcc は `-G' オプションを受け付 け
          る (そして これをシステムリンカに渡す)。これは他のコンパ
          イラとの互換性のためであ る。しかし、リンカオプションを
          gcc  のコマンドラインから渡すよりも、我々は `-symbolic'
          または `-shared' の使用が適当であると考える。




GNU Tools             Last change: 94/03/29                    47






GCC(1)                      GNU Tools                      GCC(1)



     -Qy  コンパイラが使用したそれぞれのツール の バー ジョ ン を
          .ident  アセンブラディレクティブを使用して、出力で明示す
          る。

     -Qn  .ident ディレクティブを出力に加えることを抑制する (こ れ
          は デフォルトである).

     -YP,dirs
          `-l' で指定されたライブラリに対して、 dirsで規定さ れ た
          ディレクトリのみを検索し、他は検索しない。 dirs 中は、1
          つのコロンで区切ることにより、複数のディレクトリエントリ
          を記述する。

     -Ym,dir
          M4 プリプロセッサを dir に検索する。アセンブラがこのオプ
          ションを使用する。

コード生成オプション。
     これらのマシン独立オプションは、コード生成を指定するイン ター
     フェースで ある。

     これらのほとんどは `-f'で始まる。これらのオプションは有効形式
     と 無 効形式の 2 つの形式を持っ ている。`-ffoo' の無効形式は
     `-fno-foo' である。以下に挙げる表においては、このうち、デフォ
     ルトではない片 方のみが挙げられている。`no-' を追加するか、削
     除するかによって双方の形式を得ることができる。

     -fnonnull-objects
          参照型によって参照されるオブジェクトはヌルでないと仮定す
          る (C++ のみ)。

          通常は GNU C++ は参照型によって参照されるオブジェクト に
          関しては保守的 な仮定を行なう。例えば、コンパイラは a が
          以下のコードにおいてヌルでないことをチェックする必要があ
          る。

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

          この種の参照がヌルでないことのチェックは、特別なコードを
          必 要とする。し かし、これは多くのプログラムにとって無用
          なものである。そこで、`-fnonnull-objects' を使用すること
          に よって、このヌルに対するチェックを必要のない場合 に省
          略することができる。

     -fpcc-struct-return
          struct と union の値を返す場合に、普通の C コンパイラ が
          行 なうのと同じ方式を使用する。 これは小規模な構造体に対
          して非効率なものとなり、また多くのマシンでその 関数を 再
          入不可能としてしまう。しかしこれは、GCC でコンパイルされ
          たコー ドと PCC でコンパイルされたコードを相互に呼び出す
          ことを可能とするとい う利点を持つ。




GNU Tools             Last change: 94/03/29                    48






GCC(1)                      GNU Tools                      GCC(1)



     -freg-struct-return
          struct と union の値を返す場合に、可能な場合はレジスタを
          使 用するように指定する。これは -fpcc-struct-return を使
          用した場合と比較して、小さな構造体を返す場合に高い性能を
          発揮する。

          -fpcc-struct-return と -freg-struct-return のどちらも 使
          用 しなかった場合には、GNU CC は各ターゲットに対して標準
          で あると考えられる方をデフォルトとして使用する。もし 標
          準 がなかった場合は、 -fpcc-struct-return をデフォルトと
          して使用する。

     -fshort-enums
          enum 型に対して、ちょうど取り得る値の範囲に応じたバイ ト
          数の型を与える。 具体的には、enum 型は、その値域を格納す
          るに十分な最小の整数型と等価になる。

     -fshort-double
          double を float  と同サイズにする。

     -fshared-data
          データと非 const 変数を、プライベートなデータではな く、
          共 有データとしてコンパイルす る。このオプションは、走行
          中の同じプログラム間は共有データが共有され、 プライ ベー
          ト データがそれぞれのプロセスに 1 つずつ与えられるような
          一部 のオペレーティングシステムで意味を持つ。

     -fno-common
          Bss セクション中の初期化されていないグローバル変数に対し
          て でも、共通ブ ロックに生成するのではなく、領域を割り当
          てる。このオプションは、(extern をつけずに) 同一の変数を
          宣言した 2 つのコンパイルに対して、リンク時 にエラーを発
          生するという効果がある。このオプションは、常にこのような
          動  作を行なうシステムにおいても、プログラムが正常に動作
          するかどうかを検査 する場合にのみ有用である。

     -fno-ident
          `#ident' ディレクティブを無視する。

     -fno-gnu-linker
          (C++ のコンストラクタとデストラクタのような) グローバ ル
          な 初期化のコー ドを (GNU リンカがこれらを扱う標準のシス
          テムであるようなシステムにおい て) GNU リンカで使用さ れ
          る形式で出力しない。これは GNU リンカではない リンカを使
          用する場合に指定する。この場合、 collect2 を使用して、確
          実 にシステムリンカにコンストラクタとデストラクタを含 ん
          だコードを出力させる必要がある。(collect2 は GNU  CC  の
          ディ ス ト リ ビュー ショ ン に 含 まれる。) collect2を
          必ず使用しなければならない システムにおいては、 コンパイ
          ラ ドライバ gcc は自動的にそのようにコンフィギュレーショ
          ンされる。




GNU Tools             Last change: 94/03/29                    49






GCC(1)                      GNU Tools                      GCC(1)



     -finhibit-size-directive
          .sizeアセンブラディレクティブなど、関数が途中で 分 割 さ
          れ、 メモリ上の異なった 位置にそれぞれの部分が配置される
          ような場合に不都合が生じるような要素を 出力しない。こ の
          オ プ ションは `crtstuff.c' をコンパイルする時に使用され
          る。それ以外の場所ではこれを使用する 必要はない。

     -fverbose-asm
          出力のアセンブラ中に特別なコメント情報を追加し、可読性を
          高 め る。 このオ プションは一般的には、出力のアセンブラ
          コードを本当に読みたい場合 (例え ばコンパイラ自 身 を デ
          バッグしているような場合) にのみ効果がある。

     -fvolatile
          ポインタによるメモリの参照を全て volatile として扱う。

     -fvolatile-global
          外部変数やグローバルデータアイテムへのメモリ参照を全 て
          volatile として 扱う。

     -fpic
          このオプションがターゲットマシンでサポートされていれば、
          位 置独立なコー ドを出力する。このオプションは共有ライブ
          ラリでの使用に適する。

     -fPIC
          このオプションがターゲットマシンでサポートされていれば、
          位 置独立なコー ドを出力する。このオプションはダイナミッ
          クリンクに適しており、分岐にお いて大きなディスプレー ス
          メントを要求する場合にも適応する。

     -ffixed-reg
          名前が reg のレジスタを固定レジスタとして扱う。生成さ れ
          た コードはこのレジスタ を参照しない (ただし、スタックポ
          インタ、フレームポインタ、その他固定用 途 の 場 合 を 除
          く)。

          reg はレジスタ名でなければならない。受け付けられるレジス
          タ 名 はマシン固 有であり、マシン記述マクロファイル内の
          REGISTER_NAMES マクロに記述されたものである。

          このフラグは無効形式を持たない。なぜなら、これは 3 通 り
          の指定が可能で あるからである。

     -fcall-used-reg
          名前が reg のレジスタを、関数呼び出しによっては破壊さ れ
          る 割り当て可能のレジス タとして取り扱う。これは、関数呼
          び出しを跨いで存在しない一時領域や変数 として割り当る こ
          と ができる。この指定でコンパイルされた関数は、レジスタ
          reg の保存や復帰を行なわない。

          このフラグをマシンの実行モデルにおいて、ある固定的で特殊



GNU Tools             Last change: 94/03/29                    50






GCC(1)                      GNU Tools                      GCC(1)



          な 役割を持って いるレジスタ、例えばスタックポインタやフ
          レームポインタに対して適用する ことは、破滅的な結果を 生
          む。

          このフラグは無効形式を持たない。なぜなら、これは 3 通 り
          の指定が可能で あるからである。

     -fcall-saved-reg
          名前が reg のレジスタを、関数によって保存される割り当 て
          可 能なレジスタとして取 り扱う。これは、関数呼び出しを跨
          いで存在する一時領域や変数としても割り 当てることがで き
          る。 この指定でコンパイルされた関数は、レジスタ reg を使
          用する場合、その保存と復帰を行なう。

          このフラグをマシンの実行モデルにおいて、ある固定的で特殊
          な 役割を持って いるレジスタ、例えばスタックポインタやフ
          レームポインタに対して適用する ことは、破滅的な結果を 生
          む。

          また、このフラグを関数の返り値が格納されるレジスタに使用
          すると、これも 破滅的な結果を生む。

          このフラグは無効形式を持たない。なぜなら、これは 3 通 り
          の指定が可能で あるからである。

プラグマ
     2 つの `#pragma' ディレクティブが GNU C++ によってサポート さ
     れている。これは、1 つのヘッダファイルを 2 つの目的、つまりあ
     るオブジェクトクラスのための インターフェースの定義としての目
     的と、オブジェクトクラスに含まれる内容 の完全な定義としての目
     的の、両方の目的で使用するためのものである。

     #pragma interface
          (C++ のみ。) このディレクティブを、オブジェクトクラス を
          定 義しているヘッダファイル中 に使用することによって、そ
          れらのクラスを使用するほとんどのオブジェクト ファイル の
          大きさを減少させることができる。通常は、特定の情報 (イン
          ライ ンメンバ関数のバックアップコピー、デバッグ情報、 仮
          想 関数実現のための内 部テーブル) はそのクラス定義をイン
          クルードしたそれぞれのオブジェクトファ イル中に 置 か れ
          る。 こ のプラグマを使用することによって、このような複製
          を 防ぐことが可能となる。`#pragma interface' を 含 ん だ
          ヘッ ダ ファイルをインクルードした場合は、これらの追加情
          報 は生成されない (ただし、メインの入力ソースファイル 自
          身 が `#pragma implementation' を含んでいる場合を除く)。
          そのかわり、オブジェクトファイルはリン ク時に解決され る
          参照を含むことになる。

     #pragma implementation

     #pragma implementation "objects.h"
          (C++ のみ。) インクルードされたヘッダファイルによる完 全



GNU Tools             Last change: 94/03/29                    51






GCC(1)                      GNU Tools                      GCC(1)



          な 出力を生成させたい (またそ れをグローバルに可視化した
          い) 場合には、メインの入力ファイル中でこのプ ラグマを 使
          用 す る。 こ の 場 合、インクルードされるヘッダファイル
          は、`#pragma interface' を使用していなければならない。イ
          ン ライン関数のバックアップ情報、 デバッグ情報、仮想関数
          実現用の内部テーブルは、全てインプリメンテーショ ン ファ
          イル中に生成される。

          `#pragma implementation' を、引数をつけずに使用した場 合
          は、 これはそのソースファイルと同じ 基本名を持つファイル
          に対して適用される。例えば、`allclass.cc' 中の `#pragma
          implementation'       は、`#pragma       implementation
          "allclass.h" ' と等価である。もし複数のヘッダファイル に
          対 して、1 つのインプリメ ンテーションファイルを対応させ
          たい場合は、文字列の引数を使用する必要が ある。

          1 つのヘッダファイルに対して、複数のインプリメンテーショ
          ンファイルを対 応させる方法はない。

関連ファイル
     file.c             C 言語ソースファイル
     file.h             C 言語ヘッダ (プリプロセッサ) ファイル
     file.i             プリプロセス済みの C 言語ソースファイル
     file.C             C++ ソースファイル
     file.cc            C++ ソースファイル
     file.cxx           C++ ソースファイル
     file.m             Objective-C ソースファイル
     file.s             アセンブラ言語ファイル
     file.o             オブジェクトファイル
     a.out              リンクエディット済みの出力
     TMPDIR/cc*         一時ファイル群
     LIBDIR/cpp         プリプロセッサ
     LIBDIR/cc1         C 言語コンパイラ
     LIBDIR/cc1plus     C++ コンパイラ
     LIBDIR/collect     いくつかのマシンで必要となるリンカのフロントエンド
     LIBDIR/libgcc.a    GCC サブルーチンライブラリ
     /lib/crt[01n].o    スタートアップルーチン
     LIBDIR/ccrt0       C++ 用の付加的なスタートアップルーチン
     /lib/libc.a        標準ライブラリ, intro(3)を参照
     /usr/include       #include ファイルのための標準ディレクトリ
     LIBDIR/include     #include ファイルのための GCC 標準ディレクトリ
     LIBDIR/g++-include #include ファイルのための付加的な g++ ディレクトリ

     LIBDIR は通常 /usr/local/lib/machine/version の形式を持つ
     TMPDIR は環境変数 TMPDIR (もし使用可能ならば /usr/tmp を、 そ
     うでなければ /tmp を使用する) からとられる。

関連事項
     cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1).
     info中の `gcc', `cpp', `as', `ld', `gdb'  エントリ
     Using and Porting GNU  CC  (for  version  2.0),  Richard  M.
     Stallman; The C Preprocessor, Richard M. Stallman; Debugging



GNU Tools             Last change: 94/03/29                    52






GCC(1)                      GNU Tools                      GCC(1)



     with GDB: the GNU Source-Level Debugger, Richard M. Stallman
     and  Roland H. Pesch; Using as: the GNU Assembler, Dean Els-
     ner, Jay Fenlason & friends; ld: the GNU linker, Steve Cham-
     berlain and Roland Pesch.

バグ
     バグを報告する方法については、GCC マニュアルを参照。

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

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

     Permission is granted to copy and distribute  modified  ver-
     sions of this manual under the conditions for verbatim copy-
     ing, provided that the entire resulting derived work is dis-
     tributed under the terms of a permission notice identical to
     this one.

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

作者
     GNU CC に対して貢献した人々に関しては、GNU CC マニュアルを 参
     照。

     (日本語訳: 細川 達己 hosokawa@mt.cs.keio.ac.jp)























GNU Tools             Last change: 94/03/29                    53