C if语句中的声明
C if语句中的声明,c,C,if语句中的声明在没有括号的情况下是否非法?例如: if (argc == 2) char* str = "Two"; else char* str = "Not two"; 将需要转换为: if (argc == 2) { char* str = "Two"; } else { char* str = "Not two"; } 出于好奇,为什么会这样?我理解需要有多个语句的大括号
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);
如果上述内容真正“指”以下内容而不是明确的braeces:
if (something) {
printf(something);
}
printf(something);
但是,如果一个语句/声明只包含一个
,为什么允许使用它呢
?if语句(带有else
子句)的语法为:
if(表达式)语句else语句
这是:
char* str = "Two";
不是语句而是声明,因此在第一个代码段中无效
第二个带大括号的代码段之所以有效,是因为大括号表示复合语句,而复合语句中可能同时包含语句和声明
然而,请注意,即使在编译的第二种情况下,一旦if
语句完成且无法引用,则每个子块中定义的变量str
将超出范围。您可能想要的是:
char *str;
if (argc == 2) {
str = "Two";
} else {
str = "Not two";
}
或相当于:
char *str;
if (argc == 2)
str = "Two";
else
str = "Not two";
顺便说一句,你的最后一段代码并不含糊不清。@KonradRudolph嗯,我的意思是,我的意图是错误的——我希望
printf
只出现在if
语句中,但这里它出现在它之外。但是是的,这对编译器来说并不含糊,也许我的语言在这个问题上不够精确。无论如何——我已经删除了这个词,谢谢你指出。好吧,它来自语法——它是if(…)语句
和statement
可以是复合语句
,也就是{block item list}
和block item
可以是声明
。这与开关(1){case1:inta;}
无效的方式相同。但至于为什么。。。事情就是这样。如果没有{
,没有要分配的变量。如果它确实允许在那里声明,您认为声明的范围会是什么?如果它是包含块,您将对同一个变量有两个声明,这是不允许的。如果它不是包含块,您将有一个没有引用位置的变量声明谢谢,回答得很好。关于你回答的后半部分,是的——实际上这是我的下一个问题,我刚才问了,但你似乎已经回答了!