true que poner experiencia curriculum c if-statement

que - ¿Es(VERDADERO) una buena idea en C?



if true python (17)

En el lenguaje de programación C, entiendo que las variables solo se pueden definir al principio de un bloque de código, y la variable tendrá el alcance del bloque en el que se declaró. Con eso en mente, me preguntaba si es se considera una mala práctica para crear artificialmente un nuevo ámbito como en este ejemplo:

void foo() { ... Do some stuff ... if(TRUE) { char a; int b; ... Do some more stuff ... } ... Do even more stuff ... }

Suponiendo que TRUE se establece en 1 en una definición de macro, ¿se consideraría este código como "buen código" o los programadores experimentados se avergonzarían al pensarlo?

¡Gracias por tu contribución!

EDITAR: En respuesta a algunas de las respuestas, el código con el que estoy trabajando necesita trabajar con algunos sistemas antiguos muy antiguos. Si bien sería bueno operar con una suposición de C99, realmente no podemos garantizar que lo tendrán.


Antes que nada, un nuevo bloque no necesita ser un bloque if. Podría ser simplemente una sección de código rodeada de llaves, como esta:

void foo() { ... Do some stuff ... { char a; int b; ... Do some more stuff ... } ... Do even more stuff ... }

En segundo lugar, en cualquier compilador de C moderno que cumpla con el estándar C (creo que C99), puede declarar variables en cualquier lugar del bloque, por lo que no necesita crear un nuevo bloque.


Aparentemente soy una minoría, pero encuentro que "just bracer" es mucho más difícil de leer porque se desvía del patrón habitual. En las ocasiones (ciertamente infrecuentes) en las que quiero un bloque de ámbito sin definir otra función, prefiero incluir el "si", pero sin macros y con un comentario para explicar por qué:

if( 1 ) // just to establish scope { // do stuff here }


C99 le permite declarar variables casi en cualquier lugar. Sin embargo, absténgase de hacerlo sin una muy buena razón. Intenta primero dividir tu función en funciones más pequeñas (posiblemente en línea).

El único lugar donde tal cosa podría tener sentido es cuando tienes una variable que se inicializa en el medio de tu función, por ejemplo, similar a crear un objeto en C ++.


Como puedes hacer el bloque de alcance sin el if, esa es una mejor idea.

void foo() { ... Do some stuff ... { char a; int b; ... Do some more stuff ... } ... Do even more stuff ... }


Como ya han dicho muchas respuestas, no necesitas las cosas "si". Solo crea el bloque desnudo. Pero quiero llegar a otro punto. En C, puede crear declaraciones de variables en cualquier lugar de un bloque, no solo al comienzo. En C89, tuviste esa restricción. Comenzando con C99 (eso es 10 años ahora), ya no tienes esa restricción, aunque algunos compiladores se quejarán de todos modos. Sin embargo, GCC no lo hará si le dice que use el estándar C más reciente con la opción -std = c99.

Debido a que todavía existen compiladores que gimen por defecto, no preferiría mezclar declaraciones y código. Seguiría poniendo declaraciones al comienzo de los bloques por razones de compatibilidad.


Creo que estás trabajando con algunas suposiciones anticuadas. He estado codificando C directamente usando GCC durante algunos meses, y no necesita declarar variables al principio de un bloque, aunque la Segunda edición de K & R dice que debe hacerlo. Puede declarar su variable en cualquier lugar, como este ejemplo no muy útil:

char* palstring; palstring = malloc(LARGEST_STRING); memset(palstring, 0, sizeof palstring); fgets(palstring, LARGEST_STRING, fin); char* cur = palstring; char letter; letter = *cur;

Entonces no hay necesidad de hacer lo que estás sugiriendo. El lenguaje ha avanzado.

Otra buena adición al lenguaje C es Arrays de longitud variable, que le permiten pasar una matriz a una función junto con su tamaño. En los viejos tiempos, todo lo que podías hacer era pasar un puntero.


Dejando la puerta abierta para algunas personas creativas:

#define TRUE 0 #define FALSE 1

Simplemente use los frenos para declarar el alcance.


Mi respuesta es la siguiente:

Esto hace que los programadores veteranos se estremezcan solo de pensarlo.


Ni siquiera necesitas una declaración if. Puedes crear bloques con {}

Sin embargo, esa debería ser una función independiente.

Ejemplo aquí:

#include <stdio.h> int main(int argc, char **argv) { int i = 0; { int i = 10; printf("%d/n", i); } printf("%d/n", i); }


No creo que necesites la porción if (true).

Solo se requiere {} para delimitar las variables.


No me llamaría sazonado, pero estoy algo triste.

Mi problema con esto es que la declaración if llevaría a alguien a creer que algo realmente está siendo evaluado ... pero en el tiempo de ejecución, la macro es verdadera o falsa, no hay cambio de que sea otra cosa. Debe incluir el código o no.

Si lo que quieres hacer es algo como #ifdef DEBUG entonces deberías hacer eso para indicarle al lector que este es un código de depuración ...


Por lo que sé, puedes crear un alcance sin if.

Use solo los frenos de esta manera:

{ int x; }

Y recomiendo contra

if (TRUE)

ya que dificulta la lectura.


Probablemente desee crear una nueva función para ese alcance.
Si realmente necesita tener su propio alcance, es probable que sea una función lógica separada de todos modos.


Puedes eliminar el

if(TRUE)

y simplemente deje las llaves, que por sí mismas definen un nuevo bloque sintáctico: una declaración compuesta .

Esto es definitivamente más limpio que el falso si lo había hecho antes, pero es posible que quiera preguntarse por qué quiere crear un nuevo bloque. ¿Sería mejor definir una subrutina?


Suponiendo que utiliza un compilador antiguo (como yo, es para hardware antiguo), omita el if (TRUE) como otros han sugerido, y que tiene una función realmente ENORME (que no debería tener en primer lugar) , entonces creo que está algo bien. Lo hice pero no me sentí bien ...


Simplemente defina sus variables al comienzo del bloque o use otra función. Agregar un ámbito artificial con {} s vacías o cualquiera de las alternativas no es una buena práctica.


Tenga en cuenta que en C99 se permite declarar variables locales en el medio de bloques.

C99 es la versión del estándar C del año 1999; la mayoría de los compiladores de C modernos lo soportan.