Mi sono imbattuto in un po 'di codice che contiene un paio di blocchi di codice, delineati con parentesi graffe {}
. Non esiste alcuna riga prima che i blocchi di codice li contrassegnino come parte delle istruzioni if
, delle definizioni di funzione o di qualsiasi altra cosa. Solo un blocco di codice che fluttua nel mezzo di una funzione. C'è qualche significato a questo? gcc
sembra perfettamente felice di leggere il codice; Posso solo immaginare che sia un modo per consentire al codificatore originale di dividere visivamente i blocchi di funzionalità ...Significato di blocchi di codice a blocchi ricurve solitari in C
risposta
Crea un ambito. Ci sono variabili automatiche definite all'interno dei blocchi? In tal caso, l'ambito di tali variabili è limitato al blocco. È utile per le variabili temporanee che non si vuole inquinare il resto della funzione, ed è anche utile quando si scrive C89, dove le definizioni delle variabili devono essere all'inizio di un blocco.
Così, invece di:
int main() {
int a = 0;
int b;
int i;
for (i = 1; i < 10; ++i) {
a += i;
}
b = a * a;
// do something with a and b
}
Si potrebbe avere:
int main() {
int a = 0;
{
int i;
for (i = 1; i < 10; ++i) {
a += i;
}
}
{
int b = a * a;
// do something with a and b
}
}
Ovviamente se si sta facendo questo, si hanno anche per chiedersi se i blocchi non sarebbe meglio come funzioni separate.
+1 per esempi e alcune discussioni su * perché * qualcuno userebbe l'ambito. – Edmund
Quando dici "inquinare il resto della funzione", ti riferisci alla leggibilità/manutenibilità? O vuoi dire che questa tecnica può aiutare a conservare la memoria? O qualcos'altro? –
@ AndyJ0076: leggibilità/manutenibilità. Potrebbe conservare la memoria, dipende dal compilatore, ma non è quello che intendevo perché non lo fa in modo affidabile. I compilatori IIRC solitamente posizionano uno stack frame per l'intera funzione, indipendentemente dagli ambiti delle variabili in esso contenute. Se riutilizzano gli slot dello stack, è probabile che sia dovuto all'analisi della liveness del compilatore come dovuta allo scope. –
Se i blocchi di codice contengono dichiarazioni di variabili locali (la descrizione non è chiara su cosa c'è dentro), potrebbero trovarsi lì per limitare l'ambito di tali variabili. Cioè
int i = ...;
// i is visible here
{
int j = ...;
// both i and j are visible here
}
// j went out of scope, only i is visible here
autonomi parentesi graffe sono usate per scoping-eventuali variabili dichiarate in un blocco non sono visibili all'esterno.
Questo è uno strumento molto potente in C++ quando combinato con RAII. –
Di solito significa che è stato scritto per dichiarare una parte variabile attraverso una funzione più grande, ma la variabile ha solo bisogno di un ambito molto limitato, o potrebbe anche aver bisogno di nascondere qualcosa. È completamente legittimo: introduce semplicemente un blocco. Il grosso problema è sempre "qual è il rientro corretto per quel codice".
Può essere utilizzato anche da pre-processori che convertono in linguaggio generato altri linguaggi C. Il materiale convertito viene spesso inserito in un blocco (e possibilmente anche nelle direttive #line
).
Viene utilizzato per creare un ambito. Un ambito utile se utile per dichiarare variabili che possono essere utilizzate solo all'interno di questo ambito. Ad esempio, se una variabile viene dichiarata prima delle parentesi, può essere utilizzata all'interno delle parentesi successive. Al contrario, se una variabile viene dichiarata all'interno delle parentesi, può essere utilizzata solo all'interno delle parentesi graffe. Spero che questo aiuti.
- 1. blocchi di codice statico
- 2. blocchi di codice perl
- 3. Utilizzo di blocchi all'interno di blocchi in Objective-C: EXC_BAD_ACCESS
- 4. Blocchi di codice in python
- 5. . NET "blocchi nugget codice"?
- 6. Blocchi di codice anonimi in Java
- 7. Come comprimere blocchi di codice in Eclipse?
- 8. Blocchi di codice anonimo in Groovy
- 9. Invio di file in blocchi a HttpHandler
- 10. Blocchi di blocco contro blocchi non bloccanti
- 11. Utilizzando Objective-C Blocchi
- 12. Algoritmo di layout a blocchi
- 13. blocchi di denominazione in ogg-c?
- 14. Significato degli elementi nella configurazione dei blocchi di armatura
- 15. Blocchi smalltalk in Objective-c?
- 16. Passaggio di blocchi in Objective-C
- 17. Objective-C con blocchi
- 18. Codice C++ :: Blocchi di completamento automatico non funzionanti
- 19. Come conservare rubino blocchi di codice
- 20. significato di `??? - codice` in C++
- 21. Come posso dividere i blocchi di codice in un elenco?
- 22. Formatter PHP per blocchi di codice a linea singola
- 23. blocchi di filettatura python
- 24. Rendering di blocchi in metallo
- 25. codice rientro in blocchi src org-babele
- 26. Puoi creare blocchi di codice anonimi in Lua?
- 27. Passaggio di più blocchi di codice come argomenti in Ruby
- 28. Modifica collegamenti IDE in Codice :: Blocchi
- 29. Evidenziazione di blocchi di codice Python in vim
- 30. Esempio di blocchi in ios5
http://stackoverflow.com/questions/1677778/why-enclose-blocks-of-c-code-in-curly-braces @Goathens, penso che la domanda posta nell'URL sopra risponda alla tua richiesta. –
@Anil Sì, lo fa. Prometto che ho provato a trovare una domanda simile prima di postare! – user17925