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)
有什么方法可以纠正这种警报?
即使控制永远达不到
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,因为它要么true或false:
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)