请教C中的标志位的用法, 超简单别笑我

来源:百度知道 编辑:UC知道 时间:2024/06/23 18:14:17
#include <stdio.h>
#include <stdlib.h>
#define FLAG1 1
#define FLAG2 2
#define FLAG3 4
#define FLAG4 8
#define FLAG5 16
#define FLAG6 32
#define FLAG7 64
#define FLAG8 128

int foo(int flags)
{
if(flags&FLAG1)
printf("FLAG1\n");
if(flags&FLAG2)
printf("FLAG2\n");
if(flags&FLAG3)
printf("FLAG3\n");
if(flags&FLAG4)
printf("FLAG4\n");
if(flags&FLAG5)
printf("FLAG5\n");
if(flags&FLAG6)
printf("FLAG6\n");
if(flags&FLAG7)
printf("FLAG7\n");
if(flags&FLAG8)
printf("FLAG8\n");

标志位的用法很广,在嵌入式开发和应用交互上广为使用。
设计思想就是多线程(任务)之间进行交互,切换。用if的多点,主要因为简单,和不容易出现死锁!
eg:
aa.c源代码有如下内容:
#define BIT1 0x1
#define BIT2 0x2
unsigned char flag;
Thread1(void)
{
if(YouWantToGo) //判断条件
{
flag =flag|BIT1; //设定FLAG
}
if(HeWantToGo) //判断条件

{
flag =flag|BIT2; //设定FLAG
}
}

bb.c源代码有如下内容:
extern unsigned char flag;
Thread2(void)
{
if(flag&BIT1) //判断FLAG
{
YouShouldGo(); //执行
}

}

cc.c源代码有如下内容:
extern unsigned char flag;
Thread2(void)
{
if(flag&BIT2) //判断FLAG
{
HeShouldGo();//执行
}

}
累死我了……

一般应该用switch case来匹配

这样做是可以的,正确的。

用void foo(int flags) {},可以省掉return flags;

当然,用循环语句,右移,一位一位取出
打印时打 printf("FLAG%d\n",i); 也可以。不过,也不比你的方法优越。