Документация компилятора предоставит список предопределенных макросов. В случае MSV C это здесь . Все макросы, указанные в стандарте, будут по-прежнему доступны, если вы включите соответствующий заголовок (и в некоторых случаях, если вы включите другой заголовок).
В случае __CHAR_BIT__
это не так часть стандарта; макрос CHAR_BIT
есть и объявлен в заголовке <climits>
. Я скорее сомневаюсь, что MSV C имеет CHAR_BIT
или __CHAR_BIT__
в качестве предопределенного макроса: этот компилятор в основном использует предопределенные макросы для обеспечения доступа к флагам компиляции и вместо этого определяет архитектурно-зависимые макросы непосредственно в заголовках (конечно, используя предопределенные макросы, чтобы определить, что это за архитектура).
Я полагаю, чтобы проверить, является ли макрос предопределенным , а не определен в заголовке, вы просто должны проверить перед включением любых заголовков. Хотя я не могу придумать причину, по которой вы хотите это сделать.