首页 > 解决方案 > 使用宏连接嵌套字符串

问题描述

做这样的事情有问题吗

#define A "world"
#define B "hello "A  // or adding a whitespace --> #define B "hello " A

然后使用Bin printf(B"!");(添加了另一个连接......)?

顺便说一句,在 C中使用 #define B "hello "A不带空格是可以的,但在 C++11 中则更少 - “文字上的后缀无效;C++11 需要文字和标识符 [-Wliteral-suffix] 之间的空格”

据我所知,这应该没问题,因为编译器会连接字符串(如此所述),但是在 Eclipse 上编写时,在一个头文件中使用#define's 在另一个头文件printf中,我没有收到任何错误,但是日食似乎无法define识别

我知道 eclipse 是邪恶的,但这是否存在 C 问题(包括滥用语言功能,如果这是一个问题)?


头文件.h

#define A "world"
#define B "hello "A 

抄送

#include "header.h"
#include <stdio.h>
int main(){
   printf("%s", B"!");
   return 0;
}

标签: cstringconcatenation

解决方案


我尝试在 Eclipse 上运行您的代码(header.h和),它成功输出。 我的执行环境如下。c.chello world!

  • 操作系统:macOS 10.13.5
  • IDE:面向 C/C++ 开发人员的 Eclipse IDE,Oxygen.1a 版本 (4.7.1a),内部版本号 20171005-1200
  • 编译器(工具链):Linux GCC

您的代码可能是正确的。
如果您使用默认设置运行 Eclipse,那么正如您所说,eclipse 似乎存在问题。



推荐阅读