Полностью ли совместим тип bool для С99 и С++?

Рейтинг: 2Ответов: 2Опубликовано: 05.03.2011

Например, если взять заголовок функции, которая всегда возвращает true в C99

#include <stdbool.h>

extern "C" {
    bool getTrue();
}

и подключить в исходник на C++, будет ли это true всегда true в C++?

Ответы

▲ 2

Сильно зависит от компилятора и его опций с которыми будете собирать. Я считаю, что тут необходим экспериментальный подход - проще проверить будет ли в используемой Вами среде это работать, чем гадать. В общем же случае вопрос, видимо, не решаем, т.к. стандарт стандартом, а иметь дело будете с конкретными реализациями стандарта в виде конкретных компиляторов. Возможно под разные платформы. И что они будут думать про bool - одному Янусу известно :-) Скорее же всего работать будет везде, т.к. есть соглашение, что 0 - false, а все остальные целочисленные значения - true, но при этом если

bool a = true;

то (int)a будет равно 1

▲ 1

В общем случае говорить про совместимость C99 и C++ нельзя. Лучше использовать определение типа

typedef uint8 _bool;

чем беспокоиться о совместимости.