第4步:改良錯誤訊息
$ ./9cc "1+3++" > tmp.s
1+3++
^ 不是數值
$ ./9cc "1 + foo + 5" > tmp.s
1 + foo + 5
^ 標記解析失敗// 輸入程式
char *user_input;
// 回報錯誤的位置
void error_at(char *loc, char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
int pos = loc - user_input;
fprintf(stderr, "%s\n", user_input);
fprintf(stderr, "%*s", pos, ""); // 輸出pos個空白
fprintf(stderr, "^ ");
vfprintf(stderr, fmt, ap);
fprintf(stderr, "\n");
exit(1);
}Last updated