Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何向concat预处理器宏添加空白?_C++_C Preprocessor - Fatal编程技术网

C++ 如何向concat预处理器宏添加空白?

C++ 如何向concat预处理器宏添加空白?,c++,c-preprocessor,C++,C Preprocessor,考虑到下面的情况,我如何才能得到能产生1 2 3?我似乎不知道应该在?中放入什么来产生预期的concat行为。你似乎不能定义一个空格 #include <iostream> #define STRINGIFY(x) #x #define STRINGIFYMACRO(y) STRINGIFY(y) #define CONCAT2(X,Y) X ## Y #define CONCAT(X,Y) CONCAT2(X,Y) #define CAT \ ONE \ TWO

考虑到下面的情况,我如何才能得到能产生
1 2 3
?我似乎不知道应该在
中放入什么来产生预期的concat行为。你似乎不能定义一个空格

#include <iostream>
#define STRINGIFY(x) #x
#define STRINGIFYMACRO(y) STRINGIFY(y)

#define CONCAT2(X,Y) X ##  Y
#define CONCAT(X,Y) CONCAT2(X,Y)

#define CAT \
ONE     \
TWO


#define DOG \
THREE

#define BAT CONCAT(CONCAT(CAT,?? ),DOG)

int main()
{
    std::cout << STRINGIFYMACRO(BAT) << std::endl;
    return 0;
}
#包括
#定义STRINGIFY(x)#x
#定义字符串化宏(y)字符串化(y)
#定义CONCAT2(X,Y)X##Y
#定义CONCAT(X,Y)CONCAT 2(X,Y)
#定义猫\
一个\
两个
#定义狗\
三
#定义蝙蝠猫(猫,狗)
int main()
{
std::cout运算符
##
用于组合两个连续的标记。它不能用于组合非标记的内容(如空格),如果结果不是有效的(预处理)标记,也不能使用它

换句话说,不要使用
##
组合字符串。这不是它的用途,也不起作用

<>请记住,在C++中,连续字符串将由编译器连接。因此,通常不需要串接字符串的内容。即使必须连接内容,也可以不用标记连接来完成,因为字符串的内容不是令牌。(仅当您试图从多个组件创建计算的
#include
文件名时,才需要此选项。)

要知道的另一件有用的事情是,宏替换中的空格(不是两端)被缩减为单个空格字符,由stringify操作符保留

因此,如果您同意使用单个空格字符,您可以执行以下操作:

#include <iostream.h>
#define STRINGIFY(x) #x
#define STRINGIFY_EXPANDED(x) STRINGIFY(x)

#define CAT ONE TWO
#define DOG THREE
#define BAT CAT DOG

int main() {
  std::cout << STRINGIFY_EXPANDED(BAT) << '\n';
  return 0;
}

首先字符串化,然后串接字符串。反之亦然。您不能有带空格的标记,但可以有一个字符串。
\ifdef\uuucplusplus
/
\error-error-error编译器
/
\endif
提示:
char*str=“一”“二”“三”
char*str=“一”“二”“三”相同
#定义蝙蝠猫狗
#define DOG STRINGIFY(ONE) "   " STRINGIFY(TWO)
#define CAT STRINGIFY(THREE)
#define BAT DOG "\t" CAT