Какой эффект имеет #define X X в C?

в исходный код stdbool.h в проекте LLVM это гласит:

/* Don't define bool, true, and false in C++, except as a GNU extension. */
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
/* Define _Bool, bool, false, true as a GNU extension. */
#define _Bool bool
#define bool  bool
#define false false
#define true  true
#endif

В последних 4 строках есть три строки из #define X X, Почему ты бы так поступил? Что это меняет? Не заставит ли это компилятор просто заменить, скажем, true с true?

17

Решение

Единственная причина, по которой я могу придумать, состоит в том, что

#ifdef bool
// do some stuff or define bool
#endif

в других файлах c после этого будет работать правильно и не пытаться переопределить bool другим способом, как

#define bool int

который будет мешать первому определению

19

Другие решения

#define X X

имеет эффект, что «препроцессор условный»*:

#ifdef X

правда» «Успешно».*


* Обновить

8

Будет иметь значение, что true, false и т. Д. Теперь являются макросами. Так что код такой

#if defined(true)
...
#else
...
#endif

будет затронут.

2
По вопросам рекламы [email protected]