3

Cプログラミングに関しては、サンプルコードで、ポインタの割り当てに、左側のオペランドのタイプとすでに一致している場合でも、右側のオペランドの明示的なキャストが含まれるケースがいくつか見られます。ほんの一例:

void memcpy(u8int *dest, const u8int *src, u32int len)
{
    const u8int *sp = (const u8int *)src;
    u8int *dp = (u8int *)dest;
    for(; len != 0; len--) *dp++ = *sp++;
}

もちろん、関数はヘッダーファイルで次のように正しく宣言されています。

void memcpy(u8int * dest, const u8int * src, u32int len);

この関数はすでに変数「src」をタイプ「constu8int*」として定義していますが、タイプ「const u8int *」でもある「sp」に割り当てられたときに明示的なキャストが与えられるのはなぜですか?「dest」から「dp」への割り当てについても同じことが言えます。

4

4 に答える 4

5

あなたがこれをするための魔法の神秘的な理由を探しているなら、あなたは失望するでしょう。このタイプの明示的な型キャストには意味がありません。

これはプログラマーのスタイルの決定(そしてIMOは悪い決定)でした。型キャストには潜在的な危険性があり(重要な警告を「マスク」することにより)、コードの読み取りがより複雑になります...必要な状況のために予約する必要があります。これはそれらの1つではありません。

于 2013-01-22T17:19:03.303 に答える
1

それらがすでに同じタイプである場合、これを行うことは使用できません。そして、それはもちろん悪い習慣です。

おそらくあなたは間違った本を読んでいます。

于 2013-01-22T17:20:14.127 に答える
1

私の推測では、これは検索/置換操作の残りの部分であり、これを行う理由はありません。

于 2013-01-22T18:14:36.703 に答える
0

彼は、コードを宗教的に書いているだけで、その背後にある意味はありません(習慣)。

このコードを書いたプログラマーだけが、自分が何をしていたかを知っています(または知らない)。同じ名前の関数を2つ持つことはできないため、この関数はmemcpy()fromを上書きする可能性があります。string.hそれを知って、彼は危険な海にいます。そして、あなたがこれを使わなければならないならあなたも。

于 2013-01-22T17:20:54.617 に答える