关于作用域的一个例子
代码示例一:#include <stdio.h>
int main() {
if (5 < 6)
printf("Code test1...\n");
printf("Code test2...\n");
return 0;
}
代码示例二:#include <stdio.h>
int main() {
if (5 < 6)
int a = 1;
printf("Code test2...\n");
return 0;
}
这两段代码中,唯一不同的地方是将示例一中的“ printf("Code test1...\n");”改成了代码二中的“int a = 1;",造成的结果是代码二编译无法通过,为什么呢?作用域的问题!
这两段示例代码存在一个问题,即if语句后面没有带{},正常的理解,编译器只将条件判断后的第一条语句与其绑定,然而也有可能判断后的执行语句为空的情况,如果为空,那int a = 1;则为全局变量定义,如果绑定第一条语句,则int a = 1;为if语句内的局部变量。
无法判断变量的作用域,为避免这种情况的发生,最好的方法即养成良好的编程习惯!
同样的问题在switch中也存在,比如以下代码:
#include <stdio.h>
int main() {
int a = 10;
int b = 5;
char c = '+';
switch (c){
case '+':
int sum = a + b;
printf("sum is %d", sum);
break;
case '-':
int minus = a - b;
printf("minus is %d", minus);
break;
}
return 0;
}
case'+' 与 case'-' 两者是互斥关系,但在编译器看来,他们处于同一作用域(编译器通过{}来区分作用域),存在冲突,因而编译不通过,所以要以{}将代码块区分开来:#include <stdio.h>
int main() {
int a = 10;
int b = 5;
char c = '+';
switch (c){
case '+':
{
int sum = a + b;
printf("sum is %d", sum);
break;
}
case '-':
{
int minus = a - b;
printf("minus is %d", minus);
break;
}
}
return 0;
}
页:
[1]