私は他の誰かのコードをデバッグしようとしています。深刻だと思われるグローバル配列を処理する特定の方法を見つけましたが、最初にそれを使用した人はそれを誓います。 私はそれに対して議論を見つける必要があります。 ここに簡略化されたコードがあります(これは元のコードではなく、抽象版です)。静的intポインタに対する引数
私の質問:どのような議論をするでしょうか?
int test(int i, int v, int type, int** t)
{
static int *teeest;
int result = 0;
switch(type)
{
case (1):
{
int testarr[i];
teeest = testarr;
}
break;
case (2):
result = teeest[i];
break;
case (3):
teeest[i] = v;
break;
}
if (t != NULL)
{
*t = teeest;
}
return result;
}
int main()
{
int *te = (int*)1;
test(5, 0, 1, &te);
printf("%p\n", te);
int i=0;
for(;i<5;i++)
{
test(i, i, 3, NULL);
printf("Value: %d\n", test(i,0,2, NULL));
}
return 0;
}
は、グローバル配列よりも悪いです。関数呼び出しのオーバーヘッドがそのアクセスに追加されるためです。 –
これを書いた人は誰でも同等のもの、あるいは少なくともブラックハット部門に移管されていなければなりません。これは実際に実装の詳細に依存するこのような凶悪なハックが有用であるためです。 –
私はいつもあなたが5人の開発者に尋ねることができるときに実装について笑います。そして、すべての単一の開発者は、コードが悪い考えである別の理由を与えます。なぜコードが悪いのかについて全員が同意できない場合でも、すべてが同意しないと同意できない場合は、それは悪いです。それは本当にそれを修正する時間です。 –