2010-10-01 16 views
5

Eventuali duplicati:
Stupid Question Regarding If-Else's Simultaneous Execution in C++ or CÈ possibile eseguire entrambe le parti if e else di una istruzione di controllo if else?

E 'possibile mettere qualche condizione, in modo che entrambi se e parte else in un'istruzione di controllo if ... else può essere eseguita senza alcun preavviso o errore ??

+6

Spero di no; ed è un NO in tutte le lingue che conosco. – NimChimpsky

+2

Non annullerebbe lo scopo di un ifer altro? –

+5

Prova a descrivere qual è il tuo problema attuale, sembra una soluzione alla ricerca di un problema al momento. –

risposta

4

No, non è possibile (all'interno dello stesso processo).

9

No, non c'è modo di scrivere una clausola Schrödinger.

Potrebbe essere possibile eseguire entrambi con un goto, ma non passerebbe mai una revisione del codice.

+2

+1 per Schrödinger: D –

+0

+1. Esegui 0,4 del primo ramo e 0,6 del secondo. – sharptooth

26

Non utilizzare! ;-)

Sì, da fork ing.

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

Non ci sono casi di utilizzo reali per preferire il codice precedente, a meno che non sia per l'esecuzione parallela.

+2

Intelligente ma questo semplicemente confonde il problema. –

+3

+1 Impressionante ... ma non so se è una buona o una cattiva impressione :) – pmg

+0

yughhhhhhhhhhhh –

1

Suppongo che stiate cercando di eseguire entrambi i rami di questo tipo di istruzione?

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

È potrebbe farlo da eseguire utilizzando GoTo ... ma che va contro la buona pratica di programmazione.

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

Invece di che si dovrebbe scrivere procedure/funzioni separate per compiere il comportamento che si desidera avere esecuzione in entrambe le istruzioni ... o semplicemente mettere il codice che dovrebbe eseguire in tutti i casi al di fuori del Se il blocco.

Questo sarebbe funzionalmente equivalente all'utilizzo del GoTo, in più lo rende chiaro a chiunque altro.

+0

Direi che questo va contro ... TUTTO ... non solo buona pratica di programmazione ;-) –

4

Sì, è possibile:

#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 per i neofiti: Mai fare questo nella vita reale! Invece, pensare il vostro problema ancora ...

Quello che probabilmente voleva è:

#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; 
} 

È possibile sostituire l'altro percorso avendo un altro se-clausola con condizioni negati. Questo ti dà la possibilità di sovrascriverlo con una seconda condizione.

2

Forse hai frainteso il tuo problema.

Se si desidera eseguire un blocco di codice indipendentemente dalla condizione, estrarlo dall'istruzione 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. 
} 

In questo esempio, anche se è ridicolo, l'ultima riga è al di fuori della condizione di dichiarazione, in modo eseguirà se un == 484 o no, che mi sembra di essere lo stesso di fare c innescare il vostro else blocco indipendentemente dal test if.

Ovviamente, i blocchi non sono obbligatori, quindi se non ti interessa cosa succede se la tua condizione fallisce, allora semplicemente non hai un altro blocco.

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

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

+1 per lo sforzo! –