fork download
  1. #include <stdio.h>
  2.  
  3. #define INIT_FOO(foo, i, d) \
  4.   {0}, * foo ## _init_ = init_foo(&foo, (i), (d))
  5.  
  6. #define DECLARE_FOO(foo, i, d) \
  7.   s_foo foo = INIT_FOO(foo, (i), (d))
  8.  
  9. typedef struct s_foo s_foo;
  10.  
  11. s_foo * init_foo(s_foo * foo, int i, double d);
  12.  
  13. struct s_foo {
  14. int i;
  15. double d;
  16. };
  17.  
  18. int main(void) {
  19. s_foo foo = INIT_FOO(foo, 42, 3.14159);
  20. DECLARE_FOO(bar, 43, 4.14159);
  21. int x;
  22.  
  23. printf("foo == { %d, %f }\n", foo.i, foo.d);
  24. printf("bar == { %d, %f }\n", bar.i, bar.d);
  25. return 0;
  26. }
  27.  
  28. s_foo * init_foo(s_foo * foo, int i, double d) {
  29. foo->i = i;
  30. foo->d = d;
  31. return foo;
  32. }
Success #stdin #stdout 0.01s 1720KB
stdin
Standard input is empty
stdout
foo == { 42, 3.141590 }
bar == { 43, 4.141590 }