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;}

相关文章

发表新评论