C宏用于包含功能

时间:2014-06-01 22:35:31

标签: c++ c macros arduino

我想依赖#define'd值来运行某个代码。为了澄清我的情况,我在下面发布了一些代码。现在,例如#define VALUE 0已完成。这可以是任何数字。如果该值等于0,则应该运行第一个for循环,否则不应该运行。我之前使用过#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));
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:2)

你应该使用

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

而不是

#ifdef VALUE

语法应该从这里显而易见 - 选择任何值(甚至为零)来编译该代码块。