気付けば「何だ」と思うよーなMiss[c/c++]
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGCString s1, s2;
s1 += "aho" + '\n';
s2 = s2 + "aho" + '\n';
s1が駄目。
0002デフォルトの名無しさん
NGNGすんません。厨房なんで解説きぼん。
0003デフォルトの名無しさん
NGNG実際にMessageBoxとかしてみたらかくにんできるよん。
演算子の優先順位の関係で+=より先に+が評価される。
"aho"はCStringじゃないんで、アドレスの足し算
&("aho") + '\n'(0x0Aだったっけ?)をCString::operator+=
と言う形になる。
MessageBoxとかしたらごみが出たりするかも。
warningとかでないから見落としやすいっすね。
+の後ろが''なのがポイント。"aa"とかだったらコンパイルエラーになるから。
って、さっき他人に指摘されたんでえらそーなこといえないっすけど。(藁
0004デフォルトの名無しさん
NGNGこれ減らすこと出来ないかな
0005デフォルトの名無しさん
NGNGif('3'==a)と書く癖をつけろ。
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG...
if (bHoge == TRUE)
{
...
}
とか。
TRUE == 1だけどBOOLが0以外を返却となっている時はシカトされる。
Win32API/MFCなんかでは要注意。
初期化不良の事も考えればboolにしてもありえる話。
bool b /*=0xcc*/とかね。
0008デフォルトの名無しさん
NGNGbA=FuncA();
bB=FuncB();
if(bA==bB)
{
...
}
で泣いた事があります。
typedef int BOOL
なんだよね。
0009SAGE
NGNG0010デフォルトの名無しさん
NGNGそれはよく言われるけど、
可読性が下がるから、多人数での開発ではあかんでしょ
0011デフォルトの名無しさん
NGNG成功失敗は、BOOL ではなく、
typedef int RESULT;
#define RET_SUCCESS 1
#define RET_FAILURE 0
とか定義して、
if( RET_SUCCESS == hoge()){
}
とかしたほうがいいと思う。
「この関数って、0 と 1 のどっちが 成功だっけ? -1 か?」
って悩まなければいけないから。
0012デフォルトの名無しさん
NGNGあるねえ。
データメンバにクラス内でnewしてるようなオブジェクトあったりしたら
どこが原因なのか見つけにくいメモリリークとかあったりするんだよねえ。
0013デフォルトの名無しさん
NGNGint num;
if( (num = atoi(buf)) == NULL )
return(FALSE);
ウツ出汁脳
0014デフォルトの名無しさん
NGNGチーム一丸となってそちらにすれば良いのでは?<if('3'==a)
むしろ慣れの問題(と思う)<可読性
タイトルに沿ってないのでsage
0015デフォルトの名無しさん
NGNG{
…
}
0016デフォルトの名無しさん
NGNGchar *buf; // = new char[100]
public:
void operator=( PCSTR szSrc); // buf = szSrc;
operator char*() const { return buf;}
}
xstring str;
str = "hogehoge";
printf( "%s", str); // ×
printf( "%s", (char*)str); // ○
VC++ だと、勝手にキャストされるんだけど、
gcc ( 主にUN*X環境)だと、明示的にキャストしなければ
void* が採用されて、おかしくなる。
0017デフォルトの名無しさん
NGNGint a;
int b;
}
".c"で自作のヘッダをインクルードして使ってたんだけど、そのヘッダの最後がたまたま構造体定義で、最後の";"
が抜けてた。
コンパイルでエラーは出るが、コンパイラは".c"の方に間違いがあると言うので、気付きにくい。
0018デフォルトの名無しさん
NGNGやったよそれ。この間一日悩んだよ。
0019デフォルトの名無しさん
NGNG漏れも。デバッガでトレースしてても気づかないって…。
原因がわかったときには本気で廃業考えたヨ。鬱死。
0020あなたのうしろに名無しさんが・・・
NGNGそのバグってコーディングスタイルをねじ曲げるほど深刻なものなのか?
代入と比較を間違えるバグで悩むなんて、
ほんとうに初心者のころだけじゃないのか?
それにメジャーなコンパイラならたいてい警告出してくれるし。
0021デフォルトの名無しさん
NGNGうーん。俺それ無いなあ。
for(){}って先に括弧全部書きそろえてしまう癖が
ついてるせいかな。
あとfor();はハマルんでfor(){}って書くことにしてるし。
まぁこんなのEmacsとかの住人からすれば笑い話なんだろけど。
雛形(?)の自動生成とか検証とかに強いから。
#俺ぁvi(m)派。職場マシンに好きなエディタいれさせて貰えないのが痛い(T_T)
0022デフォルトの名無しさん
NGNGおいらは、UNIX上の開発でも、基本的に開発用サーバーに Sambaを
入れて秀丸で開発してるよ・・・。
vi は、conf を書き換えたりするときぐらいしか使わないし、
emacs は食わず嫌いだなぁ。覚えたほうがいいのは分かってるんだけどね。
0023デフォルトの名無しさん
NGNGまぁそうなんだけどね…
ただそうしたほうが個人的に「気休めになる」程度。
0024デフォルトの名無しさん
NGNG僕はif ('3' == a)でないと却って効率が悪くなってしまうように
なってしまいました。ちょっと鬱。
でも最近if (a == '3')と書けるようにリハビリしています。
ただ、今まで123 > aと書いていたものをa < 123と書くことが
結構苦痛だということに気付いたりして、さらに鬱。
0025デフォルトの名無しさん
NGNGfor (i=0; i<10; i++)
{
for (j=0; i<100; i++)
{
〜
}
}
いまだに良くやる…
0026デフォルトの名無しさん
NGNG// なんたら〜
}
なぜかたまにやってしまう
0027デフォルトの名無しさん
NGNGコンパイルエラーは対象外っしょ。
0028デフォルトの名無しさん
NGNG漏れ漏れもー
0029デフォルトの名無しさん
NGNGループ変数の廃止、いわゆるイテレータ、まんせー
ちと違うけど最近のdelphiの「ループ変数を勝手に操作したら
コンパイルエラー」っていう一見変な仕様は、
もしかしてそんな場面で役立っているんだろうか?
>>26
for (i=0,j=0;hoge;i++,j++){}
ならよく書くっす(^^;
なので、;と,を間違えたことは無いなあ俺。
0030デフォルトの名無しさん
NGNGLPDIRECTDRAWSURFACE surface1, surface2;
このLP定義って何の意味があるの?
紛らわしいだけなんだけど。
0031デフォルトの名無しさん
NGNG確かに逆に書くことは抵抗があるね。
0032デフォルトの名無しさん
NGNGでも最近の漏れはCの仕様のほうがおかしいとか思って居たり。
ポインターの宣言は「ある型のポインター変数」の宣言じゃなくて
「ある型のポインター型の変数」の宣言ってしたほうがすっきりすると
思う。
0033デフォルトの名無しさん
NGNGint型の変数とポインタを書くとき int a,*p; と書けるのが
便利だったんじゃないの。たぶん。
無駄なタイプはしないという考えならこっちも理があるな。
0034デフォルトの名無しさん
NGNGLPを付けとかないと、何も考えずに
DIRECTDRAWSURFACE surface;
とかやるポインタ厨房がゴキブリのように発生するためだと思われる。
この記述方式だとプログラムが作成された瞬間surfaceを作ろうとするはずだが、その時点ではまだDirectDrawオブジェクトすら出来ていない。
0035デフォルトの名無しさん
NGNGそれ以前に、抽象クラスはインスタンス化できない、とかいわれて
コンパイルエラーになるはずだが。
0037デフォルトの名無しさん
NGNG(HageFuncはIsFooの結果に関係なく常に実行される。)
case 1: Hoge(); Hage(); break;
みたいな感覚でついやってしまうことがあったり。
ぶら下がり文も「ぱっと見」気付きにくいバグの温床だね。
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNGif( 判定1 )
処理1;
if( 判定A ){
処理A;
処理B;
}
else
処理2;
処理1と処理2は排他のつもり。
0040デフォルトの名無しさん
NGNG自分の場合、それを防ぐためにif/elseなどにはかならず{}を付けてます。(中身が1行でも)
0041デフォルトの名無しさん
NGNG俺もそう。スマートインデント機能のあるエディタだったら、if〜のあと
中身を書く前にまず{}を付けて、それから中を埋める。
0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNGFlash5のActionScriptで、
if(a==1){
gotoAndPlay("start");
}
gotoAndPlay("loop");
この gotoAndPlay が goto文ではなく、gosub文だった訳で…。
(処理は"start"に飛ぶのだよ、実際)
「なんで"loop"部分が動くんだ!」と悩みましたとさ。
0044デフォルトの名無しさん
NGNGそのLPがWindowsの歴史を端的に表わしている。
0045デフォルトの名無しさん
NGNG"Ctrl+["を押すと、そのカッコに対応した閉じカッコ"}"まで
ジャンプする機能があるので良く使っていた。
でもVisual C++で同じ機能が見つけられなくて困ってる。
そうゆう機能無いの?
0046デフォルトの名無しさん
NGNGctrl+eな
0047デフォルトの名無しさん
NGNGたとえば、vectorで要素をerase()するとend()で孵ってくる値がずれる。
そういうケースで
vector<xx>::iterator it = hoge.begin();
vector<xx>::iterator itEnd = hoge.end();
for ( ; it != itEnd; ++it)
{
xxx
}
とかやったらはまるよ。
for ( ; it != nv.end());)
{
if (xxx)
{
delete *it;
nv.erase(it);
}
else
{
++it;
}
}
としないと遺憾。
0048デフォルトの名無しさん
NGNGif( bHoge ) {
...
}
にするとよろしかろう。
んでも、Javaだとエラーなんだよなぁ。
0049デフォルトの名無しさん
NGNGctrl+]な
0050デフォルトの名無しさん
NGNGfor ( std::vector<Hoge>::iterator it=con.begin() ; it!=con.end() ; ) {
if ( it->is逝って良し() ) {
it = con.erase(it);
}else{
++it;
}
}
005147
NGNGんだね。すまそ。
ついでにインデント失敗もすまそ。
0054age
NGNG0055>>33
NGNG例えば:
#define errno (*_errno())
int errno;
0056デフォルトの名無しさん
NGNGsi.nPos = max(si.nMin, min(si.nMax-si.nPage, si.nPos));
si.nPos < 0で一周するので何でかなあ?と思って調べてみたら、
SCROLLINFO.nPageがunsignedだったこと(他はsigned)。
デバッグ出力がmin(100, -20)=100とか返してきたから、
一瞬戸惑ったよ。
si.nPos = max(si.nMin, min(si.nMax-(int)si.nPage, si.nPos));
と直した。
0057デフォルトの名無しさん
NGNGif (hoge) hoge->Release, hoge = NULL;
0058デフォルトの名無しさん
NGNGCString oAAA = oAAA + oBBB;
0059デフォルトの名無しさん
NGNGa = func1();
b = func2();
// この時点でa,bともに0.9fだった
if( a==b )
{
// ここ実行されない・・・
}
デバッガで見て同じ値だったと思ってても、実際には誤差があるんでイコールに
ならないんだよね。
誤差関連の処理ウザすぎ。
0060デフォルトの名無しさん
NGNG君のコードダサすぎ。
0061デフォルトの名無しさん
NGNG&nbsp; &nbsp; &nbsp; &nbsp; cout << str << endl;
自らの厨房ッぷりを痛感。
>>15
と同じだった
鬱駄死膿
0064デフォルトの名無しさん
NGNGfloatやdoubleを==で比較するのは、致命的だぞ。
笑ってすませないと思うのだが。
0065デフォルトの名無しさん
NGNG始まるグローバルな関数が複数存在すると、どれかを選択して、
正常終了してしまう、とんでもないオプティマイズを行うソフト。
0066名無しやん
NGNGSTATE1:
....
break;
STATE2:
....
break;
default:
break;
}
ごくたまにやってしまう。
0067デフォルトの名無しさん
NGNG...
defalt:
// なぜとおらんのや!?
}
で1日悩んだ。
006866
NGNG006966
NGNG007066
NGNG007166
NGNG007266
NGNGsage。
0073デフォルトの名無しさん
NGNGresult = Pack(theAddr);
return result;
結果が変なので、デバックを繰り返し、どうやらresultの値がおかしい。
ってとこまで突き止めたんだけど、何がダメなのか分からず、約一時間も
悩んでしまった・・・。
「ちょっと休憩しよう」ってことで、お昼を食べて、くつろいだ後、
もう一度みたら、一瞬でミスを見つけた。あの、一時間がもったいない・・・。
007473
NGNGif (theAddr == 1)
が正しいです。
0075デフォルトの名無しさん
NGNGswitch(message){
case WM_INITDIALOG:
// aaa();
// break;
case WM_COMMAND:
EndDialog(hDlg);
break;
}
ダイアログが出なくて1時間悩んだ。
0076デフォルトの名無しさん
NGNGint nHage = 100100;
...
if (jyoken)
{
int nHage;
ASSERT(nHage == 100100);
}