1、#:字符串 “#”的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量,通过替换后在其左右各加上一个双引号。比如下面代码中的宏: #define WARN_IF(EXP) do { if (EXP) { fprintf(stderr, "Warning: " #EXP "/n"); } } while(0); 那么实际使用中会出现...
宏(macro)是基于#define所实现的另一种预处理功能。 与基本的#define定义的是常量相比,宏(macro)允许多个参数化替换,参数中可以是固定的字符串,也被一些变量所替代。这个替换的操作将在预编译的时候完成。 宏(macro)的作用是用比较简单的方式表示复杂的函数调用,以提高程序的可读性。
1 C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。带参宏定义的一般形式为: #define 宏名(形参表) 字符串在字符串中含有各个形参。带参宏调用的一般形式为: 宏名(实参表);例如:#defineM(y)y*y...
可变参数宏【C语言】 C99开始允许宏有可变参数,用省略号表达一个到多个参数,用__VA_ARGS__来传递参数。 如果要使用零个到多个参数,则应该用##__VA_ARGS__来传递参数。 #include <stdio.h> #include <stdlib.h> #define DEBUG(fmt, ...) fprintf (stderr, fmt, __VA_ARGS__) int process (int i...
带参数的宏 : 像函数的宏,一般的定义形式 :带参宏定义的一般形式为:「#define 宏名」(形参表)字符串,也是没有结尾的分号,可以带多个参数 ,#define NB(a,b)((a)>(b)?(b):(a)), 也可以组合(嵌套)使用其他宏,注意 带参数宏的原则 一切都要有括号,参数出现的每个地方都要有括号。带参数的宏在大型的...
带参数的宏 : 像函数的宏,一般的定义形式 :带参宏定义的一般形式为:「#define 宏名」(形参表)字符串,也是没有结尾的分号,可以带多个参数 ,#define NB(a,b)((a)>(b)?(b):(a)), 也可以组合(嵌套)使用其他宏,注意 带参数宏的原则 一切都要有括号,参数出现的每个地方都要有括号。带参数的宏在大型的...
1 宏的语法和形式 函数样式宏(Function-like macro)是一种类似于函数的宏定义,在使用时可以像函数一样进行调用。函数样式宏的语法和形式如下: #define宏名(参数列表) 替换列表 其中,宏名是宏的名称,参数列表是宏定义中的参数列表,用逗号分隔,替换列表是宏定义中的替换列表。使用函数样式宏时,需要提供参数列表中...
1、全部大写有多个单词中间使用下划线隔开(常用) 2、以k开头的驼峰标识(不常用) 带参数的宏定义:把出现宏名地方都会把宏名后面小括号中的参数代入到宏后面的表达式中,然后进行替换 格式:#define 宏名(参数列表) 表达式 注意点:1、参数列表中没有类型
可以使用下面两种方式定义带有参数的宏: #define 宏名称( [形参列表] ) 替换文本 #define 宏名称( [形参列表 ,] ... ) 替换文本 1. 2. “形参列表”是用逗号隔开的多个标识符,它们都作为宏的形参。当使用这类宏时,实参列表中的实参数量必须与宏定义中的形参数量一样多(然而,C99 允许使用“空实参”,下面...
类函数宏定义的圆括号可以有一个或多个参数。 #defineSQUARE(X) X*X #definePR(X) printf("The result is %d.\n", X) /宏可以表示任何字符串,甚至可以表示整个c表达式/ intx =5; SQUARE(x);//x*x=5*5=25 SQUARE(2);//2*2=4 SQUARE(x+2);//x+2*x+2=17 预期(x+2)(x+2)...