c,分数判别中的“并非所有控制路径都返回值”

时间:2019-12-27 10:31:06

标签: c configuration warnings

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>

bool isPrime(unsigned number)
{
    unsigned i;
    for (i = 2; i < number; ++i)
    {
        if (number % i == 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

int main()
{
    unsigned int a = 0;
    scanf("%u", &a);

    bool flag = isPrime(a);
    if (flag)
    {
        printf("%u is a prime number", a);
    }
    else
    {
        printf("%u is not a prime number", a);
    }

    return 0;
}
1>------ Build started: Project: prime.c, Configuration: Debug x64
------ 1>main.c `1>C:\Users\neuez\source\repos\test\prime.c\main.c(22): warning
C4715:` 'isPrime': not all control paths  return a value

1>Done building project "prime.c.vcxproj".
======== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped =======

我想我返回了所有控制通过的结果,但是我不知道为什么会弹出警告。

2 个答案:

答案 0 :(得分:1)

您的isPrime函数并不总是返回值。

bool isPrime(unsigned number)
{
    unsigned i;
    for (i = 2; i < number; ++i)
    {
        if (number % i == 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

如果number参数小于2会发生什么?在这种情况下,将不会运行for循环,也不会执行任何return语句。

答案 1 :(得分:1)

考虑number = 1 (or 2)的情况。

在这里,由于设置的条件,您将不会进入循环。

在这种情况下,您将到达函数末尾而没有任何回报。