int(int(-2)/ без знака (2)) = 2147483647 без предупреждения

#c #g

#c #g

Вопрос:

У меня есть код, похожий на этот:

 template<typename Ta, typename Tb> Ta doStuff(Ta a, Tb b)
{
    ...
    return a/b;
}
  

Как говорится в названии, такой код вернет неправильные значения с Ta=int Tb= unsigned .

Есть ли способ получить предупреждение от g для этого случая?

Комментарии:

1. В качестве альтернативы предупреждениям, возможно, вы также могли бы использовать что-то вроде make_signed .

Ответ №1:

ДА. Использовать -Wsign-conversion опцию:

 [nawaz@./]$ g   filename.cpp -Wsign-conversion
  

Комментарии:

1. Это -Wsign-conversion, но да, это то, что я искал, спасибо

Ответ №2:

Попробуйте с помощью: g -Wall code.cpp -выход o

Комментарии:

1. Стена: это включает все предупреждения о конструкциях, которые некоторые пользователи считают сомнительными, и которые легко избежать (или изменить, чтобы предотвратить предупреждение), даже в сочетании с макросами. Это также активирует некоторые зависящие от языка предупреждения, описанные в параметрах диалекта C и параметрах диалекта Objective-C и Objective-C . Документы GCC.

2. Я использую -Wall .. он не предупреждает

3. @KoKuToru: -Wall насколько я знаю, не содержит никаких предупреждений о преобразовании.

4. In facts -Wall не включает -Wsign-conversion (и, по-видимому, тоже не -Wextra включает ).