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
関連記事
コメントを残す