如果... else switch ...声明

时间:2017-07-05 13:30:46

标签: c gcc

以下代码在我的gcc 5.4.0上编译,不会产生任何警告并且工作正常:

if (a == 0) {
    puts("0");
} else switch (a) {
    case 1: puts("1"); break;
    case 2: puts("2"); break;
    default: puts("default"); break;
}

if ... else switch ... 正确的陈述?

5 个答案:

答案 0 :(得分:8)

您的代码没有任何问题。 grammar for if ... else如下:

  

attr(可选)如果(条件)statement-true else statement-false

switch是一个声明,因此可以追踪else

请注意,else if也不是特殊构造,它只是if之后的else语句。

答案 1 :(得分:4)

你所拥有的在语法上是正确的......但它并不容易阅读。

如果您的代码正在审核中,您可能会被提起 - 因为您正在使用“未支持的多行语句作为条件的一部分”。< / p>

喜欢明确并且这样写:

if (a == 0) {
    puts("0");
} else {
    switch (a) {
        case 1: puts("1"); break;
        case 2: puts("2"); break;
        default: puts("default"); break;
    }
}

以下是合法的,这是合法的:

if (a == 0)
    puts("0");
else
    puts("not0");

这样的构造在重新访问代码时可能会导致错误...我似乎记得最近的一个“流行”漏洞被实现(错误地......希望)部分归因于这个“不支持“使用if

答案 2 :(得分:3)

switch是一个声明,所以这只是在else中添加一个声明。

无异
else
  a = 0;

else
{
  switch(a)
  {
  case 1:
  ...
  }
}

这不是一种非常常见的写作方式,但它很好。

答案 3 :(得分:2)

您的代码没有任何问题,这与撰写此代码相同:

if (a == 0) {
    puts("0");
} else {
    switch (a) {
        case 1: puts("1"); break;
        case 2: puts("2"); break;
        default: puts("default"); break;
    }
}

这是完全合法的。 else switch不是真实的陈述。

您的陈述是

if(condition){code block} else {code block}

code block可以包含任何语句,例如switch语句。

答案 4 :(得分:1)

if的语法是:

if ( condition ) statement-true  else statement-false
condition is an expression convertible to a boolean (true/false)
statement-true is a statement which is executed if condition is true
statement-false is a statement which is executed if condition is false

switch块是一个声明。

是的,您的代码展示了正确的陈述。