Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Quando dichiarare le variabili
Forum - C/C++ - Quando dichiarare le variabili

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Buonasera :)
Vorrei porvi un quesito "etico": in quale punto è opportuno dichiarare le variabili in C?

Mi spiego meglio: il C, come ben sapete, permette di dichiarare dei dati in qualsiasi punto del programma; tuttavia, se ben ricordo era buona norma tra i programmatori "classici" definire le variabili locali all'inizio della funzione. Ora, mi chiedo: è ancora "in vigore", questa consuetudine? Oppure le convenzioni sono cambiate?
Ancora: c'è, a vostro avviso, qualche convenienza (tanto per l'autore del codice quanto per chi eventualmente dovesse, in seguito, revisionarlo) in una condotta piuttosto che in un altra?

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 20:07
Domenica, 19/04/2015
Se la memoria non mi tradisce in C non è un opzione, le variabili vanno dichiarate all'inizio della funzione, per un motivo molto semplice che in assembly è molto facile da intuire. Quando si punta ad una nuova funzione lo stackpointer deve spostarsi per lasciar spazio alle variabili locali, esempio, se ho due interi ad 2 byte ciascuno e uno stack con parole a 8 bit allora lo stackpointer deve spostarsi verso l'alto di 2*2 parole.
Quindi in C è necessario sapere subito quante parole riservare nello stack all'inizio della funzione, ergo le variabili vanno all'inizio della stessa.
Questo è quello che mi ricordo io, non so se nel tempo e con le versioni dei compilatori questi siano diventati piu tolleranti e vadano a cercare all'interno della funzione se vengo dichiarate ulteriori variabili.

In ogni caso aspettiamo qualcuno piu acculturato di me che possa smentire o confermare quello che ho detto.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 2:18
Lunedì, 20/04/2015
Testo quotato

Postato originariamente da Template:

Buonasera :)
Vorrei porvi un quesito "etico": in quale punto è opportuno dichiarare le variabili in C?



In C non hai scelta: vanno dichiarate all'inizio delle funzioni.

C++ non ha questa restrizione, ed è praticamente sempre meglio dichiararle vicino al codice che le usa. Permette una maggiore chiarezza e si ha un migliore isolamento.

Codice sorgente - presumibilmente C/C++

  1. for (int i = 0; i < 5; i++){
  2.   int a;
  3.   // qui puoi usare "i" e "a"
  4. }
  5. cout << i; // errore
  6. cout << a; // errore


Ultima modifica effettuata da pierotofy il 20/04/2015 alle 2:21


Il mio blog: https://piero.dev
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 17:05
Lunedì, 20/04/2015
Piero non è che sapresti, e potresti spiegare come C++ evita questa limitazione?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6382
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:37
Lunedì, 20/04/2015
In che senso, evita questa limitazione?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 17:50
Lunedì, 20/04/2015
GCC compila tranquillamente codice C, con variabili dichiarate in ogni parte nel codice.

Ultima modifica effettuata da dmr il 20/04/2015 alle 17:52
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6382
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:02
Lunedì, 20/04/2015

Testo quotato

Postato originariamente da dmr:

GCC compila tranquillamente codice C, con variabili dichiarate in ogni parte nel codice.



Cioè tu parli di un file, ad esempio,

programma.c

compilato con gcc?

Sicuro di compilare con il corretto switch per lo standard C ?


Ultima modifica effettuata da nessuno il 21/04/2015 alle 10:55


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 2:08
Martedì, 21/04/2015
Testo quotato

Postato originariamente da Roby94:

Piero non è che sapresti, e potresti spiegare come C++ evita questa limitazione?



Penso ti stia riferendo al fatto che in Assembly lo stack viene inizializzato ad inizio funzione... la differenza tra:

Codice sorgente - presumibilmente C/C++

  1. int i;
  2.  
  3. for (i = 0; i < 5; i++);



e

Codice sorgente - presumibilmente C/C++

  1. for (int i = 0; i < 5; i++);



E' solamente una rappresentazione di alto livello... quando il compilatore produce il risultante Assembly, i viene sempre e comunque dichiarata ad inizio funzione (anche se nel secondo esempio, è limitata allo scope del for loop). Ma i controlli sullo scope vengono fatti a compile time.

Come fa il compilatore nello specifico? Dipende dall'implementazione.


Il mio blog: https://piero.dev
PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 17:43
Martedì, 21/04/2015
Testo quotato

Postato originariamente da nessuno:

Testo quotato

Postato originariamente da dmr:

GCC compila tranquillamente codice C, con variabili dichiarate in ogni parte nel codice.



Cioè tu parli di un file, ad esempio,

programma.c

compilato con gcc?

Sicuro di compilare con il corretto switch per lo standard C ?




Si. Se non erro, la possibilita' di dichiarare le variabili in ogni parte del codice di una funzione, fu introdotto dallo standard C99.

Ultima modifica effettuata da dmr il 21/04/2015 alle 17:45
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo