使用C预处理器嵌套for循环?

使用C预处理器嵌套for循环?,c,preprocessor,C,Preprocessor,我想设计一个指令序列,在指令中插入索引 例如,我会写: #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;
#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_PP_REPEAT,这是您想要的


虽然是Boost的一部分,但是这个库只是头文件,所以除了复制头文件之外不需要安装,并且它被指定为同时使用C和C++。

为什么要这样?教育目的。指令级并行性是特定的。我想展开C循环并使用超标量处理器,我建议手动卸载。预处理器不可读,调试起来很麻烦。记住:写一次,读多次。这只是一个很小的例子。。。当我必须在16x16环路上手动卸载时。。。。。。。