Компиляторам свойственно обеспечить переключатель для предупреждения, когда код недостижим. Я также видел макросы для некоторых библиотек, которые обеспечивают утверждения для недостижимого кода.
Существует ли подсказка, такой как через прагму, или встроена, который я могу передать GCC (или какие-либо другие компиляторы в этом отношении), который предупредит или ошибка во время компиляции, если будет определено, что строка ожидала быть недостижимой, может на самом деле быть достигнут?
Вот пример:
if (!conf->devpath) {
conf->devpath = arg;
return 0;
} // pass other opts into fuse
else {
return 1;
}
UNREACHABLE_LINE();
Значение этого находится в обнаружении после изменений в условиях выше ожидаемой недостижимой строки, что строка на самом деле достижима.
gcc 4.5 поддерживает встроенный компилятор __builtin_unreachable()
,, объединяя его с -Wunreachable-code
, может делать то, что вы хотите, но, вероятно, вызовет ложные предупреждения
Если в вашем компиляторе нет нужного вам предупреждения, его можно дополнить статическим анализатором. Тип анализатора, о котором я говорю, будет иметь свой собственный язык аннотаций и / или распознавать C assert
и использовать их для подсказок свойств, которые должны быть истинными в определенных точках выполнения. Если нет специальной аннотации для недостижимых операторов, вы, вероятно, можете использовать assert (false);
.
Я лично с ними не знаком, но Klokwork и CodeSonar - два известных анализатора. Гоанна - третий.