是否嵌套了C预处理程序?

问题描述 投票:0回答:2

我将设计一个指令序列,并在指令内部插入索引。

例如,我会写:

#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 preprocessor
2个回答
0
投票

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;

0
投票

Boost Preprocessor Library提供BOOST_PP_REPEAT,它可以执行您想要的操作。

虽然是Boost的一部分,但该库仅是标头,因此除了复制标头文件外,它不需要安装,并且已指定可与C和C ++一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.