Skip to content

Commit ac5fa61

Browse files
committed
πŸ§‘β€πŸ’» More robust TERN_ macro
1 parent dda42fb commit ac5fa61

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

β€ŽMarlin/src/core/macros.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,19 +206,23 @@
206206
#define TERN(O,A,B) _TERN(_ENA_1(O),B,A) // OPTION ? 'A' : 'B'
207207
#define TERN0(O,A) _TERN(_ENA_1(O),0,A) // OPTION ? 'A' : '0'
208208
#define TERN1(O,A) _TERN(_ENA_1(O),1,A) // OPTION ? 'A' : '1'
209-
#define TERN_(O,A) _TERN(_ENA_1(O),,A) // OPTION ? 'A' : '<nul>'
210209
#define _TERN(E,V...) __TERN(_CAT(T_,E),V) // Prepend 'T_' to get 'T_0' or 'T_1'
211210
#define __TERN(T,V...) ___TERN(_CAT(_NO,T),V) // Prepend '_NO' to get '_NOT_0' or '_NOT_1'
212211
#define ___TERN(P,V...) THIRD(P,V) // If first argument has a comma, A. Else B.
213212
#define IF_DISABLED(O,A) TERN(O,,A)
214213

214+
// "Ternary" that emits or omits the given content
215+
#define EMIT(V...) V
216+
#define OMIT(...)
217+
#define TERN_(O,A) _TERN(_ENA_1(O),OMIT,EMIT)(A) // OPTION ? 'A' : '<nul>'
218+
215219
// Macros to conditionally emit array items and function arguments
216220
#define _OPTITEM(A...) A,
217-
#define OPTITEM(O,A...) TERN_(O,DEFER4(_OPTITEM)(A))
221+
#define OPTITEM(O,A...) TERN_(O,DEFER(_OPTITEM)(A))
218222
#define _OPTARG(A...) , A
219-
#define OPTARG(O,A...) TERN_(O,DEFER4(_OPTARG)(A))
223+
#define OPTARG(O,A...) TERN_(O,DEFER(_OPTARG)(A))
220224
#define _OPTCODE(A) A;
221-
#define OPTCODE(O,A) TERN_(O,DEFER4(_OPTCODE)(A))
225+
#define OPTCODE(O,A) TERN_(O,DEFER(_OPTCODE)(A))
222226

223227
// Macros to avoid operations that aren't always optimized away (e.g., 'f + 0.0' and 'f * 1.0').
224228
// Compiler flags -fno-signed-zeros -ffinite-math-only also cover 'f * 1.0', 'f - f', etc.

0 commit comments

Comments
Β (0)