Есть ли способ заставить 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

Ссылка на документы.

Другие вопросы по тегам