Существует ли предупреждение gcc 4.2, аналогичное предупреждению Visual Studio относительно возможной потери данных? - PullRequest
5 голосов
/ 22 апреля 2009

Существует ли такой флаг для gcc, чтобы при преобразовании длинного в короткое генерировалось предупреждение о возможной потере данных?

Я работаю над приложением C ++, скомпилированным для Visual Studio (2005) и GCC 4.2 (для Mac OS X).

Предупреждения, которые выводит Visual Studio, следуют этому шаблону:

: warning C4244: 'argument' : conversion from 'long' to 'short', possible loss of data

Я пробовал -Wconversion, но это не совсем то, что я ищу. Единственное, что мне удалось найти, - это экспериментальный флаг -Wcoercion, связанный с GCC 4.3 (который я не уверен, если мы еще хотим инвестировать).

22 апреля 2009 г. @ 11:00 EST Редактировать: Чтобы прояснить, я хочу увидеть это предупреждение. У нас есть код, по которому мы хотим знать, когда произойдет потеря данных. Если у меня есть код:

unsigned long value1 = LONG_MAX;
std::cout << "value1: " << value1 << std::endl;

unsigned short value2 = value1;
std::cout << "value2: " << value2 << std::endl;

Я получаю этот ожидаемый результат:

значение1: 2147483647
значение2: 65535

В нашем коде у нас есть специальные утверждения, которые выполняют приведение и предупреждают нас, если выполненный код приведет к потере данных. Мы нашли места в нашей большой кодовой базе, используя предупреждения Visual Studio.

Можно ли как-нибудь сгенерировать эти предупреждения в gcc 4.2?

Ответы [ 3 ]

4 голосов
/ 24 апреля 2009

Используйте -Wconversion. Кажется, вам это нужно, даже если вы уже указали -Wall.

Это определенно работает в gcc4.3. Если это не было исправлено в версии 4.2, вам придется обновить его, чтобы получить.

Пример предупреждения:

warning: conversion to 'short int' from 'int' may alter its value
4 голосов
/ 27 апреля 2009

Эта функция не поддерживается в GCC 4.2, но она была добавлена ​​в GCC 4.3. Вики-страница, объясняющая это .

Спасибо schnaader и Эвану Терану за предоставленные ссылки, которые привели меня туда.

4 голосов
/ 22 апреля 2009

Посмотрите на эту запись об ошибке GCC , возможно, это поможет понять, почему преобразование из длинного в короткое не приводит к предупреждению.

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