フロー制御ステートメントOrigin Cは、 if, if-else, switch, for, while, do-while, goto, break, continue を含むANSI Cのすべてのフロー制御をサポートしています。さらに、Origin CはC#のforeachサポートし、オブジェクトのコレクションをループすることができます。
if Statementif-else Statementif ステートメント
if ステートメントは、条件分岐に使われ、条件がTrueの場合にステートメントブロックを実行します。 if-else ステートメントは、if ステートメントに似ていますが、if-else ステートメントは、条件の結果がFalseの場合に代替えのステートメントブロックを実行します。
以下は、異なる入力タイプを使った、Origin Cのif ステートメントのサンプルです。
bool bb = true; // ブール型
if( bb )
{
out_str("bb is true");
}
int nn = 5;
if( nn ) // 整数型, 0 = false, 非ゼロ = true
{
out_str("nn not 0");
}
double* pData = NULL;
if( NULL == pData ) // ポインタが NULLの場合チェック
{
out_str("Pointer pData is NULL");
}
次は、Origin Cのシンプルな if-else ブロックです。ifブロックとelseブロックが中括弧{}で囲まれています。
if( bRet )
{
out_str("Valid input"); // bRetがtrueのとき
}
else
{
out_str("INVALID input"); // bRet がfalseのとき
}
ifステートメントが1つのステートメントしか持たない場合、中括弧は任意です。 これは、上記のコードが中括弧無しで書けるということを意味します。
if( bRet )
out_str("Valid input"); // bRetがtrueのとき
else
out_str("INVALID input"); // bRetがfalseのとき
switch Statementswitchステートメント
switch ステートメントは、相互に排他的な選択肢によって、異なるステートメントブロックを実行する必要があるときに使われます。
ケースは、昇順の整数で、switch ステートメントに整数の引数で与えられる数値で開始します。 break コマンドは、どのケースでもswitchブロックを抜けます。
switch( nType ) // 条件として整数型の値
{
case 1:
case 2:
out_str("Case 1 or 2");
break;
case 3:
out_str("Case 3");
// breakキーワードがないとcase 4を実行
case 4:
out_str("Case 4");
break;
default:
out_str("Other cases");
break;
}
for Statementloop Statementfor ステートメント
for ステートメントは、指定した回数または各要素がインデックスで参照しているデータの配列によって、1つ以上のステートメントを実行するのに使われます。
char str[] = "This is a string";
for( int index = 0; index < strlen(str); index++ )
{
printf("char at %2d is %c\n", index, str[index]);
}
while/do-while Statementwhile ステートメント
While と do-whileステートメントは、条件が合致するまでステートメントブロックを実行します。 while ステートメントは、ループの最初に条件を検査し、do-while ステートメントは、ループの最後に条件を検査します。
int count = 0;
while( count < 10 ) // 条件がTrueの場合にステートメントを実行
{
out_int("count = ", count);
count++;
}
int count = 0;
do
{
out_int("count = ", count);
count++;
} while( count < 10 ); // 条件がTrueの場合にステートメントを実行
ジャンプステートメント
ジャンプステートメントは、関数の範囲内で、無条件に別のステートメントにジャンプ するのに使います。 break, continue, goto ステートメントがジャンプステートメントです。 次のサンプルはこれらのジャンプステートメントを示します。
break Statementbreak
for( int index = 0; index < 10; index++ )
{
if( pow(index, 2) > 10 )
break; // ループの終了
out_int("index = ", index);
}
continue Statementcontinue
printf("The odd numbers from 1 to 10 are:");
for( int index = 1; index <= 10; index++ )
{
if( mod(index, 2) == 0 )
continue; // 次のインデックス
printf("%d\n", index);
}
goto Statementgoto
out_str("Begin");
goto Mark1;
out_str("Skipped statement");
Mark1:
out_str("First statement after Mark1");
foreach Statementforeach ステートメント
foreach ステートメントは、オブジェクトのコレクションをループするのに使われます。 次のコードは、プロジェクト内のすべてのページをループし、その名前とタイプを出力します。
foreach(PageBase pg in Project.Pages)
{
printf("%s is of type %d\n", pg.GetName(), pg.GetType());
}
Origin Cのクラスに基づくすべてのCollectionのリストについては、コレクションのセクションを参照してください。
|