Как подсказать GCC, что строка должна быть недостижимой во время компиляции?

Компиляторам свойственно обеспечить переключатель для предупреждения, когда код недостижим. Я также видел макросы для некоторых библиотек, которые обеспечивают утверждения для недостижимого кода.

Существует ли подсказка, такой как через прагму, или встроена, который я могу передать GCC (или какие-либо другие компиляторы в этом отношении), который предупредит или ошибка во время компиляции, если будет определено, что строка ожидала быть недостижимой, может на самом деле быть достигнут?

Вот пример:

    if (!conf->devpath) {
        conf->devpath = arg;
        return 0;
    } // pass other opts into fuse
    else {
        return 1;
    }
    UNREACHABLE_LINE();

Значение этого находится в обнаружении после изменений в условиях выше ожидаемой недостижимой строки, что строка на самом деле достижима.

13
задан Ciro Santilli 新疆改造中心法轮功六四事件 8 October 2018 в 18:36
поделиться

2 ответа

gcc 4.5 поддерживает встроенный компилятор __builtin_unreachable() ,, объединяя его с -Wunreachable-code, может делать то, что вы хотите, но, вероятно, вызовет ложные предупреждения

14
ответ дан 1 December 2019 в 22:38
поделиться

Если в вашем компиляторе нет нужного вам предупреждения, его можно дополнить статическим анализатором. Тип анализатора, о котором я говорю, будет иметь свой собственный язык аннотаций и / или распознавать C assert и использовать их для подсказок свойств, которые должны быть истинными в определенных точках выполнения. Если нет специальной аннотации для недостижимых операторов, вы, вероятно, можете использовать assert (false); .

Я лично с ними не знаком, но Klokwork и CodeSonar - два известных анализатора. Гоанна - третий.

2
ответ дан 1 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: