You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何标记粘贴运算符(##)无法用于拼接两个字符串?

为什么标记粘贴运算符(##)无法拼接两个字符串?

C语言里的标记粘贴运算符(##),设计目的是合并两个预处理标记(比如标识符、数字、关键字这类独立的语法单元),生成一个新的合法预处理标记。但字符串字面量本身已经是一个完整的预处理标记,用##去拼接两个字符串标记时,会试图把"hello"和"world"强行合并成一个新标记,但合并后的结果"hello""world"并不是合法的预处理标记——合法的字符串标记要求内容被一对双引号包裹,而不是两对。

你给出的错误示例代码:

#include <stdio.h>
#define  MESSAGE "hello"##"world" 

int main() {
printf(MESSAGE);
}

对应的错误提示:

错误:粘贴""hello""和""world""无法生成有效的预处理标记

其实C语言本身支持字符串字面量的自动拼接,根本不需要用##。正确的写法直接去掉##即可:

#include <stdio.h>
#define  MESSAGE "hello""world" 

int main() {
printf(MESSAGE);
}

这段代码会正常编译并输出helloworld,因为编译器会自动把相邻的字符串字面量合并成一个。当然你也可以直接写成#define MESSAGE "helloworld",效果完全一样。

内容的提问来源于stack exchange,提问作者İlker Deveci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 00:24:52