[HI-TECH C] “Warning [228] illegal character”警告が出る場合の対処法

HI-TECH Cでプログラムをコンパイルすると、以下のようにWarning [228]の警告が出ることがあります。
これは”警告”なのでコンパイルは完了し、大抵の場合プログラムは想定どおり動作することが多いです。


Make: The target "C:\home\project\pic\16F84A_LCD\main.p1" is out of date.
Executing: "C:\Program Files\HI-TECH Software\PICC\9.83\bin\picc.exe" --pass1 C:\main.c ..."
Warning [228] C:\home\project\pic\16F84A_LCD\main.c; 11.17 illegal character (0xC3)




原因

これは、プログラムのソースコード中にASCII以外の文字が出現した時に発生します。
ASCII文字はいわゆる半角の英数字で、ASCII以外というのは全角文字や、半角カナを意味します。

例えば以下のコードだと警告が表示されてしまいます。

char msg[8+1] = "テスト";



LCDを使うと文字出力に半角カナを使用することがあり,LCD制御プログラムで発生することが多いです。


対処法

この警告の表示を抑制するためには、以下のpragma命令をファイルの先頭付近に記述すればOKです。

#pragma jis




#pragma jisの意味

#pragma jisを書くと、ソースコード中に2バイト文字が含まれる事をCコンパイラに伝える事が出来ます。
このpragmaはWarning [228]の抑制以外にも、2byte目が0x5c(バックスラッシュ)を含む文字列リテラルでエラーが起きる現象も抑制できます。

例えば全角カタカナの”ソ”は、”0x83 0x5c”で、2byte目が”\”となり、通常ではこれがエスケープシーケンス記号であるとコンパイラに認識され、エラーが発生します。

char msg[2+1] ="ソ";
 
  ↓
 
Warning [228] C:\home\project\pic\16F84A_LCD\main.c; 11.15 illegal character (0x83)
Error   [311] C:\home\project\pic\16F84A_LCD\main.c; 11.15 closing quote expected
Error   [372] C:\home\project\pic\16F84A_LCD\main.c; 12.1 "," expected



このエラーも#pragma jisを記述する事で対処できます。
#pragma命令は、C言語の規格であるANSI Cでは、コンパイラ依存の命令(コンパイラ自身に対する指示)と定められています。

入門ANSI‐C

関連記事

コメントを残す

メールアドレスが公開されることはありません。