C++出现control reaches end of non-void function警告怎么解决?
警告含义说明
该警告的触发原因和编译器能否判断函数结束点无关,核心是你声明prime_number函数的返回类型为int(非void类型),C++语法明确要求:所有非void返回类型的函数,必须在每一条可能的代码执行路径上返回对应类型的值,你的代码中存在两条未返回值就走到函数末尾的执行路径:
- 当传入参数
a == 1时,执行完if分支的打印逻辑后没有return语句,直接走到函数结束 - 当传入参数
a为质数时,else分支的for循环会完整执行完毕,执行完后续打印逻辑后也没有return语句,直接走到函数结束
这两种情况都没有返回要求的int类型值,因此编译器触发该警告。
另外你当前的质数判断逻辑完全相反:找到能整除a的因数时反而输出是质数,未找到因数时输出不是质数,需要同步修正。
解决方法
你可以二选一使用以下方案解决警告:
方案1:为所有执行分支补充返回值
同时修正逻辑错误,修改后的函数参考如下:
int prime_number(short a){ if (a == 1){ std::cout << "It's not a prime number\n"; return 0; // 补充返回值 } else{ for (i = 2; i < a; i++){ if ((a%i) == 0){ std::cout << "It's not a prime number\n"; std::cout << "The given number is divisible by " << i << "\n"; return 0; } } std::cout << "It's a prime number"; return 1; // 补充返回值 } }
方案2:修改函数返回类型为void
如果该函数不需要返回任何值,直接修改函数声明的返回类型即可,无需额外添加return语句:
// 返回类型改为void void prime_number(short a){ if (a == 1){ std::cout << "It's not a prime number\n"; } else{ for (i = 2; i < a; i++){ if ((a%i) == 0){ std::cout << "It's not a prime number\n"; std::cout << "The given number is divisible by " << i << "\n"; return; } } std::cout << "It's a prime number"; } }
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

