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
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
-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
|
-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
|
-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
|
-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
|
object-file-name
-llibrary
-nostartfiles
-nodefaultlibs
-nostdlib
-s
-static
-shared
-symbolic
-Wl,option
-Xlinker option
-u symbol
|
-Bprefix
-Idir
-I-
-Ldir
-specs=file
|
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
|
-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
|
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.
- -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
.
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
-
|