我有这个c宏代码:
#define d(x, y, z) ( \
x += z, \
y += x, \
x += y \
)我有几个问题:
\是什么意思?comma-operator?为什么不直接使用;而不是,呢?如能提供任何帮助,将不胜感激。
发布于 2014-05-28 12:02:01
首先,#define是一个预处理指令,这意味着当源代码/c代码被执行时,#define将用RHS替换LHS --这意味着无论使用哪一个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) -被a+=1,b+=2,c+=3取代
希望这能回答你的问题:)
问候哈里
发布于 2014-05-28 11:41:14
这个宏函数会返回什么吗?(例如,返回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!!!发布于 2014-05-28 11:42:22
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 = 3https://stackoverflow.com/questions/23910280
复制相似问题