奇怪的要求千千万,回答问题长见识
问题连接:c/c++宏定义的问题
问题遇到的现象和发生背景
C/C++ 如何在预处理过程中宏定义N个0,;
问题相关代码,请勿粘贴截图
例如 #define LOOP_COUNTS(10) 0,0,0,0,0,0,0,0,0,0 这这样替换生成10个0,
运行结果及报错内容
例如我LOOP_COUNTS(5) 得到 0,0,0,0,0
我想要达到的结果
LOOP_COUNTS(N) ; 实现LOOP_COUNTS(N)替换N个0,...0;
一般来讲,宏定义都是有关加载头文件,定义函数,定义常量值,而定义多个 0 ,还是第一次听说。
其实第一个想法,是想问这东西到底用在哪里,实参,初始化表?
那传递一个 int 数组或 vector<int> 不就完了么,还要用宏,没有任何好处啊。其实第一步,可能是要改改程序的设计了。
但不是说这东西一定没用,毕竟有需求,那么给个简单的实现:只要你想,要多少 0 ,给多少 0
test 是验证,下面的循环是产生上述宏代码,只要硬盘有地儿,随意弄,一万个零,小意思。至于编译速度,就不是我要考虑的事情了。
#define Loop(X) Loop_##X
#define Loop_1 0
#define Loop_2 0, 0
#define Loop_3 0, 0, 0
#define Loop_4 0, 0, 0, 0
#define Loop_5 0, 0, 0, 0, 0
#define Loop_6 0, 0, 0, 0, 0, 0
#define Loop_7 0, 0, 0, 0, 0, 0, 0
#define Loop_8 0, 0, 0, 0, 0, 0, 0, 0
#define Loop_9 0, 0, 0, 0, 0, 0, 0, 0, 0
#define Loop_10 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
#include <iostream>
#include <vector>
auto main(int /*unused*/, char *argv[]) -> int
{
std::vector<int> test{Loop(8)};
for (int i = 1; i != 11; ++i)
{
std::cout << "#define Loop_" << i << " ";
for (int j = 0; j != i - 1; ++j)
{
std::cout << "0, ";
}
std::cout << "0\n";
}
return 0;
}