Вложены ли циклы с препроцессором C? - PullRequest
0 голосов
/ 12 марта 2020

Я бы разработал последовательность инструкций с индексами, вставленными в инструкции.

Например, я бы написал:

#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.

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Библиотека препроцессора Boost предоставляет BOOST_PP_REPEAT, что делает то, что вы хотите.

Хотя эта библиотека является частью Boost, она предназначена только для заголовков, поэтому не требует установки, кроме копирует заголовочные файлы и предназначен для работы как с C, так и с C ++.

0 голосов
/ 12 марта 2020

В препроцессоре 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...