gpt4 book ai didi

c - 使用 `##` 运算符的串联问题

转载 作者:行者123 更新时间:2023-12-02 08:26:24 24 4
gpt4 key购买 nike

我正在使用 ## 运算符连接两个数字。该代码在我使用变量时出错,但在我直接输入时工作正常。

报错。

[Error] 'xy' undeclared (first use in this function)

#include<stdio.h>
#define join(a, b) a##b ;

int main()
{
int x = 10;
int y = 5;
int res ;
res = join(x, y);
printf("%d",res) ;
return 0 ;
}

工作正常:

#include<stdio.h>
#define join(a, b) a##b ;

int main()
{
int res ;
res = join(99, 10);
printf("%d",res) ;
return 0 ;
}

最佳答案

好吧,预处理器 MACROS 是文本替换,因此如果您使用变量,预处理后的代码看起来像

res = xy;

现在这个 xy 在您的代码中是一个未定义的标识符。

OTOH,当你传递整数常量时,你的代码看起来像

res = 9910;

这是完全有效的。

详细说明 ## 运算符的工作,引用 C11,第 6.10.3.3 章(强调我的)

in the replacement list of a function-like macro, a parameter is immediately preceded or followed by a ## preprocessing token, the parameter is replaced by the corresponding argument’s preprocessing token sequence; [...]

关于c - 使用 `##` 运算符的串联问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31851185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com