c - 使用宏连接嵌套字符串
问题描述
做这样的事情有问题吗
#define A "world"
#define B "hello "A // or adding a whitespace --> #define B "hello " A
然后使用B
in 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;
}
解决方案
我尝试在 Eclipse 上运行您的代码(header.h
和),它成功输出。
我的执行环境如下。c.c
hello world!
- 操作系统:macOS 10.13.5
- IDE:面向 C/C++ 开发人员的 Eclipse IDE,Oxygen.1a 版本 (4.7.1a),内部版本号 20171005-1200
- 编译器(工具链):Linux GCC
您的代码可能是正确的。
如果您使用默认设置运行 Eclipse,那么正如您所说,eclipse 似乎存在问题。
推荐阅读
- css - CSS:文本在水平和垂直居中时不换行
- java - 如何在pdf而不是整个pdf中打开特定范围的页面
- node.js - EJS 错误 无法查找视图(ejs 没有获取路径?)
- flutter - 已指定命名参数“child”的参数。我已经尝试过很多次使用列,但它没有解决我的问题
- python - Python初学者问题:谁能帮我理解为什么输出是[1,1,1,1,2,3]?
- openstack - openstack 供应商网络和 vxlan
- java - 如何使用 java 和 mockito 模拟数据库表?(弹簧靴,模仿)
- c# - MudTreeView - 如何更改复选框的大小和颜色?
- jaxb - 使用 WebServiceMessageExtractor 的 GetHeader 响应
- php - 从特定类别获取 WooCommerce 产品