以下代码在我的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 ... 正确的陈述?
答案 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
块是一个声明。
是的,您的代码展示了正确的陈述。