繁体   English   中英

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

[英]If … else switch … statement

以下代码在我的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语法如下:

attr(可选) if (condition)statement-true else statement-false

switch是一个语句,所以它被允许去后else


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

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

如果您的代码正在被审核,您可能会被拉上它 - 因为您正在使用“ 无支撑,多行语句作为条件的一部分 ”。

更喜欢明确并像这样写:

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

这个switch是一个语句,所以这只是在else一个语句。

它没有什么不同

else
  a = 0;

要么

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

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

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

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语句。

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 block是一个声明。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM