Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stddef.h>
- #include <stdlib.h>
- #define CLASS_METHOD \
- register unsigned long rbp __asm__("rbp"); \
- c_class *this = rbp + 16; // cfi_def_cfa_offset 16
- typedef struct c_class
- {
- int (*add)(void);
- int (*sub)(void);
- int a;
- int b;
- } c_class;
- int c_class_add(void)
- {
- CLASS_METHOD
- return this->a + this->b;
- }
- int c_class_sub(void)
- {
- CLASS_METHOD
- return this->a - this->b;
- }
- int main(void)
- {
- c_class c =
- {
- .add = c_class_add,
- .sub = c_class_sub,
- .a = 300,
- .b = 200
- };
- printf("(expected 500) c.add() = %d\n", c.add());
- printf("(expected 100) c.sub() = %d\n", c.sub());
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement