Макрос C для включения функции

0

Я хочу, чтобы в зависимости от значения # define'd запускался определенный код. Чтобы прояснить ситуацию, у меня есть код, указанный ниже. Теперь, например, #define VALUE 0 выполняется. Это может быть любое число. Если значение равно 0, первый цикл цикла должен работать, иначе он не должен. Раньше я использовал #ifdef VALUE, но VALUE всегда определяется, и мне нужно проверить реальное значение, которое у него есть. Возможно ли с помощью макросов ускорить код?

#define VALUE 0
void hardwareDIO::readDI(){
  for(int i = 0; i < 7; i++){
    for(byte ii = 0; ii < 8; ii++){
      if(bitRead(_DIDirect[i], ii)){
        bitWrite(_hwStatDir[i], ii, !digitalRead(8*i+ii));
      }
    }
  }

  for(int i = 0; i < 8; i++){
    if(_extenderNrs[i] == -1){
      break;
    }else{
      for(byte ii = 0; ii < 2; ii++){
        byte values = 0;
        if(ii == 0){
          values = expanderRead(_extenderNrs[i], GPIOA);
        }else{
          values = expanderRead(_extenderNrs[i], GPIOB);
        }
        for(byte iii = 0; iii < 8; iii++){
          if(bitRead(_arrayIO[i][ii], iii)){  // input detected
            bitWrite(_hwStatIO[i][ii], iii, !bitRead(values, iii));
          }
        }
      }
    }
  }
}
  • 5
    Вы пробовали #if VALUE ?
  • 2
    C ++ или C? 2 разных языка.
Показать ещё 3 комментария
Теги:
arduino
macros

1 ответ

2
Лучший ответ

Вы должны использовать

#if VALUE==1
....
#endif

Скорее, чем

#ifdef VALUE

Синтаксис должен быть очевиден отсюда - выберите любое значение (даже ноль), чтобы скомпилировать этот блок кода.

  • 0
    #if VALUE , как предположил Брайан, намного выше.
  • 1
    Но #if VALUE сообщает вам, является ли он нулевым или ненулевым. Это не позволяет выбирать для любого значения

Ещё вопросы

Сообщество Overcoder
Наверх
Меню