fork download
  1. #include <stdio.h>
  2.  
  3. typedef struct
  4. {
  5. int varA;
  6. char varB;
  7. } A;
  8.  
  9. typedef struct
  10. {
  11. int varA;
  12. int varB;
  13. int varC;
  14. } B;
  15.  
  16. typedef struct
  17. {
  18. int varA;
  19. short varB;
  20. } C;
  21.  
  22. typedef enum { structA, structB, structC } STRUCT_ENUM;
  23.  
  24. int returnSize(STRUCT_ENUM structType)
  25. {
  26. int retVal = 0;
  27. switch(structType)
  28. {
  29. case structA:
  30. retVal = sizeof(A);
  31. break;
  32. case structB:
  33. retVal = sizeof(B);
  34. break;
  35. case structC:
  36. retVal = sizeof(C);
  37. break;
  38. default:
  39. break;
  40. }
  41.  
  42. return retVal;
  43. }
  44.  
  45. void printStructName(STRUCT_ENUM structType)
  46. {
  47. switch(structType)
  48. {
  49. case structA:
  50. printf("Struct: A\r\n");
  51. break;
  52. case structB:
  53. printf("Struct: B\r\n");
  54. break;
  55. case structC:
  56. printf("Struct: C\r\n");
  57. break;
  58. default:
  59. break;
  60. }
  61. }
  62.  
  63. void createDataString(STRUCT_ENUM structType, char* output, unsigned char* input)
  64. {
  65. switch(structType)
  66. {
  67. case structA:
  68. {
  69. A a = *(A*)input;
  70. sprintf(output, "data: %d, %d", a.varA, a.varB);
  71. break;
  72. }
  73. case structB:
  74. {
  75. B b = *(B*)input;
  76. sprintf(output, "data: %d, %d, %d", b.varA, b.varB, b.varC);
  77. break;
  78. }
  79. case structC:
  80. {
  81. C c = *(C*)input;
  82. sprintf(output, "data: %d, %d", c.varA, c.varB);
  83. break;
  84. }
  85. default:
  86. break;
  87. }
  88. }
  89.  
  90. int main(void) {
  91. char foobar[50];
  92.  
  93. printf("Return size: %d\r\n", returnSize(structA));
  94. printStructName(structB);
  95.  
  96. C c = { 10, 20 };
  97. createDataString(structC, foobar, (unsigned char*) &c);
  98. printf("Data string: %s\r\n", foobar);
  99.  
  100. return 0;
  101. }
  102.  
Success #stdin #stdout 0s 2112KB
stdin
Standard input is empty
stdout
Return size: 8
Struct: B
Data string: data: 10, 20