Я прошёл исходный код BSON и наткнулся на то, чего никогда раньше не видел.
#if !defined(BSON_INSIDE) && !defined(BSON_COMPILATION)
#error "Only <bson.h> can be included directly."#endif
Что defined(XXXX)
макрос выше? Я могу догадаться, что он делает, но я не могу найти никакой документации об этом. Это специфично для некоторых компиляторов? Это дает мне предупреждение W4 на Microsoft Visual C ++ (что я пытаюсь решить в моем проекте).
От 6.10.1
Выражение, управляющее условным включением, должно быть целым числом
константное выражение за исключением того, что: идентификаторы (включая те,
лексически идентичны ключевым словам) интерпретируются как описано
ниже; 166) и может содержать унарные операторные выражения видаdefined identifier
или же
defined ( identifier )
который оценивается в 1, если идентификатор в настоящее время определен как макрос
название (то есть, если он предопределен или был предметом
#define
директива предварительной обработки без вмешательства#undef
директива с тем же идентификатором субъекта), 0, если это не так.
Это не macro
— это оператор.
Других решений пока нет …