Skip to content

Instantly share code, notes, and snippets.

@crispy-computing-machine
Created April 3, 2023 12:59
Show Gist options
  • Save crispy-computing-machine/f461ea1bcbf017d2ef14f68baf62429f to your computer and use it in GitHub Desktop.
Save crispy-computing-machine/f461ea1bcbf017d2ef14f68baf62429f to your computer and use it in GitHub Desktop.
var_dump in C
#include <stdio.h>
#include <stdarg.h>
#include <stdbool.h>
#define VAR_DUMP(var) _var_dump(#var, var)
void _var_dump(const char *var_name, ...);
int main() {
int i = 42;
float f = 3.14f;
double d = 2.71828;
char c = 'A';
bool b = true;
VAR_DUMP(i);
VAR_DUMP(f);
VAR_DUMP(d);
VAR_DUMP(c);
VAR_DUMP(b);
return 0;
}
void _var_dump(const char *var_name, ...) {
va_list args;
va_start(args, var_name);
char format_specifier = *va_arg(args, char *);
switch (format_specifier) {
case 'i':
printf("%s: int(%d)\n", var_name, va_arg(args, int));
break;
case 'f':
printf("%s: float(%f)\n", var_name, va_arg(args, double));
break;
case 'd':
printf("%s: double(%lf)\n", var_name, va_arg(args, double));
break;
case 'c':
printf("%s: char(%c)\n", var_name, va_arg(args, int));
break;
case 'b':
printf("%s: bool(%s)\n", var_name, va_arg(args, int) ? "true" : "false");
break;
default:
printf("%s: unknown type\n", var_name);
break;
}
va_end(args);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment