よくある質問(FAQ)

Cオプションパラメータ(キーワード:asm)を設定しても、インラインアセンブラ「asm volatile(…)」の解析エラーが回避できません。

解析エラーの回避策について

質問

「Cオプションパラメータ」でキーワード「asm」を設定しても、インラインアセンブラ記述の解析エラーが回避できません。
回避策を教えてください。「言語設定」は「C99」です。

■記述例
void func()
{
 asm volatile ("e_ori 0,0,0\t\n");
}

■Cオプションパラメータの設定
キーワード:asm
種類   :ASM
後置記述 :(EXPRESSION)

■解析エラー
CasePlayer2-XCCPPV_V:
 "C:\XXXXXXXX\YYYYYYYY\ソースファイル名.c", line (行番号): error: expected a "("
  asm volatile ("e_ori 0,0,0\t\n");
   ^

回答

キーワード「asm」は ソースコード「asm volatile (...)」記述には適用されません。
「asm volatile」記述は C99 仕様に違反しているため、解析エラーが発生しています。「asm volatile」記述は GNU-Cで規定されている言語仕様です。

■回避策
「言語設定」を C99 から GNU-C へ変更することで、エラーを回避できます。
※設定済みの「Cオプションパラメータ(キーワード:asm)」は解除してください。

何等かの事情等で「言語設定」を変更できない(C99 又は ANSI-C で使用したい)場合は、「Cオプションパラメータ」の設定変更、及び「プリプロセッサの設定」を併用することで、エラーを回避できます。

■ 変更後のCオプションパラメータ
キーワード:user_asm
種類   :ASM
後置記述 :EXPRESSION(EXPRESSION)

■プリプロセッサの設定
下記の定義(#define...)をしたヘッダファイル(gaio.h)を「プレインクルードファイル」に追加します。
※ C99 では キーワード「asm」は予約語となっているため、競合を避けるため「user_asm」へ置き換えます。
--[gaio.h]-------------------
#define asm user_asm
-------------------------------