Есть ли способ заставить GCC предупреждать меня, когда я предоставляю целое число со знаком для функции, которая принимает только без знака?
Этот код не дает мне никаких предупреждений при компиляции с g++
:
unsigned int myFunc(unsigned int integer) {
return integer;
}
int main() {
int x = -1;
std::cout << myFunc(x) << std::endl;
}
Компилируется нормально, но результат неправильный: 4294967295
, Есть ли у GCC компилятор -W*
варианты для этого?
2 ответа
Решение
Да, -Wsign-conversion
Остерегайтесь этого -Wconversion
не включает это предупреждение для кода C++, хотя делает это для кода C
Есть небольшая оговорка, которую я, вероятно, должен изложить, поскольку она может быть немного хитрой и легко запутанной.
При компиляции C
код -Wconversion
обычно достаточно, так как он автоматически запускает пару других флагов.
При компиляции C++
код -Wconversion
не вызывает те же флаги, что и gcc
делает в C
так что вы должны использовать -Wsign-conversion -Wconversion