即使我已经涵盖了所有情况,也会收到“控制达到非空函数结束”的警告

Mou*_*_Ka 3 c++ multithreading

为什么如果我有两个条件同时在函数中都返回正确的类型,我会收到警报。

控制到达非空函数的结尾 [-Wreturn-type]

bool EtherTrafGen::isGenerator()
{
    if (multipacket) return par("destAddresses").stringValue()[0];
    else if (!multipacket) return par("destAddress").stringValue()[0];
} 
Run Code Online (Sandbox Code Playgroud)

有什么方法可以纠正这种警报?

Som*_*ken 5

即使控制永远达不到

bool EtherTrafGen::isGenerator()
{
    if (multipacket) return par("destAddresses").stringValue()[0];
    else if (!multipacket) return par("destAddress").stringValue()[0];
    //here
} 
Run Code Online (Sandbox Code Playgroud)

编译器无法知道,(因为它是一个else if),如果它会警告你潜在的未定义行为达到了(也许另一个线程修改multipacket的第一次检查后,等等)。您只需添加一个默认返回值即可满足编译器的要求:

bool EtherTrafGen::isGenerator()
{
    if (multipacket) return par("destAddresses").stringValue()[0];
    else if (!multipacket) return par("destAddress").stringValue()[0];
    return false;
}
Run Code Online (Sandbox Code Playgroud)

或者只是全切else if,因为它要么truefalse

bool EtherTrafGen::isGenerator()
{
    if (multipacket) return par("destAddresses").stringValue()[0];
    return par("destAddress").stringValue()[0]; // multipacket must be false here anyway
} 
Run Code Online (Sandbox Code Playgroud)

  • `else` 在这里是多余的。刚回来 (2认同)
  • @Jarod42 这个问题没有说明多包的类型,所以它可能是一个 `std::atomic_bool`。:P (2认同)