Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    {c++} Variabili e costanti

    volevo sapere:

    a cosa serve il comando wchar_t? non riesco a capire, e non trovo spiegazioni da nessuna parte!

    poi:

    la dichiara<zione di una variabile [mettiamo un numero intero], avviene così: int a

    ma la dichiarazione di una costante avviene così: const int a??
    Se non fosse nato il c++, il mio intelletto sarebbe ancora oscuro a molti...

  2. #2
    Utente di HTML.it L'avatar di belele
    Registrato dal
    Oct 2001
    Messaggi
    24
    non conosco wchar_t
    mentre per le costanti se crei una costante locale devi fare

    const int a = 0;

    perchè non puoi mettere il valore dopo

    ciao
    :adhone: :adhone: :adhone:
    sòio mi !!!!!!!!!!!!!!

    Uno dei segreti della felicità è la cattiva memoria

  3. #3
    ok, e per una costante globale? esistono sia le constanti locali che globali? sono come le variabili solo che non si può cambiare il loro valore?
    Se non fosse nato il c++, il mio intelletto sarebbe ancora oscuro a molti...

  4. #4
    wchar_t è un tipo e non un comando, rappresenta un carattere non ASCII, sulla maggior parte dei sistemi si usa per trattare i caratteri UNICODE.

    esempi:

    wchar_t* stringa = L"Buona sera!";

    const wchar_t* stringa = L"Buona sera!";

    Nel secondo caso il compilatore controlla che non tenti di modificare il valore di 'stringa' nel programma, se sai che una stringa non deve essere modificata è una cosa che facilita il ritrovamento di errori di programma.

    su windows hai la funzione di libreria wprintf che invece che usare un char* prende come argomento un wchar_t*

    wprintf(L"%s\n", stringa);

  5. #5
    ok, ma a cosa serve quella L davanti buona sera?
    grazie ciao
    Se non fosse nato il c++, il mio intelletto sarebbe ancora oscuro a molti...

  6. #6
    Utente di HTML.it L'avatar di belele
    Registrato dal
    Oct 2001
    Messaggi
    24
    Originariamente inviato da asp.net=cfm=xml
    ok, e per una costante globale? esistono sia le constanti locali che globali? sono come le variabili solo che non si può cambiare il loro valore?
    per le variabili globali(statiche) si mette una label static davanti
    static const int = 0;

    Però io parlavo di variabili locali per differenziarmi dalle variabili di classe, se ho una classe la sintassi è questa

    class MiaClasse
    {
    MiaClasse();//costruttore
    const a int;
    }

    //codice del costruttore
    MiaClasse::MiaClasse(void):
    a(0)
    {
    }

    tutte le costanti, che siano locali, statiche o di classe per definizione non possono cambiare valore ( a meno di ricorrere ad artifizi)

    ciao
    :adhone: :adhone: :adhone:
    sòio mi !!!!!!!!!!!!!!

    Uno dei segreti della felicità è la cattiva memoria

  7. #7
    'static' prima di dichiarazioni globali rende la variabile visibile solo all'interno del file nel quale la si dichiara.

    Cmq, tornando alla domanda (domanda CRETINA e da pigro perché sta su qualunque guida, e anche su questo sito):

    codice:
    int globale;
    
    void funzione()
    {
        int locale;
    }
    A prova di stupido.

    Ciao.

  8. #8
    Utente di HTML.it L'avatar di belele
    Registrato dal
    Oct 2001
    Messaggi
    24
    Originariamente inviato da r0x
    'static' prima di dichiarazioni globali rende la variabile visibile solo all'interno del file nel quale la si dichiara.

    da quello che sò static può essere più globale del solo file in cui è dicchiarata, in effetti è globale nella dll o exe in cui viene linkata, se vengono linkati 20 file è globale per tutti i venti file

    ciao
    :adhone: :adhone: :adhone:
    sòio mi !!!!!!!!!!!!!!

    Uno dei segreti della felicità è la cattiva memoria

  9. #9
    la L davanti a buona sera significa che la stringa seguente è una stringa estesa, un po' come quando scrivi

    long i = 33L;

    la L in fondo serve a dire che 33 è una costante letterale di tipo long, nello stesso modo una L davanti ad una costante letterale di tipo 'char' o di tipo 'stringa di char' indica al compilatore di riservare spazio in memoria non già per un char di 8 bit, ma per un char di una altra misura, diciamo 16 bit.

    Esempio:

    char * stringa = "Buona sera!";

    il compilatore assegna un'area di memoria che contiene un puntatore e un area che contiene la stringa, inoltre fa si che il puntatore punti a quest'area.

    supponi che stringa sia allocata all'indirizzo 20 e "Buona sera!" all'indirizzo 50, supponiamo anche di parlare di architettura simile alla Intel a 32 bit, i principi valgono poi per quasiasi piattaforma, supponi inoltre (come è al 99% dei casi) che il compilatore tratti i wchar_t come caratteri UNICODE, ovvero il carattere 'A', ascii 0x41, viene memorizzato come carattere a 16 bit, ovvero 0x0041.
    codice:
     INDIRIZZI    DATI (8 bit)
    +----------+----- 
     20        |  50 >
     21        |   0 > indirizzo della stringa
     22        |   0 > 
     23        |   0 >
    
    .....
     50        |  'b'
     51        |  '\0'  
     52        |  'u' 
     53        |  '\0' 
     54        |  'o'
     55        |  '\0'
     ....
    
    Se invece non mettevi la L davanti
    
     INDIRIZZI    DATI (8 bit)
    +----------+----- 
     20        |  50 >
     21        |   0 > indirizzo della stringa
     22        |   0 > 
     23        |   0 >
    
    .....
     50        |  'b'
     51        |  'u'  
     52        |  'o' 
     53        |  'n' 
     54        |  'a'
     55        |  ' '
     ....
    Ora chiedimi: perchè usare caratteri a 16 bit, che quelli a 8 sono così comodi?

    Siccome in molti sistemi operativi, tra cui windows 2000, tutte le stringhe sono a 16 bit, le prestazioni generali delle applicazioni sono migliori il sistema non deve convertirle).

    Inoltre puoi scrivere programmi da vendere in Cina, grazie al fatto che UNICODE è in grado di gestire l'alfabeto cinese.

  10. #10
    Originariamente inviato da belele


    da quello che sò static può essere più globale del solo file in cui è dicchiarata, in effetti è globale nella dll o exe in cui viene linkata, se vengono linkati 20 file è globale per tutti i venti file

    No, una variabile (o funzione) globale static ha lo scope limitato al solo file sorgente in cui si trova. Questo secondo lo standard, se poi un compilatore si comporta diversamente, non è un compilatore standard.

    Ok, veramente dovrei dire modulo in cui si trova, perchè se ho due file A.cxx e B.cxx in cui A include B allora le variabili statiche di A sono visibili in B, in quanto insieme formano un unico file oggetto.

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