部分 C 字符串初始化

partial C String initialisation

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

它链接多个字符串初始化,如“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;
}

所以这里有一些问题:

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

1 The precedence among the syntax rules of translation is specified by the following phases.

  1. Adjacent string literal tokens are concatenated

例如这部分程序

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

宏替换后看起来像

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

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

char hw_str[] =
  "Hello World!";