Директива препроцессора для повторяющихся блоков кода (с условием)
Есть ли способ в C++ для реализации концепции, как следующий псевдокод?
#pragma REPEAT
for (;;)
{
// code block #1
#pragma REPEAT_CONDITION(a==1)
// code
#end_pragma
// code block #2
}
#end_pragma
Который будет скомпилирован как-то так:
if (a == 1)
{
for (;;)
{
// code block #1
// code
// code block #2
}
}
else
{
for (;;)
{
// code block #1
// code block #2
}
}
Целью здесь является создание легко читаемого фрагмента кода производительности путем абстрагирования условия от внутреннего цикла. Таким образом, не нужно вручную поддерживать дублированные блоки кода.
1 ответ
Честно говоря, препроцессор должен использоваться для условной компиляции и очень мало в наше время. Благодаря встроенным (-suggesting) функциям, безумно оптимизирующим компиляторам и перечислениям, их наиболее распространенные варианты использования постепенно исчезли.
Здесь я предполагаю, что вы не хотите проверять условие каждый раз в цикле, даже если это значительно очищает ваш код:
for (;;) {
// code block #1
if (a == 1) {
// code
}
// code block #2
}
Единственная причина, по которой я мог думать о том, что вы делаете это, заключается в дополнительной скорости, когда вы не выполняете проверку несколько раз, но вы, возможно, захотите на самом деле проверить влияние, которое она оказывает. Если не // code
Это очень просто, это, скорее всего, затмит эффект одного условного утверждения.
Если вам по каким-либо причинам нужны отдельные циклы, возможно, лучше поместить эти общие блоки кода в функции и просто вызывать их с помощью одной строки:
if (a == 1) {
for (;;) {
callCodeBlock1();
// code
callCodeBlock2();
} else {
for (;;) {
callCodeBlock1();
callCodeBlock2();
}
}