Den Stil des Beispiels solltest Du dringendst nicht nachahmen, wie
unlesbar das ist, hast du ja sicher daran gemerkt, dass du die
Funktionsweise des ternären Operators missverstanden hast. In der (seit
kurzem privatisierten) Hölle gibt es einen eigenen Raum für Menschen,
die sowas fabrizieren.
Das folgende sollte (bis auf frühmorgendliche Fehler) den gleichen
Assemblercode produzieren:
1 | if (g_uc_wave_sel)
|
2 | {
|
3 | bool is_over_half = g_ul_index_sample > SAMPLES / 2;
|
4 | dac_val = is_over_half ? 0 : MAX_AMPLITUDE;
|
5 | }
|
6 | else
|
7 | {
|
8 | int sine_val = gc_us_sine_data[g_ul_index_sample];
|
9 | dac_val = wave_to_dacc(sine_val, g_l_amplitude, MAX_DIGITAL * 2, MAX_AMPLITUDE);
|
10 | }
|
Nicht so "schön kompakt", aber die Zeit zum Verstehen sollte sich
deutlich unterscheiden.