是否可以执行if --- else控制语句的if和else部分?

时间:2010-10-01 09:17:28

标签: c

  

可能重复:
  Simultaneous execution of both if and else blocks

是否可以设置一些条件,以便在没有任何警告或错误的情况下执行if?else控制语句中的if和else部分?

6 个答案:

答案 0 :(得分:26)

请勿使用! ; - )

是的,fork

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

除非用于并行执行,否则没有真正的用例来优先使用上述代码。

答案 1 :(得分:9)

不,没有办法写一个Schrödingerif子句。

您可以使用goto执行这两者,但它永远不会通过代码审查。

答案 2 :(得分:5)

是的,有可能:

#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

新手的说明:永远不要在现实生活中这样做!相反,再考虑一下你的问题......

你可能想要的是:

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

您可以通过使用带有否定条件的另一个if子句来替换else路径。这使您可以在第二个条件下覆盖它。

答案 3 :(得分:4)

不,这是不可能的(在同一个过程中)。

答案 4 :(得分:2)

也许你误解了你的问题。

如果您想要执行代码块而不考虑条件,请将其从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.
}

在这个例子中,尽管它很荒谬,但是最后一行是在条件语句之外,所以无论是否= = 484都会执行,这在我看来与使c触发else相同阻止if测试成功。

当然,其他阻止不是强制性的,所以如果您不关心如果您的情况失败会发生什么,那么就是没有其他阻止。

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

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

答案 5 :(得分:1)

我假设你试图让这种语句的两个分支都执行?

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

可以使用GoTo来执行它...但这违反了良好的编程习惯。

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

除此之外,您应该编写单独的过程/函数来完成您希望在两个语句中执行的行为...或者只是将应该执行的代码放在 之外的所有情况下If块。

这在功能上等同于使用GoTo,而且它让任何人都清楚。