Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 - Fatal编程技术网

C 是否可以使用#定义将不同的变量组合在一起

C 是否可以使用#定义将不同的变量组合在一起,c,C,有没有办法缩短它 D==1&&C==1&&B==0&&A==0,就是像Key1这样的名字? 因为我有很多不同的一套我想做的 #include<xc.h> #define Key1 (D==1 && C==1 && B==0 && A==0) char K1[] = "Key 1 was pressed"; void main() { unsigned char i; while(DA==1

有没有办法缩短它 D==1&&C==1&&B==0&&A==0,就是像Key1这样的名字? 因为我有很多不同的一套我想做的

#include<xc.h>


#define Key1    (D==1 && C==1 && B==0 && A==0)

char K1[]       =   "Key 1 was pressed";

void main() {

    unsigned char i;
    while(DA==1){


      if(Key1){  
         sendfunction(0b10000000);

                for (i=0; K1[i]!=0; i++){
                sendtext(K1[i]);
                }   //message
       }//for loop

    }

/*But if I put in this way, it works 
and it will display "Key 1 was pressed"
*/

 if((D==1 && C==1 && B==0 && A==0){  
         sendfunction(0b10000000);

                for (i=0; K1[i]!=0; i++){
                sendtext(K1[i]);
                }   //message
       }//for loop

#包括
#定义键1(D==1&&C==1&&B==0&&A==0)
字符K1[]=“按键1已按下”;
void main(){
无符号字符i;
而(DA==1){
如果(键1){
发送函数(0b10000000);
对于(i=0;K1[i]!=0;i++){
sendtext(K1[i]);
}//消息
}//for循环
}
/*但如果我这样做,它是有效的
并显示“按键1已按下”
*/
如果((D==1&&C==1&&B==0&&A==0){
发送函数(0b10000000);
对于(i=0;K1[i]!=0;i++){
sendtext(K1[i]);
}//消息
}//for循环

这就是我如何让它在Visual Studio 2019上工作的。据我所知,您正在询问如何制作宏来替换if语句

#define KEY1(A,B,C,D)   (A==0 && B==0 && C==1 && D==1) ? 1 : 0

int main(void)
{
    int a = 0, b = 0, c = 1, d = 1;

    if (KEY1(a, b, c, d))
        printf("Key1 pressed\n");

    printf("%d\n", KEY1(0, 0, 0, 0));
    printf("%d\n", KEY1(0, 0, 1, 1));

    return 0;
}

我假设您的
A
B
C
D
是键盘上的某种输入行,您需要检查按下了哪个键

如果是这种情况,它们只能取值
0
1
,我认为如果将这些位组合成一个值,然后用一个常量检查,会更清楚:

#define KEY_1 0b1100
#define KEY_2 0b1010
#define KEY_3 0b1001
//...

unsigned char key = (A << 3) | (B << 2) | (C << 1) | D; // or the other way around
//now you can even use a switch
switch (key)
{
    case KEY_1:
        send_text1(...);
        break;
    case KEY_2:
        send_text2(...);
        break;
    case KEY_3:
        send_text3(...);
        break;
    //...
}
#定义键1 0b1100
#定义键2 0b1010
#定义键3 0b1001
//...

无符号字符键=(A这是编译吗?在哪里声明了变量?请整理一下缩进。你能更具体地说明你的代码到底出了什么问题吗?它不是编译吗?它是在做一些意外的事情吗?等等…你好,很抱歉误导你,但上面不是代码。这就像我想尝试d的某种逻辑o、 但我不知道如何处理。发布的伪代码非常混乱,大部分都没有意义。你能清理一下吗?显示的
for
循环-
for(a=60;a=
。你好,罗德里戈,谢谢你的帮助。但是移位位意味着什么呢。(A@KelvinPoh:我猜像
A
这样的每个值要么是
1
要么是
0
,所以你将每个值移动不同的位数,
A
移动3位,
B
移动2位,依此类推。因此,
A
变成
0bA000
B
变成
0b00
等等。然后在t中键常量每个值都映射到一个值组合
0bABCD