CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメントアウトにありがちな笑えない話

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

C言語のコメントアウトのありがちな話だけど、
「可能」とか「表」の笑えない話を書いておく。

i に 1 を代入するコードを書いたとする。

#include <stdio.h>
int main(int argc,char*argv){
  int i=0;
  //i=1:使用可能
  i=1;
  printf("i=%d¥n",i);
  return 0;
}

これを gcc で実行すると、

$ gcc a.c && ./a.out
i=0

なぜか i=1 でなく、 i=0 と出力されてしまった。

知ってればありがちな罠なんだけど、
a.c が Shift_JIS だった場合に、「能」が 0x94,0x5C で、
0x5c は asciicode で \ なので、継続行とみなされ、次行の i = 1 がコメント扱いになってしまった。

なので、文字コードを変えれば、ちゃんと動く。

$ nkf -w a.c | gcc -x c - && ./a.out
i=1

この罠、いまだに笑っていられない話で、
たとえば、windows の gcc では動いたけど、 linux の gcc では動かなくて、
その原因が svn / git のチェックアウト時に文字コードを自動変換させてたがため
この問題に引っかかったとか起こりそうな話だったりする。

スポンサーサイト


★☆★コメント★☆★

コメントの投稿

Name
Subject
Mail
URI
Comment
Pass
Secret 管理者にだけ表示を許可する

トラックバック

http://iyukki.blog56.fc2.com/tb.php/173-4ef59f80

 | HOME | 

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。