【问题标题】:concatenating nested strings using macros使用宏连接嵌套字符串
【发布时间】: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


【解决方案1】:

我尝试在 Eclipse 上运行您的代码(header.hc.c),它成功输出了hello world!
我的执行环境如下。

  • 操作系统:macOS 10.13.5
  • IDE:面向 C/C++ 开发人员的 Eclipse IDE,Oxygen.1a 版本 (4.7.1a),内部版本号 20171005-1200
  • 编译器(工具链):Linux GCC

您的代码可能是正确的。
如果你是用默认设置运行Eclipse的话,好像你说的eclipse有问题。


【讨论】:

    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 2014-01-25
    • 2017-08-27
    • 2011-07-12
    相关资源
    最近更新 更多