Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071

    [C/C++]Particolare #define

    Si può scrivere:
    codice:
    #define extern IDC_TXTBOX                      1001
    ?????

    Effettivamente non da errori... ma ha senso?

    Se si... extern lo devo mettere dove dichiaro tutte le variabile o nel file dove lo utilizzo??

    grazie...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    La extern in una define non ha senso ...

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C/C++]Particolare #define

    Originariamente inviato da Il Pazzo
    Si può scrivere:
    codice:
    #define extern IDC_TXTBOX                      1001
    ?????

    Effettivamente non da errori... ma ha senso?

    Se si... extern lo devo mettere dove dichiaro tutte le variabile o nel file dove lo utilizzo??
    La parola chiave 'extern' serve per dichiarare che una variabile o funzione è "da qualche altra parte", in genere in un altro file sorgente oppure anche più avanti nello stesso file.

    Esempio:

    sorgente1.c
    codice:
    #include <stdio.h>
    
    extern int pippo;
    extern void prova (void);
    
    int main (void)
    {
        printf ("%d\n", pippo);
        prova ();
        return 0;
    }
    sorgente2.c
    codice:
    #include <stdio.h>
    
    int pippo = 12;
    
    void prova (void)
    {
        printf ("Prova\n");
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Attenzione che scrivendo:
    codice:
    #define extern IDC_TXTBOX                      1001
    non solo non da errori ma cambia completamente la keyword extern. Cioè se scrivo ancora:
    codice:
    #define extern IDC_TXTBOX                      1001
    
    ...
    extern int ciao;
    allora si che avrò un errore perchè il preprocessore cambierà il codice nel modo seguente:
    codice:
    ...
    IDC_TXTBOX                      1001 int ciao;
    che ovviamente è senza senso. Non solo se la define la faccio così:
    codice:
    #define extern static
    
    extern int ciao;
    ciao ora non sarà una variabile esterna ma una variabile statica ! Se quindi fosse definita in un'altro file (cpp) con qualcosa del tipo:
    codice:
    int ciao = 10;
    senza la define una print di ciao darebbe 10, con la define darebbe 0 (perchè in effetti ciao sarebbe un'altra variabile)...quindi attenzione con le define che non danno errori....

  5. #5
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    ah ok ok grazie... quindi l'unico modo per ridefinire una costante ad esempio (senza cambiarne il valore) è quello di
    1)riscrivere il define nel file in cui mi serve o
    2)di inserire il file d'include (dov è definita la costante) sempre nel file che mi serve....

    no c'è altro modo...

  6. #6
    Prima di tutto una define non è una costante ma una define Quindi si...per cambiare il valore di una define devi riscrivere la define (la define è usata solo al momento della pre-compilazione e non esiste in memoria alcunchè).
    Se vuoi usare una define in un file devi scrivere la define o includere il file (.h) che contiene la define.
    Se poi includi il file con la define nel file pippo.cpp e per qualche ragione vuoi ridefinirla solo in questo file (ad esempio quando il file con la define contiene molte define che vuoi usare e solo una deve essere diversa) puoi sempre fare una #undef e poi la nuova #define (se fai un'altra #define ti da errore).


  7. #7
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    si perfetto grazie....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.