Dichiarare le variabili dietro il ciclo o dentro il ciclo? - pagina 6

 
Georgiy Merts:

Personalmente, non mi piace molto avere un mucchio di variabili sparse in un programma e dover cercare ogni volta dove viene creata una variabile. Questo è il motivo per cui, quando è possibile, cerco di dichiarare le variabili all'inizio di una funzione, tutte insieme - solo per vedere dove vengono create e per capire quando stanno per essere eliminate.

Cosa intendi per "sparsi per tutto il programma"? Una variabile locale è dichiarata e applicata solo nel blocco in cui viene utilizzata, e se devi cercarla, significa che il tuo codice è così lungo che non riesci a trovarla.

Dichiarare tutte le variabili all'inizio di una funzione è solo un cattivo e arcaico stile. Anche il vecchio Strastrup ha esortato a rifiutare queste reliquie della vecchia scuola del vecchio C infavore di un codice corretto e affidabile: dichiarare una variabile proprio dove viene utilizzata. Non ti rendi conto che il tuo approccio è irto di molti errori casuali. Inizializzi le variabili con qualcosa? O semplicemente "fai con calma" e poi affronti un comportamento imprevedibile del codice? ) Forse una volta era tutto giustificato a causa dell'hardware a bassa potenza e dei compilatori deboli, ma certamente non ora.

 
pivalexander:

Sei sempre scherzando sui libri e lodando te stesso, ma l'essenza della questione e non ha detto nulla, ma la teoria intorno al cespuglio, leggere si capisce ... Memoria e CPU, CPU e memoria, l'alimentatore - è usato anche lì!

Al contrario, quelli che hanno bisogno di capire il significato dei miei testi, e i miserabili programmatori hanno sempre bisogno di imboccare e dare una risposta pronta su un piatto d'argento, non vogliono mai capire niente. Pertanto, le mie raccomandazioni, anche se sono scritte in risposta a voi, ma molto probabilmente non sono per voi, ma per coloro che vogliono imparare e portare le loro abilità alla perfezione.

Credo che ci siano due tipi di persone - quelli che avendo visto un rastrello sulla loro strada, solo per prova determinano il risultato di calpestarlo, e quelli che conoscendo le leggi elementari della fisica, i dati sul peso degli elementi possono dire il risultato in anticipo senza calpestarlo.

 
Alexey Navoykov:

Dichiarare tutte le variabili all'inizio di una funzione è solo un cattivo stile arcaico - anche il vecchio Strastrup ha esortato a scartare questi residui di vecchia scuola del vecchio C in favore di un codice corretto e affidabile: dichiarare la variabile direttamente dove viene usata.

imho, bravo! - In modo convincente, quando si usano le variabili in ambito locale è meno probabile colpire una variabile non inizializzata, o piuttosto un valore che era nell'uso precedente della variabile, il compilatore non genererà un avvertimento, e la ricerca di tali piccole schifezze è noiosa

Dal soggetto e test, beh, circa nulla, più del 5-7% della differenza non è visibile, e non è un fatto che il comportamento nelle prossime build non cambierà

 
Aleksandr Matveev:

Chi ha bisogno - il significato dei miei testi capirà, e guai programmatori sempre bisogno di masticare e dare una risposta pronta su un piatto, non vogliono mai capire nulla. Pertanto, le mie raccomandazioni, anche se sono scritte in risposta a voi, ma molto probabilmente non sono per voi, ma per coloro che vogliono imparare e portare le loro abilità alla perfezione.

Credo che ci siano due tipi di persone - quelli che avendo visto un rastrello sulla loro strada, solo per prova determinano il risultato di calpestarlo, e quelli che conoscendo le leggi elementari della fisica, i dati sul peso degli elementi possono predeterminare il risultato senza calpestarlo.

Credo che ci siano due tipi di persone - quelli con la loftiness gonfiata, quelli che sono venuti a divertire la tua autostima e non hanno commenti veramente utili sull'argomento qui, a mio parere non hanno nemmeno approfondito...

e ci sono quelli... Non importa, tanto non sei tu:)

Aleksandr Matveev:

Ho il sospetto che l'autore di questa dichiarazione non abbia idea di come funziona il processore, la memoria e il compilatore... Scommetto che qualsiasi tuo codice può essere accelerato almeno dieci volte o anche centinaia di volte. A causa di tali codificatori di merda la maggior parte dei prodotti sono insopportabilmente lenti sui computer più potenti con decine di core, mentre tu hai solo bisogno di pensare un po'... Ma alcuni pensano: "Perché pensare? Devi codificare..."

E ho il sospetto che tu sia ancora bloccato al livello di"87, a partire dall'EC1020 e lo ZX Spectrum".

"Shitcoder" sei tu, ecco perché hai assunto 600 persone...

Nessuna offesa

PS: velocizza il mio codice, ok, non di centinaia ma almeno di decine di volte, il codice è all'inizio del thread, nel primo post, se non sei uno shitcoder ovviamente, puoi velocizzare qualsiasi mio codice di 10 o 100 volte, dai...

 
pivalexander:

Penso che ci siano due tipi di persone - quelli con un'arroganza esagerata, quelli che sono venuti per divertire il loro ego e non hanno un solo commento veramente utile sulla questione, secondo me non hanno nemmeno approfondito

e ci sono quelli... Non importa, non sei tu comunque :)

E ho il sospetto che tu sia ancora bloccato al livello di"87 anni a partire da EU1020 e ZX Spectrum".

"Shitcoder" sei tu, ecco perché hai assunto 600 persone...

Nessuna offesa

sei pagine di discussione di tali sciocchezze, sto tranquillamente ridendo )))) il degrado del forum è evidente ))

 
Igor Makanu:

imho, bravo! - In modo convincente, quando si usano le variabili in ambito locale è meno probabile colpire una variabile non inizializzata, o piuttosto un valore che era nell'uso precedente della variabile, il compilatore non genererà un avvertimento, e la ricerca di tali piccole schifezze è noiosa

Per il soggetto e le prove, beh, circa nulla, più di 5-7% di differenza non è visibile, e non è un fatto che il comportamento nelle prossime build non cambierà

Sapete che dichiarare una variabile locale senza inizializzazione non garantisce che abbia un valore zero? Dopo tutto, è creato sullo stack e tutto può essere lì.

void Func()
{
   int n = 0;// только так
   ....
}
P.S. Io stesso sono caduto nel peccato della discussione ))
 
Igor Makanu:

sull'argomento e sui test, beh, non è niente, non si vede più del 5-7% di differenza, e non è certo che il comportamento non cambierà nelle prossime build

Sì, beh, idealmente non ci dovrebbe essere alcuna differenza perché la situazione è abbastanza semplice da ottimizzare. E anche se il corpo del ciclo è messo in una funzione separata, sarà lo stesso, ne sono sicuro. Ma i paranoici dovranno trascinare questa stringa per riferimento in una funzione, complicando il codice)
 
Alexey Navoykov:
Beh, idealmente non dovrebbe esserci alcuna differenza, dato che la situazione è abbastanza semplice per l'ottimizzazione. E anche se il corpo del ciclo è messo in una funzione separata, sarà lo stesso, ne sono sicuro. Ma i paranoici dovranno trascinare questa stringa per riferimento in una funzione, complicando il codice )

I risultati dei test dovrebbero fluttuare del 5-15% da un avvio all'altro, il vento non è un sistema operativo in tempo reale

 
Alexey Volchanskiy:

Sapete che dichiarare una variabile locale senza inizializzazione non garantisce che abbia un valore zero? Dopo tutto, è creato sulla pila e tutto può essere lì.

P.S. Sono caduto anch'io nel peccato della discussione ))

))))) Wow!

SZZ: l'inizializzazione quando si dichiara una variabile è la base per scrivere qualsiasi codice con errori minimi... anche il compilatore ti dirà qualcosa ;)

 
Igor Makanu:

))))) , wow!

ZS: l'inizializzazione quando si dichiara una variabile è la base per scrivere qualsiasi codice con un minimo di errori... anche il compilatore dirà qualcosa qui ;)

Ho appena incontrato un gruppo di persone che pensano che il compilatore azzeri le variabili locali proprio come fa con le globali.

E il compilatore non dà alcun mandato

void OnTimer()
{
    string st;
    int n;
    Print(st, n);// специально печатаем неиниализированные, варнингов нет
    for (int i = 0; i < 1000; i++)
    {
        st = IntegerToString(i);
    }
}