Проверьте, включен ли заголовок с использованием директив предварительной обработки? - PullRequest
0 голосов
/ 08 сентября 2018

Можно ли проверить, был ли файл включен с использованием директив предварительной обработки?

Я хотел добиться чего-то вроде этого:

#ifincluded assert.h
#error "Should not include assert.h"
#endif

В данный момент я решаю это, зная, чтоassert.h определил _ASSERT_H.В этом случае я могу использовать #ifdef _ASSERT_H.Проблема в том, что это зависит от реализации.

Есть ли лучший способ добиться этого?

1 Ответ

0 голосов
/ 08 сентября 2018

Вы можете просто использовать тот факт, что assert() сам по себе является макросом, так что вы можете просто сделать

#ifdef assert
#error "Should not include assert.h"
#endif

Это, конечно, также будет жаловаться, если кто-то определит их собственный *Макрос 1005 *, который, строго говоря, будет законным , если в нем нет стандартного заголовка

В конце дня я бы пересмотрелвсе, что вы думаете, вы пытаетесь сделать здесь.Если вы находитесь в точке, когда вам нужно убедиться, что кто-то не включает определенный стандартный заголовок, вы, скорее всего, на неверном пути, и, скорее всего, будет гораздо лучший, но совершенно другой подход, если вы просто выберетеотступить и переосмыслить с самого начала.Итак,

Есть ли лучший способ добиться этого?

Почти наверняка.Но это не будет иметь ничего общего с обнаружением и настройкой поведения в зависимости от того, включены ли определенные части стандартной библиотеки или нет…

...