私は与えられたコードを理解しようとしています。 pthread_create
と同様に動作します。start_routine
へのポインタを渡します。このポインタには、voidのポインタarg
を引数と引数ポインタとして受け取り、次にpthread_create
が関数を呼び出します。マクロを使ってpthreadのstart_routine引数をキャストする
通常、start_routine
には引数が必要な場合はvoid *
は必要ありませんが、arg
は構造体へのポインタにキャストする必要があります。
void *my_start_routine(void *arg)
{
#define p ((struct my_struct *) arg)
// use p many times
#undef p
}
を:
void *my_start_routine(void *arg)
{
struct my_struct *p = arg;
// use p many times
}
しかし、私はちょうど著者が毎回p
が使用されているキャストを行うには、マクロを設定し、コードを受け取っ:過去には、私はこのように私のstart_routine
sがコード化されてきました
なぜあなたはこれをやりたいのか分かりません。しかし、私はそれが熟考されていると仮定しています。なぜなら、最初の方法よりも難しく、あまり明白ではないように見えます。ここでマクロを好む理由やパフォーマンス、その他の理由はありますか?
ありがとう、すべて。それは、生徒が別の生徒のコードを理解しようとしている場合、つまり、視覚障害者が視覚障害者を誘導しているケースです。説明がつかない何かに出くわしたとき、私が愚かであるか、狂っているか決して決めることができないことは、あまり知られていません。 –