Cコンパイラのエラーメッセージの改良
これを改良する
code:c
// 入力プログラム
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);
}
全体のuser_inputと、トークンに対応するポインタが荒れば、エラー箇所を見やすくビジュアライズできる
argv[1]をuser_inputに保存する
error("数ではありません")といったコードを
error_at(token->str, "数ではありません")といったコードにアップデート
復習
token->strはトークンに対応するcharポインタだった