C99, gcc et flags de compilation

C99, gcc et flags de compilation - C - Programmation

Marsh Posté le 22-12-2007 à 23:26:18    

Bonjour,
 
Je vais me lancer dans un projet d'émulateur (de mips rX000 pour ne pas le nommer, le but étant de booter un bios sgi, ca sera déjà bien) et avant de foncer tête baissée, j'aurais voulu savoir les options de compilation de GCC pour avoir du code le plus "propre" possible, comprendre pas de spécifique gnu/x86/windows (je mélange tout mais en gros c'est faire du code portable avec le minimum d'effort).
 
Pour l'instant je suis tombé là-dessus :  
 
(FreeBSD)
-W -Wall -ansi -pedantic -Wbad-function-cast -Wcast-align -Wcast-qual -Wchar-subscripts -Winline -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wredundant-decls -Wshadow -Wstrict-prototypes -Wwrite-strings
 
(Perl)
-pedantic -Wall -W -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wno-long-long
 
Ces exemples (de là : http://peter.hates-software.com/20 [...] 0cefa.html) ne tiennent pas compte du c99 et datent de 2003 et il n'y a pas moyen de trouver un bout de discussion plus récent que ça.
Si quelqu'un a une idée pour me guider ...
 
Merci.


Message édité par xav14 le 22-12-2007 à 23:26:42
Reply

Marsh Posté le 22-12-2007 à 23:26:18   

Reply

Marsh Posté le 23-12-2007 à 00:25:03    

-Wall -std=c99
 
ne compte par sur des warnings pour faire du code portable.

Reply

Marsh Posté le 23-12-2007 à 00:56:38    

:jap:
 
J'ai un peu navigué sur quelques site de dév, et ca reste rare des règles de bonne conduite (je parle pas de celles du projet mozilla qui sont *hum* sévères). Et pas sûr de trouver mon bonheur dans un quelconque bouquin.

Reply

Marsh Posté le 23-12-2007 à 02:31:09    

si tu lis le K&R si c'est déjà pas mal. Ce qui est important, c'est de saisir l'élégance du C pour comprendre ce qui n'est indéfinie.
 
Petit exemple de crasse:

Code :
  1. short foo(const char *x)
  2. {
  3.   return *(short*)x;
  4. }

ça n'a l'air de rien mais ça peut faire du mal (problème d'alignements, sans même parler d'endianess).

Reply

Marsh Posté le 23-12-2007 à 04:31:59    

J'ai pris le parti de tout passer en int (signed ou unsigned) pour éviter justement les problèmes d'alignement, déjà que le mips à la base c'est du little-endian ...
Par contre, je sais pas s'il y a une bonne manière de connaitre l'endianness de la plate-forme sur laquelle le programme tourne (à part le tester moi-même en remplissant un int avec des char)

Message cité 1 fois
Message édité par xav14 le 23-12-2007 à 04:38:28
Reply

Marsh Posté le 23-12-2007 à 12:28:46    

xav14 a écrit :


(je parle pas de celles du projet mozilla qui sont *hum* sévères).


Faut dire aussi qu'elles datente de Mamie Zalem ... et qu'elle contiennent 90% de bétises crasses de gens
pas doués qui ne comprennaient pas pourquoi leur code foirait et qui donc on préférer interdire certaines pratiques.
 

xav14 a écrit :


Par contre, je sais pas s'il y a une bonne manière de connaitre l'endianness de la plate-forme sur laquelle le programme tourne (à part le tester moi-même en remplissant un int avec des char)


 
Au runtime, non, à part qqs fonctions OS-specific pas portables.
Au compile-time, autoconf le fait.

Reply

Marsh Posté le 23-12-2007 à 13:53:16    

Joel F a écrit :


Faut dire aussi qu'elles datente de Mamie Zalem ... et qu'elle contiennent 90% de bétises crasses de gens
pas doués qui ne comprennaient pas pourquoi leur code foirait et qui donc on préférer interdire certaines pratiques.


 
un peu comme à mon boulot en fait  :whistle:  
 

Joel F a écrit :


Au runtime, non, à part qqs fonctions OS-specific pas portables.
Au compile-time, autoconf le fait.


 
erf, autoconf, jamais touché, ça me fait peur tous ces outils gnu  [:totoz]

Reply

Marsh Posté le 23-12-2007 à 14:33:52    

autoconf, c'ets le moins pire de tous. Pour mes soft, j'ai arreté de deviner au nez. Autofonc et zou.

Reply

Marsh Posté le 23-12-2007 à 14:36:25    

Il ne me reste plus qu'à trouver un tuto/bouquin pas trop mal fait pour attaquer ça :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed