Skip to content

Instantly share code, notes, and snippets.

@dhh1128
dhh1128 / macros_overridden_by_arg_count
Last active October 5, 2019 11:45
macros overridden by arg count
// Define two overrides that can be used by the expansion of
// our main macro.
#define _MY_CONCAT3(a, b, c) a b c
#define _MY_CONCAT2(a, b) a b
// Define a macro that uses the "paired, sliding arg list"
// technique to select the appropriate override. You should
// recognize this as similar to the GET_NTH_ARG() macro in
// previous examples.
#define _GET_OVERRIDE(_1, _2, _3, NAME, ...) NAME
@dhh1128
dhh1128 / for_each_macro
Last active October 5, 2019 11:41
"for each"-style macro
// Accept any number of args >= N, but expand to just the Nth one.
// Here, N == 6.
#define _GET_NTH_ARG(_1, _2, _3, _4, _5, N, ...) N
// Define some macros to help us create overrides based on the
// arity of a for-each-style macro.
#define _fe_0(_call, ...)
#define _fe_1(_call, x) _call(x)
#define _fe_2(_call, x, ...) _call(x) _fe_1(_call, __VA_ARGS__)
#define _fe_3(_call, x, ...) _call(x) _fe_2(_call, __VA_ARGS__)
@dhh1128
dhh1128 / fancier-eprintf
Created August 4, 2020 14:41
fancier version of eprintf
#define eprintf(fmt, ...) \
fprintf(stderr, fmt, ##__VA_ARGS__)

Keybase proof

I hereby claim:

To claim this, I am signing this object: