## 对于 C(C++) 预处理器意味着什么?

发布于 2024-08-17 01:22:54 字数 310 浏览 4 评论 0原文

我下面有一个 C 程序:

#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}

当我只运行预处理器时,它会扩展它,

{
int var12=100;
printf("%d",var12);
}

这就是输出为 100 的原因。

任何人都可以告诉我预处理器如何/为什么扩展 var## 12 到 var12?

I have a C program below:

#define f(g,g2) g##g2
main()
{
int var12=100;
printf("%d",f(var,12));
}

when I run just the preprocessor it expands this as

{
int var12=100;
printf("%d",var12);
}

which is the reason why the output is 100.

Can anybody tell me how/why the preprocessor expands var##12 to var12?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

痴梦一场 2024-08-24 01:22:54

没什么太花哨的: ## 告诉预处理器连接左侧和右侧,

请参阅 http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation

nothing too fancy: ## tells the preprocessor to concatenate the left and right sides

see http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation

聊慰 2024-08-24 01:22:54

##令牌粘贴运算符< /a>

双数字符号或“标记粘贴”运算符 (##),有时称为“合并”运算符,在类对象宏和类函数宏中使用。它允许将单独的标记连接成单个标记,因此不能是宏定义中的第一个或最后一个标记。

如果宏定义中的形式参数前面或后面有标记粘贴运算符,则形式参数将立即替换为未展开的实际参数。替换之前不会对参数执行宏扩展。

## is Token Pasting Operator

The double-number-sign or "token-pasting" operator (##), which is sometimes called the "merging" operator, is used in both object-like and function-like macros. It permits separate tokens to be joined into a single token and therefore cannot be the first or last token in the macro definition.

If a formal parameter in a macro definition is preceded or followed by the token-pasting operator, the formal parameter is immediately replaced by the unexpanded actual argument. Macro expansion is not performed on the argument prior to replacement.

妞丶爷亲个 2024-08-24 01:22:54

因为 ## 是 c 预处理器的标记连接运算符。

或者也许我不明白这个问题。

because ## is a token concatenation operator for the c preprocessor.

Or maybe I don't understand the question.

海夕 2024-08-24 01:22:54

#define f(g,g2) g##g2

## 用于在 C 预处理器中连接两个宏。
因此,在编译 f(var,12) 之前,应将预处理器替换为 var12,从而获得输出。

#define f(g,g2) g##g2

## is usued to concatenate two macros in c-preprocessor.
So before compiling f(var,12) should replace by the preprocessor with var12 and hence you got the output.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文