"Variable may be uninitialized when used here" Xcode 编译器警告



所以我写了这个小程序,它给出了这个警告,尽管我已经初始化了变量,而不是一个重复的问题。

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有bug ?

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;

除了@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;
}

最新更新