#include #include #include "ustr.h" int main(void) { const struct UStr *kw[] = { UStrAdd("if"), UStrAdd("for"), UStrAdd("while"), }; char *line = 0; size_t capacity = 0; ssize_t len; while ((len = getline(&line, &capacity, stdin)) > 0) { line[len - 1] = 0; bool added, error = false; const struct UStr *identifier = UStrAdd_(line, &added); for (size_t i = 0; i < sizeof(kw) / sizeof(kw[0]); ++i) { if (kw[i] == identifier) { printf("can not use keyword as identifier\n"); error = true; } } if (error) { continue; } if (added) { printf("new "); } printf("identifier '%s'\n", identifier->cstr); } free(line); // ok even if line is null pointer printf("List of unique strings:\n"); UStrPrintPool(); }