Небезопасное сочетание xxx и bool в рабочем предупреждении только при сравнении значения с TRUEC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Небезопасное сочетание xxx и bool в рабочем предупреждении только при сравнении значения с TRUE

Сообщение Anonymous »

У меня есть библиотека, реализованная на C (совместимая с C89). Он определяет логический тип данных bool32. Он также определяет логические литералы TRUE и FALSE:

Код: Выделить всё

#ifndef TRUE
# define TRUE  (0 == 0)
#endif

#ifndef FALSE
# define FALSE (0 != 0)
#endif

typedef uint32_t bool32;
Код C, подобный следующему, компилируется без предупреждения:

Код: Выделить всё

bool32 h = TRUE;
if(h==TRUE){
}
if(h==FALSE){
}
Тот же код в cpp компилируется со следующим предупреждением:

1>[имя файла/строка): предупреждение C4805: '==': небезопасное сочетание типа 'bool32' и типа 'bool' в работе

Но только для сравнения TRUE . Сравнение FALSE не выдает предупреждение.
Я также проверил предварительно обработанные файлы, чтобы убедиться, что используется приведенное выше определение TRUE и FALSE. и не другой. Выглядит нормально.
Есть ли объяснение, почему предупреждение появляется только в случае TRUE и как избежать этого предупреждения? И еще вопрос: Почему компилятор не предупреждает в режиме C?

Подробнее здесь: https://stackoverflow.com/questions/263 ... lue-to-tru
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»