Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

本日見かけた酷いコード2

タグ: C++ 酷いコード
// 構造体の中身は適当に簡略化
struct foo
{
	int val;
};

// こっちも簡略化
struct bar
{
	int val;
};

// qsortみたいな関数のコールバック
int comp(const void* lhs, const void* rhs)
{
	foo* p1;
	bar* p2;
	
	p1 = reinterpret_cast<foo*>(const_cast<void*>(lhs));
	p2 = reinterpret_cast<bar*>(const_cast<void*>(rhs));
	
	if(p1->val < p2->val)
		return -1;
	if(p1->val > p2->val)
		return 1;
	else
		return 0;
}

さすがに前回ほどの衝撃はなく、いたって普通のダメコード。

普通に書いたらこんな感じになるだろう。

	const foo* p1 = static_cast<const foo*>(lhs);
	const bar* p2 = static_cast<const bar*>(rhs);

書き方から推察するに、最初はC形式のキャストを使っていたものの、静的解析(QAC)に駄目出しされたため、できるだけアルゴリズムに変更が生じないよう静的解析を誤魔化す方法を模索した結果、この形に至ったものと思われる。
まさか普段からC++形式のキャストを使っている人がconstを付けるよりも剥がす方を優先したりしないだろうし。

しかしまあなんというか、良いコードを書こうと思わない人(あるいはそれを良しとしない環境)にとって、静的解析は宝の持ち腐れだよね……

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/16-597ed69c
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。