if语句中的声明
if没有封闭大括号的语句中的声明是否非法?例如:
if (argc == 2)
char* str = "Two";
else
char* str = "Not two";
需要转换为:
if (argc == 2) {
char* str = "Two";
} else {
char* str = "Not two";
}
出于好奇,为什么会这样?我理解需要带有多个语句的大括号,例如:
if (something)
printf(something);
printf(something);
上面真正“意味着”以下代替显式括号的地方:
if (something) {
printf(something);
}
printf(something);
但是为什么只允许一个语句/声明,如果它只包含一个;?
回答
if语句(带else子句)的语法是:
if (表达式) 语句else语句
和这个:
char* str = "Two";
不是语句而是声明,因此它在您的第一个代码片段中无效。
带有花括号的第二个代码段有效,因为大括号表示复合语句,并且复合语句中可能包含语句和声明。
但是请注意,即使在编译的第二种情况下,str一旦if语句完成,每个子块中定义的变量就会超出范围并且无法引用。你可能想要的是:
char *str;
if (argc == 2) {
str = "Two";
} else {
str = "Not two";
}
或等效地:
char *str;
if (argc == 2)
str = "Two";
else
str = "Not two";