c语言宏交换
简单来说:宏定义也叫宏替代和宏替代,简称“宏”。宏替换是C/C预处理的一部分,C标准中有四条规则定义替换。
规则1:参数替换。
该规则描述了带参数的宏的替换过程。
对于宏定义中的形参,如果在替换列表中不作为#或# #操作数使用,则对应的实参将是完整的。
展开(相当于对参数求值),然后替换替换列表中的形参。如果是#或# #的操作数,
则不进行替换。
规则二:多次扫描。
在所有的形参都被实参替换后,结果再扫描一遍,如果有可替换的宏,就替换掉。
否则,中止。
规则3:递归替代抑制。
如果在替换列表中找到了当前正在展开的宏的名称,那么它将不会在这里被替换。此外,它是嵌套的。
如果在替换过程中找到已被替换的宏的名称,它将不会被替换。
规则4:递归预处理抑制。
如果替换的结果形成预处理指令,则不执行该预处理指令。
看一些C标准中的例子:
#定义x 3
#定义f(a) f(x * (a))
#undef x
#定义x 2
#定义g f
# Define ZZZC语言使用宏来定义数组值交换。 #包含stdio.h
#定义互换(a,b) (a^=b,b^=a,a^=b)
int main()
{
int a[10],b[10],I;
Printf("请输入一个数组a:\ n ");
for(I = 0;i 10我)
scanf("%d ",a[I]);
Printf("请输入一个数组b:\ n ");
for(I = 0;i 10我)
scanf("%d ",b[I]);
Printf("数组A是:\ n ");
for(I = 0;i 10我)
printf("%d ",a[I]);
printf(" \ n ");
Printf("数组b是:\ n ");
for(I = 0;i 10我)
printf("%d ",b[I]);
printf(" \ n ");
for(I = 0;i 10我)
swap(a[i],b[I]);
Printf("现在数组A是:\ n ");
for(I = 0;i 10我)
printf("%d ",a[I]);
printf(" \ n ");
Printf("现在数组B是:\ n ");
for(I = 0;i 10我)
printf("%d ",b[I]);
printf(" \ n ");
返回0;
}
c语言:定义宏swap(x,y)来交换两个参数x和y的值,写一个程序测试。 想法:只有三种方法可以交换A和B:
引入变量t:t = a;a = b;b = t;
# includestdio.h
#define swap(a,b){ int t;t = a;a = b;b = t;}
int main()
{
int a,b;
scanf("%d%d ",a,b);
互换(a,b);
printf("%d %d\n ",a,b);
返回0;
}
/*
输出:
1 2
2 1
*/
加减法:a = a b;b = a-b;a = a-b;
# includestdio.h
#定义swap(a,b){ a = a b;b = a-b;a = a-b;}
int main()
{
int a,b;
scanf("%d%d ",a,b);
互换(a,b);
printf("%d %d\n ",a,b);
返回0;
}
/*
输出:
1 2
2 1
*/
位操作:a = a b;b=a^b;a=a^b;
# includestdio.h
#定义互换(a,b){a=a^b;b=a^b;a=a^b;}
int main()
{
int a,b;
scanf("%d%d ",a,b);
互换(a,b);
printf("%d %d\n ",a,b);
返回0;
}
/*
输出:
1 2
2 1
*/
C语言中如何用宏交换两个数 第一种方法,采用位运算。
#定义互换(a,b){a^=b;b^=a;a^=b;}
第二种方法是加减法。
#定义swap(a,b){ a = b;b = a-b;a = a-b;}
最后更新于 2023-10-12 14:47:27 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章