簡體   English   中英

Switch 語句錯誤 **控制到達非空函數的結尾 [-Werror=return-type]**

[英]Switch Statement Error **control reaches end of non-void function [-Werror=return-type]**

我花了很多時間試圖找出無法正常工作的原因,但我覺得我已經涵蓋了我需要的所有案例。 我似乎找不到“控制到達非空函數的結尾”錯誤。 這是我的 switch 語句:

static unsigned int sizeIndex(size_t size) {
    int determine_size = 0;
    switch(determine_size) {
        case 0:
            if (size < 16) {
                return 0;
            }
        case 1:
            if ((size >= 16) && (size < 32)) {
                return 1;
            }
        case 2:
            if ((size >= 32) && (size < 64)) {
                return 2;
            }
        case 3:
            if ((size >= 64) && (size < 128) ) {
                return 3;
            }
        case 4:
            if ((size >= 128) && (size < 256)) {
                return 4;
            }
        case 5:
            if ((size >= 256) && (size < 512)) {
                return 5;
            }
        case 6:
            if ((size >= 512) && (size < 1024)) {
                return 6;
            }
        case 7:
            if ((size >= 1024) && (size < 2048)) {
                return 7;
            }
        case 8:
            if ((size >= 2048) && (size < 4096)) {
                return 8;
            }
        case 9:
            if ((size >= 4096) && (size < 8192)) {
                return 9;
            }
        case 10:
            if ((size >= 8192) && (size < 16384)) {
                return 10;
            }
        case 11: 
            if ((size >= 16384) && (size < 32768)) {
                return 11;
            }
        case 12:
            if (size >= 32768) {
                return 12;
            }
    }
}

任何人都可以看到為什么這會拋出“控件到達非空函數[-Werror=return-type]”錯誤的原因?

謝謝!

您的switch完全沒用(因為determine_size大小始終為0並且您不使用break ),因此您有一系列if語句涵蓋整個size范圍。 gcc似乎沒有檢查這個。 甚至以下警告control reaches end of non-void function

if (size >= 4) {
   return 0;
}
if (size < 4) {
   return 1;
}

但是,雖然它給出的警告給出的原因不正確,但該代碼中有很多值得警告的地方。

固定的:

static unsigned int sizeIndex(size_t size) {
    if      (size <    16) { return  0; }
    else if (size <    32) { return  1; }
    else if (size <    64) { return  2; }
    else if (size <   128) { return  3; }
    else if (size <   256) { return  4; }
    else if (size <   512) { return  5; }
    else if (size <  1024) { return  6; }
    else if (size <  2048) { return  7; }
    else if (size <  4096) { return  8; }
    else if (size <  8192) { return  9; }
    else if (size < 16384) { return 10; }
    else if (size < 32768) { return 11; }
    else                   { return 12; }
}

或者:

static unsigned int sizeIndex(size_t size) {
    unsigned int rv = 0;
    size_t threshold = 16;
    while (size >= threshold && threshold <= 32768) {
       ++rv;
       threshold <<= 1;
    }

    return rv;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM