某演習科目のソースコードが非常によろしくない問題
某演習科目のソースコードが非常によろしくない問題です。
こんなクソコード学生に教えてたら悪い癖がつくことは間違いない・・・というかもう悪い癖がついてます。
でも俺は嫌な思いしてないから(諦め)
マジックナンバーの多用
マジックナンバーとはソースコードに直接かかれたよく分からん数字などのことです。
演習ではこのように使われております。
1 2 3 4 5 6 7 |
int x, y; for (y = 0; y < 768; y++) { for (x = 0; x < 1024; x++) { ... } } |
この768
や1024
が何を意味しているのかは不明瞭です。
おかげで数値の意味がわかりにくいせいで、コードを書いている途中でもどの数値を使えばいいのか迷ってしまうことが起きています。
こいうのは#define
を使って定数を作るのが一般的ですね。
既に#define
は違う科目で出たのですが、これを使うように他の学生に提案したら「よく分からん」と言われたので誰も覚えてないんでしょう。
ちなみに、また違うクラスでは#define
を使ってマジックナンバーの排除を推奨しているとのこと。
そしてマジックナンバーの多用でもっと酷いことになっているのはこんなコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
for (y = 400; y <= 450; y++) { for (x = 400; x <= 425; x++) { if (abs((x - 400) * (450 - 400) - (425 - 400) * (y - 400)) < 50) { ... } } } for (y = 400; y <= 450; y++) { for (x = 450; x <= 425; x++) { if (abs((x - 450) * (450 - 400) - (425 - 450) * (y - 400)) < 50) { ... } } } ... |
これは複数の線分を描くプログラムの一部です。
複数の線分を描くのになんと一つ一つを数値を変えながらコピペするという苦行をしている学生ばかりでした。
しかも数値がなにを意味しているのかさっぱり分からない。
「線分の座標を配列とか構造体使って格納して、ループ使って処理しろよ・・・線分1万個でもこれやるの?」
と聞いたら「やり方がよく分からん」とのこと・・・。きっと線分1万個でもコピペして貼り付けるんでしょうね。
間違った説明
「一度のfopen関数を使ったファイルオープンで読み書きは両方一度にできませんよ」
は?できるんだが?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <stdio.h> #define FILENAME "example.txt" int main(void) { FILE *fp; char buf[1024]; if ((fp = fopen(FILENAME, "w+"))) { fprintf(fp, "読み書きできるぞ"); fseek(fp, 0, SEEK_SET); fgets(buf, sizeof(buf), fp); puts(FILENAME "の中身:"); printf("%s\n", buf); fclose(fp); } return 0; } |