IFDEF

Résolu
pelly1308 Messages postés 13 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 5 septembre 2005 - 24 août 2005 à 18:27
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 25 août 2005 à 21:10
Bonjour.
Voilà, j'ai un proplème avec les directives de compilation.
J'ai 3 modes de compilation possibles: LIGHT, SPECIAL et sans directive.
Les compilations avec LIGHT et SPECIAL ont certains codes en commun, et j'aurais voulu savoir comment regrouper leur code, avec quelque chose du type {IFDEF LIGHT OR SPECIAL} Code {ENDIF}, mais je ne trouve pas la syntaxe.
J'ai aussi pensé à faire:
{$IFDEF SPECIAL}
{$DEFINE SPECIALETLIGHT}
{$ENDIF}
{$IFDEF LIGHT}
{$DEFINE SPECIALETLIGHT}
{$ENDIF}
et ensuite utiliser {IFDEF SPECIALETLIGHT} Code {ENDIF}.
Mais visiblement, le DEFINE est local, et ne peux pas être pour tout le projet, ou alors, où faut-il le placer?

Merci d'avance

4 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
24 août 2005 à 22:40
On peut utiliser les options du projet pour déclarer des définitions conditionnelles. Mais cela est bien quand on fonctionne en tout ou rien.
Dans ton cas, ce n'est pas adapté car tu gères plusieurs niveaux.
La solution que je préconise est de créer un fichier texte dans lequel tu déclares tes directives. Par convention, ce type de fichier porte l'extension .inc (pour "include").

Ensuite, dans les unités devant connaître l'état des commutateurs définis, tu ajoutes une ligne au début comme ceci :
{$I mesDéfinitions.inc}
Ainsi, il suffit de maintenir un seul fichier de déclarations pour qu'il s'applique à toutes les unités dans lesquelles il est référencé par une directive include {$I}.

Dans le code, tu exploites normalement ces définitions :
{$IfDef special}
// version spéciale
{$EndIf}

{$IfDef Light}
// version light
{$EndIf}

{$IfNDef special}
{$IfNDef light}
//version autre
{$EndIf}
{$EndIf}

Si tu utilises Delphi 7 et +, il est encore plus commode en utilisant la nouvelle syntaxe :
{$If defined(special) or defined(ligth)}
//version light ou special : code commun
{$If defined(Special)}
// supplément version spéciale
{$Else}
//supplément version light
{$IfEnd
{$else}
// version autre
{$IfEnd}



<HR color=#008000>



Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
3
pelly1308 Messages postés 13 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 5 septembre 2005
25 août 2005 à 09:17
Merci pour cette réponse rapide.
0
pelly1308 Messages postés 13 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 5 septembre 2005
25 août 2005 à 11:19
Apparemment, la deuxième syntaxe a l'air de marcher en Delphi 6 aussi
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
25 août 2005 à 21:10
Je n'en étais plus très sur. Merci pour cette info.


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
Rejoignez-nous