【问题标题】:Why to assign values to variables only after declaration为什么只在声明后才为变量赋值
【发布时间】:2020-09-27 19:11:40
【问题描述】:

知道肯定有重复,但我什么也没找到。在 C 语言中,我看到很多代码示例,其中作者只在变量声明后赋值,这样做有充分的理由吗?

int main(void)
{
    int x; // declare "x"
    x = 5; // assign 5 to "x"

    return 66;
}

这与仅在一行中声明和分配值有什么不同?

int main(void)
{
    int x = 5; // declare "x" and assign in the same line

    return 66;
}

【问题讨论】:

  • 最后的效果是一样的。而int x; 不是声明,而是定义。
  • @ArkadiuszDrabczyk 那么什么是声明
  • 第二种变体(在定义站点进行初始化)风险较小。即使定义和赋值现在彼此相邻(如第一个示例所示),未来的代码程序员可能会在其间添加其他语句,然后使用未初始化变量的风险增加。所以我推荐第二种变体。但这仍然是个人喜好和主观的问题。
  • 对于局部变量,像int x; 这样的东西既是一个声明(它将名称x 作为int 类型的变量引入编译器)和一个定义(它告诉编译器认为变量x 需要在运行程序中为其分配空间)。对于全局变量,必须处理单独的声明、定义和tentative definitions
  • 它们是一样的。第一种方式更老式:在 C89 中,您必须在函数的开头声明所有变量,因此通常在不赋值的情况下声明。

标签: c variables


【解决方案1】:

现在主要是风格问题。在许多情况下,在变量第一次使用时为变量赋值更不容易出错,并且可能尽可能接近第一次使用时。

另一方面,我当然也见过一些情况,当算法中不包含引入新变量的语句时,它更容易理解。在算法主体之前收集所有这些语句可以使算法本身适合单个页面/屏幕。

在这样的结构中为变量分配初始值似乎毫无意义:

int foo;
if (bar == 42)
  foo = 1;
else
  foo = -1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2023-04-04
    • 2022-11-08
    • 2019-03-27
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多