Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 包含函数的C宏_C++_C_Macros_Arduino - Fatal编程技术网

C++ 包含函数的C宏

C++ 包含函数的C宏,c++,c,macros,arduino,C++,C,Macros,Arduino,我想根据#define’d值运行特定代码。为了澄清我的情况,我在下面发布了一些代码。现在,例如#定义值0完成。这可以是任何数字。如果该值等于0,则应运行第一个for循环,否则不应运行。我以前使用过#ifdef VALUE,但是值总是被定义的,我需要检查它的实际值。宏是否可以加速代码 #define VALUE 0 void hardwareDIO::readDI(){ for(int i = 0; i < 7; i++){ for(byte ii = 0; ii < 8;

我想根据#define’d值运行特定代码。为了澄清我的情况,我在下面发布了一些代码。现在,例如
#定义值0
完成。这可以是任何数字。如果该值等于0,则应运行第一个for循环,否则不应运行。我以前使用过
#ifdef 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));
          }
        }
      }
    }
  }
}
#定义值0
void hardwareDIO::readDI(){
对于(int i=0;i<7;i++){
用于(字节ii=0;ii<8;ii++){
if(位读(_DIDirect[i],ii)){
位写(hwStatDir[i],ii,!digitalRead(8*i+ii));
}
}
}
对于(int i=0;i<8;i++){
如果(nrs[i]=-1){
打破
}否则{
用于(字节ii=0;ii<2;ii++){
字节值=0;
如果(ii==0){
值=expanderRead(_extenderNrs[i],GPIOA);
}否则{
值=expanderRead(_extenderNrs[i],GPIOB);
}
用于(字节iii=0;iii<8;iii++){
如果(位读(_arrayIO[i][ii],iii)){//检测到输入
位写(hwStatIO[i][ii],iii,!位读(values,iii));
}
}
}
}
}
}
您应该使用

#if VALUE==1
....
#endif
而不是

#ifdef VALUE

语法应该是显而易见的——从C++中选择任何值(甚至为零)编译该代码块。两种不同的语言。我看不出你的代码中有任何

VALUE
的用法?!?
用于其他c文件。C/C++混合,它是Arduino。如果值为0,
#if VALUE
将跳过,就像正常的if语句一样?
#if VALUE
将跳过值为0或未定义。
#if VALUE
如Brian所建议,更简洁。但是#if VALUE告诉您它是零还是非零。它不允许您选择任何值