あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先

複雑なマクロにエディタからエラーが出る (2013.05.10)

エディタの文法チェック

バイナリ埋め込み用のマクロをこんな感じで使います。
#include "ksrk.h"
KSRK_INJECTION(wave, "maguro.wav");
そうするとエディタの文法チェックが「Syntax error」を出します。 コンパイルはエラーなしで通りますからエディタだけの指摘です。 シンタックスエラー

Cのマクロ定義

Cの(プリプロセッサの)マクロはこうなっています。
// ファイルをオブジェクトに埋め込んで前後にラベルを追加
// ラベルの種:label
// ファイル:file
// 先頭:label_head
// 末尾:label_tail
#define KSRK_INJECTION(label, file) \
asm (\
	"	.global "#label"_head		\n"\
	"	.global "#label"_tail		\n"\
	"	.section .rodata, \"a\"		\n"\
	#label"_head:					\n"\
	"	.incbin \"../src/"file"\"	\n"\
	#label"_tail:					\n"\
)

展開予想

多分こんな感じに展開していると思います。 展開後の状態ならエディタもエラーにしないでしょう。
#include "ksrk.h"
asm (\
	"	.global wave_head		\n"\
	"	.global wave_tail		\n"\
	"	.section .rodata, \"a\"		\n"\
	"wave_head:					\n"\
	"	.incbin \"../src/magro.wav\"	\n"\
	"wave_tail:					\n"\
);
試しに上記コードをエディタに貼ってみると、こちらは正常でした。 エラーなし

今回の鉄ゲタは…

ありません。ほっ