void preprocess(char *string, size_t length) { int on_newline = 1; for (int i = 0; i < length;) { switch (string[i]) { case '/': { on_newline = 0; if (string[i+1] == '*') { for (; i+1 < length; i++) { if (string[i] == '*' && string[i+1] == '/') { string[i] = ' '; string[i+1] = ' '; break; } string[i] = ' '; } continue; } else if (string[i+1] == '/') { for (; i < length; i++) { if (string[i] == '\n') { string[i] = ' '; break; } string[i] = ' '; } continue; } break; } case '#': { if (on_newline) { int escaped = 0; for (i++; i < length; i++) { if (string[i] == '\n' && !escaped) break; escaped = (string[i] == '\\'); string[i] = ' '; } break; } } case '\n': on_newline = 1; break; default: on_newline = 0; break; } i++; } }