函数和声明局部变量

dim*_*mba 5 c++ scope coding-style declaration

只是在工作中与同事交谈如何声明变量.对我来说,我已经决定了我喜欢哪种风格,但也许我错了.

"C"风格 - 功能开始时的所有变量.如果你想知道变量的数据类型,只需看一下函数的开头即可.

bool Foo()
{
    PARAM* pParam = NULL;
    bool rc;

    while (true)
    {
       rc = GetParam(pParam);
       ... do something with pParam
    }
}
Run Code Online (Sandbox Code Playgroud)

"C++"样式 - 将变量声明为尽可能本地.

bool Foo()
{       
    while (true)
    {
        PARAM* pParam = NULL;

        bool rc = GetParam(pParam);
       ... do something with pParam
    }
}
Run Code Online (Sandbox Code Playgroud)

你喜欢哪个?

更新 问题是关于POD变量.

Kla*_*aim 13

第二个.(C++风格)至少有两个很好的理由:

  1. 允许您在代码中应用YAGNI原则,因为您只在需要时声明变量,尽可能接近它们的使用.这使代码更容易理解,因为您不必在函数中来回理解它.每个变量的类型是有关变量的主要信息,并且在变量名称中并不总是很明显.简而言之:代码更容易阅读.
  2. 允许更好的编译器优化(如果可能).阅读:http://www.tantalon.com/pete/cppopt/asyougo.htm#PostponeVariableDeclaration


Mar*_*ers 5

如果由于您使用的语言的原因,您需要在函数顶部声明变量,那么显然您必须这样做。

如果您可以选择,那么在使用变量的地方声明变量会更有意义。我使用的经验法则是:声明具有所需的最小范围的变量。

减小变量的范围可以防止某些类型错误,例如,您意外地在循环外部使用了仅应在循环内部使用的变量。减小变量的范围将使编译器能够发现错误,而不是让代码在运行时编译但失败。


Mar*_*k B 2

这可能有点主观。

我更喜欢尽可能在本地,因为它可以完全清楚变量的预期范围,并且如果您在预期的有用范围之外访问它,编译器会生成错误。