Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    in un cpp definizione di una variabile extern, possibile?

    ciao a tutti, vi faccio una domanda che per molti di voi probabilmente risulterà essere una cavolata:

    nel file pippo.h ho:
    codice:
    #ifndef SC_DEFINE_MESSAGE
    #define SC_DEFINE_MESSAGE(id,unused1,unused2) \
        namespace sc_core { extern const char id[]; }
    }
    #endif
    
    SC_DEFINE_MESSAGE(SC_ID_STRING_TOO_LONG_,
    		  801, "string is too long")
    SC_DEFINE_MESSAGE(SC_ID_FRONT_ON_EMPTY_LIST_,
    		  802, "attempt to take front() on an empty list")
    mentre in pippo.cpp ho:

    codice:
    namespace sc_core {
    #define SC_DEFINE_MESSAGE(id,unused,text) extern const char id[] = text;
    #include "sysc/utils/pippo.h"
    #undef SC_DEFINE_MESSAGE
    mi chiedo:
    1) nel cpp trovo
    codice:
    extern const char id[] = text;
    , che senso ha scrivere extern sia nell'h che nel cpp dopo aver definito la variabile nel cpp?

    2) i due SC_DEFINE_MESSAGE vanno in conflitto? non riesco a capire come agisce in questo caso il precompilatore!!!!

    grazie mille!!

    Marco
    warcomeb - IL LEADER O.O.O.

  2. #2

    Re: in un cpp definizione di una variabile extern, possibile?

    In C const di default ha linkage extern, in C++ static, perciò in C++ per definire una const con linkage globale bisogna esplitamente definirla extern.

  3. #3
    perdonami ma non sono sicuro di aver capito: se una variabile la dichiaro static è implicitamente extern, mentre se la dichiaro const devo aggiungere extern sia nella dichiarazione che nella definizione? giusto?

    per quanto rigurda il secondo punto?

    grazie mille

    Marco
    warcomeb - IL LEADER O.O.O.

  4. #4
    Originariamente inviato da warcomeb
    perdonami ma non sono sicuro di aver capito: se una variabile la dichiaro static è implicitamente extern
    No. static ed extern sono l'uno l'antitesi dell'altra.
    Originariamente inviato da warcomeb
    mentre se la dichiaro const devo aggiungere extern sia nella dichiarazione che nella definizione? giusto?
    No. La const, in C++ devi dichiararla e definirla extern se vuoi che abbia un linkage globale.
    Nella dichiarazione extern significa "definita altrove", nella definizione della const invece significa "hey guarda che non sono mica static".

  5. #5
    Originariamente inviato da MacApp
    No. static ed extern sono l'uno l'antitesi dell'altra.

    No. La const, in C++ devi dichiararla e definirla extern se vuoi che abbia un linkage globale.
    Nella dichiarazione extern significa "definita altrove", nella definizione della const invece significa "hey guarda che non sono mica static".
    ok, qui ci sono... ma il preprocessore come agisce nel codice che ho scritto?

    grazie

    Marco
    warcomeb - IL LEADER O.O.O.

  6. #6

    Re: Re: in un cpp definizione di una variabile extern, possibile?

    Originariamente inviato da MacApp
    In C const di default ha linkage extern, in C++ static.
    anzi, ripensandoci... non ho capito questa frase!!

    scusami!

    Marco
    warcomeb - IL LEADER O.O.O.

  7. #7

    Re: Re: Re: in un cpp definizione di una variabile extern, possibile?

    Originariamente inviato da warcomeb
    anzi, ripensandoci... non ho capito questa frase!!
    codice:
    /* C */
    const int cConstant = 0; /* cConstant ha linkage esterno/globale: il suo scope è globale */
    codice:
    // C++
    const int cConstant = 0; // cConstant ha linkage interno/statico: il suo scope è limitato alla sua unità di compilazione
    quindi:
    in C per dare un linkage interno ad una const devi usare static;
    in C++ per dare un linkage esterno ad una const devi usare extern:

  8. #8
    grazie, chiarissimo!!!

    qualcuno mi aiuta per la mia seconda domanda?

    grazie

    Marco
    warcomeb - IL LEADER O.O.O.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.