Директивы препроцессора условной компиляции

Страница на этапе разработки

В данном уроке мы с Вами рассмотрим часть директив препроцессора условной компиляции, в частности:
#ifdef
#else
#endif
Директива #ifdef —  позволяет препроцессору проверить, было ли значение ранее определено с помощью директивы #define. Если да, то код между #ifdef и #endif скомпилируется. Если нет, то код будет проигнорирован. 
Пример использования директив:

 #define USE_PARAM
#ifdef USE_PARAM
// код, если задан USE_PARAM
#else
// код, если не задан
#endif

Используя данные директивы мы можем менять алгоритм программы не переписывая ее или не создавая много разных версий. Для примера рассмотрим концепцию кода, где у нас светодиоды (включение/выключение) выполняют некий технологический процесс. Светодиод HL1 всегда работает — это основа программного кода, а вот HL2 и HL3 в зависимости от условий могут не использоваться полностью или использоваться по отдельности. Если не использовать директивы нам нужно было либо постоянно комментировать лишний программный код, при этом следить, что бы не ошибиться или не напутать, либо делать несколько версий проектов и так же следить, что бы не запутаться в них.

#define NUM1 0
#define NUM2 0
void setup() {
Serial.begin(9600);
}

void loop() {
  Serial.println(«HL1_On»);
  delay(500);                      
  Serial.println(«HL1_Off»);  
  delay(500);  
#ifdef NUM1
  Serial.println(«HL2_On»);
  delay(500);                      
  Serial.println(«HL2_Off»);  
  delay(500);  
#else
  Serial.println(«HL3_On»);
  delay(500);                      
  Serial.println(«HL3_Off»);  
  delay(500);
#endif
#ifdef NUM2
  Serial.println(«HL2_On»);
  Serial.println(«HL3_On»);
  delay(500);                      
  Serial.println(«HL2_Off»);  
  Serial.println(«HL3_Off»);
  delay(500);
#endif
}
 
 

 

 

SVG to HTML/CSS