使用宏连接嵌套字符串

标签 c string concatenation

这样做有问题吗

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

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

BTW,在 C 中使用 #define B "hello "A 没有空格是可以的,但在C++11 - “文字后缀无效;C++11 要求在文字和标识符 [-Wliteral-suffix] 之间有一个空格”

据我所知,这应该没问题,因为编译器连接了字符串(如 here 所述),但是在 eclipse 上写这个时,#define 在一个 header 中文件和另一个中的 printf,我没有收到任何错误,但 eclipse 似乎无法识别 define

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


header.h

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

抄送

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

最佳答案

我尝试在 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 似乎存在问题。


关于使用宏连接嵌套字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50947429/

相关文章:

C++:如何连接字符串文字之间的变量?

将 C 语言转换为 MIPS 汇编语言

c - 本身具有依赖性的静态库上的 AC_SEARCH_LIBS?

java - 如何分解字符串?

c++ - 在 C++ 中拆分字符串

mysql - 将上午/下午时间更改为 Unix MySQL 并将 3 列连接成 1 列

php - 为什么MySQL中的Inner Join会返回不相关的信息?

c - 使用字符串格式的公钥来加密 C 中的消息

C数组衰减消歧

sql-server - SQL Server 字符串的正则表达式替换为 unicode 前缀