stdbool.h: #define true true

stdbool.h содержит этот код:

#if __cplusplus < 201103L
/* Defining these macros in C++98 is a GCC extension.  */
#define bool    bool
#define false   false
#define true    true
#endif

Почему gcc нужно переопределять стандартные типы C++?


person Kane    schedule 09.12.2016    source источник
comment
Настоящий вопрос заключается в том, зачем включать этот заголовок в файл C++. Кажется, что все это должно быть исключено, если определено __cplusplus. Может быть, эти определения предназначены для обратной совместимости с программами на C и/или более старыми версиями компилятора?   -  person Cody Gray    schedule 09.12.2016


Ответы (1)


Хотя #define fnord fnord обычно не меняет способ обработки идентификатора fnord, это заставит #ifdef fnord сообщать о макросе, как он определен. Если другой код может сделать что-то вроде

#ifndef true
#define true 1
#endif

Наличие #define true true приведет к тому, что такое условное определение будет пропущено.

person supercat    schedule 10.12.2016