这样做有问题吗
#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.h
和 c.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/