プログラムのパフォーマンス解析

NOTE と _NOTE

NOTE インタフェースは、コンパイル後のオブジェクトコードに影響を与えることなく、ソースコードへのロック lint 用の情報の挿入を可能にします。ノート形式の注釈の基本構文は、以下のどちらかです。

NOTE(NoteInfo)

または

_NOTE(NoteInfo)

そして、_NOTE よりも NOTE のほうが一般的に好まれています。ただし、複数の関連しないプロジェクトにおいて使用されるヘッダーファイルでは、混乱を避けるために _NOTE を使用してください。NOTE がすでに使用され、それを変更したくない場合は、_NOTE を使ってほかのマクロ (ANNOTATION など) を定義してください。たとえば、以下の内容を含むインクルードファイル (annotation.h とします) を定義できます。


#define ANNOTATION _NOTE
#include <sys/note.h>

NOTE インタフェースに渡される NoteInfo は、書式上は以下のいずれかの形式に一致しなければなりません。

NoteName

NoteName(Args)

NoteName は、注釈の種類を示す単なる識別子です。トークンとして正しく、カッコのトークンが適合してさえいれば (閉じカッコが存在する)、Arg は何でもかまいません。それぞれの個別の NoteName は、引数に関して、独自の要求事項を持つことになります。

このマニュアルでは、特にことわり書きがない限り、NOTENOTE_NOTE の両方を指します。

NOTE が使われる場所

NOTE は、ソースコード中の、特定の定義済みの箇所においてのみ有効です。

NOTE が使われるべきでない場所

NOTE() は、前述の場所でのみ使用されます。たとえば、以下の場所での使用は正しくありません。

a = b NOTE(...) + 1;

typedef NOTE(...) struct foo Foo;

for (i=0; NOTE(...) i<10; i++) ...

ノート形式の注釈はステートメントではありません。つまり、NOTE() は、ブロックを構成するために中括弧が使用されない限り、if/else/for/while 本文の内側では使用してはなりません。たとえば、以下の表記は構文エラーを引き起こします。

if (x)

NOTE(...)