Как заставить компилятор предупредить, что это недопустимый бул? - PullRequest
2 голосов
/ 28 сентября 2019

Мы только что сгорели от опечатки: " constexpr bool maxDistance = 10000; "

И gcc, и clang компилируют это без предупреждения.

Настоящая ошибкав данном случае переменная не должна иметь тип bool, а должна быть целочисленным типом.

Как мы можем гарантировать, что мы получим предупреждение компилятора в будущем?

#include <iostream>

constexpr bool number = 1234;
int main(int argc, char* argv[])
{
    std::cout << number + 10000 << std::endl; // prints 10001.
    return number;
}

Ошибка здесь заключается в том, что переменная объявлена ​​с неправильным типом, однако ни clang, ни gcc не выдают предупреждение.

gcc -Wall -std=c++14 test.cpp -lstdc++
clang -Wall -std=c++14 test.cpp -lstdc++

(с использованием gcc 5.4.0 и clang 3.8.0)

Примечание: с тех пор я узнал о возможном флаге компиляции: -Wint-in-bool-context однако, похоже, он не реализован ни в используемой версии (5.4.0), ни в clang (3.8.0)).

Это правильный путь?

Ответы [ 2 ]

5 голосов
/ 28 сентября 2019

Вы должны использовать синтаксис прямой инициализации списка , он запрещает сужение:

constexpr bool number{1234}; // error: narrowing conversion of '1234' from 'int' to 'bool' [-Wnarrowing]
0 голосов
/ 28 сентября 2019

Я обнаружил, что у gcc есть флаг -Wint-in-bool-context, однако, похоже, он не реализован ни в используемой версии (5.4.0), ни в clang (3.8.0).

Это правильный путь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...