【发布时间】:2018-11-29 12:58:16
【问题描述】:
这样做有问题吗
#define A "world"
#define B "hello "A // or adding a whitespace --> #define B "hello " A
然后在printf(B"!"); 中使用B(添加了另一个串联...)?
顺便说一句,在 C 中使用不带空格的 #define B "hello "A 是可以的,但在 C++11 中则更少——“文字后缀无效;C++ 11 需要文字和标识符之间有空格 [-Wliteral-suffix]"
据我所知,这应该没问题,因为编译器会连接字符串(如 here 所说),但是在 eclipse 上编写时,#define 位于一个头文件中,@987654327 @在另一个,我没有错误,但eclipse似乎无法识别define的
我知道 eclipse 是邪恶的,但这是否存在 C 语言问题(包括滥用语言功能,如果有的话)?
header.h
#define A "world"
#define B "hello "A
c.c
#include "header.h"
#include <stdio.h>
int main(){
printf("%s", B"!");
return 0;
}
【问题讨论】:
-
所以它基本上是一个 Eclipse IDE 问题?大多数 IDE 在动态解析 C/C++ 代码时遇到了很大的麻烦,原因之一是宏
-
@Jean-FrançoisFabre 这不是 IDE 问题。这是一个 C 问题,是通过看到可能源于实际问题的 IDE 问题提出的
-
c文件中包含头文件了吗?
-
我相信这是一个 IDE 问题。这是完全有效的 C 代码。轶事,但我从来没有能够运行 Eclipse 的索引器到没有红色下划线的地步。
-
我推荐 GNAT Programming Studio,它有一个很好的 C 模式(基于 clang),它可以工作......它也使用项目并且没有工作区。 Eclipse 太烂了……Code::Blocks 也好不到哪里去。
标签: c string concatenation