我想依赖#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));
}
}
}
}
}
}
答案 0 :(得分:2)
你应该使用
#if VALUE==1
....
#endif
而不是
#ifdef VALUE
语法应该从这里显而易见 - 选择任何值(甚至为零)来编译该代码块。