¿Declaración de variables detrás del bucle o dentro del bucle? - página 6

 
Georgiy Merts:

Personalmente, me disgusta mucho tener un montón de variables repartidas por un programa y tener que buscar cada vez donde se crea una variable. Por eso, siempre que es posible, intento declarar las variables todas juntas al principio de una función, para poder ver dónde se crean y saber cuándo se van a eliminar.

¿Qué quieres decir con "dispersa por todo el programa"? Una variable local se declara y se aplica sólo en el bloque donde se utiliza, y si tienes que buscarla, significa que tu código es tan largo que no puedes encontrarla.

Declarar todas las variables al principio de una función es un estilo malo y arcaico. Incluso el viejo Strastrup instó a descartar estos restos de la vieja escuela de Cen favor de un código adecuado y fiable: declarar una variable directamente donde se utiliza. ¿No se da cuenta de que su enfoque está plagado de muchos errores aleatorios? ¿Inicializa las variables con algo? ¿O simplemente "se lo toma con calma" y luego limpia el comportamiento imprevisible del código? ) Puede que en su día todo estuviera justificado debido a la escasa potencia del hardware y a la debilidad de los compiladores, pero desde luego ahora no.

 
pivalexander:

Siempre te burlas de los libros y te alabas a ti mismo, pero la esencia del asunto y no dijiste nada más que teoría por las ramas, léelo entenderás... La memoria y la CPU, la CPU y la memoria, la fuente de alimentación... ¡también se utiliza ahí!

En cambio, los que necesitan entender el significado de mis textos, y los desgraciados programadores siempre necesitan que les den una respuesta preparada en bandeja de plata, nunca quieren entender nada. Por lo tanto, mis recomendaciones, aunque están escritas en respuesta a usted, pero lo más probable es que no sean para usted, sino para aquellos que quieren aprender y llevar sus habilidades a la perfección.

Creo que hay dos tipos de personas - las que habiendo visto un rastrillo en su camino, sólo por prueba determinan el resultado de pisarlo, y las que conociendo leyes elementales de la física, datos sobre el peso de los elementos pueden decir el resultado de antemano sin pisarlo.

 
Alexey Navoykov:

Declarar todas las variables al principio de una función es sólo un mal estilo arcaico - incluso el viejo Strastrup instó a descartar estos restos de la vieja escuela de C en favor de un código adecuado y fiable: declarar la variable directamente donde se utiliza.

imho, ¡bravo! - De manera convincente, cuando se utilizan variables de ámbito local es menos probable que se dé con una variable no inicializada, o más bien con un valor que estaba en el uso anterior de la variable, el compilador no generará una advertencia, y la búsqueda de esas pequeñas asquerosidades es tediosa

Por el tema y las pruebas, pues nada, más del 5-7% de diferencia no se ve, y no es un hecho que el comportamiento en las próximas builds no cambie

 
Aleksandr Matveev:

Los que necesitan - el significado de mis textos entenderán, y ay programadores siempre necesitan masticar y dar una respuesta lista en una bandeja, nunca quieren entender nada. Por lo tanto, mis recomendaciones, aunque están escritas en respuesta a usted, pero lo más probable es que no sean para usted, sino para aquellos que quieren aprender y llevar sus habilidades a la perfección.

Creo que hay dos tipos de personas: las que habiendo visto un rastrillo en su camino, sólo por prueba determinan el resultado de pisarlo, y las que conociendo las leyes elementales de la física, los datos sobre el peso de los elementos pueden predeterminar el resultado sin pisarlo.

Creo que hay dos tipos de personas - los que tienen una arrogancia exagerada, los que vinieron a divertir a su autoestima y no tienen ningún comentario realmente útil aquí sobre el tema, en mi opinión ni siquiera profundizar en ella ...

y están aquellos... No importa, de todos modos no eres tú:)

Aleksandr Matveev:

Tengo la sospecha de que el autor de esta afirmación no tiene ni idea de cómo funcionan el procesador, la memoria y el compilador... Apuesto a que cualquiera de sus códigos puede ser acelerado al menos diez veces o incluso cientos de veces. Por culpa de estos codificadores de mierda la mayoría de los productos son insoportablemente lentos en la mayoría de los ordenadores potentes con docenas de núcleos, mientras que sólo hay que pensar un poco... Pero algunos piensan: "¿Por qué pensar? Tienes que codificar..."

Y tengo la sospecha de que sigues estancado en el nivel del"87, empezando por el EC1020 y el ZX Spectrum".

"Shitcoder" eres tú, por eso contrataste a 600 personas...

No se ofende

PD: acelera mi código, vale, no por cientos pero al menos por decenas de veces, el código está al principio del hilo, en el primer post, si no eres un shitcoder claro, puedes acelerar cualquiera de mis códigos por 10 o 100 veces, vamos....

 
pivalexander:

Creo que hay dos tipos de personas - los que tienen una arrogancia exagerada, los que vinieron a divertir su ego y no tienen un solo comentario realmente útil sobre el asunto, en mi opinión ni siquiera han profundizado en él

y están aquellos... No importa, de todos modos no eres tú :)

Y tengo la sospecha de que sigues estancado en el nivel de"87 años empezando por el EU1020 y el ZX Spectrum".

"Shitcoder" eres tú, por eso contrataste a 600 personas...

No se ofende

seis páginas de discusión de tales tonterías, estoy tranquilamente lívido ))))) la degradación del foro es evidente )))

 
Igor Makanu:

imho, ¡bravo! - De manera convincente, cuando se utilizan variables de ámbito local es menos probable que se dé con una variable no inicializada, o más bien con un valor que estaba en el uso anterior de la variable, el compilador no generará una advertencia, y la búsqueda de esas pequeñas asquerosidades es tediosa

Al tema y a las pruebas, pues sobre nada, más de un 5-7% de diferencia no se ve, y no es un hecho que el comportamiento en las próximas builds no vaya a cambiar

¿Sabes que declarar una variable local sin inicializarla no garantiza que tenga un valor cero? Después de todo, se crea en la pila y cualquier cosa puede estar allí.

void Func()
{
   int n = 0;// только так
   ....
}
P.D. Yo mismo he caído en el pecado de la discusión ))
 
Igor Makanu:

sobre el tema y las pruebas, bueno, no es nada, no se ve más de un 5-7% de diferencia, y no es seguro que el comportamiento no cambie en las próximas builds

Sí, bueno, lo ideal sería que no hubiera ninguna diferencia porque la situación es bastante sencilla de optimizar. E incluso si el cuerpo del bucle se pone en una función separada, será lo mismo, estoy seguro. Pero los paranoicos tendrán que arrastrar esta cadena por referencia a una función, complicando el código )
 
Alexey Navoykov:
Sí, bueno, idealmente no debería haber ninguna diferencia, ya que la situación es bastante simple de optimizar. E incluso si ponemos el cuerpo del bucle en una función separada, será lo mismo, estoy seguro. Pero los paranoicos tendrán que arrastrar esta cadena por referencia a una función, complicando el código )

Los resultados de las pruebas deben flotar entre un 5 y un 15% de un inicio a otro, el viento no es un sistema operativo en tiempo real

 
Alexey Volchanskiy:

¿Sabes que declarar una variable local sin inicializarla no garantiza que tenga un valor cero? Después de todo, se crea en la pila y cualquier cosa puede estar allí.

P.D. aquí caí en el pecado de discutir yo mismo ))

))))) ¡Vaya!

SZZ: la inicialización al declarar una variable es la base para escribir cualquier código con mínimos errores... incluso el compilador le dirá algo ;)

 
Igor Makanu:

))))) ¡Wow!

ZS: la inicialización al declarar una variable es la base para escribir cualquier código con un mínimo de errores... incluso el compilador dirá algo aquí ;)

Acabo de conocer a un grupo de personas que piensan que el compilador se centra en las variables locales igual que en las globales.

Y el compilador no da ninguna garantía

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