memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

意外とデバッグが難しかったプログラム

研究用のプログラムをいじっていて30分くらいこのバグがわからず。。。時間を無駄にしました。コンパイルエラーはでません。実行が意図した通りにならなりません(タブや改行はそれらしい文字で表示して、それ以外の文字はそのまま表示する仕様です)。

まさか、これでコンパイルエラーがでないとは思いませんでしたので、まさかこんな間違いをしているとは気づかず。。。時間がかかりましたこれでも前職ではC言語で仕事していたんですが。。。。お恥ずかしい限りです。

以下、簡略化したコードです。気になる人は実際にコピペして入力して確かめてみてください。いや。。。驚きです。ちなみにjavac1.8ではエラーメッセージ自体は意味不明ですがエラーがでました。

ちなみに、僕が試したCコンパイラApple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)以下です。

直感ですが、意外と学生さんの方が早く気づくのかもしれないな。。。と思います。

#include <stdio.h>

int main()
{
  char a;

  scanf("%c", &a);

  switch(a) {
    case '\n':
      printf("\\n");
      break;
    case '\t':
      printf("\\t");
      break;
    defalut:
      printf("%c", a); 
  }

  return 0;
}