Предупреждать об автоматически возвращаемом типе возврата в CLion / во время компиляции - PullRequest
2 голосов
/ 22 марта 2020

Я недавно сделал очень незначительную, но очень трудную для поиска ошибку в своем коде, вот MCVE:

#include<iostream>

int foo(){
    return false;
}

int main(){
    int x = foo();
    std::cout << x;
    return 0;
}

Как видите, здесь функция foo return s false который, насколько я могу судить, автоматически повышается до int и сохраняется в x.

Однако, это была логическая ошибка с моей стороны, и, как ни странно, не была обнаружена ни во время компиляции, ни в CLion. gmm - мой флаг компиляции. Предполагается, что он улавливает утечки памяти, ошибки времени выполнения (в основном все обычное неопределенное поведение), а также внутренне вызывает gww, для которого включены наиболее распространенные предупреждения.

Более того, в CLion, CLang-tidy и Clang's Мой собственный инспектор почти всегда ловит все распространенные ошибки в моем коде.

Я много занимаюсь программированием, и эта ошибка недавно произошла вживую на соревнованиях. Я бы предпочел избежать этого. Я приложил свой флаг компиляции ниже. У меня все возможные проверки C / C ++ включены в настройках CLion. Можно ли их отрегулировать, добавить новый параметр или сделать что-нибудь - во время компиляции, или в CLion, или в обоих случаях - чтобы можно было уловить эту проблему во время компиляции?


alias gww='g++ -Wall -Weffc++ -pedantic  \
-pedantic-errors -Wextra -Wcast-align \
-Wcast-qual -Wconversion \
-Wdisabled-optimization \
-Wfloat-equal -Wformat=2 \
-Wformat-nonliteral -Wformat-security  \
-Wformat-y2k \
-Wimport  -Winit-self  -Winline \
-Winvalid-pch   \
-Wmissing-field-initializers -Wmissing-format-attribute   \
-Wmissing-include-dirs -Wmissing-noreturn \
-Wpacked  -Wpointer-arith \
-Wredundant-decls \
-Wshadow -Wstack-protector \
-Wstrict-aliasing=2 -Wswitch-default \
-Wswitch-enum \
-Wunreachable-code -Wunused \
-Wunused-but-set-variable \
-Wunused-parameter \
-Wvariadic-macros \
-Wwrite-strings'
alias gmm="gww -fsanitize=address -fsanitize=undefined -D_GLIBCXX_DEBUG"
...