私はこのCコードを持っています:
EaglePage* EaglePage_RealCopy(EaglePage *page)
{
if(NULL == page) {
return NULL;
}
switch(page->type) {
case EagleDataTypeUnknown:
EagleLogger_Log(EagleLoggerSeverityError, "Cannot page of Unknown type.");
return NULL;
case EagleDataTypeInteger:
return EaglePage_RealCopyInt_(page);
case EagleDataTypeVarchar:
return EaglePage_RealCopyVarchar_(page);
case EagleDataTypeFloat:
return EaglePage_RealCopyFloat_(page);
}
}
これをMac OS Xでclangを使用してコンパイルすると、スイッチがすべての「可能な」ブランチを処理し、(Javaのような)returnステートメントの欠落について警告しないことが理解されます。ただし、GCC 4.4.5 で同じコードを実行すると、常に返されないという警告が表示されます。
return ステートメントを挿入すると、「不可能な」シナリオをカバーしていないため、コード カバレッジが壊れてしまうため、面倒です。GCCがclang/javacのようにこれを処理する方法はありますか?