[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