Pages

mercredi 27 février 2013

Faites parler votre compilateur

Voici la liste de mes alias pour compiler des codes C, C11, C++ et C++11 et ainsi éviter de nombreuses erreurs de codage et avoir un maximum d'info sur les potentielles erreurs. Les flags les plus importants étant quand même -Wall, -Wextra et -Werror pour transformer les avertissements en erreurs.

alias gcc1x='gcc -std=c1x'
alias g0x='g++ -std=c++0x'
alias g11='g++-4.7 -std=c++11'

alias colorgcc1x='colorgcc -std=c1x'
alias colorg0x='colorg++ -std=c++0x'
alias colorg11='colorg++-4.7 -std=c++11'

flag='-Wall -Wextra -Wundef -Wcast-align -Wformat-security -Wunreachable-code -Wformat=2 -Werror-implicit-function-declaration -Wfloat-equal -Wshadow -Wpointer-arith -Wconversion -Wmissing-declarations -Wmissing-noreturn -Wmissing-format-attribute -Wpacked -Wredundant-decls -Winline -Wdouble-promotion -Winit-self -Wcast-qual -pedantic'
cflag=$flag' -Wstrict-prototypes -Wbad-function-cast -Wmissing-prototypes -Wnested-externs -Waggregate-return -Wwrite-strings'
cppflag=$flag' -Wold-style-cast -Woverloaded-virtual -Wnon-virtual-dtor'
unset flag
alias gwcc="gcc $cflag -Wlong-long"
alias gwcc1x="gcc $cflag -std=c1x"

alias colorgwcc="colorgcc $cflag -Wlong-long"
alias colorgwcc1x="colorgcc $cflag -std=c1x"

unset cflag

alias gw++="g++ $cppflag -Wlong-long"
alias gw0x="g++ $cppflag -std=c++0x"
alias gw11="g++-4.7 $cppflag -std=c++11"

alias colorgw++="colorg++ $cppflag -Wlong-long"
alias colorgw0x="colorg++ $cppflag -std=c++0x"
alias colorgw11="colorg++-4.7 $cppflag -std=c++11"

unset cppflag

alias gfcc='gcc -Wfatal-errors'
alias gf++='g++ -Wfatal-errors'
alias gfcc1x='gcc1x -Wfatal-errors'
alias gf0x='g0x -Wfatal-errors'
alias gfwcc='gwcc -Wfatal-errors'
alias gfwcc1x='gwcc1x -Wfatal-errors'
alias gfw0x='gw0x -Wfatal-errors'

alias colorgfcc='colorgcc -Wfatal-errors'
alias colorgf++='colorg++ -Wfatal-errors'
alias colorgfcc1x='colorgcc1x -Wfatal-errors'
alias colorgf0x='colorg0x -Wfatal-errors'
alias colorgfwcc='colorgwcc -Wfatal-errors'
alias colorgfwcc1x='colorgwcc1x -Wfatal-errors'
alias colorgfw0x='colorgw0x -Wfatal-errors'

Ma version de gcc et la 4.6 par défaut mais la 4.7 (que j'ai aussi) a un meilleur support du C++11.

colorgcc se trouve dans les paquets (d'ubuntu) mais il faudra un patch pour avoir colorg++ (facilement trouvable sur le net).

Je compile généralement mes tests en ajoutant -Wno-missing-declarations pour permettre d'éliminer les warnings lorsque la fonction n'a pas de prototype ou n'est pas inline.

Aucun commentaire: