タスクシステムについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
宗一郎

タスクシステムについて

#1

投稿記事 by 宗一郎 » 14年前

いつもお世話になっております。

さっそくですが、タスクシステムのサンプルで分からないところがあったので質問させていただきました。

・カンマで区切られた*nextはTASK型の宣言という認識で合っていますでしょうか?
・for文の終了条件はどのようになっているのでしょうか?

終了条件を条件式以外で書かれていることやカンマで区切られていることによってどのようになっているのか
よく分かりません><

どうかよろしくお願いしますm(_ _)m

以下サンプル
===============================================================================
// タスクの構造体
struct TASK {
       // 処理関数へのポインタ
    void (*Func)(TASK* task);
       // 前後タスクへのポインタ
       TASK* Prev;
       TASK* Next;
       // ワークエリア
       char Work[256];
};

// タスクリストの先頭へのタスクへのポインタ
TASK* FirstTask;
// タスクの実行
void RunTask() {
    for (TASK *task = FirstTask, *next;
        next = task->Next, task; task = next)
        (*task->Func)(task);
}
===============================================================================

softya

Re:タスクシステムについて

#2

投稿記事 by softya » 14年前

まず順次(カンマ)演算子を理解してください。
http://devdoc.kikyou.info/tvp/docs/tjs2 ... nd_op.html

で、
TASK *task = FirstTask, *next
はTASK構造体型の変数の宣言です。

分けて書くと
TASK *task = FirstTask
TASK *next
と言う2つの宣言です。

で、
next = task->Next, task
は順次演算子で
next = task->Next

task
の2つの式です。
順次演算子としては、最後のtaskがforの式として扱われるのでtaskがNULLならforを抜けてtaskのポインタ値に有効な値が入っている間はループです。

宗一郎

Re:タスクシステムについて

#3

投稿記事 by 宗一郎 » 14年前

回答ありがとうございます^^

カンマについてはだいたい理解していたのですが、
for文の形がいつも使っていたもの
for(int i = 0; i < 5; i++)
のような形と違っていたので、少し戸惑ってしまいました。

おかげさまで理解できました。
ありがとうございました。

宗一郎

Re:タスクシステムについて

#4

投稿記事 by 宗一郎 » 14年前

すみません。
解決にチェックを入れ忘れていました。

softyaさん
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る