BrainF*ckのインタプリタ書いてみた(C言語)

自分的にはすごい綺麗な書き方ができたと思っているのですがどうでしょうか?(自画自賛
何か感想などがあれば教えてください。

#include<stdio.h>
#include<stdlib.h>

int main() {
      unsigned char *p = malloc(10000);

      //100までの素数を表示する
      char *str = "\
                   >++++[<++++++++>-]>++++++++[<++++++>-]<++.<.> +.<.> ++.<.> ++.<.> ------..<.>\
                   .++.<.> --.++++++.<.> ------.>+++[<+++>-]<-.<.> -------.+.<.> -.+++++++.<.>\
                   ------.--.<.> ++.++++.<.> ---.---.<.> +++.-.<.> +.+++.<.> --.--.<.> ++.++++.<.>\
                   ---.-----.<.> +++++.+.<.> .------.<.> ++++++.----.<.> ++++.++.<.> -.-----.<.> +++++.+.<.> .--.\
                   ";
      char *save;

      for(;*str != '\0';str++){
            switch(*str){
                  case '>': // ポインタをインクリメント
                        p++;
                        break;
                  case '<': // ポインタをデクリメント
                        p--;
                        break;
                  case '+': { // ポインタが指す値をインクリメント
                                  int a = (int)*p;
                                  a++;
                                  *p = (char)a;
                            }
                            break;
                  case '-': { // ポインタが指す値をデクリメント
                                  int a = (int)*p;
                                  a--;
                                  *p = (char)a;
                            }
                            break;
                  case '.': // ポインタが指す値を出力する
                            putchar(*p);
                            break;
                  case ',': // ポインタが指す値に代入する
                            *p = getchar();
                            break;
                  case '[': //ポインタが指す値が0なら対応する]の直後までジャンプする
                            if(*p == 0){
                                  while(*str == ']'){
                                        str++;
                                  }
                            }else{
                                  save = str;
                            }
                            break;
                  case ']': // ポインタが指す値が0でないなら対応する[にジャンプする
                            if(*p != 0) {
                                  str = save;
                            }
                            break;
                  default: // それ以外コメントアウト
                            break;
            }
      }

}

これを何か面白そうな構文を作って
外部ファイルを読み込む処理を書けば楽しめそうですね。
今日は綺麗に書けたことをできるだけ早く公開したかったです(自画自賛