(Résolu) macro qui incrémente.

tabliertablier Membre
avril 2017 modifié dans Objective-C, Swift, C, C++ #1

Je sèche !!


J'ai inséré dans les 132 lignes d'un switch la macro ligne(0) avec la fonction remplacement de l'éditeur d'Xcode. Puis j'ai remplacé un par un tous les zéro par les nombres de 1 à  132. Cela donne ce que vous voyez ci-dessous. Je suis à  la retraite et j'ai le temps, mais j'ai plusieurs switch de ce genre à  modifier ! Je pense qu'il doit y avoir une manière d'écrire la macro pour que le préprocesseur fasse le boulot à  ma place. Je n'arrive pas à  modifier la macro pour que ça marche ! Y a t-il une solution ?


 


 int ltr = pKeySym->sym ;


 int lgne = 0 ;


 


#define KeyTest


 


#ifdef KeyTest


#define lign(n)  lgne=(n);


#else


#define lign(n)


#endif


 


 switch (ltr)


 {


 case SDLK_BACKSPACE: code = 0x0E; lign(1) break;


 case SDLK_TAB: code = 0x0F; lign(2) break;


 case SDLK_CLEAR: code = 0x47; lign(3) break;


 case SDLK_RETURN: code = 0x1C; lign(4) break;


 case SDLK_ESCAPE: code = 0x01; lign(5) break;


 case SDLK_SPACE: code = 0x39;  lign(6) break;


 case SDLK_EXCLAIM: code = 0x09; lign(7) break;


 case SDLK_QUOTEDBL: code = 0x04; lign(8) break;


.................................................lignes de 9 à  127 


 case SDLK_RALT: code = 0x38; lign(128) break;


 case SDLK_LALT: code = 0x38; lign(129) break;


 case SDLK_HELP: code = 0x62; lign(130) break;


 case SDLK_PRINT: code = 0x62; lign(131) break;


 case SDLK_UNDO: code = 0x61; lign(132) break;


 default: code = -1 ;


 }


 


#ifdef KeyTest


 if (code==-1)


  fprintf(stderr, "input: %c, not known !", ltr);


 else


  fprintf(stderr, "input: %c, Line %d, code: 0x%x!\n", ltr, lgne, code);


#endif 


 


 return code ;


}


 

Réponses

  • LexxisLexxis Membre
    avril 2017 modifié #2

    Tu peux peut être utiliser un tableau de struct. Tu auras directement l'index au moins (et donc la ligne).


     


    Ou éventuellement mettre à  profit __LINE__:



    #define LINE0 (lign=1, lign0=__LINE__)
    #define LINE (lign=__LINE__ - lign0 + 1)

    En utilisant LINE0 sur la première ligne du swift et LINE sur les autres. Je n'ai pas testé mais j'imagine que cela devrait fonctionner.


  • ça consisterait à  tout réécrire. C'est ce que je cherche à  ne pas faire ! les switch existent et je veux modifier les fichiers source pour controler les valeurs utilisées sans mettre de points d'arrêt. Un point d'arrêt c'est bloquant et lent.


  • Dans ce cas tu peux utiliser __LINE__ ou alors je viens de trouver __COUNTER__ qui correspondrait, je pense, à  ce que tu cherches. 


  • oui, c'est prometteur, je vais aller voir ça.


  • tabliertablier Membre
    avril 2017 modifié #6

    En définitive j'ai utilisé __LINE__ ce qui correspond à  ce que je souhaitais.


    Merci.


  • Macron qui incrémente ? Une manière geek de dire qu'il monte dans les sondages ?

Connectez-vous ou Inscrivez-vous pour répondre.