Булевская переменная в ifdef: “#ifdef && B” то же, поскольку “#if определил (A) &&, определил (B)”?

Этот ответ от несколько связанного вопроса, который я задал сегодня, мог бы помочь разъяснить цели изолировать класс:

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

, позволяя Вашему классу быть расширенными, необходимо спросить: если разработчик расширяет мой класс и передает этот новый класс моей библиотеке, я могу прозрачно работать с этим новым классом? Я могу работать правильно с этим новым классом? Этот новый класс действительно собирается вести себя то же?

я нашел, что большую часть времени запечатанные классы в.Net Framework имеют определенные требования под капотом, чтобы Вы не знали, и который, учитывая текущую реализацию не может быть безопасно выставлен подклассам.

Liskov Substition и Состав

Теперь переходят по той ссылке и upvote фактический автор.

76
задан Brian Tompsett - 汤莱恩 6 June 2016 в 10:28
поделиться

2 ответа

Это не одно и то же. Первый не работает (тестировал в gcc 4.4.1). Сообщение об ошибке было:

test.cc:1:15: предупреждение: дополнительные токены в конец директивы #ifdef

Если вы хотите проверить, определено ли несколько элементов, используйте вторую.

81
ответ дан 24 November 2019 в 11:19
поделиться

Условная компиляция

Вы можете использовать определенный оператор в директива #if для использования выражений которые оцениваются как 0 или 1 в пределах линия препроцессора. Это спасает вас от с использованием вложенных директив предварительной обработки. Скобки вокруг идентификатора являются необязательными. Например:

 #if defined (MAX) &&! определено (MIN)

Без использования определенного оператора, вам нужно будет включить следующие две директивы для выполнения пример выше:

 #ifdef max 
#ifndef min
44
ответ дан 24 November 2019 в 11:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: