今天,当我编码时,这个问题发生在我身上.当我们想要定义和使用变量时,我们是否应该扩大其范围?特别是当在几个块语句中使用相同的变量时,这些块语句与这个变量之间没有任何关系.哪个更好?让变量在所有块语句之外,或在每个块语句中定义.给出一个这样的例子:
第一:
int vl_ret = 0;
int b = 1;
int c = 1;
if (b == 1)
{
vl_ret = do_something();
if (vl_ret == 1)
{
printf("1\n");
}
else
{
printf("0\n");
}
}
if (c == 1)
{
vl_ret = do_something();
if (vl_ret == 1)
{
printf("1\n");
}
else
{
printf("0\n");
}
}
Run Code Online (Sandbox Code Playgroud)
或第二:
int b = 1;
int c = 1;
if (b == 1)
{
iny vl_ret = do_something();
if (vl_ret = 1)
{
printf("1\n");
}
else
{
printf("0\n");
}
}
if (c == 1)
{
int vl_ret = do_something();
if (vl_ret = 1)
{
printf("1\n");
}
else
{
printf("0\n");
}
}
Run Code Online (Sandbox Code Playgroud)
因为这些局部变量是从堆栈中分配的,所以它可以非常快,我们可以通过在第二种方法中分配表单堆栈来忽略花费的时间.
我认为,第二个更好,因为我只需要在每个块语句中使用此变量,如果我不需要它,我可以轻松修改我的代码.在第二种方法中,代码更清晰.我们可以看到,变量也不会受到其他块语句的影响.
通常,缩小范围通常会提高可读性和理解度,因为在大多数情况下,它允许您在一个屏幕或更少的屏幕上查看变量的整个生命周期.
没有什么比调试在一个页面上设置变量的一些代码更糟糕,然后在三页之后使用它,特别是如果连接是无意的.
您通常不需要担心使用"太多"变量,因为对于大多数情况,编译器将自动处理它们的分配.如果变量不再"活动",编译器将为您透明地重用存储.