#define: syntaxe en objective C?

J'utilise des #define pour définir des formats de texte.


Problème, certains formats sont très longs: de 120 à  300 caractères. J'aimerais avoir ces formats écrits sur plusieurs lignes et je n'arrive pas à  trouver la bonne syntaxe.


Si le # define définit plusieurs éléments, la syntaxe ci dessous marche bien car le \ est en fin de ligne entre deux éléments:


#define truc  element1, element2,\


element3, element4, \


element5


Par contre, s'il s'agit de couper un très long string sur plusieurs lignes, ça ne marche pas. J'ai essayé:


#define truc  @debut texte \


milieu texte \


fin texte"


si j'enlève les back slash, ça ne marche pas non plus!


En C et Objective C, la syntaxe suivante est correcte:


NSSTring *truc =  @debut texte \


milieu texte \


fin texte" ;


 


Y-a-t-il une solution pour les #define ?

Réponses

  • jpimbertjpimbert Membre
    juillet 2013 modifié #2

    #define truc  @debut texte \


    "milieu texte" \


    "fin texte"


     


    Et la même syntaxe fonctionne aussi pour les strings C et les NSString.


  • T'as besoin d'un aussi gros #define ?

    C'est pas plus intéressant de le mettre dans le NSLocalizedDescription (si tu utilises les localisations) ?


  • tabliertablier Membre
    juillet 2013 modifié #4

    @jpimbert  merci.


     


    @Larme  


    Ce sont des réglages, ils ne sont pas localisés.


    Les gros #define, oui (hélas). Je reconstruis un string qui constitue la configuration d'un programme. Ce n'est pas moi qui ai fait ce programme. Sa configuration est gardée sous forme d'un fichier ASCII de 182 lignes, divisées en 21 sections avec des noms de clef à  rallonge.


    Ces noms ont de 25 à  45 caractères, exp de clef:   ConfigureParams.Joysticks.Joy.bEnableJumpOnFire2


    Donc, soit je me farcis des écritures à  n'en plus finir, soit j'utilise des macros et des formats!


     


    Rectification: ce sont les noms des variables qui sont à  rallonge. Les noms des clefs ne dépassent pas 20 caractères.


  • mpergandmpergand Membre
    juillet 2013 modifié #5

    "debut texte"\


    "milieu texte "\


    "fin texte"


     


    NSString* str=truc;


  • AliGatorAliGator Membre, Modérateur
    juillet 2013 modifié #6
    De manière générale d'ailleurs on peut concaténer des chaà®nes C ou ObjC à  la (pré?)-compilation en les juxtaposant tout simplement. Par exemple :
    const char* c1 = "abc" "def" "ghi"; // interprété par le compilo comme "abcdefghi"
    NSString* s1 = @abc @def @ghi; // interprété comme @abcdefghi
    NSString* s2 = @abc "def" "ghi"; // interprété comme @abcdefghi
    Ce qui peut s'avérer très pratique pour faire des macros (via des #define) qui combinent plusieurs chaà®nes par exemple issues à  la fois de paramètres et d'autres éléments... Genre
    #define dash(i) NSString dash ## i = @- #i @-

    dash(1); // génère : NSString* dash1 = @-1-;
    dash(23); // génère : NSString* dash23 = @-23-;
    ...
    Bref, tu vois un peu les possibilités.


    Et c'est donc parce que ces juxtapositions de chaà®nes sont interprétées comme une seule grosse chaà®ne à  la compilation que les réponses de jpimbert et mpergant fonctionnent.
Connectez-vous ou Inscrivez-vous pour répondre.