宏定义中,通过一个 # 就可以把 一串字符,转换为字符串,这里的一串字符,可以是一个数值,可以是一个函数指针(函数名) 如:#fn ,就把 fn 这个参数,转换为 C 语言中的字符串(常量)了 字符串化最经典的 转换宏: #define __stringify_1(x...) #x #define ...
这样就可以把字符串字面值里的所有内容都放到字符数组里(包括'\0'字符)printf("sizeof(str)是%d\n", sizeof(str));//%s占位符从一个地址开始向后显示多个连续//字符类型存储区的内容printf("%s\n", "xyz");printf("%s\n", str);return 0;}...
宏定义又称为宏替换、宏代换,简称“宏”,是C提供的三种预处理功能①的其中一种。其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率②。 1. #define命令 #define命令是C语言中的一个宏定义命令,它用来讲一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换...
避免递归定义:宏定义不能递归调用自身,否则会导致编译错误。 综上所述,字符串宏定义在C语言中是一种非常有用的特性,可以帮助程序员提高代码的可读性和可维护性。然而,在使用时也需要注意避免一些常见的陷阱和错误。
C/C++ 宏拼接和宏展开为字符串 前言 有一个需求是将一个宏和一个字符串拼接,然后在代码中拿到这个字符串,记录一下。 方案 首先,我们知道非常常见的一个宏的拼接和展示字符串的宏定义: #defineCONTACT(x,y) x##y//拼接#defineSTR(x) #x//转字符串...
1. 字符串化(Stringification) 在宏体中,如果宏参数前加个#,那么在宏体扩展的时候,宏参数会被扩展成字符串的形式。如: #define WARN_IF(EXP) \do { if (EXP) \fprintf (stderr, "Warning: " #EXP "\n"); } \while (0) WARN_IF (x == 0);会被扩展成: ...
比如让我们的标示符有意义,让我们的代码修改更方便,可以替代在代码中常用的字符串缩短代码等。其实在宏定义中,我们也可以像一个“函数”一样实现一个的功能,这种用法叫函数宏,函数宏在我们对宏定义的使用中更加的常江,下面我们从五个方面来了解下函数宏的使用。1.函数宏的书写#defineMAX(a,b)((a)(b)?(a)...
项目中有个头文件中定义了一个宏定义,比如是 #define CFG_LOGGER_NAME uart 然后,在某个C文件中需要讲这个3转换成对应的字符串类型,即为"uart";很明显,如果按以下的几种方式定义,肯定得不到期望的结果: 方式1: #define CFG_LOGGER_NAME_STR "CFG_LOGGER_NAME" ...
C语言宏是一种预处理指令,用于在程序编译之前进行文本替换。它可以把一个标识符替换为一个特定的字符串、表达式或代码块。使用宏可以减少代码的重复性、提高代码的可读性和可维护性,并且可以使代码更加灵活和可定制化。 1.2 — 宏定义和函数的比较 ...