2010-10-01 7 views
5

Powiel możliwe:
Stupid Question Regarding If-Else's Simultaneous Execution in C++ or CCzy możliwe jest wykonanie zarówno if, jak i części instrukcji if --- else?

Czy to możliwe, aby umieścić niektóre choroby, tak że zarówno wtedy i jeszcze część w if ... else sterowania mogą być wykonywane bez żadnego ostrzeżenia czy błąd?

+6

Mam nadzieję, że nie; i to NIE we wszystkich językach, jakie znam. – NimChimpsky

+2

Czy to nie pomogłoby w wykreśleniu celu? –

+5

Spróbuj i opisz, jaki jest twój rzeczywisty problem, wydaje się, że jest to rozwiązanie szukające problemu w danej chwili. –

Odpowiedz

4

Nie, to niemożliwe (w tym samym procesie).

9

Nie, nie ma możliwości napisania klauzuli Schrödingera.

Możesz być w stanie wykonać oba przy użyciu goto, ale nigdy nie przejdzie przeglądu kodu.

+2

+1 dla Schrödingera: D –

+0

+1. Wykonaj 0,4 pierwszego oddziału i 0,6 drugiego. – sharptooth

26

Nie używać! ;-)

Tak, przez fork ing.

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

Nie ma rzeczywistych przypadków użycia, aby preferować powyższy kod, chyba że jest on przeznaczony do równoległego wykonywania.

+2

Inteligentne, ale to tylko myli problem. –

+3

+1 Imponujące ... ale nie wiem, czy to dobre czy złe wrażenie :) – pmg

+0

yughhhhhhhhhhhh –

1

Zakładam, że próbujesz uruchomić obie gałęzie tego rodzaju instrukcji?

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

Ty mógł zmusić go do wykonania przy użyciu goto ... ale to jest sprzeczne z dobrą praktyką programowania.

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

Zamiast tego trzeba napisać oddzielne procedury/funkcji do osiągnięcia zachowanie, które chcesz mieć wykonać w obu sprawozdaniach ... lub po prostu umieścić kod, który powinien wykonać we wszystkich przypadkach poza z Jeśli blok.

To byłoby funkcjonalnie równoważne użyciu GoTo, a także wyjaśnia to komukolwiek innemu.

+0

Powiedziałbym, że jest to sprzeczne z ... WSZYSTKIM ... nie tylko dobrą praktyką programistyczną ;-) –

4

Tak, jest to możliwe:

#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 

Uwaga dla początkujących: Nigdy nie rób tego w prawdziwym życiu! Zamiast myśleć o tym ponownie problemu ...

Co prawdopodobnie chciał to:

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

można zastąpić innego-path mając innego IF-klauzulę z negującymi warunkach. Daje to możliwość zastąpienia go drugim warunkiem.

2

Być może źle zrozumiałeś swój problem.

Jeśli chcesz, aby blok kodu był wykonywany niezależnie od warunku, wyjmij go z instrukcji 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. 
} 

W tym przykładzie, śmieszne choć jest to ostatnia linia jest poza stan rachunku, więc czy będzie wykonywał a == 484 czy nie, co wydaje mi się być takie same, jak czyni c wyzwolić swój else blokowanie niezależnie od testu if powiedzie się.

Oczywiście, inne bloki nie są obowiązkowe, więc jeśli nie obchodzi cię, co stanie się, jeśli twój stan się nie powiedzie, po prostu nie masz bloku else.

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

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

+1 za trud! –