09/12/23 01:42:25
>>154
Cだからそういう面倒くさいことやる必要が生じるのであってこれがLispか何かの問題ならかなりすっきりするんじゃないかな。
159:デフォルトの名無しさん
10/01/17 06:51:52
お前らは>>144の問題の意図を勘違いしているな。
問題は穴埋め、つまり他の誰かさんが書いたコードから
その意図を読み取り、必要な変更を行えということだ。
ろくにドキュメントもないソフトウェア資産を継承しなければならない
今の時代に合った教育じゃないか。
160:デフォルトの名無しさん
10/01/17 09:19:43
どんなライブラリを使えるのか、文法で許可されていることは
自由に使っていいのか明確に規定していない課題や試験は
まずいと思います
161:デフォルトの名無しさん
10/01/26 21:07:05
>>154 >>155に反論。
> 1、main関数内にダラダラ書いてあること。
mainにダラダラ書いていい。
main内で**重複するコードがあれば**、
関数としてくくり出し、それを該当箇所で呼べば良い。
汎用的に括りだされた関数は、**使われる側**であって、
mainはそれを**使う側**でしかない。
> ・そもそも個数の13をマジックナンバーで与えるのは下策。神経を疑うと言ってもいい。
これも上のケースと同様。複数の関数をまたがるように、
それぞれの中で13が使われているのならともかく、各関数を使う側の文脈として、
mainのスコープ内で一箇所だけ使われてるのなら、何も困らない。
main以外の関数の中でマジックナンバーを使う件とは、話が違う。
main以外での場合は、汎用性を完全に失墜させる愚行。使われやすさが失われる。
> 3、list_newで、mallocが失敗した場合に備えてない
デーモンプロセスになるわけでもないプログラムならば、
失敗して結構。オチて結構。
> 5、mallocしたのをfreeしてないぞ
プログラムの動作としてバグっているのならともかく、
そうでないのなら、ましてや、
実行後すぐ終了するような小規模プログラムならば見過ごせる。
> 6、引数で引き回すのが面倒という理由でグローバル変数を使うべきじゃない
これだけは最高に同意。気軽にソレを使っちゃだめ。
162:デフォルトの名無しさん
10/02/01 16:13:43
何ヶ月も経っているのに何を書いているのかと思えば、反論って程の反論になってない辺り。
main()にだらだら書いていると、そのロジックを他から利用したくなったときに書き換えが多く発生する。
main()はコマンドインタプリタとのI/F関数と言う位置づけに留めて処理の流れを書かない方がいい。
と言うのが、ある程度再利用を考慮に入れたプログラムの場合の鉄則。
最初から使い捨てが目的なら>161の言うようにmain()にマジックナンバーでも処理でも資源解放の
省略でも好きなように書いていいと思う。逆に言えば、使い捨てじゃないならどうすべきかは自明。
163:デフォルトの名無しさん
10/04/02 18:13:12
まったく再利用しなくても、書き捨てでも、整然と書く習慣を付けるべきだと思うぞ。
わざわざ悪い習慣を染み込ませてから、それを拭うような矯正をするのは無駄だと思う。
たとえば
printf("Hello, world!\n");
なんてのを手本として示す人がいるけど、
自分が落ちた落とし穴に後輩をも落す陰湿な行為だと思うんだ。
164:デフォルトの名無しさん
10/04/08 11:13:11
>>163
それのどこが問題なのか、詳しく。
もし仮に、私が想定している点を指摘したいのなら多くの人が落とし穴の存在にも気づいていないと思うのだが。
165:163
10/04/08 18:26:13
printfの第一引数は、あくまでも「書式化文字列」へのポインタであって「表示したい任意の文字列」へのポインタではない、ってことを意識させないのが問題。
冗長なようでも
printf("%s", "Hello, world!\n");
や
fputs("Hello, world!\n", stdout);
とすべき。
あるいは1行ごとに出力なら
puts("Hello, world!");
でもいい。
失敗例1)
printf("100%suki!\n");
失敗例2)
void foo(char *str) {
中略
printf(str);
後略
失敗例3)
#define MESSAGE "hogehogehoge"
中略
printf(MESSAGE);
166:デフォルトの名無しさん
10/04/08 19:07:17
やっぱりそういうことか。
まぁ、Cの入門書は実際に使っている人間が書いていないことはほぼ間違いないから仕方ないんじゃね?
>163はその手のバッドノウハウを纏めてwikiで公開してくれる気はないかい?
私も仕事をやめたらやろうかと思っているのだが、仕事をやめる気になれるほど稼げていないから未だ無理なんだ。
167:デフォルトの名無しさん
10/04/08 19:41:05
素のstrcpyを使った「お手本」を示す本は発禁にしてほしいわ
168:デフォルトの名無しさん
10/04/08 19:56:30
うーん、strcpy()はいい代案がないなぁ。
strcpy_s()が標準じゃないこともそうだけど、strcpy()で起きる問題の全てを解決できるわけではないし。
そもそも、実務ではstrcpy()というか、単純な文字列コピーを行なう機会は殆どないと思う。
# sprintf()が強力だし、文字列をコピーしなくてもポインタを引き渡せば済むことも多いし……
169:163
10/04/08 21:40:41
>>166
人様に教えることが許されるほどのスキルはないんで無理だよー。
持ちネタも、このprintf一つだけだし。
170:デフォルトの名無しさん
10/04/12 07:38:27
>>165
めちゃめちゃどうでもいいことだな。
こんなこと律儀にやってるやついないだろ。
171:デフォルトの名無しさん
10/04/13 00:13:37
>>170
とても大切なことだよ。
何らかの教育機関でプログラミングを習うのなら、なぜ大切なのか教わって当然だと思う。
172:デフォルトの名無しさん
10/04/13 09:12:33
printfというたったひとつの関数固有の、
引数の与え方がどれほど大切かね?w
173:デフォルトの名無しさん
10/04/13 16:58:48
>>172
レポート課題は自分でやれ。
174:デフォルトの名無しさん
10/04/14 01:27:43
>>172
バグに時間を取られないようにするためには、必要なこと
175:デフォルトの名無しさん
10/04/14 09:25:36
針小棒大。
176:デフォルトの名無しさん
10/04/14 16:14:03
んなこたーない
printfは基礎段階で用いる例であって、printfの使い方「だけ」の話ではない
これが適切にできないやつは、他でも同様のポカをする
177:デフォルトの名無しさん
10/04/14 18:21:53
> これが適切にできないやつは、他でも同様のポカをする
何を根拠に…。
で、例えばどんなポカをすると? 同様の?
178:デフォルトの名無しさん
10/04/14 18:33:59
例えば、SQLインジェクションを許してしまうようなセキュリティホールを作る、とかだな。