预处理器双哈希(##)运算符,如何连接变量值
Preprocessor double hash (##) operator, how to concatenate variable value
这是我写的一个简短程序
#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
将没有值。
请记住,预处理器仅仅是程序源代码的文本替代工具。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- 如何应用 libcurl 的持久连接选项
- 提升 ASIO - io_service 不要等待连接到线程
- 使用 c++ 为大至 1000 x 1000 的矩阵实现 8 连接连接的组件标记
- 头可连接连接是否可以具有争用条件?你如何绕过它