使用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环路上手动卸载时。。。。。。。