У меня есть выбор #defines в заголовке, который редактируется пользователем, и поэтому впоследствии я хочу проверить, существуют ли определения, если пользователь полностью их удаляет, например.Препроцессор проверяет, не определены ли несколько определений
#if defined MANUF && defined SERIAL && defined MODEL
// All defined OK so do nothing
#else
#error "User is stoopid!"
#endif
Это отлично работает нормально, мне интересно, однако, если есть лучший способ проверить, если несколько определяет не на месте ... то есть что-то вроде:
#ifn defined MANUF || defined SERIAL ||.... // note the n in #ifn
или, может быть
#if !defined MANUF || !defined SERIAL ||....
, чтобы удалить необходимость в пустой секции #if.
FYI: 'defined' является оператор, вызывается как функция (точно так же, как 'sizeof'. Поэтому, если вы называете это функцией, ваш пример будет работать нормально. Кроме того, вы можете использовать большинство логических операторов ('==', '! =', '!', '||', '&&') в инструкциях препроцессора. –
Это общий принцип булевой алгебры, который вы можете заменить '! (X && y)' на '(! X ||! Y)'. http://en.wikipedia.org/wiki/De_Morgan%27s_laws – Vicky