Я хочу, чтобы в зависимости от значения # 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));
}
}
}
}
}
}
Вы должны использовать
#if VALUE==1
....
#endif
Скорее, чем
#ifdef VALUE
Синтаксис должен быть очевиден отсюда - выберите любое значение (даже ноль), чтобы скомпилировать этот блок кода.
#if VALUE
, как предположил Брайан, намного выше.
#if VALUE
?