我最近在审查一些代码时遇到了一些令我感到困惑的事情。假设我有一个函数int getNewNumber(int num, int dir)
,实现如下:
int getNewNumber(int num, int dir) {
int newNum = num;
if(dir == 1) {
newNum++;
} else {
newNum--;
}
return newNum;
}
现在,在调用函数时,我有类似的东西:
int number = getNewNumber(number, 1);
在传递给newNum之前是否初始化为0?我很困惑你如何在初始化时将变量用作参数。
答案 0 :(得分:3)
在传递给newNum之前是否初始化为0?
也许。这取决于背景。如果变量是全局静态,则在动态初始化之前初始化为零。
如果它是自动变量,则传递给getNewNumber
的值是不确定的,并且使用该值具有未定义的行为。一个体面的编译器会警告你。
我很困惑如何在初始化时将变量用作参数。
如果变量未静态初始化,那么您不能以其定义行为的方式在其自己的初始化中使用其值。
如果变量在动态初始化之前初始化为零,那么您可以使用该值,但您也可以使用文字零,这对程序的读者来说更清楚。我认为在自己的初始化中使用变量的值没有任何有用的方法。
答案 1 :(得分:0)
我真的认为这取决于编译器。一般来说,我称之为不安全 - 在最好的情况下,您将获得一个具有相同类型的值,或者可以转换为此类型。在最坏的情况下 - 程序将崩溃。