汚いコードとは何か?http://news.nicovideo.jp/watch/nw469110プログラミングを知らない人には、プログラマが言う「汚いコード」というものが実感できないかもしれない。ID:/XesM5nR0まあ一番イラッとするのはコピペプログラマかな。そっくりなルーチンがコードのあちこちにあるとか普通。挙動が違うと自力で関数にまとめられないとか、ほんと辞めちまえと思うんだが、コード読まない人から見ると一応サクサクと指示をこなしているのでそこそこ評価されてたりする。変数は全部グローバルでええやん。ID:/XesM5nR0>>130アセンブラや昔のBASICはジャンプ命令ないと何もできんからな例えば例外を使いたくない状況で深いネストから緊急的に抜けたい時にgotoを使うのは仕方ないかなと思う。今は組み込みでも石が速いからそこまですることって滅多にないと思うけどね。ID:qTh0asT/0C言語できても、奴隷になるだけだけどな。ID:irblS5Gi0>>163登山でアウトドアっぽくって比喩はまったく不適切だな。C++でも高級言語よりな書き方と、機械語よりの書き方がある。良い比喩は登山でロッククライミングっぽくだな。日本語もできないんだな。ID:irblS5Gi0>>179あいちゃん必死だから気付いてないだろうから教えてあげるけど、リプは>>175に。ID:irblS5Gi0>>195お前ガチアスペぽいな。>でも機械語じゃないでしょってそんなこと誰しも分ってることだぞ。Cが高級言語であることも皆分ってる。お前だけが、分ってない奴がいると勘違いして孤軍奮闘してるわけだ。俺が言いたいのは、C++やCにも機械語っぽい書き方はあるよな?で、その方がちょっと処理が速いんじゃないの?って言いたいわけだ。ID:Xu4H46Qo0>>203妄想で叩いただろ?自演だとな。それをお前は謝っていない。お前みたいな日本語で説明したぞ理解できたな?死んで謝罪しろ。ID:/XesM5nR0>>206ローマ字表記みるとイラッとするのは俺だけか?ローマ字は表記ゆれあるしお勧めできんぞ。ID:/XesM5nR0>>255ローマ字使う場合は表記ゆれも決めておくべきだね。「shinaban」ってDBのカラムがあって椅子から落ちそうになったわ。hinbanだろバカがっていう。ID:/XesM5nR0実質ポインタなんだがな。定義の問題とポインタ演算に該当するものがあまり出てこないだけで。反転コピーへのポインタを返します。free(3)の引数として使ってください。ID:zeTNiePt0>>417マジレスすると反転コピーって言葉が何かの説明がないあとは使い終わったらfreeしてくれって書いた方が親切かなぬるぽはほんとそうだな。画像の右側が外注さんに頼んだソースコード。左側が僕が書きなおしたソースコード。ID:kQ47BubJP機械・電気のハード屋だけどシーケンスプログラムくらいしかできないわ。ソフトウェア開発者は俺らとは頭の出来が違うと感じる。ID:WzUiP8MM0大切に使え血の1バイト。&i;//int型ポインタpにiのアドレスを代入する簡単。"abcde";上と下は同じでどっちを使ってもいい。"abcde";>上と下は同じでどっちを使ってもいい。str1は書き込みできるが、str2は書き込みができないことがある。12:19:38>>230どっちも書き込めないときがあるだろ。パソコン上ではどちらも書き込めるが、ROM化環境などではどちらも固定される事がある。"abcde";ポインタ経由だと、これに書き込めない環境があるってこと?ないだろ。13:44:29知ったかでしゃべってるのを「分野の違い」にすんなよ。ポインタ経由だと書き込めないってどんな処理系だよ。13:50:24>>246だからさ、世の中には色んなコンパイラがあって、色んな環境で色んなCPUが色んな場所で動いてるわけよ。その全部のローカルな俺様コンパイラ的な物では定数は全部固定データなワケよ。初期化宣言以降どこに右辺に現れない変数も固定な訳よ。"0";とかすると、落ちるとか普通にある訳よ。ROM化環境などではどちらも固定される事がある。汎用OS下でも処理系によって違うんだよ。演算子の後ろに空白入れな。」という警告をくらったのを思い出した。bがポインタかどうかで判断つくだろうに。誰が得するんだあの拡張。類は「独自拡張」じゃないぞ。mjskこんなことも知らん割には、ずいぶん上から目線だな。20:26:32.43ポインタがマジでわかりません。13:06:04.38大体何でぇ、変数の名前で指定すれば事足りる物をわざわざアドレスを取り出してそれを指定するのか、そこが分らん。すれば、1234が記録されてるメモリー番地(たとえば4567等)が読み取れる。通常の変数に対して使えるのだから、*記号も同様に使えればシンプルで良かった。すれば、メモリー番地1234に(バキューン!)できる。これで十分じゃないか?しかし実際はエラーになる。結局、実体はただの4byte長の数字を格納してる変数にすぎない。*(記録されてる数字の、メモリー位置から読み書きする)も使えるポインタ変数。使えるようにすればシンプルで良かった。アセンブラの場合はこれ。「アセンブラから始めればポインタを理解しやすい」と言われる理由はここにある。14:16:08.68そもそも通常変数とポインタ変数と言う区別をしているからいけない。その、ポインタ変数と言う代物は只単にポインタ型の変数でしかない。それは、通常変数と言う代物と型が違うだけの同じものだ。int);となるわけで、初学者には恐怖感あるだろうな。00:30:34.32Javaの意味での参照では不十分で、Cの意味でのポインタが必要なのはどんなとき?外部関数呼び出しインターフェースをつくるときくらいしか思いつかない。17:50:24.84必要性とかわりとすぐピンときたけどなw関数に配列の先頭アドレス渡すのって合理的じゃね?変数のサイズ、構造体のサイズってのを理解している段階であれば分かるはず。12:16:00.08>>788>>789>>792おまえらが言ってるのはただの「参照」。そんなのはjavaやその他の言語にもある。いうか配列を丸ごとコピーする実装の言語なんてたぶん無いwポインタが難しいのはそこじゃないことを判りもしないで恥ずかしいレスすんな。12:28:21.19>>799ポインタのどこが難しいのかどうか教えて下さい。08:48:18.31>>808断片的に何度か書いているが、もっかいまとめてみる。コードの例で示してみる。{//なんかの処理//ここでbは不要になるので、コンパイラは自動的に解放処理を呼び出す}こんなコードがあったとする。func_bにはaの参照を渡している。ここで大事なのはaとbの解放タイミングがわからない点だ。どちらかの処理が済んでないのに、もう片方を解放したら落ちてしまう。参照とポインタの違いは「参照ならポインタ以外のワークも共有できる」という点だ。この場合ならbに渡す時に、「この変数は2箇所で使われている」という情報を書き込むことが出来る。それにより、aおよびbの解放時に、じかに解放するのでなく、「使われている回数を1引き、0になったら解放する」という処理に変えることで、安全に解放処理を呼び出すことができる。ポインタではそうはいかない。func_bに渡されるのはaかもしれないし、&a[1]かもしれない。するとワークは渡せないので、もちろんfunc_bで解放することはできない。すると解放処理をプログラマにやらせるしかない。free関数が用意されている。上記のケースでは、func_aがfunc_bより先に終わるかもしれないから、安易にfunc_aの末尾でfree(a)などとやったら落ちてしまう。これがポインタの難しいところだ。Rubyでならなんでもかけます。面接官「ではシングルトンパターンを書いてください。