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";


以上是if语句中的声明的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>