gpt4 book ai didi

c - Switch 语句错误 **控制到达非 void 函数的末尾 [-Werror=return-type]**

转载 作者:行者123 更新时间:2023-11-30 18:27:08 29 4
gpt4 key购买 nike

我花了很多时间试图找出它不能正常工作的原因,但我觉得我已经涵盖了我需要的每一个案例。我似乎找不到“控制到达非空函数的末尾”错误。这是我的 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完全没用(因为define_size总是0并且你不使用break) ,因此您有一系列覆盖 size 整个范围的 if 语句。 gcc 似乎没有检查这一点。甚至以下警告控制到达非void函数的末尾:

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;
}

关于c - Switch 语句错误 **控制到达非 void 函数的末尾 [-Werror=return-type]**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59231442/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com