PCP: C++ Preprocessor
関数
PCP API群

ユーザーが使用できるAPI群 [詳解]

関数

 array_first_key (array $a)
 配列の先頭要素 [詳解]
 
 autolink ($library)
 オートリンク情報の生成 [詳解]
 
 char_literal (string $c)
 文字リテラルのコード生成 [詳解]
 
 check (bool $exp, string $message)
 式が偽の場合にエラーを発生させる。 [詳解]
 
 clamp ($value, $min, $max)
 値を範囲内に収める。 [詳解]
 
 clause (... $args)
 句の生成 [詳解]
 
 constant (string $name)
 -Dオプションで定義した値の取得 [詳解]
 
 convert_to_encoding (string $data, string $encoding)
 指定したエンコーディングへの変換 [詳解]
 
 convert_to_ucn (string $data)
 国際文字名への変換 [詳解]
 
 convert_to_utf8 (string $data)
 UTF-8への変換 [詳解]
 
 convert_to_xdigit (string $data)
 16進エスケープシーケンスへの変換 [詳解]
 
 enum (array $sig, bool $incomplete=false, bool $omit_semicolon=false)
 列挙体定義の生成 [詳解]
 
 error (string $message)
 ユーザーエラーを発生させる。 [詳解]
 
 escape_char (string $c)
 文字のエスケープ [詳解]
 
 fn (array $sig, $mode=false)
 関数頭部の生成 [詳解]
 
 get_ini (string $name)
 ini情報を取得 [詳解]
 
 import (string $file)
 前処理対象ソースファイルの取り込み [詳解]
 
 include_guard_macro (string $path)
 インクルードガード用のマクロ名 [詳解]
 
 indent (string $code, int $indent_level=1)
 コードのインデント [詳解]
 
 is_cplusplus ()
 C++かどうかの判定 [詳解]
 
 is_debug_mode ()
 デバッグモードの判定 [詳解]
 
 pascal_case (string $name, bool $camel=false)
 パスカルケースの識別子 [詳解]
 
 print_r ($exp, bool $return=false)
 print_rの結果を標準エラーに出力 [詳解]
 
 set_ini (string $name, $value)
 ini情報の設定 [詳解]
 
 single_line (string $code)
 複数行のコードを1行化 [詳解]
 
 snake_case (string $name, bool $tolower=true)
 スネークケースの識別子 [詳解]
 
 space_to_tab (string $code, int $indent)
 空白を水平タブに変換 [詳解]
 
 static_assert (string $exp, ?string $message=null)
 静的アサーション [詳解]
 
 string_literal (string $s)
 文字列リテラルのコード生成 [詳解]
 
 struct (array $sig, bool $incomplete=false, bool $omit_semicolon=false)
 構造体定義の生成 [詳解]
 
 tab_to_space (string $code, int $indent)
 水平タブから空白への変換 [詳解]
 
 type ($sig)
 型名の取得 [詳解]
 
 union (array $sig, bool $incomplete=false, bool $omit_semicolon=false)
 共用体定義の生成 [詳解]
 
 var_dump (... $exp)
 var_dumpの結果を標準エラーに出力 [詳解]
 
 warning (string $message)
 警告メッセージを出力する。 [詳解]
 

詳解

ユーザーが使用できるAPI群

関数詳解

◆ array_first_key()

pcp\array_first_key ( array  $a)

配列の先頭要素

引数
[in]$a配列
戻り値
$aの最初の要素を返す。$aに要素がない場合はfalseを返す。

◆ autolink()

pcp\autolink (   $library)

オートリンク情報の生成

引数
[in]$libraryライブラリ名

Visual C++の場合は #pragma comment(lib, "$library") を埋め込む。 それ以外はオートリンク情報ファイルにライブラリ名を追記する。

◆ char_literal()

pcp\char_literal ( string  $c)

文字リテラルのコード生成

引数
[in]$c文字
戻り値
文字リテラルのコードを返す。

◆ check()

pcp\check ( bool  $exp,
string  $message 
)

式が偽の場合にエラーを発生させる。

引数
[in]$exp評価する式
[in]$messageエラーメッセージ

◆ clamp()

pcp\clamp (   $value,
  $min,
  $max 
)

値を範囲内に収める。

引数
[in]$value
[in]$min最小値
[in]$max最大値
戻り値
$valueが$minより小さければ$minを、$maxより大きければ$maxを、そうでなければ$valueを返す。

◆ clause()

pcp\clause (   $args)

句の生成

引数
[in]...$args句を構成する字句
戻り値
生成した文字列を返す。

...$argsで指定した字句のうち、文字列または数値だけを抽出し、空白で区切った文字列を生成する。

◆ constant()

pcp\constant ( string  $name)

-Dオプションで定義した値の取得

引数
[in]$name定義値の名前
戻り値
定義値がある場合はその値を、ない場合はnullを返す。

◆ convert_to_encoding()

pcp\convert_to_encoding ( string  $data,
string  $encoding 
)

指定したエンコーディングへの変換

引数
[in]$data変換対象の文字列
[in]$encodingエンコーディング
戻り値
$dataを$encodingで指定したエンコーディングに変換した文字列を返す。

◆ convert_to_ucn()

pcp\convert_to_ucn ( string  $data)

国際文字名への変換

引数
[in]$data変換対象の文字列
戻り値
$dataにASCII以外が含まれていた場合、\uXXXX 形式の国際文字名に変換した文字列を返す。

◆ convert_to_utf8()

pcp\convert_to_utf8 ( string  $data)

UTF-8への変換

引数
[in]$data変換対象の文字列
戻り値
$dataをUTF-8に変換した文字列を返す。

◆ convert_to_xdigit()

pcp\convert_to_xdigit ( string  $data)

16進エスケープシーケンスへの変換

引数
[in]$data変換対象の文字列
戻り値
文字列中のすべての文字を \xXX 形式のエスケープシーケンスに変換した文字列を返す。

◆ enum()

pcp\enum ( array  $sig,
bool  $incomplete = false,
bool  $omit_semicolon = false 
)

列挙体定義の生成

引数
[in]$sigシグニチャ情報
[in]$incomplete不完全宣言を生成する場合はtrueを指定する。
[in]$omit_semicolon末尾のセミコロンを省略する。
戻り値
生成した文字列を返す。

シグニチャには以下の仕様の配列を指定する。

キー
'enum' タグ名 , [タグ名], [ タグ名, 'class', 型名 ] or [ タグ名, null, 型名 ]
0 [ 列挙子 or 列挙子 => 定数式, ... ]

タグ名にnullを指定すれば、タグ名が省略される。 ただし、$incompleteにtrueを指定した場合には、タグ名がnullであってはならない。

配列を用いてタグ名を指定する場合、2番目の要素に 'class' を指定すると、enum class が生成される。 3番目の要素に型名を指定すると、enum : 型名が生成される。 'class'を省略して型名だけを指定する場合、必ず2番目の要素にはnullを指定すること。
なお、CまたはC++98を指定した場合は、'class'および型名は単に無視される。

列挙子は文字列で指定する。

定数式には、整数値または式を表す文字列を指定する。

例)

[
'enum' => [ 'fruit', 'class', 'short' ],
[
'orage',
'apple' => 5,
'banana'
]
]
↓ 上記のシグニチャは下記のように変換される。
enum class fruit : short
{
orange,
apple = 5,
banana
};

◆ error()

pcp\error ( string  $message)

ユーザーエラーを発生させる。

引数
[in]$messageエラーメッセージ

◆ escape_char()

pcp\escape_char ( string  $c)

文字のエスケープ

引数
[in]$c文字
戻り値
必要に応じてエスケープシーケンスに変換した文字列を返す。

制御文字や引用符等のエスケープを行う。

◆ fn()

pcp\fn ( array  $sig,
  $mode = false 
)

関数頭部の生成

引数
[in]$sigシグニチャ
[in]$modeセミコロンの有無を指定するboolean値、または宣言を出力するファイル名
戻り値
生成した文字列を返す。

シグニチャには以下の仕様の配列を指定する。

キー
'fn' 関数名 or [ 関数名, 記憶クラス指定子, 関数指定子 ]
'template' [ [ テンプレート仮引数名 => 種別 or [ 種別, 省略時実引数 ], ... ]
0 [ [ 仮引数名 => 型名 or [ 型名, 省略時実引数 ], ... ]
1 返却値型, 'auto', or [ 'auto', 返却値型 ]

関数名にnullを指定すれば、関数名が省略される。 ただし、$omit_semicolonにfalseを指定した場合には、関数名がnullであってはならない。

記憶クラス指定子には'extern'、'static'、'constexpr'を指定することができる。 記憶クラス指定子は省略可能だが、関数指示子を指定する場合はnullを指定することで記憶クラス指定子がないことを表すこと。

関数指定子には'inline'、'virtual'、'explicit'を指定することができる。 関数指定子は省略することができる。

'template'キーに対応する配列には、テンプレート仮引数並びを指定する。 テンプレート仮引数並びにおける種別は、'class'、'typename'または型名を指定する。 種別の型名に 'template' => 配列を指定することで、テンプレートテンプレート仮引数を表現することができる。

返却値型は文字列で指定する。 なお、返却値型名の文字列中にsを含む場合、sの部分に関数宣言子とが入る。

には次のいずれかを指定する。

  • セミコロンの有無を指定するboolean値(falseでセミコロンを出力する)
  • 宣言を出力するファイル名

宣言を出力するファイル名を指定した場合、関数を定義すると同時に、関数宣言を別のファイルにに追記することができる。

◆ get_ini()

pcp\get_ini ( string  $name)

ini情報を取得

引数
[in]$nameパラメータ名
戻り値
$nameに対応する情報があれば文字列として返す。そうでなければfalseを返す。

◆ import()

pcp\import ( string  $file)

前処理対象ソースファイルの取り込み

引数
[in]$fileソースファイル名
戻り値
正しく取り込めた場合はtrueを、取り込んだソースファイルの評価でエラーや例外が生じた場合はfalseを返す。
例外
Exception::$pathがnullの場合に発生PCPの根幹となる関数。 import関数によってソースコードを取りこむことで、PHPによる前処理が可能になる。 また、元のソースコードがどんな文字エンコーディングを使用していた場合でも、いったん内部的にUTF-8に変換して扱う。

pcp\importではなく、PHPの言語構造であるincludeやrequireを用いた場合、前処理や文字エンコーディングの変換は行わない。 また、たとえ -M オプションを指定していた場合でも、依存情報の生成対象とならない。

// pcp\importを用いた場合、ソースファイルを取りこむ段階で前処理を行う。
<?php pcp\import('header1.pcp'); ?>
// includeやrequireを用いた場合、ソースファイルを前処理無しで取りこむ。
// また、-Mオプションを用いた場合でも依存情報の生成対象とならない。
<?php include('header2.pcp'); ?>
int main()
{
std::cout << "hello" << std::endl;
}

◆ include_guard_macro()

pcp\include_guard_macro ( string  $path)

インクルードガード用のマクロ名

引数
[in]$pathインクルードファイルのパス名
戻り値
$pathに対応するマクロ名を返す。

マクロ名は、INC_に続き、$pathを大文字に変換した文字列のうち英数字以外を下線に変換したものを連結し、末尾に下線を付加したものとする。

◆ indent()

pcp\indent ( string  $code,
int  $indent_level = 1 
)

コードのインデント

引数
[in]$code変換対象のコード
[in]$indent_levelインデントレベル
戻り値
インデントしたコードを文字列として返す。

◆ is_cplusplus()

pcp\is_cplusplus ( )

C++かどうかの判定

戻り値
C++の場合はtrueを、そうでなければfalseを返す。

◆ is_debug_mode()

pcp\is_debug_mode ( )

デバッグモードの判定

戻り値
デバッグモードの場合はtrueを、そうでない場合はfalseを返す。

◆ pascal_case()

pcp\pascal_case ( string  $name,
bool  $camel = false 
)

パスカルケースの識別子

引数
[in]$name識別子の元となる単語列
[in]$camelキャメルケースにする場合はtrueを指定する。
戻り値
生成した識別子を返す。

$nameに含まれる単語の先頭を大文字にして連結する。 $camelにtrueを指定した場合、識別子の最初の文字は小文字に変換する。 生成した識別子の先頭が数字の場合、先頭に下線を付加する。

◆ print_r()

pcp\print_r (   $exp,
bool  $return = false 
)

print_rの結果を標準エラーに出力

引数
[in]$exp
[in]$return結果を返り値として返す場合はtrue
戻り値
$returnがtrueの場合は結果の文字列を返す。それ以外の場合はtrueを返す。

◆ set_ini()

pcp\set_ini ( string  $name,
  $value 
)

ini情報の設定

引数
[in]$nameパラメータ名
[in]$value設定する値
戻り値
以前に設定されていた値を返す。以前に設定されていた値がない場合はfalseを返す。

◆ single_line()

pcp\single_line ( string  $code)

複数行のコードを1行化

引数
[in]$code元のコード
戻り値
生成した文字列を返す。

◆ snake_case()

pcp\snake_case ( string  $name,
bool  $tolower = true 
)

スネークケースの識別子

引数
[in]$name識別子の元となる単語列
[in]$tolower大文字・小文字を維持する場合はfalseを指定する。
戻り値
生成した識別子を返す。

$nameに含まれる単語を下線で連結する。 $tolowerがtrueの場合、生成した文字列中の英字はすべて小文字になる。 $tolowerを省略した場合はtrueとして扱う。 生成した識別子の先頭が数字の場合、先頭に下線を付加する。

◆ space_to_tab()

pcp\space_to_tab ( string  $code,
int  $indent 
)

空白を水平タブに変換

引数
[in]$code変換対象のコード
[in]$indentインデント幅
戻り値
成功した場合は変換後のコードを文字列として返す。失敗した場合はnullを返す。

◆ static_assert()

pcp\static_assert ( string  $exp,
?string  $message = null 
)

静的アサーション

引数
[in]$exp評価する式
[in]$messageメッセージ文字列
戻り値
生成した文字列を返す。

◆ string_literal()

pcp\string_literal ( string  $s)

文字列リテラルのコード生成

引数
[in]$s文字列
戻り値
文字列リテラルのコードを返す。

◆ struct()

pcp\struct ( array  $sig,
bool  $incomplete = false,
bool  $omit_semicolon = false 
)

構造体定義の生成

引数
[in]$sigシグニチャ情報
[in]$incomplete不完全宣言を生成する場合はtrueを指定する。
[in]$omit_semicolon末尾のセミコロンを省略する。
戻り値
生成した文字列を返す。

シグニチャには以下の仕様の配列を指定する。

キー
'struct' タグ名 or [ タグ名 ]
0 [ [ メンバ名 => 型名 ], ... ]

タグ名にnullを指定すれば、タグ名が省略される。 ただし、$incompleteにtrueを指定した場合には、タグ名がnullであってはならない。

型名は文字列で指定する。 なお、型名の文字列中にsを含む場合、sの部分にメンバ名が入る形でフィールドが定義される。

◆ tab_to_space()

pcp\tab_to_space ( string  $code,
int  $indent 
)

水平タブから空白への変換

引数
[in]$code変換対象のコード
[in]$indentインデント幅
戻り値
成功した場合は変換後のコードを文字列として返す。失敗した場合はnullを返す。

◆ type()

pcp\type (   $sig)

型名の取得

引数
[in]$sig内部型名またはシグニチャ
戻り値
型名を返す。

(内部表現ではない)実際のソースコードに埋め込む型名を取得する。

◆ union()

pcp\union ( array  $sig,
bool  $incomplete = false,
bool  $omit_semicolon = false 
)

共用体定義の生成

引数
[in]$sigシグニチャ情報
[in]$incomplete不完全宣言を生成する場合はtrueを指定する。
[in]$omit_semicolon末尾のセミコロンを省略する。
戻り値
生成した文字列を返す。

シグニチャには以下の仕様の配列を指定する。

キー
'union' タグ名 or [ タグ名 ]
0 [ メンバ名 => 型名, ... ]

タグ名にnullを指定すれば、タグ名が省略される。 ただし、$incompleteにtrueを指定した場合には、タグ名がnullであってはならない。

型名は文字列で指定する。 なお、型名の文字列中にsを含む場合、sの部分にメンバ名が入る形でフィールドが定義される。

◆ var_dump()

pcp\var_dump (   $exp)

var_dumpの結果を標準エラーに出力

引数
[in]...$exp式の並び

◆ warning()

pcp\warning ( string  $message)

警告メッセージを出力する。

引数
[in]$message警告メッセージ