Last active
May 23, 2021 19:53
-
-
Save RealNeGate/ad7dbd5db9c81b7d4f4252b0e53f5faa to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <string.h> | |
#include <stdlib.h> | |
#define STRINGIZE(arg) STRINGIZE1(arg) | |
#define STRINGIZE1(arg) STRINGIZE2(arg) | |
#define STRINGIZE2(arg) #arg | |
#define CONCATENATE(arg1, arg2) CONCATENATE1(arg1, arg2) | |
#define CONCATENATE1(arg1, arg2) CONCATENATE2(arg1, arg2) | |
#define CONCATENATE2(arg1, arg2) arg1##arg2 | |
#define nstl_print_v_iter_1(x, ...) nstl_print_v_iter_n(0, x) | |
#define nstl_print_v_iter_2(x, ...) nstl_print_v_iter_n(1, x) nstl_print_v_iter_1(__VA_ARGS__) | |
#define nstl_print_v_iter_3(x, ...) nstl_print_v_iter_n(2, x) nstl_print_v_iter_2(__VA_ARGS__) | |
#define nstl_print_v_iter_4(x, ...) nstl_print_v_iter_n(3, x) nstl_print_v_iter_3(__VA_ARGS__) | |
#define nstl_print_v_iter_5(x, ...) nstl_print_v_iter_n(4, x) nstl_print_v_iter_4(__VA_ARGS__) | |
#define nstl_print_v_iter_6(x, ...) nstl_print_v_iter_n(5, x) nstl_print_v_iter_5(__VA_ARGS__) | |
#define nstl_print_v_iter_7(x, ...) nstl_print_v_iter_n(6, x) nstl_print_v_iter_6(__VA_ARGS__) | |
#define nstl_print_v_iter_8(x, ...) nstl_print_v_iter_n(7, x) nstl_print_v_iter_7(__VA_ARGS__) | |
#define nstl_print_v_iter_9(x, ...) nstl_print_v_iter_n(8, x) nstl_print_v_iter_8(__VA_ARGS__) | |
#define nstl_print_v_iter_10(x, ...) nstl_print_v_iter_n(9, x) nstl_print_v_iter_9(__VA_ARGS__) | |
#define nstl_print_v_iter_11(x, ...) nstl_print_v_iter_n(10,x) nstl_print_v_iter_10(__VA_ARGS__) | |
#define nstl_print_v_iter_12(x, ...) nstl_print_v_iter_n(11,x) nstl_print_v_iter_11(__VA_ARGS__) | |
#define nstl_print_v_iter_13(x, ...) nstl_print_v_iter_n(12,x) nstl_print_v_iter_12(__VA_ARGS__) | |
#define nstl_print_v_iter_14(x, ...) nstl_print_v_iter_n(13,x) nstl_print_v_iter_13(__VA_ARGS__) | |
#define nstl_print_v_iter_15(x, ...) nstl_print_v_iter_n(14,x) nstl_print_v_iter_14(__VA_ARGS__) | |
#define nstl_print_v_iter_16(x, ...) nstl_print_v_iter_n(15,x) nstl_print_v_iter_15(__VA_ARGS__) | |
#define nstl_print_v_iter_17(x, ...) nstl_print_v_iter_n(16,x) nstl_print_v_iter_16(__VA_ARGS__) | |
#define nstl_print_v_iter_18(x, ...) nstl_print_v_iter_n(17,x) nstl_print_v_iter_17(__VA_ARGS__) | |
#define nstl_print_v_iter_19(x, ...) nstl_print_v_iter_n(18,x) nstl_print_v_iter_18(__VA_ARGS__) | |
#define nstl_print_v_iter_20(x, ...) nstl_print_v_iter_n(19,x) nstl_print_v_iter_19(__VA_ARGS__) | |
#define nstl_print_v_iter_21(x, ...) nstl_print_v_iter_n(20,x) nstl_print_v_iter_20(__VA_ARGS__) | |
#define nstl_print_v_iter_22(x, ...) nstl_print_v_iter_n(21,x) nstl_print_v_iter_21(__VA_ARGS__) | |
#define nstl_print_v_iter_23(x, ...) nstl_print_v_iter_n(22,x) nstl_print_v_iter_22(__VA_ARGS__) | |
#define nstl_print_v_iter_24(x, ...) nstl_print_v_iter_n(23,x) nstl_print_v_iter_23(__VA_ARGS__) | |
#define nstl_print_v_iter_25(x, ...) nstl_print_v_iter_n(24,x) nstl_print_v_iter_24(__VA_ARGS__) | |
#define nstl_print_v_iter_26(x, ...) nstl_print_v_iter_n(25,x) nstl_print_v_iter_25(__VA_ARGS__) | |
#define nstl_print_v_iter_27(x, ...) nstl_print_v_iter_n(26,x) nstl_print_v_iter_26(__VA_ARGS__) | |
#define nstl_print_v_iter_28(x, ...) nstl_print_v_iter_n(27,x) nstl_print_v_iter_27(__VA_ARGS__) | |
#define nstl_print_v_iter_29(x, ...) nstl_print_v_iter_n(28,x) nstl_print_v_iter_28(__VA_ARGS__) | |
#define nstl_print_v_iter_30(x, ...) nstl_print_v_iter_n(29,x) nstl_print_v_iter_29(__VA_ARGS__) | |
#define nstl_print_v_iter_31(x, ...) nstl_print_v_iter_n(30,x) nstl_print_v_iter_30(__VA_ARGS__) | |
#define nstl_print_v_iter_32(x, ...) nstl_print_v_iter_n(31,x) nstl_print_v_iter_31(__VA_ARGS__) | |
#define nstl_print_f_iter_1(x, ...) nstl_print_f_iter_n(0, x) | |
#define nstl_print_f_iter_2(x, ...) nstl_print_f_iter_n(1, x) nstl_print_f_iter_1(__VA_ARGS__) | |
#define nstl_print_f_iter_3(x, ...) nstl_print_f_iter_n(2, x) nstl_print_f_iter_2(__VA_ARGS__) | |
#define nstl_print_f_iter_4(x, ...) nstl_print_f_iter_n(3, x) nstl_print_f_iter_3(__VA_ARGS__) | |
#define nstl_print_f_iter_5(x, ...) nstl_print_f_iter_n(4, x) nstl_print_f_iter_4(__VA_ARGS__) | |
#define nstl_print_f_iter_6(x, ...) nstl_print_f_iter_n(5, x) nstl_print_f_iter_5(__VA_ARGS__) | |
#define nstl_print_f_iter_7(x, ...) nstl_print_f_iter_n(6, x) nstl_print_f_iter_6(__VA_ARGS__) | |
#define nstl_print_f_iter_8(x, ...) nstl_print_f_iter_n(7, x) nstl_print_f_iter_7(__VA_ARGS__) | |
#define nstl_print_f_iter_9(x, ...) nstl_print_f_iter_n(8, x) nstl_print_f_iter_8(__VA_ARGS__) | |
#define nstl_print_f_iter_10(x, ...) nstl_print_f_iter_n(9, x) nstl_print_f_iter_9(__VA_ARGS__) | |
#define nstl_print_f_iter_11(x, ...) nstl_print_f_iter_n(10,x) nstl_print_f_iter_10(__VA_ARGS__) | |
#define nstl_print_f_iter_12(x, ...) nstl_print_f_iter_n(11,x) nstl_print_f_iter_11(__VA_ARGS__) | |
#define nstl_print_f_iter_13(x, ...) nstl_print_f_iter_n(12,x) nstl_print_f_iter_12(__VA_ARGS__) | |
#define nstl_print_f_iter_14(x, ...) nstl_print_f_iter_n(13,x) nstl_print_f_iter_13(__VA_ARGS__) | |
#define nstl_print_f_iter_15(x, ...) nstl_print_f_iter_n(14,x) nstl_print_f_iter_14(__VA_ARGS__) | |
#define nstl_print_f_iter_16(x, ...) nstl_print_f_iter_n(15,x) nstl_print_f_iter_15(__VA_ARGS__) | |
#define nstl_print_f_iter_17(x, ...) nstl_print_f_iter_n(16,x) nstl_print_f_iter_16(__VA_ARGS__) | |
#define nstl_print_f_iter_18(x, ...) nstl_print_f_iter_n(17,x) nstl_print_f_iter_17(__VA_ARGS__) | |
#define nstl_print_f_iter_19(x, ...) nstl_print_f_iter_n(18,x) nstl_print_f_iter_18(__VA_ARGS__) | |
#define nstl_print_f_iter_20(x, ...) nstl_print_f_iter_n(19,x) nstl_print_f_iter_19(__VA_ARGS__) | |
#define nstl_print_f_iter_21(x, ...) nstl_print_f_iter_n(20,x) nstl_print_f_iter_20(__VA_ARGS__) | |
#define nstl_print_f_iter_22(x, ...) nstl_print_f_iter_n(21,x) nstl_print_f_iter_21(__VA_ARGS__) | |
#define nstl_print_f_iter_23(x, ...) nstl_print_f_iter_n(22,x) nstl_print_f_iter_22(__VA_ARGS__) | |
#define nstl_print_f_iter_24(x, ...) nstl_print_f_iter_n(23,x) nstl_print_f_iter_23(__VA_ARGS__) | |
#define nstl_print_f_iter_25(x, ...) nstl_print_f_iter_n(24,x) nstl_print_f_iter_24(__VA_ARGS__) | |
#define nstl_print_f_iter_26(x, ...) nstl_print_f_iter_n(25,x) nstl_print_f_iter_25(__VA_ARGS__) | |
#define nstl_print_f_iter_27(x, ...) nstl_print_f_iter_n(26,x) nstl_print_f_iter_26(__VA_ARGS__) | |
#define nstl_print_f_iter_28(x, ...) nstl_print_f_iter_n(27,x) nstl_print_f_iter_27(__VA_ARGS__) | |
#define nstl_print_f_iter_29(x, ...) nstl_print_f_iter_n(28,x) nstl_print_f_iter_28(__VA_ARGS__) | |
#define nstl_print_f_iter_30(x, ...) nstl_print_f_iter_n(29,x) nstl_print_f_iter_29(__VA_ARGS__) | |
#define nstl_print_f_iter_31(x, ...) nstl_print_f_iter_n(30,x) nstl_print_f_iter_30(__VA_ARGS__) | |
#define nstl_print_f_iter_32(x, ...) nstl_print_f_iter_n(31,x) nstl_print_f_iter_31(__VA_ARGS__) | |
#define nstl_print_f_iter_n(idx, x) '%', _Generic((x), char: 'c', char*: 's', double: 'f', int: 'i', default: 'p' ), | |
#define nstl_print_v_iter_n(idx, x) , x | |
#define nstl_print_narg(...) nstl_print_narg_(__VA_ARGS__, nstl_print_rseq_n()) | |
#define nstl_print_narg_(...) nstl_print_arg_n(__VA_ARGS__) | |
#define nstl_print_arg_n(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, N, ...) N | |
#define nstl_print_rseq_n() 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 | |
#define nstl_fprint(stream, ...) \ | |
fprintf(stream, \ | |
CONCATENATE(nstl_print_f_iter_, nstl_print_narg(__VA_ARGS__))(__VA_ARGS__) \ | |
CONCATENATE(nstl_print_v_iter_, nstl_print_narg(__VA_ARGS__))(__VA_ARGS__) \ | |
); | |
#define nstl_print(...) \ | |
printf( \ | |
&(char[]) { CONCATENATE(nstl_print_f_iter_, nstl_print_narg(__VA_ARGS__))(__VA_ARGS__) '\0' } \ | |
CONCATENATE(nstl_print_v_iter_, nstl_print_narg(__VA_ARGS__))(__VA_ARGS__) \ | |
); | |
int main() { | |
nstl_print( | |
"Hello, ", "Bob", "!\n", | |
"Here's an integer: ", 6 * 4, ", Now a float: ", 5.0, ".\n", | |
"You know I'm balling ", "Usually like kobe", "\n" | |
); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment