|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
|
C e macro parametriche
voglio inizializzare un menù sotto le glut - non ha importanza quali librerie uso -. in pratica devo eseguire la seguente istruzione:
glutAddMenuEntry(LIGHT_MENU_ENTRY_NAME_1,LIGHT_MENU_ENTRY_1); glutAddMenuEntry(LIGHT_MENU_ENTRY_NAME_2,LIGHT_MENU_ENTRY_2); glutAddMenuEntry(LIGHT_MENU_ENTRY_NAME_3,LIGHT_MENU_ENTRY_3); ... ho pensato di creare una macro parametrica e di infilarla in un ciclo for #define ADD_MENU_ENTRY(j) \ glutAddMenuEntry (LIGHT_MENU_ENTRY_NAME##j,LIGHT_MENU_ENTRY##j); ora se eseguo le singole ADD_MENU_ENTRY(1) ADD_MENU_ENTRY(2) ecc. tutto funziona. non posso però mettere tutto in un ciclo for: for (i=0;i<MAX_ENTRY;i++) { ADD_MENU_ENTRY(i); } se lo faccio mi sostituisce il simbolo i nella macro e non il suo valore. eppure so che ero riuscito a compattare tutto in una istruzione una volta. c'è un modo di eseguire un ciclo for dentro la macro stessa o un altro stratagemma di passare alla macro una variabile? eppure so che si può fare qualcosa per evitare quella fila di istruzioni!! cazzarola |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
La macro viene espansa in
glutAddMenuEntry(LIGHT_MENU_ENTRY_NAMEx,LIGHT_MENU_ENTRYx); che ha ben poco significato... Puoi risolvere ad es. con: #define ADD_MENU_ENTRY(j) \ do { \ switch(j) { \ case 0: \ glutAddMenuEntry(LIGHT_MENU_ENTRY_NAME0,LIGHT_MENU_ENTRY0); \ break; \ case 1: \ glutAddMenuEntry(LIGHT_MENU_ENTRY_NAME1,LIGHT_MENU_ENTRY1); \ break; \ (ecc) } } while(0) Un pò brutto ma non hai molte altre soluzioni...se "j" è costante (ad es. ADD_MENU_ENTRY(1) ) lo switch dovrebbe essere ottimizzato dal compilatore.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
|
mmh ti ringrazio intanto. eppure mi ricordavo qualcosa di più pulito. mah forse mi sbaglio. grazie!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:47.



















