2001年7月30日 作成

Using PRC-Tools
■戻る■  ■トップ■  ■進む■


関数属性

関数のプロトタイプ宣言で、関数属性を指定できる。 標準のもの(`Declaring Attributes of Functions' in Using and Porting GCC を参照のこと)に加えて、Palm OS では以下の関数属性を 定義している。

callseq (insns)
callseq 属性を持つ関数は、insns に指定されるア センブリ言語命令を使用するために呼出される。 これは、Palm OS の systrap や、より難解なものを実装している。 insns 引数は文字列でなければならない。 一般的に、callseq 属性を直接使用することはなく、 `PalmTypes.h' に定義されているマクロを使用する。
systrap (vector)
systrap 属性は、関数が Palm OS systrap メカニズムを使って 呼出されるべきであることを指定する。 整数 vector には、`0xa000' のようなリテラルか、 列挙型の値のような定数値が用いられる。 より複雑な表現は許されない。 この属性は、賛同を得られていないため、prc-tool の将来のバージョンから 削除されるだろう。 新たなコードでは callseq を使用する。 systrap 属性を直接使用するべきではなく、 `System/SysTraps.h' で定義されている SYS_TRAP マ クロを使用すべきである。
owngp
`-mown-gp' を指定すると、owngp 属性によって、 関数の入場時に A4 レジスタをセーブし、 関数の脱出時に A4 レジスタをリストアする。 owngp を直接使用するべきではなく、 `EntryPoints.h' で定義されるマクロを使用すべきである。
extralogue (prologue, epilogue,...)
`-mextralogues' を指定すると、extralogue 属 性によって、与えられた引数に従ったプロローグとエピローグとが、関数のコー ドに付加される。 詳細については、 extralogue 属性とエントリポイント を参照のこと。 extralogue を直接使用すべきではなく、 `EntryPoints.h' で定義されるマクロを使用すべきである。
section (section-name)
この属性は、標準的なもので、Palm OS 上で関数を示すのに使用される。 デフォルトの `code #1' というより、 コードリソースにあるべき関数について用いられる。

論理上、共通に使用される属性と、それらに「要求される可視性」とは異なる:

  • systrap 属性又は callseq 属性は、 関数を呼出す上で特に重要である。 (と言っても、普段はこのような関数を自分で定義することはない。)
  • 呼出し側は、関数が extralogue を持っているか、 その owngp をセーブするかについて関与しない。 というのも、呼出し側は、その関数に対するコードを生成する時点で、 同様の効果を実際に持っているためである。
  • Palm OS 上で、関数の section は、関数自身(そのコードが置 かれるセクションを決定する)や、その関数を呼出す他の関数(特殊なクロスセ クション呼出しシーケンスが省略される)にとって重要である。

実際に、恐らく最善のポリシーは、ヘッダファイルやどこかで、それを必要と する各関数に対して厳密な定義を行うことである。 また、`-Wimplicit' や 恐らく `-Wmissing-declarations' をも使用したり、 それが必要となるときに定義が見えているかどうかを確認することである。 (Using and Porting GCC の `Options to Request or Suppress Warnings' を参照のこと。)


■戻る■  ■トップ■  ■進む■