ein Kapitel zurück                                           ein Kapitel weiter

logo http://gcc.gnu.org/

Compilieren (gcc)

Author : Gerrit Bruchhäuser

Quellenverzeichnis:

Neue Missionsanweisung

Die verschiedenen Platformen

Englisches Online Handbuch

Die Kommandozeilen Optionen

Allgemeine Optionen

Einleitung

Allgemeinen Optionen
C sprach Optionen
C++ sprach Optionen
Warn Optionen
Debugging Optionen
Optimierungs Optionen
Preprozessor Optionen
Assembler Optionen
Linker Optionen
Verzeichnis Optionen
Ziel Optionen
Maschienen abhängeige Optionen


Einleitung

Der gcc wird generell vom GNU Projeckt aus gehend verwaltet. Er wurde im April 1999 vom "GNU C Compiler" zur "GNU Compiler Collection" umbenannt und bekam gleichzeitig seine neue Missionsanweisung. Ziel war und ist es einen schnellen und portablen Compiler zu erschaffen welcher ein breites spektrum von Entwickler anspricht. Die FSF (Free Software Foundation) welche 1985 gegründet wurde, ist der Offiziele Sponsor vom gcc und übernimmt auch gleichzeitig mehr oder weniger die Kontrolle über seine Weiterenticklung.

GCC Version 2.95:
Wenn man den gcc aufruft, versucht er normalerweise die ihm übergebenen Dateien vorzubearbeiten, zu compilieren und anschliessend zu linken. Um dem einhalt zu geben bietet der gcc einige allgemeine Optionen an. Die -c Option sagt ihm zum Beispiel das er nach dem Compilieren nicht mehr weiter machen soll.

Die anderen Optionen werden je nach dem gerade ausgeführten verarbeitungsschritt ausgeführt. So beeinflussen einige Optionen nur den Preprozessor und andere wiederrum nur den Compiler selbst. Die meisten Optionen braucht man gar nicht und sind deshalb auch gar nicht mit hier aufgeführt. Für eine genaue Beschreibung der aktuell unterstützten Optionen für das zu Grunde liegende System möge man bitte in der Online Manual nachschlagen.

Generell kann man sagen das der gcc Optionen und Dateinamen als Operanten erwartet. Seine Parameter setzen sich dabei meistens aus mehreren Buchstaben zusammen, so das die Option -dr etwas ganz anderes macht als -d -r.

Optionen und Argumente können generell gemischt angegeben werden. In den meisten Fällen spielt die Reihenfolge keine Rolle. Es gibt aber fälle, in denen die Reihenfolge wichtig ist. So wird eine Option gleichen types, wenn mehr als einmal angegeben, sequentiel abgearbeitet. Ein gutes Beispiel ist die Angabe von mehreren Bibliothek suchpfaden (Option -L). Ist diese Option mehr als einmal vorhanden wird gcc alle Suchpfade der Reihenfolge entsprechend absuchen.

Einige gcc Optionen sind ziemlich lang und beginnen dann mit -f oder -W wie zum Beispiel -fforce-mem oder -fstrength-reduce. Diese Optionen sind meistens Schalter welche oft ein passendes Gegenstück besizen. Diese haben dann typischerweise ein -Xno.. am anfang wie zum Beispiel -ffoo das Gegenstück -fno-foo besitzt. Nicht alle Schalter sind in den Manuals beschrieben und es ist manchmal ein wenig Glück dabei die Standarteinstellung zu finden.

Der gcc versteht die folgenden Optionen

Allgemeinen Optionen

-c -S -E -o datei -pipe -v --help -x sprache

C sprach Optionen

-ansi -fstd -fallow-single-precision -fcond-mismatch -fno-asm -fno-builtin -ffreestanding -fhosted -fsigned-bitfields -fsigned-char -funsigned-bitfields -funsigned-char -fwritable-strings -traditional -traditional-cpp -trigraphs

C++ sprach Optionen

-fno-access-control -fcheck-new -fconserve-space -fdollars-in-identifiers -fno-elide-constructors -fexternal-templates -ffor-scope -fno-for-scope -fno-gnu-keywords -fguiding-decls -fhandle-signatures -fhonor-std -fhuge-objects -fno-implicit-templates -finit-priority -fno-implement-inlines-templates -fname-mangling-version-n -fno-default-inline -foperator-names -fno-optional-diags -fpermissive -frepo -fstrict-prototype -fsquangle -ftemplate-depth-n -fthis-is-variable -fvtable-thunks -nostdinc++ -Wctor-dtor-privacy -Wno-deprecated -Weffc++ -Wno-non-template-friend -Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual -Wno-pmf-conversions -Wreorder -Wsign-promo -Wsynth

Warn Optionen

-fsyntax-only -pedantic -pedantic-errors -w -W -Wall -Waggregate-return -Wbad-function-cast -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment -Wconversion -Werror -Wformat -Wid-clash-len -Wimplicit -Wimplicit-int -Wimplicit-function-declaration -Wimport -Werror-implicit-function-declaration -Winline -Wlarger-than-len -Wlong-long -Wmain -Wmissing-declarations -Wmissing-noreturn -Wmissing-prototypes -Wmultichar -Wnested-externs -Wno-import -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow -Wsign-compare -Wstrict-prototypes -Wswitch -Wtraditional -Wtrigraphs -Wundef -Wuninitialized -Wunused -Wwrite-strings -Wunknown-pragmas

Debugging Optionen

-a -ax -dletters -fdump-unnumbered -fpretend-float -fprofile-arcs -ftest-coverage -g -glevel -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 -ggdb -gstabs -gstabs+ -gxcoff -gxcoff+ -p -pg -print-file-name=library -print-libgcc-file-name -print-prog-name=program -print-search-dirs -save-temps

Optimierungs Optionen

-fbranch-probabilities -foptimize-register-moves -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks -fdelayed-branch -fexpensive-optimizations -ffast-math -ffloat-store -fforce-addr -fforce-mem -fdata-sections -ffunction-sections -fgcse -finline-functions -finline-limit-n -fkeep-inline-functions -fno-default-inline -fno-defer-pop -fno-function-cse -fno-inline -fno-peephole -fomit-frame-pointer -fregmove -frerun-cse-after-loop -frerun-loop-opt -fschedule-insns -fschedule-insns2 -fstrength-reduce -fthread-jumps -funroll-all-loops -funroll-loops -fmove-all-movables -freduce-all-givs -fstrict-aliasing -O -O0 -O1 -O2 -O3 -Os

Preprozessor Optionen

-Aquestion(answer) -C -dD -dM -dN -Dmacro[=defn] -E -H -idirafter dir -include file -imacros file -iprefix file -iwithprefix dir -iwithprefixbefore dir -isystem dir -isystem-c++ dir -M -MD -MM -MMD -MG -nostdinc -P -trigraphs -undef -Umacro -Wp,option

Assembler Optionen

-Wa,option

Linker Optionen

object-file-name -llibrary -nostartfiles -nodefaultlibs -nostdlib -s -static -shared -symbolic -Wl,option -Xlinker option -u symbol

Verzeichnis Optionen

-Bprefix -Idir -I- -Ldir -specs=file

Ziel Optionen

-b machine -V version

Maschienen abhängeige Optionen

M680x0 Optionen:
-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield -mrtd -mshort -msoft-float -malign-int
MVAX Optionen:
-mg -mgnu -munix
SPARC Optionen:
-mcpu=cpu type -mtune=cpu type -mcmodel=code model -malign-jumps=num -malign-loops=num -malign-functions=num -m32 -m64 -mapp-regs -mbroken-saverestore -mcypress -mepilogue -mflat -mfpu -mhard-float -mhard-quad-float -mimpure-text -mlive-g0 -mno-app-regs -mno-epilogue -mno-flat -mno-fpu -mno-impure-text -mno-stack-bias -mno-unaligned-doubles -msoft-float -msoft-quad-float -msparclite -mstack-bias -msupersparc -munaligned-doubles -mv8
Convex Optionen:
-mc1 -mc2 -mc32 -mc34 -mc38 -margcount -mnoargcount -mlong32 -mlong64 -mvolatile-cache -mvolatile-nocache
AMD29K Optionen:
-m29000 -m29050 -mbw -mnbw -mdw -mndw -mlarge -mnormal -msmall -mkernel-registers -mno-reuse-arg-regs -mno-stack-check -mno-storem-bug -mreuse-arg-regs -msoft-float -mstack-check -mstorem-bug -muser-registers
ARM Optionen:
-mapcs-frame -mno-apcs-frame -mapcs-26 -mapcs-32 -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 -mshort-load-bytes -mno-short-load-bytes -mshort-load-words -mno-short-load-words -msoft-float -mhard-float -mfpe -mthumb-interwork -mno-thumb-interwork -mcpu= -march= -mfpe= -mstructure-size-boundary= -mbsd -mxopen -mno-symrename -mabort-on-noreturn -mno-sched-prolog
Thumb Optionen:
-mtpcs-frame -mno-tpcs-frame -mtpcs-leaf-frame -mno-tpcs-leaf-frame -mlittle-endian -mbig-endian -mthumb-interwork -mno-thumb-interwork -mstructure-size-boundary=
MN10200 Optionen:
-mrelax
MN10300 Optionen:
-mmult-bug -mno-mult-bug -mrelax
M32R/D Optionen:
-mcode-model=model type -msdata=sdata type -G num
M88K Optionen:
-m88000 -m88100 -m88110 -mbig-pic -mcheck-zero-division -mhandle-large-shift -midentify-revision -mno-check-zero-division -mno-ocs-debug-info -mno-ocs-frame-position -mno-optimize-arg-area -mno-serialize-volatile -mno-underscores -mocs-debug-info -mocs-frame-position -moptimize-arg-area -mserialize-volatile -mshort-data-num -msvr3 -msvr4 -mtrap-large-shift -muse-div-instruction -mversion-03.00 -mwarn-passed-structs
RS/6000 und PowerPC Optionen:
-mcpu=cpu type -mtune=cpu type -mpower -mno-power -mpower2 -mno-power2 -mpowerpc -mno-powerpc -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt -mnew-mnemonics -mno-new-mnemonics -mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc -maix64 -maix32 -mxl-call -mno-xl-call -mthreads -mpe -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 -mcall-aix -mcall-sysv -mprototype -mno-prototype -msim -mmvme -mads -myellowknife -memb -msdata -msdata=opt -G num
RT Optionen:
-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 Optionen:
-mabicalls -mcpu=cpu type -membedded-data -membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64 -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 -mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy -mmips-as -mmips-tfile -mno-abicalls -mno-embedded-data -mno-embedded-pic -mno-gpopt -mno-long-calls -mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats -mrnames -msoft-float -m4650 -msingle-float -mmad -mstats -EL -EB -G num -nocpp -mabi=32 -mabi=n32 -mabi=64 -mabi=eabi
i386 Optionen:
-mcpu=cpu type -march=cpu type -mieee-fp -mno-fancy-math-387 -mno-fp-ret-in-387 -msoft-float -msvr3-shlib -mno-wide-multiply -mrtd -malign-double -mreg-alloc=list -mregparm=num -malign-jumps=num -malign-loops=num -malign-functions=num -mpreferred-stack-boundary=num
HPPA Optionen:
-march=architecture type -mbig-switch -mdisable-fpregs -mdisable-indexing -mfast-indirect-calls -mgas -mjump-in-delay -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 -mno-space-regs -msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime -mschedule=cpu type -mspace -mspace-regs
Intel 960 Optionen:
-mcpu type -masm-compat -mclean-linkage -mcode-align -mcomplex-addr -mleaf-procedures -mic-compat -mic2.0-compat -mic3.0-compat -mintel-asm -mno-clean-linkage -mno-code-align -mno-complex-addr -mno-leaf-procedures -mno-old-align -mno-strict-align -mno-tail-call -mnumerics -mold-align -msoft-float -mstrict-align -mtail-call
DEC Alpha Optionen:
-mfp-regs -mno-fp-regs -mno-soft-float -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 -mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max -mmemory-latency=time
Clipper Optionen:
-mc300 -mc400
H8/300 Optionen:
-mrelax -mh -ms -mint32 -malign-300
SH Optionen:
-m1 -m2 -m3 -m3e -mb -ml -mdalign -mrelax
System V Optionen:
-Qy -Qn -YP,paths -Ym,dir
ARC Optionen:
-EB -EL -mmangle-cpu -mcpu=cpu -mtext=text section -mdata=data section -mrodata=readonly data section
TMS320C3x/C4x Optionen:
-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 Optionen:
-mlong-calls -mno-long-calls -mep -mno-ep -mprolog-function -mno-prolog-function -mspace -mtda=n -msda=n -mzda=n -mv850 -mbig-switch
NS32K Optionen:
-m32032 -m32332 -m32532 -m32081 -m32381 -mmult-add -mnomult-add -msoft-float -mrtd -mnortd -mregparam -mnoregparam -msb -mnosb -mbitfield -mnobitfield -mhimem -mnohimem

Code Generieungs Optionen

-fcall-saved-reg -fcall-used-reg -fexceptions -ffixed-reg -finhibit-size-directive -fcheck-memory-usage -fprefix-function-name -fno-common -fno-ident -fno-gnu-linker -fpcc-struct-return -fpic -fPIC -freg-struct-return -fshared-data -fshort-enums -fshort-double -fvolatile -fvolatile-global -fvolatile-static -fverbose-asm -fpack-struct -fstack-check -fargument-alias -fargument-noalias -fargument-noalias-global -fleading-underscore

Optionen die auf die Ausgabe Einfluss nehmen

Der gesamte Übersetzungsprozess kann in vier einzelschritte unterteilt werden: vorbereiten, compilieren, assemblieren und linken. Die Reihenfolge ist dabei immer die hier aufgeführte. In den ersten drei schritten werden jeweils eine neue Quelldatei erstellen, wobei das linken all diese entstandenen sogenanten Objektdateien zu einer einzigen ausführbaren vereint.

Für jede dem gcc als Parameter mit übergebene Datei bestimmt die Dateiendung welcher übersezungsschritt bereits ausgeführt wurde oder noch ausgeführt werden muss.

file.c Normale C Quelldatei welche noch nicht bearbeitet wurde.
file.i C Quelldatei welche nicht übersetzt werden soll.
file.ii C++ Quelldatei welche nicht übersetzt werden soll.
file.m Object-C Quelldatei.
file.h C Headerdatei welche nicht Compiliert oder gelinkt wird.
file.cc
file.cxx
file.cpp
file.c
C++ Quelldateien welche noch übersetzt werden müssen
file.s Assembler code
file.S Assembler code welcher noch übersetzt werden muss
alles andere Alle anderen Dateien werden einfach dem Linker verfüttert.
-x sprache
gcc erkennt normalerweise anhand der Dateiendung die Sprache. Mit diesem Parameter kann man gcc zwingen, eine andere Sprache für die übersetzung zu verwenden. Die sprach Einstellung ist so lange gültig, bis gcc einen weiteren -x Parameter in der Parameterliste findet. Erlaubte Werde für sprache sind:
  • c
  • objective-c
  • c++
  • c-header
  • cpp-output
  • c++-cpp-output
  • assembler
  • assembler-with-cpp
-x none
Schaltet alle erzwungenen Sprachspezifikationen aus.

Wenn man nur einige übersetzungsschritte ausführen will, kann man das mit den Optionen -x, -c, -S oder -E machen. Es ist allerdings darauf zu achten das manche kombinationen gcc anweisen gar nix zu machen. (Beispiel: "-x cpp-output -E")

-c
Weist gcc an zu übersetzen oder zu assemblieren aber nicht zu linken. Die Quelldatei wird übersetzt und es entsteht eine Datei mit dem Namen der Quelldatei und der Endung .o anstatt .c.
-S
Stoppt nach dem übersetzen. Es wird nicht mehr assembliert.
-E
Stoppt nach dem vorübersetzen. Das Ergebnis des vorübersetzens wird aus die standart Ausgabe geschrieben.
-o datei
Leitet die Ausgabe in die angegebene Datei um. Diese Option macht aber nur Sinn wenn man gleichzeitig linkt oder nicht mehr als eine Datei übersetzen möchte. Ist diese Option nicht angegeben erzeugt gcc eine Datei mit dem Namen a.out.
-v
Gibt die Kommandos für den übersetzungsschritt und die Versionsnummern des Compilers, linkers und präprozessors auf Standart Error aus.
-pipe
Benutze Pipes anstatt Dateien zur kommunikation zwischen den einzelnen Übersetzungsschritten. Diese Option schlägt manchmal fehl wenn der Linker nicht aus einer Pipe lesen kann. Der GNU linker hat dieses Problem allerdings nicht.
--help
Gibt eine Beschreibung zu allen Kommandozeilenoptionen auf Standart ausgabe aus.

Optionen die den C dialekt beeinflussen

-ansi
Verlangt das die Sourcen dem ANSI Standart konform sind.
-fstd=
Spezifiziert den sprach- Standart. Folgende Werte sind möglich:
  • iso9899:1990 (Entspricht dem ANSI Standart)
  • iso9899:19409 ISO C
  • iso9899:199x ISO C 9x
  • c89 ist das Gleiche wie -std=iso9899:1990
  • c9x ist das Gleiche wie -std=iso9899:199x
  • gnu89 Standart, iso9899:1990 + gnu Erweiterrungen
  • gnu9x iso 9899:199x + gnu Erweiterrungen
-fnoasm
Schaltet die Schlüsselworte inline und typeof aus, so das man diese selbst zum Beispiel für Variablennamen verwenden kann.
-fno-buildin
Ignoriere alle buildin Funktionen welche nicht mit __builin anfangen. Normalerweise beeinflusst diese Option das Einbinden von Header Dateien. Mit dieser Option wird das ausführbare Programm deutlich langsamer.
-fhosted
Bewirkt das die Übersetzung auf einer bewirteten Umgebung stattfindet. Das schliesst die Option -fno-buildin automatisch mit ein. Eine bewirtete Umgebung ist dann gegeben wenn die standart Bibliothecken vorhanden und das zu übersetzende Programm eine main Funktion mit Rückgabewert int besitzt. Beispiele für das ist eigentlich alles ausser dem Kernel. Diese Option ist gleichbedeutend mit -fno-freestanding
-ffreestanding
Bewirkt das gcc die Sourcen auch ohne die standart Bibliothecken oder eine main Funktion übersetzt. Ein Beispiel hierfür ist der Kernel.
-trigraphs
Unterstützt ANSI C trigraphs. Es ist wirklich unwichtig zu wissen was das genau ist. Die Option -ansi bindet automatisch diese Option ein.
-traditional
Versucht das Verhalten eines traditionellen C Compilers nachzuahmen.
  • Alle extern deklarationen werden als Global angesehen, auch wenn sie innerhalb einer Funktion stehen. Das bindet auch "implizite deklarationen" von Funktionen mit ein.
  • Die neuen Schlüsselworte typeof, inline, signed, const und volatile sind nicht bekannt.
  • Zuweisungen zwischen pointern und integern sind immer erlaubt.
  • Integer typen und unsigned short und unsigned char werden intern als unsigned int geführt.
  • Out-of-range floating point literals sind keine fehler mehr.
  • Bestimmte Konstruckte welche ANSI als ungültige Präprozessornummern interpretiert, werden als Aussnahme betrachtet.
  • String konstanten sind nicht umbedingt konstant. Sie werden in einem schreibbaren Speicher und wenn identische scheinend doppelt im Speicher hinterlegt. (Das ist das gleiche wie die Option -fwriteable-strings )
  • Alle automatischen Variablen sind nicht bekannt. register wird intern als longjmp geführt. Gewöhnlich folgt "GNU C" "ANSI C" und so werden automatische Variablen nicht deklariert und auch volatile wird fehlschlagen.
  • Die Escape sequenzen '\x' und '\a' werden in die entsprechenden ASCII Zeichen 'x' und 'a' übersetzt.

Auf manchen Systemen kann man -traditional nicht verwenden da die ANSI C Header Dateien sich dann nicht übersetzen lassen. Wie auch immer schaltet die -traditional Option automatisch auch die -traditional-cpp Option mit ein.
-traditional-cpp
Versucht das Verhalten eines traditionellen C++ Compilers nachzuahmen.
  • Kommentare werden zu nichts übersetzt. Das erlaubt traditionelle Zeichen verkettung.
  • Das '#' einer Präprozessoranweisung muss in der ersten Spalte stehen.
  • Macros werden als Zeichenketten angesehen welche mit einem neue Zeile Zeichen abgeschlossen werden.
  • Einige specielle Macros sind nicht definiert.
-fcond-mismatch
Erlaubt bedingte Ausdrücke mit nicht übereinstimmenden Parametern als zweites oder drittes Argument. Der Wert eines solchen Ausdruckes ist dann void.
-funsigned-char
Lässt den Datentyp char vorzeichenlos erscheinen (unsigned char). Standartmässig ist nicht definiert ob char vorzeichenlos oder behaftet ist.
-fsigned-char
Lässt den Datentyp char vorzeichbehaftet erscheinen (signed char). Standartmässig ist nicht definiert ob char vorzeichenlos oder behaftet ist.
-fsigned-bitfields
-funsigned-bitfields
-fno-signed-bitfields
-fno-unsigned-bitfields
Diese Optionen geben an ob ein Bitfeld vorzeichenbehaftet ist oder nicht. Standartmässig ist ein Bitfeld immer signed. Wenn man -traditional benutzt sind alle Bitfelder unsigned.
-fwriteable-strings
Schreibt alle konstanten Strings in ein nicht geschütztes Datensegment und macht Sie nicht einzigartig. Das Bedeutet das zwei gleiche Konstaten zwei mal in das Datensegment übernommen werden. Diese Option wird aus Kompatiblitäts Gründen unterstützt (siehe auch: -traditional ). In eine Konstante zu schrieben ist in jeden Fall eine schlechte Idee. Konstansten sollten konstant sein!
-fallow-single-precision
Versucht nicht eine Mathematische genauigkeit wie ein double zu erreichen, auch nicht mit -traditional .

Optionen die den C++ dialekt beeinflussen

Diese Sektion beschreibt die Kommandozeilen Optionen die nur für C++ Programmierer interessant sind, allerdings kann man die meisten gcc Optionen ungeachtet der Sprache verwenden. So kompiliert man zum Beispiel eine C++ Klasse genauso wie ein C Modul.

g++ -g -frepo -O -c meineKlasse.cpp

In diesem Beispiel ist nur die Option -frepo speziell für C++ gedacht.

Die Dateien g++ und c++ sind meistens Scripts welche gcc mit besonderen Parametern aufrufen. Üblicherweise ruft g++ gcc mit der Standartsprache C++ und der Standart C++ Bibliotheck auf. c++ ist normalerweise ein Link auf g++.

Die nachfolgende Liste zeigt die Optionen die nur für C++ Programme gedacht sind.

-fno-access-control
Schaltet alle zugriffs überprüfungen aus. Das ist Sinnvoll wenn man zugriffs Fehler umgehen will.
-fcheck-new
Checkt das zurückgegebene Zeiger vom new Operator ungleich NULL sind. Im Grunde ist diese Option unnötig da new laut spekification keine NULL Zeiger zurückgeben darf. Wie auch immer kann man das mit dieser Option sicherstellen.
-fconserve-space
Fügt nicht initialisierte oder globale Variablen in den allgemeinen Adressraum ein so wie C es macht. Dadurch werden die zu erstellenden Programme kleiner und schneller. Allerdings kann das Programm abstürzen wenn man zwei mal ein Objekt mit destroy freigibt. Diese Option ist nur für wenige anwendungsgebiete nützlich und sollte von daher nur selten eingesetzt werden.
-fdollars-in-identifiers
Erlaubt das Verwenden von '$' Zeichen als Erkennungsmarken (Variablennamen, Konstanten usw.). Man kann die Verwendung von Dollar Zeichen aber auch explizit mit der Option -fno-dollars-in-identifiers verbieten. ANSI C und traditionelles C verbietet normalerweise den Gebrauch während GNU C diesen Standartmässig (bis auf einige wenige Plattformen) erlaubt.
-fno-elide-constructors
ANSI C erlaubt dem Compiler ein temporäres Objekt für Initialisierungszwecke wegzulassen um ein weiteres Objekt zu initialisieren. Diese Option zwinkt g++ dazu den kopier Constructor jedes mal aufzurufen, was langsamere Programme nach sich zieht.
-fexternal-templates
Diese Option wird nicht weiter gebilligt und sollte deshalb auch nicht verwendet werden.
-falt-external-templates
Macht so ziemlich das gleiche wie -fexternal-template und wird deshalb auch nicht weiter gebilligt und sollte nicht verwendet werden.
-ffor-scope
-fno-for-scope
Wenn eingeschaltet dann benutzt g++ die vom C++ standart her vorgeschriebenen einfachen for-init Anweisungen. Anderenfalls kann man in einer for Anweisung den gesamten Werteberreich der zugrundeliegenden Varieble ausnutzen. g++ hällt sich von Grundauf an den Standart.
-fno-gnu-keywords
Schaltet die Schlüsselworte classof, headof, signature, sigof und typeof aus, so das man diese im eigenem Programm selbst definieren kann.
-fguiding-decls
Diese Option lässt g++ frühere Funktionsdeklarationen wie Templates behandeln. Wie auch immer ist dieses Verhalten auf eine Zeit noch vor September 1996 zurückzuführen und man wird diese Option infolgedessen wohl nicht mehr brauchen.
-fhandle-signatures
Erkenne die Schlüsselworte signature und sigof als Abstrackte Datentypen. Standartmässig ignoriert g++ diese.
-fhonor-std
Behandet namespace std wie namespace anstatt diese zu ignorieren (was die Standarteinstellung ist).
-fhuge-objects
Unterstütze funktionsaufrufe von Objekten welche die darstellbare Grösse von short int übersteigen. Programmierer sollten dieses Flag nicht Standartmässig verwenden. g++ wird sich Melden, wenn man diese Option verwenden muss. Zu Beachten ist allerdings das diese Option keinen Sinn zusammen mit -fvtable-thunks macht.
-fno-implicit-templates
Zwinkt g++ alle Templates mit in das Programm aufzunehmen.
-fno-implicit-inline-templates

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf