Advertisement
amigojapan

really ugly way to pass arguments to a method in C

Jan 17th, 2017
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.44 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define Class(class_name) struct class_name;typedef struct class_name class_name; struct class_name
  4. #define AddMethod(class_name,method_name) void (*method_name)(struct class_name *)
  5. #define MakeObject(class_name,object_name) struct class_name object_name
  6. #define BindMethod(object_name,method_name) object_name.method_name=&method_name
  7. struct Args {
  8.     int x;
  9.     int y;
  10. };
  11. Class(Person) {
  12.     char name[100];
  13.     int age;
  14.     struct Args Arguments;
  15.     AddMethod(Person,increment_age);
  16.     AddMethod(Person,print_me);
  17.     AddMethod(Person,print_addxy);
  18. };
  19.  
  20. void increment_age(struct Person *self) {
  21.     self->age++;
  22. }
  23. void print_me(struct Person *self) {
  24.     printf("\nname:%s\nage%i\n",self->name,self->age);
  25. }
  26.  
  27. void print_addxy(struct Person *self) {
  28.     printf("\nx+y:%d\n",self->Arguments.x+self->Arguments.y);
  29. }
  30.  
  31. int main(int argc, const char * argv[]) {
  32.     MakeObject(Person,p1);
  33.     BindMethod(p1,increment_age);
  34.     BindMethod(p1,print_me);
  35.     BindMethod(p1,print_addxy);
  36.     strcpy(p1.name,"Jhon Doe");
  37.     p1.age=22;
  38.    
  39.     MakeObject(Person,p2);
  40.     BindMethod(p2,increment_age);
  41.     BindMethod(p2,print_me);
  42.     strcpy(p2.name,"Marry Joan");
  43.     p2.age=33;
  44.    
  45.     p1.increment_age(&p1);
  46.     p1.print_me(&p1);
  47.     p1.Arguments.x=3;
  48.     p1.Arguments.y=2;
  49.     p1.print_addxy(&p1);
  50.     p2.increment_age(&p2);
  51.     p2.print_me(&p2);
  52.     printf("end\n");
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement