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

#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");
return flags;
}

int main(int argc, char *argv[])
{
foo(FLAG3|FLAG5|FLAG8);
system("PAUSE");
return 0;
}
在读源代码时常常看到用 |或操作很多常量。所以我想了想,举了个例子。想问问大侠,一般是这样用吗?还有没有更简单的用法。比哪if用case代替等等。如果有的话。给举个小例子吧。谢谢!

标志位的用法很广,在嵌入式开发和应用交互上广为使用。
设计思想就是多线程(任务)之间进行交互,切换。用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();//执行
}

}
累死我了……
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-02
一般应该用switch case来匹配
第2个回答  2008-06-03
这样做是可以的,正确的。

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

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