C语言中以字符串形式输出枚举变量

C语言中以字符串形式输出枚举变量

摘自:https://blog.csdn.net/haifeilang/article/details/41079255

2014年11月13日 15:17:20 haifeilang 阅读数:6295

每个枚举常量对应一个整形数字,很多时候可以像整形一样使用,这个大家都知道;但是如果要求打印枚举变量名的字符串,办法也有很多,查看网上方法几乎都需要转换,要么用数组,下面要说的是一种可以算是直接打印的新方法;

#会将后面的内容作为字符串返回

如果想让#后面的内容作为宏使用,需要使用两层宏展开,且使用宏使用的宏里面的每个字符见到的字符都会作为返回字符串的一部分。如

printf("10->%s\r\n", MY_DEFINE2(MY_STRING2));

即:

#define MY_DEFINE(R) #R
#define MY_DEFINE2(R) MY_DEFINE(R)
 1 #include <stdio.h>
 2
 3 #define MY_INT 7777
 4 #define MY_STRING "9999"
 5 #define MY_STRING2 "9999\"8OK"000(888)
 6 #define ENUM_CHIP_TYPE_CASE(x)   case x: return(#x);
 7 #define MY_DEFINE(R) #R
 8 #define MY_DEFINE2(R) MY_DEFINE(R)
 9
10 enum cvmx_chip_types_enum {
11     CVMX_CHIP_TYPE_NULL = 0,
12     CVMX_CHIP_TYPE_DEPRECATED = 1,
13     CVMX_CHIP_TYPE_OCTEON_SAMPLE = 2,
14     CVMX_CHIP_TYPE_MAX
15 };
16
17
18 static inline const char *cvmx_chip_type_to_string(enum cvmx_chip_types_enum type)
19 {
20     switch (type)
21     {
22         ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_NULL)
23             ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_DEPRECATED)
24             ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_OCTEON_SAMPLE)
25             ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_MAX)
26     }
27     return "Unsupported Chip";
28
29 }
30
31 int main()
32 {
33     enum cvmx_chip_types_enum a;
34     int my_int_test = 7;
35
36     printf("1->%s\r\n", MY_DEFINE(CVMX_CHIP_TYPE_DEPRECATED));
37     printf("2->%s\r\n", MY_DEFINE(my_int_test));
38     printf("3->%s\r\n", MY_DEFINE(8888));
39     printf("4->%s\r\n", MY_DEFINE(MY_INT));
40     printf("5->%s\r\n", MY_DEFINE2(MY_INT));
41     printf("6->%s\r\n", "MY_INT");
42     printf("7->%s\r\n", MY_DEFINE(MY_STRING));
43     printf("8->%s\r\n", MY_DEFINE2(MY_STRING));
44     printf("9->%s\r\n", MY_DEFINE(MY_STRING2));
45     printf("10->%s\r\n", MY_DEFINE2(MY_STRING2));
46
47     while(1)
48     {
49         printf("input(0~3):");
50         scanf("%d",&a);
51         if(a<CVMX_CHIP_TYPE_NULL||a>CVMX_CHIP_TYPE_MAX)
52         {
53             printf("error,you must input number between 0 and 3,please try again!\n\n");
54             continue;
55         }
56         printf("\n");
57
58         printf("the result:%s \n\n",cvmx_chip_type_to_string(a));
59     }
60
61     return 0;
62 }

结果测试:

如何不想全部打印出名字,只想打印出后面几个字符,例如“CVMX_CHIP_TYPE_DEPRECATED”,

我只想要打印后面“DEPRECATED”字符串,上面代码只需修改宏:

#define ENUM_CHIP_TYPE_CASE(x)   case x: return(#x); 改为下面所示

#define ENUM_CHIP_TYPE_CASE(x)   case x: return(#x+15);  //从第16个字符串开始打印,不要前面15个

结果如下:

挺实用的技巧吧!

原文地址:https://www.cnblogs.com/LiuYanYGZ/p/10659483.html

时间: 2024-10-24 09:21:30

C语言中以字符串形式输出枚举变量的相关文章

C语言中使用二进制形式输出

#include 〈stdio.h〉 int main(void) {     int userInt; //接收用户输入的无符号整型     printf("请输入您要转换的整数:");     scanf("%u", &userInt);     int binArr[33] = {0}; //一个int类型为4字节32位,符号占一位     int cElement = 0; //统计元素个数     while(1){         if(user

第30课 C语言中的字符串

1. 字符串的概念 (1)字符串是有序字符的集合 (2)字符串是程序中的基本元素之一 (3)C语言中没有字符串的概念,而是通过特殊的字符数组模拟字符串,是以'\0'结尾的字符数组. 2. 字符数组与字符串 (1)在C语言中,字双引号引用的单个或多个字符是一种特殊的字面量,被存储于程序的全局只读存储区,在本质上为字符数组,编译器自动在结尾加上'\0'字符. [实例分析]字符数组与字符串 #include <stdio.h> int main(){ char ca[] = {'H','e','l'

Java语言中的---字符串

day09 Java语言中的---字符串 一.字符串概述: 字符串在程序中是一个非常重要的知识点,在处理一系列程序的时候都会定义一些字符串来使用.下面我们就来看看如何定义和使用一个字符串. 二.字符串(String): 1.字符串的分类:字符串根据能否可以改变被分为常用的三种, (1)"String"类:这个类是Java本身自带的一个类,无需定义.可以直接使用,但是当你在操作这个类的时候你就可以直接创建实例.同时这也是一个不可变的类,也就是说你对某个字符串新增或者删除时,原来的这个字符

Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型,函数之内的 我们先来看一张传播久远的图片' 一.各种数据类型介绍 整型 整形包括短整型.整形和长整形. 短整形 short a=1; 整形 一般占4个字节(32位),最高位代表符号,0表示正数,1表示负数,取值范围是-2147483648~2147483647,在内存中的存储顺序是地位在前.高位在

C语言中的字符串

1.从概念上讲,C语言中没有字符串数据类型 2.在C语言中使用字符数组来模拟字符串 3.C语言中的字符串是以'\0'结束的字符数组 4.C语言中的字符串可以分配于栈空间,堆空间或者只读存储区 5.字符串的长度就是字符串所包含字符的个数 6.C语言中的字符串长度指的是第一个'\0'字符前出现的字符个数 7.C语言中通过'\0'结束符来确定字符串的长度 注意: strlen返回数为无符号数,两个无符号数相减依然为无符号数. 1.一般情况下,千万不要自行编写C标注库已经提供的函数 2.标准库有时会使用

C语言中求字符串的长度

在C语言中求字符串的长度,可以使用sizeof()函数和strlen()函数,后者需要引入string.h (#include <string.h>) 因为C语言字符串是以 \0 结尾表示结束的,如: char str1[] = {'h','e','l','l','o','\0'}; 使用sizeof(str1) 结果为:6,因为包括 \0; 使用strln(str1)结果为:5,不包括 \0, 所以只求字符串中内容的长度,就使用strlen()函数 另: sizeof()函数,既可以用来计算

整数/小数以字符串形式输出

1.问题描述 (1).现在从键盘输入一个整数(以%d格式符输入),要求以装换成字符串的形式输出: (2).现在从键盘输入一个小数和小数位数(%lf%d),要求以字符串的形式输出: 这2个问题本身并不难,但是考虑全面和从算法上的优化确实不容易的,需要仔细认真的考虑! 2.用C实现 在VC下面用的VC++6.0版本实现 #include<stdio.h> void printfInt(int data); void printfDouble(double data, int count); voi

python中执行字符串形式的语句和字符串形式的表达式方法(即exec和eval方法)

前阵子一直在思考一个问题,就是如何让用户在图形界面上输入的代码(输入的代码为字符串),成为代码的一部分而运行起来,恰逢看python爬虫的视频教程的时候,看到了使用eval函数,之后查找到了该文章,解决了我思考的问题. @文章来源:https://my.oschina.net/duhaizhang/blog/66048 Python有时需要动态的创造Python代码,然后将其作为语句执行  或  作为表达式计算. exec用于执行存储在字符串中的Python代码.   1. 语句与表达式的区别:

C语言中的字符串数组 指针

1.字符串 用“”引起来的内容,就是字符串. 在C语言中有没有专门的字符串的变量?  没有 所以我们使用字符数组来存储字符串.(把字符串的每一个字符存储到字符数组的每一个元素中,并且会多存放一个‘\0’) '\0' 字符串的结束标记,ascII码表中值是 0 对应的字符.NUT,NULL 2.字符数组 1)定义 char 数祖名[长度]; char str[200]; 表示定义一个长度为200的字符数组,如果用来存储字符串,则字符串的最大长度是199,留出一个给'\0' char str[3]=