#c #clang-format
Вопрос:
Я хочу, чтобы мой код был выровнен следующим образом
double flagx_ul = wx * 2 gt; wy *3 ? -wy * 3 / 2 / wx : -1.0; double flagy_ul = wx * 2 gt; wy *3 ? 1.0 : wx * 2 / 3 / wy; double flagx_lr = wx * 2 gt; wy *3 ? wy * 3 / 2 / wx : 1.0; double flagy_lr = wx * 2 gt; wy *3 ? -1.0 : -wx * 2 / 3 / wy;
все, что я нашел в документах clangformat, это
BreakBeforeTernaryOperators (Boolean) clang-format 3.7 If true, ternary operators will be placed after line breaks. true: veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ? firstValue : SecondValueVeryVeryVeryVeryLong; false: veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ? firstValue : SecondValueVeryVeryVeryVeryLong;
Как я могу держать их в одной линии, но выровнять ? и :
Ответ №1:
Удобочитаемость значительно повышается за счет создания функций, даже для коротких утверждений. И в этом случае это также может помочь вам уменьшить дублирование кода. Вот пример :
bool fn(const double a, const double b) { return (a / b) * (3.0 / 2.0); } int main() { double wx = 1.0; double wy = 2.0; // only do your predicate calculation once. auto pred = ((wx * 2.0) gt; (wy * 3.0)); // and by using ! you can align the most similar parts of the ternary operation. double flagx_ul = pred ? fn(-wy,wx) : -1.0; double flagy_ul = !pred ? fn( wx,wy) : 1.0; double flagx_lr = pred ? fn( wy,wx) : 1.0; double flagy_lr = !pred ? fn(-wx,wy) : -1.0; }
Комментарии:
1. Я понимаю вашу точку зрения, но в данном случае я просто хочу знать, как выровнять двоеточия, чтобы я мог быстро вычислить флаги и флаги . Если код стоит того, чтобы его прочитали другие, я угрюмо сделаю, как вы скажете.