Add pedantic and comply with C99
diff --git a/README.md b/README.md
index 88b0b24..727d4cb 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@
 
 ## Language
 
-This `bc` is written in pure ISO C11.
+This `bc` is written in pure ISO C99.
 
 ## Git Workflow
 
diff --git a/include/data.h b/include/data.h
index 96c9a77..b8c44a7 100644
--- a/include/data.h
+++ b/include/data.h
@@ -123,12 +123,17 @@
   bool var;
 
   union {
+
     BcNum num;
+
     struct {
+
       BcNum* array;
-      uint32_t num_elems;
-    };
-  };
+      uint32_t nelems;
+
+    } array;
+
+  } data;
 
 } BcLocal;
 
@@ -141,7 +146,7 @@
     BcNum num;
     const char* name;
 
-  };
+  } data;
 
 } BcTemp;
 
@@ -194,9 +199,9 @@
       char* name;
       size_t idx;
 
-    };
+    } id;
 
-  };
+  } data;
 
 } BcResult;
 
diff --git a/src/bc/data.c b/src/bc/data.c
index 53168af..9707b92 100644
--- a/src/bc/data.c
+++ b/src/bc/data.c
@@ -233,14 +233,14 @@
 {
   BcStatus status;
 
-  status = bc_num_init(&local->num, strlen(num));
+  status = bc_num_init(&local->data.num, strlen(num));
 
   if (status) return status;
 
   local->name = name;
   local->var = true;
 
-  return bc_num_parse(&local->num, num, base, scale);
+  return bc_num_parse(&local->data.num, num, base, scale);
 }
 
 BcStatus bc_local_initArray(BcLocal* local, const char* name, uint32_t nelems) {
@@ -276,12 +276,12 @@
   free((void*) l->name);
 
   if (l->var) {
-    bc_num_free(&l->num);
+    bc_num_free(&l->data.num);
   }
   else {
 
-    nelems = l->num_elems;
-    array = l->array;
+    nelems = l->data.array.nelems;
+    array = l->data.array.array;
 
     for (uint32_t i = 0; i < nelems; ++i) {
       bc_num_free(array + i);
@@ -289,8 +289,8 @@
 
     free(array);
 
-    l->array = NULL;
-    l->num_elems = 0;
+    l->data.array.array = NULL;
+    l->data.array.nelems = 0;
   }
 }
 
@@ -316,7 +316,7 @@
     return BC_STATUS_EXEC_INVALID_NAME;
   }
 
-  temp->name = name;
+  temp->data.name = name;
 
   return BC_STATUS_SUCCESS;
 }
@@ -339,7 +339,7 @@
   t = (BcTemp*) temp;
 
   if (t->type == BC_TEMP_NUM) {
-    bc_num_free(&t->num);
+    bc_num_free(&t->data.num);
   }
 }
 
@@ -383,7 +383,7 @@
     case BC_RESULT_INTERMEDIATE:
     case BC_RESULT_CONSTANT:
     {
-      bc_num_free(&r->num);
+      bc_num_free(&r->data.num);
       break;
     }
 
diff --git a/src/bc/program.c b/src/bc/program.c
index 8820f6e..9543b79 100644
--- a/src/bc/program.c
+++ b/src/bc/program.c
@@ -631,7 +631,7 @@
 
         num = bc_vec_top(&p->expr_stack);
 
-        bc_num_print(&num->num, p->obase);
+        bc_num_print(&num->data.num, p->obase);
 
         bc_vec_pop(&p->expr_stack);
 
@@ -685,7 +685,7 @@
         BcResult result;
 
         result.type = BC_RESULT_CONSTANT;
-        result.idx = bc_program_index(code, &ip->idx);
+        result.data.id.idx = bc_program_index(code, &ip->idx);
 
         status = bc_vec_push(&p->expr_stack, &result);
 
@@ -714,15 +714,15 @@
 
         result.type = BC_RESULT_INTERMEDIATE;
 
-        status = bc_num_init(&result.num, BC_NUM_DEF_SIZE);
+        status = bc_num_init(&result.data.num, BC_NUM_DEF_SIZE);
 
         if (status) return status;
 
-        status = bc_num_copy(&result.num, &ptr->num);
+        status = bc_num_copy(&result.data.num, &ptr->data.num);
 
         if (status) return status;
 
-        result.num.neg = !result.num.neg;
+        result.data.num.neg = !result.data.num.neg;
 
         status = bc_vec_pop(&p->expr_stack);
 
@@ -762,7 +762,7 @@
 
   result.type = BC_RESULT_INTERMEDIATE;
 
-  status = bc_num_init(&result.num, BC_NUM_DEF_SIZE);
+  status = bc_num_init(&result.data.num, BC_NUM_DEF_SIZE);
 
   if (status) return status;
 
@@ -780,10 +780,12 @@
 
     op = bc_math_ops[inst - BC_INST_OP_MODULUS];
 
-    status = op(&result1->num, &result2->num, &result.num, p->scale);
+    status = op(&result1->data.num, &result2->data.num,
+                &result.data.num, p->scale);
   }
   else {
-    status = bc_num_pow(&result1->num, &result2->num, &result.num, p->scale);
+    status = bc_num_pow(&result1->data.num, &result2->data.num,
+                        &result.data.num, p->scale);
   }
 
   if (status) return status;
@@ -938,7 +940,7 @@
 
     case BC_RESULT_INTERMEDIATE:
     {
-      *num = &result->num;
+      *num = &result->data.num;
       break;
     }
 
@@ -947,19 +949,19 @@
       char** s;
       size_t idx;
 
-      idx = result->idx;
+      idx = result->data.id.idx;
 
       s = bc_vec_item(&p->constants, idx);
 
       if (!s) return BC_STATUS_EXEC_INVALID_CONSTANT;
 
-      status = bc_num_init(&result->num, strlen(*s));
+      status = bc_num_init(&result->data.num, strlen(*s));
 
       if (status) return status;
 
-      *num = &result->num;
+      *num = &result->data.num;
 
-      status = bc_num_parse(&result->num, *s, p->ibase, p->scale);
+      status = bc_num_parse(&result->data.num, *s, p->ibase, p->scale);
 
       break;
     }