预处理器双哈希(##)运算符,如何连接变量值

Preprocessor double hash (##) operator, how to concatenate variable value

本文关键字:何连接 连接 变量值 运算符 哈希 处理器 预处理      更新时间:2023-10-16

这是我写的一个简短程序

#include <iostream>
#define test0 "abc"
#define test1 "def"
#define concat(x,y) x##y
int main()
{
  for (int i = 0 ; i < 2 ; ++i)
      std::cout << concat(test,i) << std::endl;
  return 0;
}

但是由于某种原因,它没有编译(它加成i而不是i值),有没有办法连接i的值而不是i的名称?

test1.cpp:在函数'int main()'中:
test1.cpp:8:1:错误:在此范围中未声明" testi"

no。在编译之前扩展宏(因此 pre - 处理器),并且只能操纵出现在源代码中的令牌。在运行程序之前,该变量的值才知道。

no。

预处理器(处理#define#include的编译器的一部分)在任何其他编译器通行证之前都运行,并且在程序运行之前很久。在程序运行之前,变量i将没有值。

请记住,预处理器仅仅是程序源代码的文本替代工具。