バブルソートを書いて、VC などのコンパイラでは問題なかったのに、Keil C51 では大量のエラーが出て困りました。

括弧の閉じ忘れなどの基本的な原因の他に、もう一つありえる原因是:

== 変数名が C51 のキーワードと被っている ==

例えば私が使った data は、C51 の予約キーワードです:

Keil C51におけるdataキーワードの表示

data は C51 の予約キーワード。太字でのハイライトが分かりにくく、見落としやすい

そこに data という名前の配列を定義してしまったため、以下のような大量のエラーが発生しました:

Keil C51エラー出力のスクリーンショット

大量的 error C141: syntax error near '[' が表示され、構文エラーと誤認しやすい

解決策

配列の名前を変更するだけで直ります。

こうしてスクリーンショットを貼り付けたのは、百難の Keil のキーワードハイライトの分かりにくさを痛感したからです……最初は全然気づきませんでした。

この2時間を返我还QAQ という思いでこの記事を書きます。


付録:C51 キーワード一覧

メモリタイプ(記憶域型)

C51メモリタイプ一覧表

変数を宣言する際にメモリタイプは省略可能。C51 はコンパイルモードに応じてデフォルトのメモリタイプを適用する

基本データ型

C51基本データ型一覧表

C51がサポートする基本データ型の一覧

記憶域クラス(ストレージクラス)

C51 変数の記憶域クラスは4種類あります:

特殊機能レジスタ sfr

8051 の特殊機能レジスタ(SFR)のアドレスを宣言するために使用します。

ビット変数 bit

0 または 1 の値のみ取れるビット変数を宣言するために使用します。

他のキーワードはまあまあ大丈夫だけど、この data は本当に他の言語で慣れているだけに厄介ですね……