C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实际参数”,这点和函数有些类似。对带参数的宏,在展开过程中不仅要进行字符串替换,还要用实参去替换形参。带参宏定义的一般形式为:#define 宏名(形参列表) 字符串 在字符串中可以含有各个形参。带参宏调用的一般形式为:宏名...
在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实际参数”,这点和函数有些类似。 对带参数的宏,在展开过程中不仅要进行字符串替换,还要用实参去替换形参。(个人:也就是要进行两个替换,一个是用实参去替换形参,另一个进行宏展开) 带参宏定义的一般形式为: 1 #define 宏名(形参列表) 字符串 在...
1)宏定义时参数要加括号,如不加括号,有时结果是正确的,有时结果却是错误的。 #define MIX(a,b) (a*b + b) 1. 例如,上面的例子中,当参数x = 10, y = 9时,在参数不加括号的情况下调用MIX(x,y),可以正确地输出结果,但是 当参数x = 10, y = 6 + 3时,在参数不加括号的情况下调用MIX(x,y...
l 宏定义可以嵌套使用,例如:#define R 3.0#define PI 3.14159#define L 2*PI*R 3.知识点:带参数的宏定义l 一般形式:#define 宏名(参数表) 字符串l 带参数的宏不占运行时间,只占编译时间;只是简单、机械字符替换;宏名无类型。l 要注意有括号和没括号的区别 不带参数的宏定义比较简单,我们今天讲的是带参...
这就定义了一个程序块,功能是交换两个数据的值,是带多个参数、多行、多条语句,三多的完美体现。 六、使用注意事项: 1、宏定义一般都大写,以示区别,这不是绝对的,是约定俗成的,大家都这么来。 2、带参数的宏定义,其参数在后面引用的时候加上小括号“()”更保险,防止传参的时候使用表达式,由于运算符的优先...
宏定义: 即:用标识符表示字符串 例子: 宏定义的形式: 例子: 别忘了小括号也是一部分!! 注意事项: 带参宏定义 形参:宏定义中的参数,此处是:a和b 实参:宏调用中的参数x,此处是:和y 注意事项和细节: 因此需要修改形参后面的字符串为: 这样即可解决边界效应 ...
宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时代入指定的字符串即可。宏定义时,字符串可以是任意类型的数据。 因此,只有A选项表述正确,本题选A。 带参数的宏定义不是简单的字符串替换,还要进行参数替换。一般格式如下: #define 宏名(参数表)字符串 宏定义的使用,无论是否带有参数,其...
下面定义两个带参数宏,MUL_TWO是将两个数进行相乘,MUL_THREE是将三个数进行相乘。 #define MUL_TWO(val1, val2) (val1 * val2) #define MUL_THREE(x, y, z) (MUL_TWO(x, y) * z) 比如我这里计算2 * 3 * 4的运算结果,那么只需调用宏MUL_THREE(2, 3, 4)就可得到计算结果为:24,计算结果...
宏定义尤其是带参数的宏定义,特别容易出现一些隐藏问题,因为宏定义在预处理阶段是按照定义原封不动的进行展开,此时如果展开之后涉及到运算符优先级的问题,那么隐藏bug就此出现。 这里我先列举一个简单的例子,然后归纳下带参数宏定义对于括号使用的一些说明。
1、简单宏定义: #define 宏名 字符串 #define π 3.1415926 2、带参宏定义:#define 宏名(参数表) 宏体 #define area(x) x*x #define A(x) x//若遇Max(a,b),则替换a>b?a:b 用来将一个标识符定义为字符串。若一个标识符被宏定义后即为宏名,程序中只出现宏名,先将宏名用被定义的字符串替代(...