# 関数・変数などのネーミング基本ルール

## カテゴリ

TwlSDK の関数はその分野に応じてカテゴリとよばれる分類がされておりネーミングでもそれがわかるように配慮されています。

カテゴリ
  アルファベットの大文字が２つ以上続いたもの(グラフィクスのみ数字も併用)

  > [A-Z][A-Z0-9]+

OS | OS システムに関するもの
G2,G3,GX... | グラフィクスに関するもの(例外的に数字が含まれる)
MI | DMA などメモリのやり取りに関するもの
SVC | システムコールに関するもの

(03/11/13)

※)カテゴリのメインプロセッサとサブプロセッサの区別はなくなり、全て大文字に統一されました

(04/01/18)

## 関数

関数のネーミングは以下のようになっています。[動詞] や[目的語] は単語毎に先頭一文字を大文字にしてアンダースコアなしに連結します。

公開関数(API)
  [カテゴリ名] _ [動詞] [目的語など]

  > 例 OS_SetInterruptMask, OS_IsLocked

非公開関数
  [カテゴリ名] i_ [動詞] [目的語など]

  > 例 OSi_SetInterruptMaskBase

static 関数
  自由に

ただし慣習としてこのルールに則さないものも一部あります。(OS_InterruptHandler とか)

(03/11/13)

オブジェクトを生成初期化する関数の名称を決めるときに Create を使う場合と Init を使う場合の2つの方法が考えられます。この場合は明示的に廃棄のための関数呼び出しを行なわねば成らない場合は Create を使用し、廃棄処理を行なう必要のない場合は Init を使用するという使い分けをしてください。

(03/12/15)

## 変数型名

typedef でのネーミングは基本的にはGAMECUBEを踏襲しているので関数と形態が同じになっています。カテゴリ名の後が[動詞]ではないということなどで見分ける必要があります。

変数型名
  [カテゴリ名] [名詞]

  > 例 OSInterruptCallback

変数名(例外)
  [カテゴリ名] [動詞] Mode

  > 例 OSCopyMode

例外としてAPI の動作そのもののコントロールをするための型として上記のような OSCopyModeという形のものもあります。この場合 GXCopy というような関数の動作のコントロールに使用されるのでしょう。同じようなものに GXCopyStatues, GXCopyType というのも考えられます。このような場合にはこの形式は自然なネーミングなので認められていますがあまり濫用しないように注意してください。

(03/11/13)

## 列挙名・マクロ名

enum, define, const で定義される定数は以下のような形式となります。

定数名
  [カテゴリ名] _ [A-Z0-9_]+

  > 例 OS_INTERRUPT_MAX, OS_INTERRUPT_MAX

(04/01/18)