做这样的事情是否有问题
#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;
}
答案 0 :(得分:1)
我尝试在Eclipse上运行您的代码(header.h
和c.c
),它成功输出了hello world!
。
我的执行环境如下。
您的代码可能是正确的。
如果您使用默认设置运行Eclipse,则您所说的eclipse似乎有问题。