我有这个c宏代码:
#define d(x, y, z) ( \
x += z, \
y += x, \
x += y \
)
我有几个问题:
\
的含义是什么?comma-operator
?为什么不使用;
代替,
?任何帮助将不胜感激
答案 0 :(得分:5)
这个宏函数是否返回了什么? (例如,返回x,y或z)或者只是自己添加参数变量? (我觉得这没用,)。
它修改变量的值。 “返回”值是x
的最终值。
\是什么意思?
当放在最后一行时,它会否定换行符,以便宏定义可以跨越多行。
为什么原始编码器在每次操作后都使用逗号运算符?为什么不使用
;
代替`,?
宏替换文字。请考虑以下代码:
int x=1, y=2, z=3, f;
f = 3 * (d(x,y,z));
如果宏使用逗号,则代码变为:
int x=1, y=2, z=3, f;
f = 3 * (x+=z, y+=x, x+=y); // Evaluates to 3 * (the final value of x)
如果宏使用分号,则代码变为:
int x=1, y=2, z=3, f;
f = 3 * (x+=z; y+=x; x+=y); // Syntax error!!!
答案 1 :(得分:2)
1)宏本身不返回任何内容。它只是一个愚蠢的代码,只要它遇到它就会被预处理器替代。它可以是任何类型的文本。
2)\用于让预处理器知道当前宏也会扩展到下一行。 (多行宏)
3)我无法对原始编码人员的意图做出任何假设。但是,通过在那里使用逗号运算符,整个宏成为C语言表达式。例如,运行这样的东西是有效的(如果分号在那里就不会有):
int a = 0;
int x = 1;
int y = 2;
int z = 3;
a = d(x, y, z);
printf("a = %d\n", a);
printf("x = %d\n", x);
printf("y = %d\n", y);
printf("z = %d\n", z);
并打印:
a = 10
x = 10
y = 6
z = 3
答案 2 :(得分:0)
首先#define是一个预处理器指令,这意味着当编译源代码/ c代码时,#define将LHS替换为RHS - 意味着无论使用何种d(x,y,z)都将替换为等式
例如下面的c代码将打印 - 修改a = 9,b = 8,c = 9
#define d(x,y,z) \
x+=1, \
y+=2, \
z+=3
#include <stdio.h>
int main()
{
unsigned int a,b,c;
a=5;
b=6;
c=7;
printf("modified a = %d, b=%d, c=%d \n",d(a,b,c));
}
基本上这里发生的是d(a,b,c) - 被替换为+ = 1,b + = 2,c + = 3
希望这能回答你的问题:)
此致 哈