【问题标题】:partial C String initialisation [duplicate]部分C字符串初始化[重复]
【发布时间】:2021-07-14 19:54:34
【问题描述】:

在我今天阅读的一些代码中,存在一种 C-String 初始化类型,这对我来说是新的。

它链接多个字符串初始化,如“A”“B”“C”...

它还允许将字符串初始化拆分为多行

我设置了一个小的 Hello World 演示,所以你可以看到我在说什么:

#include <stdio.h>

#define SPACE " "
#define EXCLAMATION_MARK "!"
#define HW "Hello"SPACE"World"EXCLAMATION_MARK

int main()
{
  char hw_str[] =
  "Hello"
  SPACE
  "World"
  "!";

  printf("%s\n",hw_str);
  printf("%s\n",HW);
  return 0;
}

所以这里有一些问题:

  • 这符合标准吗?
  • 为什么会这样? "abc" 就像一个数组 {'a','b','c'} 对吗?那么为什么数组初始化连接在多对 "" 工作?
  • 此功能有官方名称吗?比如当您在 google 中输入它时,您会找到一些描述它的文档?
  • 这是便携式的吗?

【问题讨论】:

    标签: c c-preprocessor c-strings string-concatenation string-literals


    【解决方案1】:

    来自 C 标准(5.1.1.2 翻译阶段)

    1 翻译的语法规则之间的优先级由 以下阶段。

    1. 连接相邻的字符串文字标记

    例如这部分程序

    char hw_str[] =
      "Hello"
      SPACE
      "World"
      "!";
    

    宏替换后的样子

    char hw_str[] =
      "Hello"
      " "
      "World"
      "!";
    

    在第六阶段由预处理器通过连接相邻的字符串文字进行处理,你有

    char hw_str[] =
      "Hello World!";
    

    【讨论】:

    猜你喜欢
    • 2012-09-27
    • 2015-07-25
    • 2011-03-20
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多