C语言中不可理解的函数式宏

Bon*_*ian 1 c macros function

我有这个c宏代码:

#define d(x, y, z) (    \
      x += z,               \
      y += x,               \
      x += y                \

)
Run Code Online (Sandbox Code Playgroud)

我有几个问题:

  1. 这个宏函数会返回一些东西吗?(例如,返回x,y或z)或者只是自己添加参数变量?(我认为这是无用的).
  2. \意味着什么?
  3. 为什么原始编码器comma-operator在每次操作后都会使用?为什么不用;而不是,

任何帮助,将不胜感激

Kla*_*äck 5

这个宏函数会返回一些东西吗?(例如,返回x,y或z)或者只是自己添加参数变量?(我认为这是无用的).

它修改了变量的值."返回"值是最终值x.

\是什么意思?

当最后放在一行上时,它会否定换行符,以便宏定义可以跨越多行.

为什么原始编码器在每次操作后都使用逗号运算符?为什么不用;而不是`,?

宏替换文本.请考虑以下代码:

int x=1, y=2, z=3, f;
f = 3 * (d(x,y,z));
Run Code Online (Sandbox Code Playgroud)

如果宏使用逗号,则代码变为:

int x=1, y=2, z=3, f;
f = 3 * (x+=z, y+=x, x+=y);  // Evaluates to 3 * (the final value of x)
Run Code Online (Sandbox Code Playgroud)

如果宏使用分号,则代码变为:

int x=1, y=2, z=3, f;
f = 3 * (x+=z; y+=x; x+=y);  // Syntax error!!!
Run Code Online (Sandbox Code Playgroud)

  • 通过在宏内添加`{}`可以避免语法错误.所以它变得像`({x + = z; y + = x; x + = y})` (2认同)