No Such Blog or Diary
C言語で return を省略した関数の戻り値を使うのは不定
- 2012-05-07 (Mon)
- プログラミング
ISO/IEC 9899 のC99の仕様とか C11のドラフト の 6.9.1 Function definitions には次のように書かれている.つまりは return なしで関数の最後まで行き,その関数の戻り値が使われたなら,何が起こるかわからないと.
12 If the } that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.
が, どうせ return 文が無いだけならコンパイラが %eax にデータを上書きしないだけなので,それを期待すれば下の階乗のプログラムは想定通りに動く(gcc 4.5.3 @ cygwin で確認).つまり,関数の最後で関数を呼び,末端の呼び出しの return をいちばん外側まで到達させる(末尾再帰なわけだけど).実際にアセンブリで見てもそうなってる.
#include <stdio.h> int fact(int k) { static int f=1; if( k <= 0 ) return f; f*=k--; fact(k); } int main(int argc, char*argv[]) { printf("%d\n", fact(10)); }
で,お手伝いしているプログラミング演習で結構な数の学生らが上のようなものを書いてしまい,それが適当に動いてしまったがために「再帰呼び出しを繰り返してもどこかで発行した return の値が最初の呼び出しまで戻る」とか勘違いしてしまったのが問題.その次の課題の二分探索のプログラムで結構な数の学生が再帰呼び出しに return を書いてくれないという状況に陥った.ま,再帰関数の説明の資料が void 型の関数だったので理解のしようもないのだけど(注:私は資料にノータッチ).
つか,それって再帰の深部で値を exception に乗せて throw で投げて再帰の外で catch するという exception-driven programming の思想だよね(注:普通の意味と違う).
- Comments: 0
- TrackBack (Close): -
Ubuntu 12.04 で X が不安定だ……
- 2012-05-07 (Mon)
- 一般 ソフトウェア ( Linux/coLinux )
何故か突然落ちてくれる,作業中に.そして作業していた内容が全部消えるという罠.
こまめに保存しておかないとヤル気がなくなる&そもそもリセットされると作業効率が悪い.どうにかせねば.
- Comments: 0
- TrackBack (Close): -
Makefile を置いてくれ……
- 2012-05-07 (Mon)
- 一般
共著者が論文のリポジトリに Makefile を置いてくれないので tex のコンパイルがめんどくさい.
ということで,pdflatex 3回と bibtex をまとめて実行してくれるような関数を .bashrc に書いておくことにした.これで作業が捗る.
function pdflatex3 { if test "x$1" = "x"; then echo "Usage: pdflatex3 name" else pdflatex $1 && bibtex $1 && pdflatex $1 && pdflatex $1 fi }
- Comments: 0
- TrackBack (Close): -
風邪再び
- 2012-05-06 (Sun)
- 一般
やっぱり雨の高速を防水でない装備で走り続けたのがこたえたかなぁ…… また風邪引いたよ.
とりあえず今日はおとなしくゲームしてよう.
- Comments: 0
- TrackBack (Close): -
間違えたか?
- 2012-05-05 (Sat)
- 一般
家の近くでチェーンにグリス塗ろうと作業してたら荒川のバーベキュー広場への道を聞かれた.とりあえずバーベキューの場所なんぞ記憶にないのでちょっと分からんと言ったのだけど,なぜか相手は繰り返し聞いてくる.分からんものは分からんので何ともしようがないのだけど…… 話を続けるうちにそういえば荒川戸田橋緑地にバーベキュー場があったなぁとか思い出したので,とりあえずそこら辺にある気がすると伝えてエンカウント終了.
んで,作業を終えてからPCで検索かけてみたら荒川知水資料館のところにもバーベキュー広場があるそうな.迷ってた場所からしてこっちに来たかったのかなぁ…… 間違ってたらごめん.
とりあえず,分からんものを無理やり聞き出すと双方にとって不利益になりかねないことを理解した.正しい返答は「ググれ」だったのかもしれない.
- Comments: 0
- TrackBack (Close): -
月川温泉の花桃を見に行く
とりあえず想像のだいぶ上を行く規模だったのでとても満足.ぜひともまた行きたい.駐車場はバイク200円・車500円?
閑話休題.
現地は晴れたけど,行きの中央道の諏訪から南下する最中に超大雨に降られた.上は冬用のライディングジャケットだったので問題なかったが,下はただのジャージだったので下着やら靴やらまでびしょ濡れ.そのまま走り続けて最終的に乾きはしたのだけど真夏ではないので寒かった…… 濡れても大丈夫な装備が欲しいかも.
帰りは,飯田から R153 → r243 → r430 → r1 → R418 → R152 + 兵越峠 → r389 → R362 → r63 → r283 → r40 + 遠州森町PA → r58 → R473 → 島田金谷IC,というルートでふらふらしてみたのだけど…… 桁数の多い県道とか,落石と水と路面の凹凸とに集中してないと脇見した途端に即死しそうな罠が沢山.疲れた.
閑話休題.
新東名のSA/PAが混みすぎ…… 静岡のSAとか駐車場まで20分とかいう表示の渋滞があったし,遠州森町PAにぷらっとパーク側から寄ってきたけどこっちも駐車場待ちの列ができていたし.大体にして前の日曜の早朝に新東名を通った時には路上は空きまくっているのにSAが満車とかいう状況だったし.皆落ち着け.
- Comments: 0
- TrackBack (Close): -