“在这里使用时,变量可能未初始化”Xcode编译器警告

时间:2016-09-08 17:40:25

标签: objective-c xcode compiler-warnings

所以我写了这个小program,虽然我已经初始化了变量而不是duplicate question,但却发出了警告。

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        int num1, num2, product, largestProduct = 0;

        while (num2 < 1000) {

            while (num1 < 1000) {

                product = num1 * num2;

                if (isPalindrome(product)) {

                    largestProduct = product>largestProduct?product:largestProduct;
                }

                num1++;
            }

            num1 = 0; //If I delete that line the warning disappears.
            num2++;
        }

       NSLog(@"%i", largestProduct);

    }
    return 0;
}

奇怪的是,如果我删除该注释行警告消失,如果我单独初始化num1,它也会消失。我做错了什么,或者是Xcode中的错误?

2 个答案:

答案 0 :(得分:1)

该行

int num1, num2, product, largestProduct = 0;

仅将largestProduct初始化为0。该行上的其他变量都没有显式初始化。

在一行上声明多个变量可能是不好的做法。

我建议:

int num1 = 0;
int num2 = 0;
int product = 0;
int largestProduct = 0;

这更容易阅读和调试。

但如果你真的想要一行,请执行:

int num1 = 0, num2 = 0, product = 0, largestProduct = 0;

答案 1 :(得分:0)

除了@ rmaddy的回答之外,您还可以将行num1 = 0移到第二个while循环之上。这样,当您实际使用变量num时,它将具有明确的初始化值。

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        int num1, num2, product, largestProduct = 0;

        while (num2 < 1000) {

            num1 = 0; //Value initialised here.

            while (num1 < 1000) {

                product = num1 * num2;

                if (isPalindrome(product)) {

                    largestProduct = product>largestProduct?product:largestProduct;
                }

                num1++;
            }

            num2++;
        }

       NSLog(@"%i", largestProduct);

    }
    return 0;
}