使用宏串联嵌套字符串

时间:2018-06-20 11:42:34

标签: c string concatenation

做这样的事情是否有问题

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

然后使用B中的printf(B"!");(添加了另一个串联...)?

BTW ,在C中使用#define B "hello "A而不使用空格是可以的,但在C ++ 11中则不能这样做-“后缀无效文字; C ++ 11在文字和标识符[-Wliteral-suffix]“

之间需要一个空格

据我所知,这应该没问题,因为编译器将字符串连接起来(如here所述),但是当在eclipse上编写时,#define位于一个头文件中,而printf却没有错误,但是月食似乎无法识别define

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


header.h

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

抄送

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

1 个答案:

答案 0 :(得分:1)

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

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

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