2010-10-01 10 views
5

Duplicar posible:
Stupid Question Regarding If-Else's Simultaneous Execution in C++ or C¿Es posible ejecutar ambos si y si parte de una instrucción de control if --- else?

¿Es posible poner un poco de condición, de modo que tanto si y otra parte en una sentencia de control if ... else se puede ejecutar sin ningún aviso o error ??

+6

Espero que no; y es un NO en todos los idiomas que conozco. – NimChimpsky

+2

¿No podría eso deshacer el propósito de un if-else? –

+5

Trate de describir cuál es su problema real, parece que es una solución que busca un problema en este momento. –

Respuesta

4

No, eso no es posible (dentro del mismo proceso).

9

No, no hay forma de escribir una cláusula if de Schrödinger.

Usted puede ser capaz de ejecutar tanto con un Goto, pero nunca pasaría una revisión de código.

+2

+1 para Schrödinger: D –

+0

+1. Ejecute 0.4 de la primera rama y 0.6 de la segunda. – sharptooth

26

No usar! ;-)

Sí, por fork ing.

if (fork()) { 
    printf("if\n"); 
} 
else { 
    printf("else\n"); 
} 

No hay casos de uso reales para preferir el código anterior, a menos que sea para la ejecución en paralelo.

+2

inteligente, pero esto solo confunde el problema. –

+3

+1 Impresionante ... pero no sé si es una buena o mala impresión :) – pmg

+0

yughhhhhhhhhhhh –

1

Asumo que está tratando de tener las dos ramas de este tipo de instrucción de ejecución?

Dim X As Boolean 
X = False 
If X = True Then 
    ... 
Else 
    ... 
End If 

Usted podía conseguir que se ejecute utilizando Ir ... pero eso va en contra de las buenas prácticas de programación.

Dim X As Boolean 
X = False 
If X = True Then 
    ... 
    Goto ElseStuff 
Else 
    ElseStuff: 
    ... 
End If 

En lugar de que usted debe escribir los procedimientos/funciones separadas para lograr el comportamiento que le gustaría tener ejecutar en ambos estados ... o simplemente poner el código que debe ejecutarse en todos los casos fuera de la Si bloque.

Eso sería funcionalmente equivalente a utilizar la Ir A, además de que deja claro a nadie más.

+0

Yo diría que esto va en contra de ... TODO ... no solo en la práctica de programación goodp ;-) –

4

sí, es posible:

#include <stdio.h> 

#define else if (1) 
int main(void) 
{ 
    int test = 1; 

    if (test == 1) 
    { 
     printf("if\n"); 
    } 
    else 
    { 
     printf("else\n"); 
    } 

    return 0; 
} 
#undef else 

Una nota para los novatos: Nunca haga esto en la vida real! En su lugar, piense en su problema de nuevo ...

Lo que probablemente quería es:

#include <stdio.h> 

int main(void) 
{ 
    int one_condition = 1; 
    int other_condition = 2; 

    if ((one_condition == 1) || (other_condition == 2)) 
    { 
     printf("if\n"); 
    } 

    if ((one_condition != 1) || (other_condition == 2)) 
    { 
     printf("quasi-else\n"); 
    } 

    return 0; 
} 

Puede reemplazar el otro de la ruta por tener otro si cláusula con condiciones negados. Esto le da la posibilidad de anularlo con una segunda condición.

2

Tal vez ha entendido mal su problema.

Si quieres un bloque de código para ejecutar independientemente de la condición, lo saca de la instrucción if ... else.

void foofunc(int n) 
{ 
    a = 44*n; 
    if(a == 484) 
    { 
     //do something 
    } 
    else 
    { 
     //do something if a DOES NOT equal 484 
    } 

    //do something regardless of the outcome of the test. 
} 

En este ejemplo, ridícula que sea, la última línea está fuera de la instrucción de condición, por lo que se ejecutará si un == 484 o no, que me parece que es lo mismo que hacer c desencadenar su else bloque independientemente de la prueba if tiene éxito.

Por supuesto, los demás bloques no son obligatorios, así que si no te importa lo que sucede si tu condición falla, entonces simplemente no tienes un bloque else.

void foofunc(int n) 
{ 
    a = 44*n; 
    if(a == 484) 
    { 
     //do something 
    } 

    //do something regardless of the outcome of the test. 
} 
+0

+1 por el esfuerzo! –

Cuestiones relacionadas