T-Log



プログラミング ツライ

卒業した先輩の残してくれた追跡プログラムを,自分の研究にも流用しようと手をつけ始めて10日.
Cで書かれていてUNIXなgccで構築されたと思われるこのプログラムを,マイスイートハニーなVisual Studio .NETに移植してしまおう作戦.
画像読み込みの部分でDirectShowを使ってるから(うっきーありがとう!),Windowsに移植しなきゃならんのだけど.
が,このプログラム,いろいろと変わった部分が多いので悩まされている.




1. 関数が長い
数百行もある関数がいっぱい.何やってんのかわかりません・・・

2. 似たような超長い処理が何カ所も出てくる
(1.)とも関連するけど,関数にするべき.

3. いろいろな処理が一つのファイル(.c, .cpp)に書かれている
たとえば,ファイル読み書きと,基本的な画像処理部分と,追跡部分といった風に分けた方がわかりやすい.

4. 初めて見る書き方
for (i = 0, k = 0; i < M; i++) {
  // 処理
}
初期化がふたつ・・・?
for (int i = 0, k = 0; i < M; i++) {
  // 処理
}
と書き換えたらVisualStudioに怒られるし.

5. 中括弧の省略
for (n = 0; n < MAX_Y; n++)
  for (m = 0; n < MAX_Y; n++)
    if (!p) {
      // ここになが~い処理
    }
// ここから再び処理

括弧がないと"ctrl+]"で対応する括弧に飛べないorz

6. フォーマットがバラバラ
条件分岐で
if (foo) {
  // 処理
}
だったり
if (foo)
{
  // 処理
}
if (foo) {/* 処理 */}
だったり
if (foo) // 処理
だったり
if (foo)
  // 処理
だったり.
ほかに,括弧やコンマの前後にスペースを入れていたり入れていなかったりとバラバラなので見にくい.

7. ネストが変
(5.)の状況と数百行に及ぶ関数の合わせ技はツライ.

以下コンパイルorリンクエラー.gccは許してくれるんだろうか?

8. 配列の初期化が変
int foo[480][640] = {};
{}では初期化できないような?
int foo[100] = {0};
ならできるけど・・・?

9. 配列の宣言で要素数が変数
int foo[m->p][x];
newまたはmallocするべき(うっきーいつも教えてくれてありがとう!)

10. ヘッダでグローバル変数を宣言して,それを複数ファイルでインクルード
リンクエラーになる.
同じ名前のグローバル変数をあっちこっちで宣言しちゃいけません.一つのファイルで宣言して,あとはexternっしょ?

実行時の問題

11. メモリ食い過ぎ
1GBのメモリを載せているんだけど,プログラム実行するとメモリを食いつぶす.
プログラムを修了させた後もOSが不安定になる.



などなど.
参考にさせてもらってるのに文句言って申し訳ないです...
ウン千行(モデル自動生成のプログラムを加えればウン万行)あるプログラムだから,たぶん,時間が無くてテンパリながら書いたんだと思うから仕方ないとは思うんですけどね.
自分もプログラミングが得意な訳じゃないから偉そうなことは言えないんですが...
[PR]
by hazee | 2005-12-07 03:14 | 研究
<< 母 初メール 続々と提携内容決まる >>

言わぬが花
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31