在C语言中,枚举类型是被当做int或者unsigned int类型来处理的,所以按照C语言规范是没有办法遍历枚举类型的。
不过在一些特殊的情况下,可以实现有条件的遍历。
1 枚举类型必须连续。
由于枚举类型支持如下方式定义:
enum
{
ENUM_0,
ENUM_10 = 10,
ENUM_11
};
这样就会导致枚举类型不连续,这种枚举无法遍历。
2 枚举类型中人为加入起始及结束标记。
enum
{
ENUM_START,
ENUM_0,
ENUM_1,
ENUM_2,
ENUM_END
};
可以看到,在这个枚举类型中,人为加入可ENUM_START, 和ENUM_END。中间的ENUM_0,ENUM_1,ENUM_2才是实际的有效数据。当后续需要增删枚举元素时,也要保证ENUM_START, 和ENUM_END分别为最小和最大值。
满足以上两种条件下,就可以做枚举的遍历了,参考代码如下:
int i;
for(i = ENUM_START+1; i<ENUM_END; i ++)
{
//使用枚举元素。
}
这个循环中,i的值就是所有有效的枚举元素值。
#include <windowsh>
#include <stdioh>
#include <tlhelp32h>
void main()
{
PROCESSENTRY32 ProcessEntry = { 0 };
MODULEENTRY32 ModuleEntry = { 0 };
HANDLE hProcessSnap;
HANDLE hModuleSnap;
ProcessEntrydwSize = sizeof(PROCESSENTRY32);
ModuleEntrydwSize = sizeof(MODULEENTRY32);
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照
BOOL bRet = Process32First(hProcessSnap,&ProcessEntry);// 遍历进程快照,轮流显示每个进程的信息,先获得第一个
while(bRet)
{
printf("\n%s\n",ProcessEntryszExeFile);//输出该进程可执行文件名(包括路径)
Sleep(200);
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,ProcessEntryth32ProcessID);//循环给每个进程的所有模块拍一个快照
bRet = Module32First(hModuleSnap,&ModuleEntry);// 遍历模块快照,轮流显示每个模块的信息,先获得第一个
while(bRet)
{
printf("\t%s\n",ModuleEntryszExePath);
Sleep(200);
bRet = Module32Next(hModuleSnap,&ModuleEntry);//下一个模块
}
bRet = Process32Next(hProcessSnap,&ProcessEntry);//下一个进程
}
}
如何获取mysql中枚举类型的值
mysql_query("SET NAMES 'utf-8'");
修改成
mysql_query("SET NAMES 'UTF8'");
定义了颜色,当读取字符串时,想获得与之对应的枚举类型的值,可以用下面的代码实行public enum Color{RED = 1,GREEN = 2,BLUE = 3}static void Main(string[] args){string col = "BLUE";Color getType = (Color)EnumParse(typeof(Color),col)
以上就是关于C语言怎样取得枚举型的名字 而不是值全部的内容,包括:C语言怎样取得枚举型的名字 而不是值、C++ 枚举进程句柄,获取句柄名。有例子吗。、如何获取mysql中枚举类型的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)