9.2 #assert

System V リリース 4 の #assert プリプロセッシング拡張機能がサポートされています。これらの拡張機能によって、述語名を定義およびテストできるようになります。

このような名前はネームスペース内に配置され、マクロ名を含む他のすべての名前と区別されます。

構文

#assert name
#assert name [( token-sequence )]
各項目には以下の意味があります。
name
述語名
token-sequence
オプションのトークンシーケンス。
トークンシーケンスを省略した場合、 name に値は指定されません。
トークンシーケンスを含めた場合は、 name token-sequence 値が指定されます。

使用法

#assert を使用して定義した述語名は、例えば以下のように、#if 式でテストできます。
#if #name(token-sequence)
この結果、 token-sequence トークンシーケンスが含まれた、 指定した名前 name #assert が検出された場合は 1 が返され、検出されなかった場合は 0 が返されます。
述語は複数の値を持つことができます。つまり、後のアサートは前のアサートをオーバーライドしません。

以下の例では、複数の値を割り当てて、その結果の #if 式を示しています。
#assert foo(one)      // 値 "one" を割り当てる
#assert foo(two)      // 値 "two" を割り当てる
#assert foo(three)    // 値 "three" を割り当てる
#unassert foo(two)    // 値 "two" の割り当てを解除する
        
#if #foo(one)...// 1
#if #foo(two)...// 0、その理由は #unassert
#if #foo(three)...// 1
#if #foo(four)...// 0、その理由はこの値が一度もアサートされなかったため
関連する参考文書
9.4 #unassert
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.