C 奇怪的宏观结构

C 奇怪的宏观结构,c,macros,C,Macros,我在c源代码中找到了这个宏,我现在正在移植它: #define Round256(p0, p1) \ X##p0 += X##p1; 该代码中没有变量X。谁能告诉我符号#在此上下文中的作用吗?#以文本方式将两个字符串附加在一起 因此,在您的示例中,如果按如下方式调用: Round256(one, two) 将翻译为: Xone += Xtwo; ##以文本方式将两个字符串附加在一起 因此,在您的示例中,如果按如下方式调用: Round256(one, two) 将翻译为: Xone +=

我在c源代码中找到了这个宏,我现在正在移植它:

#define Round256(p0, p1) \
X##p0 += X##p1;
该代码中没有变量X。谁能告诉我符号#在此上下文中的作用吗?

#
以文本方式将两个字符串附加在一起

因此,在您的示例中,如果按如下方式调用:

Round256(one, two)
将翻译为:

Xone += Xtwo;
##
以文本方式将两个字符串附加在一起

因此,在您的示例中,如果按如下方式调用:

Round256(one, two)
将翻译为:

Xone += Xtwo;

##
是粘贴操作符。它包含X(字面意思)和每个值。因此,例如,
Round256(一,二)
将被转换为
Xone+=Xtwo
##
是粘贴操作符。它包含X(字面意思)和每个值。因此,例如,
Round256(一,二)
将转换为
Xone+=Xtwo

宏只是将值字符串化

假设它是这样叫的

Round256(1,2)
它将由预处理器扩展为

X1 += X2
这似乎类似于变量X1…n的某个地方

##
将字符串化的值连接在一起


我使用数值的原因是宏本身的名称。

宏只是将值字符串化

假设它是这样叫的

Round256(1,2)
它将由预处理器扩展为

X1 += X2
这似乎类似于变量X1…n的某个地方

##
将字符串化的值连接在一起


我使用数值的原因是宏本身的名称。

多么愚蠢的宏,它的名称多么愚蠢。请在移植的代码中去掉它,只需在代码中使用正确的
+=
语句即可。多么愚蠢的宏,多么愚蠢的名称。请在移植的代码中去掉它,只需在代码中使用正确的
+=
语句即可。