将字符串文字与字 rune 字连接起来

标签 c string macros char concatenation

我想连接一个字符串文字和一个字 rune 字。由于语法不正确,"abc"'d' "efg" 会导致编译器错误:

x.c:4:24: error: expected ',' or ';' before 'd'

现在我不得不使用 snprift(不必要的),尽管在编译时知道字符串文字和字 rune 字的值。

我试过了

#define CONCAT(S,C) ({ \
    static const char *_r = { (S), (C) }; \
    _r; \
})

但它不起作用,因为 S 的空终止符没有被剥离。 (除了给出编译器警告。)

有没有办法写一个宏来使用

  • "abc"MACRO('d') "efg"
  • MACRO1(MACRO2("abc", 'd'), "efg")
  • MACRO("abc", 'd', "efg") ?

如果有人问我为什么要这样:字 rune 字来自库,我需要将字符串作为状态消息打印出来。

最佳答案

如果您可以接受其中包含的单引号,则可以使用字符串化:

#define SOME_DEF 'x'

#define STR1(z) #z
#define STR(z) STR1(z)
#define JOIN(a,b,c) a STR(b) c

int main(void)
{
  const char *msg = JOIN("Something to do with ", SOME_DEF, "...");

  puts(msg);

  return 0;
}

取决于可能合适也可能不合适的上下文,但就以这种方式说服它实际上是一个字符串文字而言,这是唯一没有在运行时格式化的方法。

关于将字符串文字与字 rune 字连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39169352/

相关文章:

c - 如何比较数字任务

algorithm - 对称双射字符串算法?

python - 是什么导致了此错误(ValueError : could not convert string to float: 'High' )?

c++ - 我怎样才能准确地看到 std::cin 输入缓冲区中的内容?

c++ - 无法找到 C++ 标准库头文件中未定义的宏

c - 在结构中初始化结构?

c - 尝试使用指针转置 C 中的矩阵

c - 检测预处理器宏中的空参数

macros - 强制 Clojure 宏中的参数获取命名空间捕获

c - 为什么我不能从数组中删除一个人?