Contents
- fish.c
- fugly.h
fish.c 1/2
[top][prev][next]
#include <stdio.h>
#include <stdarg.h>
#if 0
/*32 bit code - doesn't work*/
static void
foo (FILE * f, ...)
{
va_list va;
char *p;
int i = 0;
va_start (va, f);
while (p = va_arg (va, char *))
{
fprintf (f, "Arg %d: %s\n", i++, p);
}
va_end (va);
}
#else
#define CAST(A) ((size_t) (A))
#define foo(...) foo_ FISH(__VA_ARGS__)
#include "fugly.h"
static void
foo_ (size_t _f, ...)
{
FILE *f = (FILE *) _f;
va_list va;
char *p;
int i = 0;
va_start (va, _f);
while (p = (char *) va_arg (va, size_t))
{
fprintf (f, "Arg %d: %s\n", i++, p);
}
va_end (va);
}
#endif
int
main (int argc, char *argv[])
{
foo (stdout, "hello", 0);
foo (stdout, "hello", "world", 0);
foo (stdout, "hello", "world", "fish", 0);
foo (stdout, "hello", "world", "fish", "soup", 0);
foo (stdout, "hello", "world", "fish", "soup", "octopus", 0);
foo (stdout, "hello", "world", "fish", "soup", "octopus", "banana", 0);
}
fugly.h 2/2
[top][prev][next]
#define FISH(...) \
SOUP(__VA_ARGS__,OCTOPUS(__VA_ARGS__))
#define SOUP(...) \
TREE(__VA_ARGS__)
#define TREE(B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,N,...) N
#define OCTOPUS(...) FISH15(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),FISH14(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),FISH13(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0,0,0,0),FISH12(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0,0,0),FISH11(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0,0),FISH10(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0,0),FISH9(__VA_ARGS__,0,0,0,0,0,0,0,0,0,0),FISH8(__VA_ARGS__,0,0,0,0,0,0,0,0,0),FISH7(__VA_ARGS__,0,0,0,0,0,0,0,0),FISH6(__VA_ARGS__,0,0,0,0,0,0,0),FISH5(__VA_ARGS__,0,0,0,0,0,0),FISH4(__VA_ARGS__,0,0,0,0,0),FISH3(__VA_ARGS__,0,0,0,0),FISH2(__VA_ARGS__,0,0,0),FISH1(__VA_ARGS__,0,0),FISH0(__VA_ARGS__,0)
#define FISH0(B...) ()
#define FISH1(A1,B...) (CAST(A1))
#define FISH2(A1,A2,B...) (CAST(A1),CAST(A2))
#define FISH3(A1,A2,A3,B...) (CAST(A1),CAST(A2),CAST(A3))
#define FISH4(A1,A2,A3,A4,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4))
#define FISH5(A1,A2,A3,A4,A5,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5))
#define FISH6(A1,A2,A3,A4,A5,A6,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6))
#define FISH7(A1,A2,A3,A4,A5,A6,A7,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7))
#define FISH8(A1,A2,A3,A4,A5,A6,A7,A8,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8))
#define FISH9(A1,A2,A3,A4,A5,A6,A7,A8,A9,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9))
#define FISH10(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10))
#define FISH11(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10),CAST(A11))
#define FISH12(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10),CAST(A11),CAST(A12))
#define FISH13(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10),CAST(A11),CAST(A12),CAST(A13))
#define FISH14(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10),CAST(A11),CAST(A12),CAST(A13),CAST(A14))
#define FISH15(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,B...) (CAST(A1),CAST(A2),CAST(A3),CAST(A4),CAST(A5),CAST(A6),CAST(A7),CAST(A8),CAST(A9),CAST(A10),CAST(A11),CAST(A12),CAST(A13),CAST(A14),CAST(A15))
Generated by GNU enscript 1.6.4.