[gull] C++ sous linux
Daniel Cordey
dc at mjt.ch
Mon Apr 25 11:06:01 CEST 2005
On Sunday 24 April 2005 23:08, patrick jayet wrote:
> >>int _tmain(int argc, _TCHAR* argv[])
> >>{
> >>...
> >>}
> >
> > La fonction main a deux signatures portables :
> > int main(void);
> > int main(int, char**);
>
> Parfait. J'ai corrigé la signature de main pour correspondre aux
> signatures standard, enlevé l'include de <tchar.h> et là je parviens à
> compiler le programme.
Comme tu as besoin de maintenir le code le plus identique possible pour tes
deux plateformes, utilise bien les flags de compilation. Comme te l'a
explique Marc Mongenet, il existe plusieurs flags. Certains te donne des
informations specifiques a la plateforme, alors que d'autres sont specifiques
au modele de CPU ou du compilateur utilise; a toi de voir (gcc -v + fichiers
specs dans /usr/lib/gcc-lib/...). Ainsi tu pourrais conserve ton code intacte
en incluant des *.h differents ou en redefinissant des macros. Par exemple :
#define _TCHAR char
Je ne dis pas que c'est ce qu'il faut faire dans le cas present (je ne connais
pas la mcro initiale), mais c'est bien un exemple de la maniere dont tu peux
essayer de ne pas toucher a ton code en fonction des systemes.
Autre remarque, les symboles (fonctions, variables, etc.) dont le premier
caractere est un '_' (souligne) sont a prendre avec des pincettes. Pourquoi ?
La convention veut que ce soit des symboles "reserves". CAD, soit il s'agit
de variables/macros/fonctions globales destinees a etre chachees (pour ne pas
entrer en conflit avec tes propres definitions), soit il s'agit d'information
manipulees par le compilateur (__LINE__, etc.), ou autre truc du meme genre.
Sans beaucoup se tromper, on peut dire que d'acceder a ce genre de
symbole/macro est destine a utiliser quelque chose de non-standard et ouvre
la porte a bien des problemes quand il s'agit d'etre multi-plateforme. De
plus, la compatibilite entre les differentes versions du compilateur et de
librairies n'est pas assuree pour ces acces. Le C++ permet une "bonne"
encapsulation et l'on ne devrait pas avoir besoin de programmer avec ce genre
d'acces. Dans ce cas, pourquoi _TCHAR n'est-il pas une vraie classe ? C'est
sans doute la veritable question...
dc
More information about the gull
mailing list