fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. typedef struct Binding
  6. {
  7. int* pIntVar;
  8. const char* IntVarName;
  9. struct Binding* pNext;
  10. } Binding;
  11.  
  12. Binding* Bindings = NULL;
  13.  
  14. void BindVar(const char* IntVarName, int* pIntVar)
  15. {
  16. Binding* b;
  17. if ((b = malloc(sizeof(Binding))) != NULL)
  18. {
  19. b->IntVarName = IntVarName;
  20. b->pIntVar = pIntVar;
  21. b->pNext = NULL;
  22. if (Bindings == NULL)
  23. {
  24. Bindings = b;
  25. }
  26. else
  27. {
  28. Binding* bs = Bindings;
  29. while (bs->pNext != NULL)
  30. {
  31. bs = bs->pNext;
  32. }
  33. bs->pNext = b;
  34. }
  35. }
  36. else
  37. {
  38. fprintf(stderr, "malloc() failed\n");
  39. exit(-1);
  40. }
  41. }
  42.  
  43. int* GetVarPtr(const char* IntVarName)
  44. {
  45. Binding* bs = Bindings;
  46. while (bs != NULL)
  47. {
  48. if (!strcmp(bs->IntVarName, IntVarName))
  49. {
  50. return bs->pIntVar;
  51. }
  52. bs = bs->pNext;
  53. }
  54. fprintf(stderr, "variable \"%s\" not bound yet!\n", IntVarName);
  55. exit(-1);
  56. }
  57.  
  58. int main(void)
  59. {
  60. int ABC = 111, DEF = 222, XYZ = 333;
  61. const char* varName = NULL;
  62.  
  63. BindVar("ABC", &ABC);
  64. BindVar("DEF", &DEF);
  65. BindVar("XYZ", &XYZ);
  66.  
  67. printf("variable \"%s\" = %d\n", "ABC", *GetVarPtr("ABC"));
  68. printf("variable \"%s\" = %d\n", "DEF", *GetVarPtr("DEF"));
  69. printf("variable \"%s\" = %d\n", "XYZ", *GetVarPtr("XYZ"));
  70.  
  71. // Pick a variable randomly by name
  72.  
  73. switch (rand() % 3)
  74. {
  75. case 0: varName = "ABC"; break;
  76. case 1: varName = "DEF"; break;
  77. case 2: varName = "XYZ"; break;
  78. }
  79.  
  80. printf("variable \"%s\" (selected randomly) = %d\n", varName, *GetVarPtr(varName));
  81.  
  82. // Hide the pointer stuff behind this macro:
  83. #define VARIABLE(NAME) (*GetVarPtr(NAME))
  84.  
  85. VARIABLE("ABC") = 1;
  86. VARIABLE("DEF") = 2;
  87. VARIABLE("XYZ") = 3;
  88.  
  89. printf("variable \"%s\" = %d\n", "ABC", VARIABLE("ABC"));
  90. printf("variable \"%s\" = %d\n", "DEF", VARIABLE("DEF"));
  91. printf("variable \"%s\" = %d\n", "XYZ", VARIABLE("XYZ"));
  92.  
  93. return 0;
  94. }
  95.  
Success #stdin #stdout 0.01s 1808KB
stdin
Standard input is empty
stdout
variable "ABC" = 111
variable "DEF" = 222
variable "XYZ" = 333
variable "DEF" (selected randomly) = 222
variable "ABC" = 1
variable "DEF" = 2
variable "XYZ" = 3