気付けば「何だ」と思うよーなMiss[c/c++]

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
こんなのどうでしょう。

CString s1, s2;
s1 += "aho" + '\n';
s2 = s2 + "aho" + '\n';

s1が駄目。
2デフォルトの名無しさん:2001/04/06(金) 12:48
>>1
すんません。厨房なんで解説きぼん。
3デフォルトの名無しさん:2001/04/06(金) 13:11
>>2
実際にMessageBoxとかしてみたらかくにんできるよん。

演算子の優先順位の関係で+=より先に+が評価される。

"aho"はCStringじゃないんで、アドレスの足し算
&("aho") + '\n'(0x0Aだったっけ?)をCString::operator+=
と言う形になる。

MessageBoxとかしたらごみが出たりするかも。
warningとかでないから見落としやすいっすね。
+の後ろが''なのがポイント。"aa"とかだったらコンパイルエラーになるから。

って、さっき他人に指摘されたんでえらそーなこといえないっすけど。(藁
4デフォルトの名無しさん:2001/04/06(金) 14:38
if(a='3') と if(a=='3') の書き間違い。
これ減らすこと出来ないかな
5デフォルトの名無しさん:2001/04/06(金) 14:48
>>4
if('3'==a)と書く癖をつけろ。
6デフォルトの名無しさん:2001/04/06(金) 15:31
warningをちゃんと見ろ。
7デフォルトの名無しさん:2001/04/06(金) 15:53
BOOL bHoge;

...

if (bHoge == TRUE)
{
...
}
とか。
TRUE == 1だけどBOOLが0以外を返却となっている時はシカトされる。
Win32API/MFCなんかでは要注意。

初期化不良の事も考えればboolにしてもありえる話。
bool b /*=0xcc*/とかね。
8デフォルトの名無しさん:2001/04/06(金) 16:04
BOOL bA,bB;

bA=FuncA();
bB=FuncB();

if(bA==bB)
{
...
}

で泣いた事があります。
typedef int BOOL
なんだよね。
9SAGE:2001/04/06(金) 19:52
基底クラスのデストラクタに virtual を付け忘れてて…
10デフォルトの名無しさん:2001/04/06(金) 19:58
>>5
それはよく言われるけど、
可読性が下がるから、多人数での開発ではあかんでしょ
11デフォルトの名無しさん:2001/04/06(金) 22:49
大して CPU を食わないんだから、
成功失敗は、BOOL ではなく、
typedef int RESULT;
#define RET_SUCCESS 1
#define RET_FAILURE 0
とか定義して、
if( RET_SUCCESS == hoge()){
}
 とかしたほうがいいと思う。
「この関数って、0 と 1 のどっちが 成功だっけ? -1 か?」
って悩まなければいけないから。
12デフォルトの名無しさん:2001/04/06(金) 23:10
>>9
あるねえ。
データメンバにクラス内でnewしてるようなオブジェクトあったりしたら
どこが原因なのか見つけにくいメモリリークとかあったりするんだよねえ。
13デフォルトの名無しさん:2001/04/06(金) 23:36
char buf[] = "0000000000"/*実際は他の処理で文字列を取得*/
int num;

if( (num = atoi(buf)) == NULL )
return(FALSE);

ウツ出汁脳
14デフォルトの名無しさん:2001/04/06(金) 23:40
>>10
チーム一丸となってそちらにすれば良いのでは?<if('3'==a)
むしろ慣れの問題(と思う)<可読性
タイトルに沿ってないのでsage
15デフォルトの名無しさん:2001/04/07(土) 01:42
for(int i=0; i<10; i++);
{

}

16デフォルトの名無しさん:2001/04/07(土) 01:55
class xstring {
 char *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* が採用されて、おかしくなる。
17デフォルトの名無しさん:2001/04/07(土) 02:18
typedef struct AAA{
  int a;
  int b;
}
".c"で自作のヘッダをインクルードして使ってたんだけど、そのヘッダの最後がたまたま構造体定義で、最後の";"
が抜けてた。
コンパイルでエラーは出るが、コンパイラは".c"の方に間違いがあると言うので、気付きにくい。

18デフォルトの名無しさん:2001/04/07(土) 14:07
>>15
やったよそれ。この間一日悩んだよ。
19デフォルトの名無しさん:2001/04/07(土) 14:27
>>18
漏れも。デバッガでトレースしてても気づかないって…。
原因がわかったときには本気で廃業考えたヨ。鬱死。
20あなたのうしろに名無しさんが・・・:2001/04/07(土) 14:37
>>14

そのバグってコーディングスタイルをねじ曲げるほど深刻なものなのか?

代入と比較を間違えるバグで悩むなんて、
ほんとうに初心者のころだけじゃないのか?
それにメジャーなコンパイラならたいてい警告出してくれるし。
21デフォルトの名無しさん:2001/04/07(土) 15:03
>>19
うーん。俺それ無いなあ。
for(){}って先に括弧全部書きそろえてしまう癖が
ついてるせいかな。
あとfor();はハマルんでfor(){}って書くことにしてるし。

まぁこんなのEmacsとかの住人からすれば笑い話なんだろけど。
雛形(?)の自動生成とか検証とかに強いから。
#俺ぁvi(m)派。職場マシンに好きなエディタいれさせて貰えないのが痛い(T_T)
22デフォルトの名無しさん:2001/04/07(土) 15:44

おいらは、UNIX上の開発でも、基本的に開発用サーバーに Sambaを
入れて秀丸で開発してるよ・・・。
 vi は、conf を書き換えたりするときぐらいしか使わないし、
emacs は食わず嫌いだなぁ。覚えたほうがいいのは分かってるんだけどね。
23デフォルトの名無しさん:2001/04/07(土) 19:55
>>20
まぁそうなんだけどね…
ただそうしたほうが個人的に「気休めになる」程度。
24デフォルトの名無しさん:2001/04/07(土) 20:19
>>23
僕はif ('3' == a)でないと却って効率が悪くなってしまうように
なってしまいました。ちょっと鬱。

でも最近if (a == '3')と書けるようにリハビリしています。
ただ、今まで123 > aと書いていたものをa < 123と書くことが
結構苦痛だということに気付いたりして、さらに鬱。
25デフォルトの名無しさん:2001/04/07(土) 22:12
int i, j;
for (i=0; i<10; i++)
{
 for (j=0; i<100; i++)
 {
  〜
 }
}

いまだに良くやる…
26デフォルトの名無しさん:2001/04/07(土) 22:22
for(int i=0, i < n, i++){
  // なんたら〜
}
なぜかたまにやってしまう
27デフォルトの名無しさん:2001/04/08(日) 00:42
>>26
コンパイルエラーは対象外っしょ。
28デフォルトの名無しさん:2001/04/08(日) 02:25
>>25

漏れ漏れもー
29デフォルトの名無しさん:2001/04/08(日) 02:41
>>25
ループ変数の廃止、いわゆるイテレータ、まんせー

ちと違うけど最近のdelphiの「ループ変数を勝手に操作したら
コンパイルエラー」っていう一見変な仕様は、
もしかしてそんな場面で役立っているんだろうか?

>>26
for (i=0,j=0;hoge;i++,j++){}
ならよく書くっす(^^;
なので、;と,を間違えたことは無いなあ俺。
30デフォルトの名無しさん:2001/04/08(日) 03:08
DirectX使ってる人なら一度はあるはず。

LPDIRECTDRAWSURFACE surface1, surface2;

このLP定義って何の意味があるの?
紛らわしいだけなんだけど。
31デフォルトの名無しさん:2001/04/08(日) 03:21
>>24
確かに逆に書くことは抵抗があるね。
32デフォルトの名無しさん:2001/04/08(日) 03:25
>>30
でも最近の漏れはCの仕様のほうがおかしいとか思って居たり。
ポインターの宣言は「ある型のポインター変数」の宣言じゃなくて
「ある型のポインター型の変数」の宣言ってしたほうがすっきりすると
思う。
33デフォルトの名無しさん:2001/04/08(日) 07:17
>>31
int型の変数とポインタを書くとき int a,*p; と書けるのが
便利だったんじゃないの。たぶん。
無駄なタイプはしないという考えならこっちも理があるな。
34デフォルトの名無しさん:2001/04/08(日) 12:12
>>30

LPを付けとかないと、何も考えずに

DIRECTDRAWSURFACE surface;

とかやるポインタ厨房がゴキブリのように発生するためだと思われる。

この記述方式だとプログラムが作成された瞬間surfaceを作ろうとするはずだが、その時点ではまだDirectDrawオブジェクトすら出来ていない。
35デフォルトの名無しさん:2001/04/08(日) 17:56
>>34
それ以前に、抽象クラスはインスタンス化できない、とかいわれて
コンパイルエラーになるはずだが。
3634:2001/04/08(日) 22:03
>>35
おぉ!そだね。
37デフォルトの名無しさん:2001/04/09(月) 09:49
if (IsFoo()) HogeFunc(); HageFunc();

(HageFuncはIsFooの結果に関係なく常に実行される。)

case 1: Hoge(); Hage(); break;

みたいな感覚でついやってしまうことがあったり。

ぶら下がり文も「ぱっと見」気付きにくいバグの温床だね。
38デフォルトの名無しさん:2001/04/09(月) 11:28
LPじゃなくてPにして欲しいと思ったり
39デフォルトの名無しさん:2001/04/09(月) 15:24
漏れもぶら下がり文でよくやる・・

if( 判定1 )
  処理1;
  if( 判定A ){
    処理A;
    処理B;
  }
else
  処理2;

処理1と処理2は排他のつもり。
40デフォルトの名無しさん:2001/04/09(月) 16:52
>>39
自分の場合、それを防ぐためにif/elseなどにはかならず{}を付けてます。(中身が1行でも)
41デフォルトの名無しさん:2001/04/09(月) 17:01
>>40
俺もそう。スマートインデント機能のあるエディタだったら、if〜のあと
中身を書く前にまず{}を付けて、それから中を埋める。
42デフォルトの名無しさん:2001/04/09(月) 18:22
}のつけ忘れで沢山コンパイルエラーでてきてしかもコンパイルする前にいじりまくってるからどこ直せばいいのかわからなくて冷や汗出る。
43デフォルトの名無しさん:2001/04/09(月) 23:11
>>39
Flash5のActionScriptで、

if(a==1){
gotoAndPlay("start");
}

gotoAndPlay("loop");

この gotoAndPlay が goto文ではなく、gosub文だった訳で…。
(処理は"start"に飛ぶのだよ、実際)
「なんで"loop"部分が動くんだ!」と悩みましたとさ。
44デフォルトの名無しさん:2001/04/10(火) 02:18
>>38
そのLPがWindowsの歴史を端的に表わしている。
45デフォルトの名無しさん:2001/04/10(火) 04:12
Borland C++のエディタだと、"{"の上にカーソルを置いて
"Ctrl+["を押すと、そのカッコに対応した閉じカッコ"}"まで
ジャンプする機能があるので良く使っていた。
でもVisual C++で同じ機能が見つけられなくて困ってる。
そうゆう機能無いの?
46デフォルトの名無しさん:2001/04/10(火) 05:21
>>45
ctrl+eな
47デフォルトの名無しさん:2001/04/10(火) 10:17
STLのiteratorでend()が動くことを考慮しないでループして悩んだことあり。
たとえば、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;
}
}
としないと遺憾。
48デフォルトの名無しさん:2001/04/10(火) 10:47
>>7
if( bHoge ) {
...
}
にするとよろしかろう。
んでも、Javaだとエラーなんだよなぁ。
49デフォルトの名無しさん:2001/04/10(火) 11:05
>>45
ctrl+]な
50デフォルトの名無しさん:2001/04/10(火) 12:35
>>47 細かい揚げ足取りね。削除後にイテレータも更新しないとな。
for ( std::vector<Hoge>::iterator it=con.begin() ; it!=con.end() ; ) {
  if ( it->is逝って良し() ) {
    it = con.erase(it);
  }else{
    ++it;
  }
}
5147:2001/04/10(火) 12:59
>>50
んだね。すまそ。

ついでにインデント失敗もすまそ。
52Java使い:2001/04/10(火) 18:22
>>48 なんでよ
普段つかいまくっとるけど。
(ちなみにJavaでは typedef int BOOL;なんかできないよ)
5348:2001/04/10(火) 20:34
>>52
あ、スマソ、boolだからいいのか。
intとかだとダメ、ということで。ひとつ。
54age:2001/04/20(金) 08:48
あげとこ。
55>>33:2001/04/20(金) 11:44
タイプ数というよりマクロのためだと思う。
例えば:

#define errno (*_errno())
int errno;
56デフォルトの名無しさん:2001/04/20(金) 22:35
SCROLLINFO si;
si.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));

と直した。
57デフォルトの名無しさん:2001/04/22(日) 05:35
LPD3DDEVICE8 hoge;

if (hoge) hoge->Release, hoge = NULL;
58デフォルトの名無しさん:2001/04/25(水) 17:53
CString oBBB;
CString oAAA = oAAA + oBBB;
59デフォルトの名無しさん:2001/04/27(金) 10:28
float a,b;
a = func1();
b = func2();
// この時点でa,bともに0.9fだった
if( a==b )
{
  // ここ実行されない・・・
}

デバッガで見て同じ値だったと思ってても、実際には誤差があるんでイコールに
ならないんだよね。
誤差関連の処理ウザすぎ。
60デフォルトの名無しさん:2001/04/28(土) 02:20
>>59
君のコードダサすぎ。
61デフォルトの名無しさん:2001/04/28(土) 10:40
&nbsp; &nbsp; &nbsp; &nbsp; CString str("Hello, world!");
&nbsp; &nbsp; &nbsp; &nbsp; cout << str << endl;

自らの厨房ッぷりを痛感。
62    :2001/04/28(土) 15:48
for (int i = 0; i < TEISUU; i++);
{
itteyoshi("はにゃ〜ん");
}
63     :2001/04/28(土) 15:50
ががが、
>>15
と同じだった
鬱駄死膿
64デフォルトの名無しさん:2001/04/29(日) 08:32
>>59
floatやdoubleを==で比較するのは、致命的だぞ。
笑ってすませないと思うのだが。
65デフォルトの名無しさん:2001/04/29(日) 17:59
SHリンカーV5.xのオプティマイズリンカーは、アンダーバーから
始まるグローバルな関数が複数存在すると、どれかを選択して、
正常終了してしまう、とんでもないオプティマイズを行うソフト。
66名無しやん:2001/04/29(日) 23:12
switch (state) {
STATE1:
....
break;

STATE2:
....
break;

default:
break;
}

ごくたまにやってしまう。
67デフォルトの名無しさん:2001/05/01(火) 03:36
switch(hoge) {
...
defalt:
// なぜとおらんのや!?
}
で1日悩んだ。
6866:2001/05/01(火) 03:48
ある意味、同士だね!
6966:2001/05/01(火) 03:48
ある意味、同志だね!
7066:2001/05/01(火) 03:48
ある種、同士だね!
7166:2001/05/01(火) 03:49
ある意味、同志だね!
7266:2001/05/01(火) 03:51
すまん、わけわからんことしちまった。
sage。
73デフォルトの名無しさん:2001/05/01(火) 08:43
if(theAddr = 1)
result = Pack(theAddr);

return result;

結果が変なので、デバックを繰り返し、どうやらresultの値がおかしい。
ってとこまで突き止めたんだけど、何がダメなのか分からず、約一時間も
悩んでしまった・・・。

「ちょっと休憩しよう」ってことで、お昼を食べて、くつろいだ後、
もう一度みたら、一瞬でミスを見つけた。あの、一時間がもったいない・・・。
7473:2001/05/01(火) 08:45
ちなみに、

if (theAddr == 1)

が正しいです。
75デフォルトの名無しさん:2001/05/01(火) 10:43
ダイアログプロシジャーで

switch(message){
  case WM_INITDIALOG:
//   aaa();
//   break;
  case WM_COMMAND:
    EndDialog(hDlg);
    break;
}

ダイアログが出なくて1時間悩んだ。
76デフォルトの名無しさん:2001/05/01(火) 11:07
スコープの違う同名ローカル変数とか。

int nHage = 100100;
...
if (jyoken)
{
  int nHage;
  ASSERT(nHage == 100100);
}
77デフォルトの名無しさん:2001/05/11(金) 11:39
if(a =! NULL)
{
  //処理
}

テストプロでやってしまった。
78デフォルトの名無しさん:2001/05/12(土) 09:53
vector<vector<oneType>> hoge;
79古いんだけど:2001/05/12(土) 12:15
>>16
class xstring {
 char *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* が採用されて、おかしくなる。



これなんだけど、なぜこうなるかというと、printfの可変数引数の実装の違いに
よって現れる現象では? extern int printf(char *s, ...); の...を、char *
で受け取るかvoid *で受け取るかの違いだね。char *で受け取るVC++の仕様は
operator char* () が呼び出されて、void *で受け取るg++はそのまま渡すように
なってるんだろう。

月並みな結論だけど、iostreamを使えってとこなんだろうね。
printfを使うなら明示的なキャストをすることで実装の違いをカバーできる。
80デフォルトの名無しさん:2001/05/12(土) 12:59
初期化
const int arraySize;
int array[arraySize];
memset( array, 0, sizeof(arraySize) ); // ×
81デフォルトの名無しさん:2001/05/12(土) 17:47
ちょっとずれるけど、
VC6.0の「変数」にポインタを移動させる
関数をいれてしまった。
で、ブレークポイントをで泊まる度にずれる。
あの頃は若かった・・・。
82デフォルトの名無しさん:2001/05/13(日) 06:58
>>79
VC++ ではそのまま値渡しで渡ってるんじゃない?

可変長引数に class 渡したときに、char* にキャストされたり
void* にキャストされたりする、って仕様にありましたっけ?
83デフォルトの名無しさん:2001/05/13(日) 09:25
>>79
ばーか。
可変引数の関数が暗黙の型変換なんてしてくれねーだろ。
なにも指定しないとコンパイラは単に値をintの大きさだと思いこむだけだよ
勝手に変換されるのはVisualC++で都合良いってだけ
ポインタ値がvoid*に変換されるのはgccの都合
84デフォルトの名無しさん:2001/05/13(日) 13:00
>>78
ごめん、なにがいけないのかわからない。。。
スペース?
85デフォルトの名無しさん:2001/05/13(日) 13:39
>>83
何でint?。この場合xstringの値渡しでしょう。
単に先頭のメンバ変数がchar*だから運がよければ
char*としてbufを取得できるって話では?
キャストは無関係。
8678:2001/05/13(日) 14:54
>>84
わかってるじゃん。
87デフォルトの名無しさん:2001/05/13(日) 15:55
84>>86
あれ、なんでスペースを入れないとコンパイルを通らないのか未だに解らないんですが。。。
88デフォルトの名無しさん:2001/05/13(日) 16:50
C/C++のトークン切り出しは最長一致法だから。>87
>>だと右シフトと解釈される。
templateの構文は設計ミス。アホだねぇ。
89デフォルトの名無しさん:2001/05/13(日) 16:54
>>88
あああ、なるほど。アホだ。でも、知らないと気づかんわ。
90デフォルトの名無しさん:2001/05/19(土) 05:06
アホな設計age
91デフォルトの名無しさん:2001/05/19(土) 10:35
if(func()==TRUE){
...//アレ?
}
funcの返り血はintだった。
92デフォルトの名無しさん:2001/05/19(土) 11:13
普通TRUEとは比較しない。FALSEとするモノ。>91
(スレ違いですが、scheme言語は#f以外はtrueです。nilさえもtrue)
93デフォルトの名無しさん:2001/05/19(土) 11:17
(当然、数字の0もschemeではtrueです。とにかく#f以外はtrue。)
(ちなみに#fはfalseのschemeでの外部表現)
(boolean型が最初から定義されてる言語は>>91みたいな変なことに悩まなくて良いよ。)
(C++のboolean型は登場するのが遅すぎた感があるね。)
94デフォルトの名無しさん:2001/05/24(木) 05:16
いやぁ、やっちゃいました。趣旨だけ抜くとこんなの。

char buf[256];
unsigned int i;

for( i = 255; i >= 0; --i ){
  buf[i];
}
95デフォルトの名無しさん:2001/05/24(木) 05:24
アンダーフローか。>94
イテレータ使えば起らないミス。
96デフォルトの名無しさん:2001/05/24(木) 05:39
ここ最近ミスはないな。一発コンパイル、一発動作。
ソフトウェア開発環境も研究されて、昔よりずいぶん良くなったもんだ。
9794:2001/05/24(木) 05:40
>>95
了解、なるべくvectorでもつかっときます。
98デフォルトの名無しさん:2001/05/24(木) 08:59
>>95はHelloWorldを覚えたばかりの利有消防です。
99久しぶりのC:2001/05/27(日) 01:31
C言語の文字列処理って大変よね。
char a[50], b[50];
1:文字列を結合したくって・・・
c = a + b;
strcat()しなきゃダメなのね。

2:文字列が等しいかを確かめたくって・・・
if(a == b){...
strcmp()しなきゃダメなのね。
100100:2001/05/29(火) 17:47
100あげ
101デフォルトの名無しさん:2001/05/29(火) 19:20
>>99
ハァ?菜に言ってんだ?2はそれif(a == b){... で正解だろ(藁
まったくこういう奴がいるから俺みたいなのが苦労するんだよなぁ・・
102デフォルトの名無しさん:2001/05/29(火) 19:23
>>101
お察し致します。(101の職場の方々へ)
103デフォルトの名無しさん:2001/05/29(火) 19:40
>>101
俺もお察しするぞ。
104101:2001/05/29(火) 20:20
>>102
お察し致しますのは俺の方だよ・・ハァ(藁
aとbは配列の名前、つまり文字配列へのポインタ型だから
a==bは真だろうに・・・
105デフォルトの名無しさん:2001/05/29(火) 20:22
>>104
いやー、オレもお察しするよ! ワハハハハハ
106デフォルトの名無しさん:2001/05/29(火) 20:23
>>104
もうおそいじかんなのでこどもはねてください。
107デフォルトの名無しさん:2001/05/29(火) 20:31
>>101
ネタでないなら自主退職した方がいいよ。いまなら退職金もらえるかも知れないし。
懲戒解雇とかだと退職金でないし再就職も難しい。
108デフォルトの名無しさん:2001/05/29(火) 20:40
>>101 お願いだからネタだといってくれ
109デフォルトの名無しさん:2001/05/29(火) 20:47
>>101のせいで著しく現職のイメージが悪くなったと思う。
110102(学校):2001/05/29(火) 20:48
マジだったんですか…
111102:2001/05/29(火) 20:52
うわっ、109さんそんなことないですよ。
上の(110)書き込みはちょっと失礼ですね。プログラマの方々、
不愉快な思いをさせたとしたら、すみません。
112101:2001/05/29(火) 20:55
ハア?
ああ、JavaじゃなくてCだった、ごめんごめん
いやー今時Cなんてクソ言語使わないから(藁
113デフォルトの名無しさん:2001/05/29(火) 20:56
>>101 (´A`)ナムー
>>111 それは杞憂です。誰も>>101をプログラマとは思ってないでしょ
114デフォルトの名無しさん:2001/05/29(火) 20:57
>>112
いやー!墓穴掘りまくり?
Javaだと思っての発言であれ?
ぐふふふふふ?
115デフォルトの名無しさん:2001/05/29(火) 20:57
>>112
こんな人がプログラマとして働いているのですか?
これなら僕も今から働けそうです。
116デフォルトの名無しさん:2001/05/29(火) 21:00
>>112
このスレのタイトル
気付けば「何だ」と思うよーなMiss[c/c++]
117デフォルトの名無しさん:2001/05/29(火) 21:02
101でてこーい(藁藁藁
118デフォルトの名無しさん:2001/05/29(火) 21:04
                     |\
┌──────────┘-\
│    俺はこのスレが     .\
│                     /
└──────────┐- /
      ヽ..(゚д゚).ノ       |/
        (  へ)
        く
                 - = ≡三                      |\
               - = ≡三  ┌──────────┘- \
               _ = ≡三    │                     \
                ̄ = ≡三    │    大好きだゴルァ!!    /
               - = ≡三  └──────────┐- /
       (゚д゚)        - = ≡三                      |/
      ( ヽ ヽ)
       /  >
119デフォルトの名無しさん:2001/05/29(火) 21:05
101の脳内ではJavaで「文字配列へのポインタ型」ってのが使えるんだね(w
120101:2001/05/29(火) 21:06
>>114
ハァ?「Java」にポインタは無い(断言そして藁^。^
今田にポインターを使ってるなんて・・・俺も昔はCを
使っていたけど今はオブジェクト指向バリバリだよ(和良
121デフォルトの名無しさん:2001/05/29(火) 21:08
        ∫     
   ∧,,∧ ∬      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ミ,,゚Д゚ノ,っ━~  <   >>120 見苦しいぞカエレ!
_と~,,, . ~,,ノ___. ∀  .\______________
    .ミ,,,/~),  | ┷┳━
 ̄ ̄ ̄ .し'J ̄ ̄|.. ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄   ┻
122デフォルトの名無しさん:2001/05/29(火) 21:09
Java使いはレベル低いなあ・・
123デフォルトの名無しさん:2001/05/29(火) 21:10
ポインタって言い出したのはお前だろ>>101
124101:2001/05/29(火) 21:11
>>119
ハァ・・「文字配列へのポインタ型」はString型だろ?
俺自身この業界長いけど出来る奴にはめったに会わなかった世。
K&Rぐらい読んでおいてくれ・・・
125デフォルトの名無しさん:2001/05/29(火) 21:11
>>101
帰らなくていいからもっと面白い発言してー
126デフォルトの名無しさん :2001/05/29(火) 21:12
何だか荒れ気味だ。スレの主旨と離れていっているような。
127デフォルトの名無しさん:2001/05/29(火) 21:13
101マンセー
128デフォルトの名無しさん:2001/05/29(火) 21:14
じつは人多いんだね、ここ。
129102:2001/05/29(火) 21:15
あのー、もうそろそろやめませんか、皆さん…。

101さん、煽るような発言をしてすいませんでした。でもJAVAでも同じだと思いますよ。
つーか>>109-111みてると、「自作自演」ていわれてもしょうがないような
書き込みしてますね、わたし(汗)。

マッタリ
130デフォルトの名無しさん:2001/05/29(火) 21:15
(・∀・) イイ!!
131101:2001/05/29(火) 21:16
>>125
おお!気味みたいなのを待ってたよ。早くこの業界に来て
俺と一緒にレッツプログラミング!
132デフォルトの名無しさん:2001/05/29(火) 21:18
めずらしくりょうしきあるひとだね
133デフォルトの名無しさん:2001/05/29(火) 21:19
相手を馬鹿にしたような書き方をする奴は
実は一番馬鹿だということを
はからずも証明してくれた101に乾杯!!
134デフォルトの名無しさん:2001/05/29(火) 21:20
101の脳内のK&Rには「文字配列へのポインタ型はString型である」と書いてあるんだね(w
135デフォルトの名無しさん:2001/05/29(火) 21:23
101さんカコイイ
136101:2001/05/29(火) 21:23
>>「文字配列へのポインタ型はString型である」と書いてあるんだね
なんだとー俺を馬鹿にしてるなー。もう一度説明するから聞いてくれ。
「文字配列へのポインタ型はString型である」これは解るよね?
137デフォルトの名無しさん:2001/05/29(火) 21:26
101の脳内では「typedef char** String;」とかが標準で定義されるらしいね(藁
138101:2001/05/29(火) 21:29
まあ、アレだな。文学とプログラミングは似ている。
どちらも様式化されたエクリチュールの批判的解釈ってわけだ。
サブテクストはオブジェクト化された労働者階級の特権と
いえなくもない。常識だろ?
139デフォルトの名無しさん:2001/05/29(火) 21:32
…納期を守れないPGの戯言?>>138
140102:2001/05/29(火) 21:33
もしかして…ネタにマジレス!?
141デフォルトの名無しさん:2001/05/29(火) 21:33
>101ー110
一瞬あせったじゃねえか。氏ね>101真性厨房。
142デフォルトの名無しさん:2001/05/29(火) 21:33
おいおい。文学とプログラミングの違いは
デリタの脱構築〜deconstructionによる差異の審判と
ジル・ドゥルーズの関係と同じだ。文学とは違う。
143デフォルトの名無しさん:2001/05/29(火) 21:34
>>139
いや、必死に有能なフリをしようとする無能なPGの寝言。
144デフォルトの名無しさん:2001/05/29(火) 21:35
どんどん墓穴掘るね。面白いね。
>>101の会社の人はかわいそうだね。
自分のミスを絶対認めない人とは仕事したくないね。
145デフォルトの名無しさん:2001/05/29(火) 21:35
>>136
やばいよマジだよこいつ…
146デフォルトの名無しさん:2001/05/29(火) 21:37
>自分のミスを絶対認めない人とは仕事したくないね。
いや、101はミスだとは思っていないんだよ。
147デフォルトの名無しさん:2001/05/29(火) 21:38
どうしましょう。
うちのK&Rには、String型が載ってませんでした。
初版も第二版も両方調べました。
落丁でしょうか?共立出版に文句言ったほうが良いのでしょうか?
148デフォルトの名無しさん:2001/05/29(火) 21:38
ソフトウエア開発 = 知の欺瞞
と思われないように頑張ってください、みなさまがた。
149デフォルトの名無しさん:2001/05/29(火) 21:39
>>147
うわ。うちのもString型載っていないよ。
150デフォルトの名無しさん:2001/05/29(火) 21:41
>>147
大変だ!原著の初版と第二版にも載ってなかった!
151デフォルトの名無しさん:2001/05/29(火) 21:42
だから、101はVBを少しできるようになって自信満々だったがここに来て見事にその自信を打ち砕かれた厨房だって。
152デフォルトの名無しさん:2001/05/29(火) 21:45
>>149
うちのは載ってるよ。本文にはないけど、付録 A4.2.1 「基本型 - 補遺」P. 347 を見よ。
どうやら締め切りぎりぎりでねじこんだらしいね。Java との関連については書かれていない。
153101の為の簡単String講座:2001/05/29(火) 21:47
第1章 String型の基本

JavaのStringクラスは内部にバッファをもっています。
そのバッファは生成時に確保されます。
その大きさは可変では ありません。
String a = "110";
a = "itteyosi"
というコードを書いた場合、
まず"110"という文字列を格納するためのバッファを確保し、格納します。
aにはそのポインタ(ま、便宜上こう表現します)
次の行で、"itteyosi"という文字列を格納するバッファを確保し格納します。
そして、aにそのポインタを入れます。
"110"を入れていたバッファは誰にも参照されないので破棄されます。
154デフォルトの名無しさん:2001/05/29(火) 21:51
うちのK&Rは343ページまでしか無いよー
落丁だー
2001年2月20日発行 第263刷
今まで初版使ってました(藁
155デフォルトの名無しさん:2001/05/29(火) 21:52
そろそろあきたね。
156デフォルトの名無しさん:2001/05/29(火) 21:52
どうした?101はもう首吊ったのか?
157デフォルトの名無しさん:2001/05/29(火) 21:52
>>153
101は誰にも参照されずに回線切って逝ってよし ってことか
158101:2001/05/29(火) 21:57
>>153
おお!なんて解りやすいんだ!というわけで続きハヨ書け。
159デフォルトの名無しさん:2001/05/29(火) 21:57
結論:101は馬鹿

end.
160デフォルトの名無しさん:2001/05/29(火) 21:58
>>159
Pascal使いめ。(藁
161101:2001/05/29(火) 22:01
Pascalってなんですか?もしかして有名人?
162デフォルトの名無しさん:2001/05/29(火) 22:01
>>158
その前に文字配列へのポインタ型を説明してくれよ(w
163デフォルトの名無しさん:2001/05/29(火) 22:02
"101"ってマルイみたいでかっこいいなあ。
164101:2001/05/29(火) 22:04
>>163 "101"ってマルイみたいでかっこいいなあ
そうですか?何だか照れるな・・
165デフォルトの名無しさん:2001/05/29(火) 22:05
いやぁ、>>100のおかげで面白い奴が釣れたね。
普段はウザいけど今回ばかりは100のキリ番君に感謝しなきゃね(藁
166デフォルトの名無しさん:2001/05/29(火) 22:05
もっと痛い弁解して楽しませてくれよ>101
167101:2001/05/29(火) 22:07
うーん・・思いつきません。もうちょっと待って。
168デフォルトの名無しさん:2001/05/29(火) 22:08
もう本物の101はいないのかな
169112=138!=101:2001/05/29(火) 22:13
とりあえずオレは騙りね。
ぼく以外の101さんのご協力に感謝します。楽しかったよ。
170101:2001/05/29(火) 22:14
分らないふりして書き込んだらこんなにスレがつくとは・・
君達そんなにたのしいか?(藁
171デフォルトの名無しさん:2001/05/29(火) 22:15
(・∀・) バカノ アイテハ タノシイヨ!!
172デフォルトの名無しさん:2001/05/29(火) 22:15
お?本物登場か?じゃあ早速わかったフリしてくれよ(w
173デフォルトの名無しさん:2001/05/29(火) 22:22
158以降の101はあまり面白くないね。
174101の為の簡単String講座:2001/05/29(火) 23:42
第2章 文字列の比較 その前に

JavaのStringクラスは内部にバッファをもっています。
ただし、文字列比較は単純に == にて判断できるものではありません。

@ a == b と認識されるパターン
String a = "101";
String b = "101";
A a == b と認識されないパターン
String a = "101";
String b = "100101".substring(3); // 100101の3番目以降の文字列

@の場合、aもbも本当に"101"を指します。
この"101"はstaticにとられ、そこへのポインタは常にひとつです。
Aの場合、aは"101"を指しますが、bはそのstaticな"101"を指しません

このときの動作は、少々ややこしいものとなります。
まず"100101"の領域が確保され、
次に"100101"の3文字目以降("101"の部分)を取り出し
String用にその3文字分の領域を確保し"101"を格納し、bに渡されます。
よって、a!=bとなります。
17578:2001/05/29(火) 23:52
STLのstringは便利だな。
176101の為の簡単String講座:2001/05/30(水) 00:08
第3章 文字列の比較 そのために

疲れてきたので完結にまとめます。
コードを羅列します。

String a = "101";
String b = "aho101"substring(3);

if( a==b )Ssytem.out.println("101 is genius");
第2章で述べたとおり、これは偽です。

if( a.compareTo(c)==0 )System.out.println("101 ha itteyosi");
compareToはStringクラスの比較の為のメソッドです。
これで、純粋に格納されている文字情報を比較します。
ぴったり一致する場合、0 を返却します。詳しくはまた来週。


もう誰も見てないようなので、これにて簡単String講座は終了します。
177デフォルトの名無しさん:2001/05/30(水) 02:47
c/c++のスレなのに、Javaのスレになってる。
これも、全て101のせいだ。
101のバカヤローーーーー。
でも、面白かったから、いいか。(^^;
178デフォルトの名無しさん:2001/05/30(水) 02:53
>>101
なるほど。こいつのおかげでこうなってんのか・・・
179デフォルトの名無しさん:2001/05/30(水) 03:05
>>120
Javaは、ポインタばかりですよ
180デフォルトの名無しさん:2001/05/30(水) 03:18
かちゅーしゃで巡回したら79とかでてびっくり。バグかと思った。
いやぁ面白かった。
>>176
お疲れ、JAVA知らないから役に立ったよ
18199:2001/05/30(水) 15:59
久しぶりに見てみたら、
俺の投稿が原因で、
なにやら大変な事になっていますね。

JavaとかからCに戻ると、101さんみたいな事態になりかねないですよね。
とか逝ってみたり。
182デフォルトの名無しさん:2001/05/30(水) 16:26
オナニーしても精子が出ないので何でかと思ったら今日はもう8回抜いたんだった。
183102:2001/05/30(水) 19:55
>>181
いえ、混乱を招いた一番の原因は、自分の投稿だとおもいます。こんなに
なるとは思ってもいなかった…
ということで(?)、反省も兼ねて、本来のスレ内容に関係のある本を紹介します。
CプログラミングFAQ
スティーブ・サミット著 北野欽一訳
トッパン(!)発行 ISBN 4-8101-8097-2

comp.lang.cに流れているFAQ(良くある質問とその答え)の日本語訳です。私は
K&RとUNIXとこれでCを勉強しました。この本が、c言語のいろいろと細かい部分について、
K&Rの舌足らず(寡黙?)なところを補ってくれました。初心者にとっても非常に良い本
だと思います。
タイトルに「なぜこのコードは〜しないのか」がつくもの←気づけば「何だ」と思うよーな
Miss[c]です。本文読まずにコードだけから誤りを見つけ出すのも、いとをかし。
184(・∀・)イイ!:2001/05/31(木) 01:34
185デフォルトの名無しさん:2001/05/31(木) 06:12
いやいや、102はいい仕事したと思うぞ。
186デフォルトの名無しさん:2001/05/31(木) 06:57
vector<HOGE> v;
vector<HOGE>::iterator it;
・・・
it = find(・・・);
v.insert(it, ...);
v.insert(it, ...);
187デフォルトの名無しさん:2001/06/01(金) 00:21
>>186
面倒だよねー
188デフォルトの名無しさん:2001/06/01(金) 05:30
標準出力に書き出そうと思って、
fwrite(buf,sizeof(char),n,STDOUT);
コンパイル中にエラーが出たので、
fwriteでは、標準出力に書き出す事が出来ないと思った。
189デフォルトの名無しさん:2001/06/01(金) 06:00
ふーん
190デフォルトの名無しさん:2001/06/01(金) 12:11
>>188
よかったね
191デフォルトの名無しさん:2001/06/01(金) 12:57
みんな冷たいなあぁ
192  :2001/06/01(金) 14:01
既出かもしれないが...
引数に無理やりキャストしてクラスのポインタ渡していた。
どうして動かないのだろうと散々調べて、ふと気づく、
基本クラスが違うことを(ワ
193デフォルトの名無しさん:2001/06/01(金) 16:19
>>192
C++のキャスト使うように習慣づけた方がいいかも。dynamic_cast<...>(...)
194:2001/06/01(金) 18:25
>>193
そういう使い方のダイナミックキャストってなんか危険そうだよ。
多重継承している拡張クラスがあればいいんだろうけど(ちがうか
195デフォルトの名無しさん:2001/06/01(金) 20:00
>>193
というか、192氏の目的ならstatic_castを使うべきだろう。
基本クラスが違うポインタにキャストしようとするとコンパイルエラーするでしょ。
196デフォルトの名無しさん:2001/06/01(金) 20:12
193>>195
const_castしか使ってないのがばれた(w
197デフォルトの名無しさん:2001/06/01(金) 20:58
if (d != 0);
  ans = a / d;
198デフォルトの名無しさん:2001/06/01(金) 21:00
>>197
鬼だね
199minima:2001/06/03(日) 21:40
>>94 さんのと同じミスなんスけど

int func( char c, size_t size ){
  ...(中略)...
  while( 0<=size )
    m_array[size] = c;
  ...(後略)...

もう,なんていうか,バカ(*´Д`)
200minima:2001/06/03(日) 21:41
間違えたっす。
    m_array[size--] = c;
です。
201デフォルトの名無しさん:2001/06/11(月) 17:32
age
202デフォルトの名無しさん:2001/06/11(月) 19:00
>>197
それ、たまにヤルっす。
for( i=0; i<m; i++ );
{

}
とか。
コンパイラはエラー吐かないし、後続のブロックは
1回は実行されるから、なかなか気がつかないっす。
203発掘:2001/06/16(土) 20:21
age
204デフォルトの名無しさん:2001/06/16(土) 20:25
for(i=0;i<m;++i){
}
って書けば間違えないYO!
205デフォルトの名無しさん:2001/06/18(月) 02:36
for(i=0;i<m;++i);{
}
20678:2001/06/18(月) 02:42
そこまでいったら、
for(){
}
と取り敢えず打って、中身をあとで考えるしかないな。
207魚チョコ:2001/06/18(月) 03:16
フォントに手を加えて、セミコロンを大きくすれ。
文字幅データをいじっていっそ他の文字の2倍くらい幅にすれ。
うざったいから、乱れ打ち防止になるだろ(笑)
208デフォルトの名無しさん:2001/06/18(月) 17:46
if(i<=0){}
else (i<16){}
正しくは、
if(i<=0){}
else if(i<16){}
209sage:2001/06/19(火) 01:48
>>202
egrep "for.*;.*;.*;" *.c*
210デフォルトの名無しさん:2001/06/19(火) 13:12
>>207
つーか、マジでプログラミング向けフォントが欲しい
80x25 の画面が懐かしい…
狭いけど
211デフォルトの名無しさん:2001/06/19(火) 16:12
>>210
EPSONの98互換機の半角フォントって結構良かったよ。
吸い出してきてWindowsでもLinuxでもいまだに使ってる。
212デフォルトの名無しさん:2001/06/19(火) 16:25
int main()
{
  return 0;
}
213デフォルトの名無しさん:2001/06/19(火) 19:06
>>211 Windowsで使いたい。どうすればいいか教えてくれると幸せです。
214デフォルトの名無しさん:2001/06/19(火) 19:10
>>211
ていうか、アップしてほしい
215デフォルトの名無しさん:2001/06/19(火) 22:36
#define A_MAX (16)

char work[A_MAX];

#define B_MAX(32)

foo(int index, char n)
{
 assert(index < B_MAX);
 work[index] = n;
}
216デフォルトの名無しさん:2001/06/20(水) 04:41
>>215
そもそもassertの使い方も怪しいな。

参考(?)スレ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=989482113
217216:2001/06/20(水) 04:49
ついでに俺も、ダメコードを。
ここは引数に文字列ポインタを用意させるべきだった・・・

char * condition(int ismain)
{
char *operator;
operator = (char*)malloc(30 * sizeof(char));
strcpy(operator, "tekitoudesu."); //tekitou data
free(operator); //dame
return(operator); //dame dame
}
218デフォルトの名無しさん:2001/06/20(水) 04:50
生まれてきちゃった!
219デフォルトの名無しさん:2001/06/20(水) 05:07
>>217
freeしなきゃOKじゃん。
220デフォルトの名無しさん:2001/06/20(水) 05:11
疑問。なんでみんなstrdup使わないの?
221デフォルトの名無しさん:2001/06/20(水) 09:53
1.いつもCStringとかstd::stringとかで返すから(C++)
2.返した先でfreeする、っていうのは嫌いだから。
4.独自メモリ管理ルーチン使ってるから。
3.Cの標準関数じゃないから。
222デフォルトの名無しさん:2001/06/20(水) 21:15
>>221
激しく同意。
223デフォルトの名無しさん:2001/07/14(土) 18:43
do{
//ループしね〜ぞ!?
・・・・;
・・・・;
}while(0);

・・・当たり前です。
30分悩んでしもた・・・・
鬱すぎ・・・・・
224デフォルトの名無しさん:2001/07/14(土) 21:09
4バイトの型をもつaのビットを全部埋めようとして

a = 0xFFFF;

とやってしまう。
225デフォルトの名無しさん:2001/07/14(土) 22:43
俺もむかし、>>224と同様に全ビット立てようとして、
memset(buffer, 1, sizeof(buffer));
とかやってたよ。
226デフォルトの名無しさん:2001/07/14(土) 23:32
>>224
a = ~0;
としなさい。
なんてのは入門時に学ぶようなことなんだけど、
今時の粗製濫造入門書には書いてないかもなぁ。
227デフォルトの名無しさん:2001/07/15(日) 16:34
>>226
a=-1;
ってやってた・・・・
228デフォルトの名無しさん:2001/07/15(日) 20:12
>>227
aがunsignedだとちょっとやだよね
229デフォルトの名無しさん:2001/07/16(月) 12:43
hoge.hで
-------------------
#ifndef hoge
#define hoge

class hoge {
private:
//何かの定義
public:
//いろいろ定義
};
#endif
------------------------

hoge.ccで
------------------------
int hoge::func(){
//いろいろ
return 1;
}

int hoge::fucn(){
//ほげ
return 0;
}
-------------------------

「::の前にパーサエラーがあります」に、一日悩みました。(藁)
横着しちゃいけないね。
230229:2001/07/16(月) 12:44
やば。
#include"hoge.h"
忘れてた。
231デフォルトの名無しさん
>>228
unsignedのときの振る舞いは規定されてるから問題ない。
むしろsignedだったときのほうが嫌だ。