public
Created

Type-safe sum types in C

  • Download Gist
gistfile1.c
C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
// needs -fnested-functions. Can be done without, but makes the whole thing a lot more cumbersome
// and less useful.
#include <stdio.h>
 
#define my_data_alts ( void (*A)(int) , void (*B)(int, int) , void (*C)(char, int) )
#define make_my_data(n) void n my_data_alts
typedef void (*my_data) my_data_alts;
 
 
void show(my_data match) {
void A(int n) { printf("A %d", n); }
void B(int a, int b) { printf("B %d %d", a, b); }
void C(char a, int b) { printf("C %d %c", a, b); }
match(A,B,C);
}
 
int main() {
make_my_data (foo) { A(1); };
show (foo);
return 0;
}

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.