summaryrefslogtreecommitdiff
path: root/examples/macros.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/macros.c')
-rw-r--r--examples/macros.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/examples/macros.c b/examples/macros.c
new file mode 100644
index 0000000..0e836b0
--- /dev/null
+++ b/examples/macros.c
@@ -0,0 +1,44 @@
+#include "prb.h"
+#include <stdio.h>
+
+struct type {
+ i32 i32_element;
+ i16 i16_element;
+ u8 u8_element;
+};
+
+#define nodes_count 10
+
+struct stack_node {
+ i32 value;
+ struct stack_node *next;
+};
+
+struct stack {
+ struct stack_node *first;
+ struct stack_node *last;
+};
+
+static void print_stack(struct stack s)
+{
+ for (struct stack_node *node = s.first; node; node = node->next)
+ printf("%d%s", node->value, ((node->next) ? " -> " : "\n"));
+}
+
+i32 main(void)
+{
+ u64 offset = offsetof(struct type, u8_element);
+ assert(offset == 6);
+ info("offsetof(type_t, u8_element) = %lu", offset);
+ info("stack:");
+ struct stack_node nodes[nodes_count];
+ struct stack stack = {0};
+ for (i32 i = 0; i < array_count(nodes); ++i) {
+ struct stack_node *node = nodes + i;
+ node->value = i;
+ sllpush(stack.first, stack.last, node);
+ }
+ print_stack(stack);
+ sllpop(stack.first, stack.last);
+ print_stack(stack);
+}