我将设计一个指令序列,并在指令内部插入索引。
例如,我会写:
#define STUFF(I,J) i + j;
#FOR i = 0 to 4
#FOR j = 0 to 2
STUFF(i,j)
#ENDFOR
#ENDFOR
预处理器将输出此:
0 + 0;
0 + 1;
1 + 0;
1 + 1;
2 + 0;
2 + 1;
3 + 0;
3 + 1;
这是可能的行为吗?我可以停在深度为2的嵌套循环中。
C预处理器中没有#FOR
,但是您可以使用嵌套的宏使其更具容忍性:
#define STUFF(I,J) i + j;
#define STUFF_I(I) STUFF(0) STUFF(1)
#define STUFF_IJ STUFF_I(0) STUFF_I(1) STUFF_I(2) STUFF_I(3)
STUFF_IJ
扩展到:
0 + 0; 0 + 1; 1 + 0; 1 + 1; 2 + 0; 2 + 1; 3 + 0; 3 + 1;
Boost Preprocessor Library提供BOOST_PP_REPEAT
,它可以执行您想要的操作。
虽然是Boost的一部分,但该库仅是标头,因此除了复制标头文件外,它不需要安装,并且已指定可与C和C ++一起使用。