[英]error: control reaches end of non-void function [-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.