C++ 包含函数的C宏
我想根据#define’d值运行特定代码。为了澄清我的情况,我在下面发布了一些代码。现在,例如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;
#定义值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告诉您它是零还是非零。它不允许您选择任何值