melt日記

.NETすらまともに扱えないへたれのページ

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  111  : 記事  3  : コメント  8241  : トラックバック  41

ニュース

わんくま同盟

わんくま同盟

C# と VB.NET の質問掲示板

iKnow!


Dictation



書庫

今のプロジェクト、毎週コードチェックの日があります。

他の人がチェックインしたファイルを読んで、ここは間違ってるとかここは変じゃない?ということをお互いに指摘し合います。


自分は下っ端なのでチェックすることはあまり無いのですが、それでも時々はチェックしています。


自分は現在のアプリケーションの仕様についてはあまり理解していないので、設計的な指摘よりもミクロな部分ばかり指摘しています。

今まで指摘してきたのは、例えばこんな感じです。


1.

std::auto_ptr<char> pBuffer(new char[BUFFER_SIZE]);

char は POD 型なので問題ないですが、std::auto_ptr は delete で解放するので delete[] で解放する必要のあるポインタに対して使ってはいけないと思います。


2.

(progress > total) ? total : progress

std::min を使った方が分かりやすいと思います。


3.

if (m_pHoge)
{
    delete m_pHoge;
    m_pHoge = NULL;
}

null ポインタに対する delete は、C++ 規格上は安全です。

よって、(よっぽどひどい operator delete を定義していない限りは)null チェックをする必要は無いと思います。


4.

std::string str = ...;
DWORD ret = GetFileAttributes(str.c_str());

str は std::string なので、GetFileAttributesA を使用する必要があると思います。


5.

CString str = ...;
TCHAR dest[MAX_LENGTH] = { 0 };
_tcsncpy(dest, str, _countof(dest));

str.GetLength() が _countof(dest) 以上だった場合、dest には null 文字がコピーされず(_tcsncpy の仕様)問題が発生すると思います。


6.


void ErrorMsg(const TCHAR* sz, const char* file, int line)
{
    TCHAR msg[1024];
    _stprintf_s(msg, _countof(msg), _T("%s[%d] : %s"), file, line, sz);
    ::MessageBox(NULL, msg, NULL, MB_OK);
}

1個目の %s は %hs を指定する必要があります。



コードチェックは、する側もされる側も良い勉強になりますし、未然にバグを防げることもあります(というかこれがメインなのですが)。

また、他人に見られるという意識を持つことによって、書く側もそれなりに気を使って書いてくれるようになります。


他人のコードを読んでけちを付ける指摘するのはなかなか面白いものがあります。

是非試して頂ければと思います。

投稿日時 : 2008年5月27日 17:20

コメント

# re: [C++]コードチェック 2008/05/27 17:43 アキラ
7.GetFileAttributesA には const char* を渡さないといけないと思います c_str

# re: [C++]コードチェック 2008/05/27 17:46 επιστημη
> std::string str = ...;
> DWORD ret = GetFileAttributes(str);

GetFileAttributesA(str.c_str());

がせーかいだと思いまーす。


# re: [C++]コードチェック 2008/05/27 17:46 はつね
常にチェックしあって、ペアプログラミングにまで発展させても面白いかもね。


# re: [C++]コードチェック 2008/05/27 17:47 επιστημη
先を越されたー orz


# re: [C++]コードチェック 2008/05/27 18:39 Mr.T
チーム一人の場合は、どうしたらいいでしょうか...

# re: [C++]コードチェック 2008/05/27 19:19 melt
>GetFileAttributes
あー、そでした。移植ミスです。

>ペアプログラミングまで発展させても面白いかもね
ですねー、ペアプログラミングってやったことないのでどれぐらい効果があるのかよく知らなかったりしますがw

>チーム一人
綺麗さっぱり忘れた頭にして見直すぐらいでしょうかね……。

# re: [C++]コードチェック 2008/05/28 1:32 ゆう
毎週コードチェックの日があるというのはいいですね。
他の人からの指摘は勉強になります。

6の「1個目の %s は %hs を指定する必要があります。」の指摘ですが、
_UNICODEがdefineされているという前提でしょうか?

# re: [C++]コードチェック 2008/05/28 9:49 melt
>_UNICODEがdefineされているという前提でしょうか?
_T() を付けているということは MBCS も UNICODE も対応したいということなので、_UNICODE が define されていてもいなくても %hs にしないと、論理的におかしいのです。
これは4.も同じですね。

# re: [C++]コードチェック 2008/05/28 10:32 uskz
うちの会社でコードチェックしたら全部変だになっちゃいます><

# re: [C++]コードチェック 2008/05/28 11:02 melt
どんなコードなのか是非教えてくだしあ><

# re: [C++]コードチェック 2008/05/28 15:17 uskz
とりあえず今目に付いたものを 笑

if (p == null) {
} else {
if (p != null) {
// ここに数百行
}
}

# re: [C++]コードチェック 2008/05/28 17:11 melt
全部変だ

# re: [C++]コードチェック 2008/05/29 1:24 ゆう
> _T() を付けているということは MBCS も UNICODE も対応したいということなので、_UNICODE が define されていてもいなくても %hs にしないと、論理的におかしいのです。

ごめんなさい、hsを間違って覚えていました。
hsは常にLPSTRだと解釈するのですね。
1度確認してからコメントすれば良かったです。

また、間違っていそうで怖いのですが、
6の_countof(1024)は_countof(msg)ではないでしょうか。

_countofを検索してみたらmeltさんの記事を見つけて
とても勉強になりました。
http://blogs.wankuma.com/melt/archive/2008/03/08/126828.aspx

# re: [C++]コードチェック 2008/05/29 9:47 melt
>6の_countof(1024)は_countof(msg)ではないでしょうか。
あうあう、自分のミスです。
修正しておきます。

# PUyQPBoNyCHG 2014/08/04 3:48 http://crorkz.com/
EwD5nQ Very good article post.Thanks Again. Really Great.

# AaBPRvQEfQ 2014/08/05 5:14 http://crorkz.com/
hVvKX4 Appreciate you sharing, great post.Much thanks again. Awesome.

# Hgaps Hdv Nfaq Igx Smvgdg 2014/12/06 15:38 Donaldliex
regularly throughout the last several years, even though the People from france cuff may be essentially the most exclusive form of top. The more costly cufflinks ever offered had been some directed at typically the soon-to-be King Edward cullen VIII by the later on better half Wallis Simpson. These highlighted precious gems occur gold along with bought at market forbeautiful screen of fashion and architectural will probably harmonise together with just about any costume, official or laid-back, in this article an important function untouched with Bob beliefs regarding simplicity, a new cufflink for all those instances.

http://www.netasqindia.com/files/201412315134715465.html
http://www.3wayventure.com/files/20141231511870475.html
http://www.tickledpinkboutiqueandgift.com/files/201412315212054339.html
http://www.greco.com/files/201412315215441398.html
http://www.cannonloadbanks.com/files/20141231574992994.html
http://www.3wayventure.com/files/201412315104611277.html
http://kcharrison.com/files/201412315153956778.html
http://www.esquirestaffing.com/files/20141231523841395.html
http://technoplumbing.net/files/201412315301792780.html
http://kcharrison.com/files/201412315153924727.html
http://www.shanegordonbooks.com/acc/20141221750848875.html
http://www.jamielindmeyer.com/acc/201412217463636584.html
http://www.djscuba.com/acc/201412217501815125.html
http://www.universityofiron.org/acc/201412217515450280.html
http://www.generatorquotes.com/acc/201412217423275764.html
http://www.admissionpros.com/files/201412215133734384.html
http://www.patslien.com/files/201412215175558473.html
http://www.rochet.com/files/20141221661620309.html
http://www.selectagency.com/files/201412215332260299.html
http://www.rvpianos.com/files/201412215122473767.html


# tsdEYbhAsjaYpuC 2021/07/03 3:59 https://www.blogger.com/profile/060647091882378654
You made some decent points there. I looked online for that problem and located most individuals will go coupled with in conjunction with your web internet site.

# re: [C++]??????? 2021/07/17 23:04 hydroxychloroquine hcq
what is chloroquine https://chloroquineorigin.com/# hydroxychoroquine

Post Feedback

タイトル
名前
Url:
コメント