在C语言中,可以使用宏定义来定义字符串常量。宏定义字符串的基本语法如下: c #define STRING_MACRO "This is a string macro" 在这个例子中,STRING_MACRO是一个宏标识符,它会被替换为文本"This is a string macro"。 3. 示例代码 以下是一个简单的示例代码,演示了宏定义字符串的用法: c #include <...
#define CONTAINER_OF(ptr, type, member) \ ((type *)((char *)(ptr) - (char *) &((type *)0)->member)) 1. 2. 宏定义进行位操作 #define SET_BIT(x, bit) ((x) |= (1 << (bit))) #define CLEAR_BIT(x, bit) ((x) &= ~(1 << (bit))) #define FLIP_BIT(x, bit) ((...
C语言宏(macro)小技巧 目录 字符串化运算符(stringizing operator) 记号粘贴运算符(token-pasting operator) 二选一选择器宏(mux) 字符串化运算符(stringizing operator)# 运算符 # 在宏中会将实参直接转化为字符串literal,也就是字符串常量,举个简单的例子: #define arg2str(p) #p puts(arg2str(666));...
每个#define行(即逻辑行)由三部分组成:第一部分是指令 #define 自身,“#”表示这是一条预处理命令,“define”为宏命令。第二部分为宏(macro),一般为缩略语,其名称(宏名)一般大写,而且不能有空格,遵循C变量命令规则。第三部分“替换文本”可以是任意常数、表达式、字符串等。在预处理工作过程中,代码中所有出现...
$ gcc -E macro.c 宏的定义 通过#define指令定义一个宏。 #defineNAME_OF_MACRO value 比如,以下代码定义了一个名为BUFFER_SIZE的宏,指代1024这个数字。 #defineBUFFER_SIZE1024 使用时, foo = (char *) malloc (BUFFER_SIZE); 使用预处理器编译: ...
你可以定义具有形式参数(简称“形参”)的宏。当预处理器展开这类宏时,它先使用调用宏时指定的实际参数(简称“实参”)取代替换文本中对应的形参。带有形参的宏通常也称为类函数宏(function-like macro)。 可以使用下面两种方式定义带有参数的宏: #define 宏名称( [形参列表] ) 替换文本 ...
我稍微讲解下宏的一些语法问题(说语法问题似乎不妥,macro只与preprocessor有关,跟语义分析又无关): 1. 宏可以像函数一样被定义,例如: #define min(x,y) (x 但是在实际使用时,只有当写上min(),必须加括号,min才会被作为宏展开,否则不做任何处理。
#define MACRO_NAME value 宏定义后,预处理器会在编译之前将所有MACRO_NAME替换为相应的value。 条件编译 #ifdef MACRO_NAME // 代码块1 #else // 代码块2 #endif 根据MACRO_NAME是否被定义,选择不同的代码块进行编译。 二、利用__FILE__宏和字符串化操作 ...
#define MACRO(arg1, arg2) do { \ \ stmt1; \ stmt2; \ \ } while(0) 关键是要在每一个换行的时候加上一个 "\ " 凡是以#开头的均为预处理指令,预处理又叫预编译。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。