Другие языки программирования и технологии

вопрос по c++ .не могу точно понять использование #ifdef, #ifndef.

И как можно это использовать вместо if, допустим для проверки на ошибки. Дайте небольшой пример. Спасибо
#ifdef ни разу не замена if. Цели и задачи разные. И логичнее сравнивать тогда #if и if. #ifdef/#ifndef/#if работают на уровне "препроцессора", в то время как if работает непосредственно в коде (если не будет выкинут оптимизатором =).
https://ru.wikipedia.org/wiki/Препроцессор_Си (да это справедливо для C++). Т. е. взаимодействовать на этапе сборки кода.

--- Можно использовать для проверки параметров в #define (для простого примера, в C++ именно такой define у профи крайне сомнителен)
#define ArraySize 10

#ifndef ArraySize
//#error заставит компилятор прервать сборку с ошибкой.
//Вы не сделаете это синтаксически корректным if. И не надо =)
#error ArraySize (размер массива) не задан
#enfif

#if ArraySize < 0
#error ArraySize (размер массива) отрицателен!
#endif

--- #ifdef можно использовать для условной компиляции.

Н-р можно сделать проверку, чтобы компилятор не пытался собрать весь код не под Linux системами и соотв. сообщить внятно причину проблемы, тому, кто пытается собрать код.
#ifndef __linux__
#error Этот код только для Linux систем
#endif

или н-р условная компиляция для установки символа-разделителя.
Если "Linux" pathDelimiter = '/', если Windows '\' иначе ошибка
const char pathDelimiter =
#ifdef __linux__
'/';
#elif __WIN32
'\\';
#else
'\0';
#error Платформа не поддерживается. Задайте разделитель
#endif
Евгений Николаев
Евгений Николаев
84 764
Лучший ответ
Степанов Дмитрий "#ifdef ни разу не замена if".- да, сорри это я не понял что от меня хотели. Нужно было просто статус-коды для debugview

"Если "Linux" pathDelimiter = '/', если Windows '\' иначе ошибка" -почему вы это сейчас говорите, а не пару месяцев назад)
#ifdef вычисляется на момент компиляции. Там в качестве аргумента должно быть константное выражение
кусок кода между #ifdef / endif с невыполненным условием даже не передаётся в компилятор, его как будто и не было