風で飛んでいくチラ裏

気ままに雑記メモ書き殴り。古い記事は別blogからの引っ越しなのでレイアウトがアレです。

CFAQを読む

http://www.kouno.jp/home/c_faq/

困ったときにお世話になるCFAQ。何度も見に行くけど、そのたびに違う発見が。 Cの教科書も今読み直すと違う発見があるかもなぁ。 つわけで、読んだときのメモを書き記してみよう。

1.1 > 文字データ型を(特にunsigned charを)"小さな"整数と~~

PICではよくやりました。unsigned char i; とか! スタック 256Byte なんですもの。 8bitCPUなので、コンパイラが符号拡張しませんぬ。というわけで分かってて使ってるということで。 BYTEを定義したほうがいいのかも。

1.7 これはやります。

hoge.c

-----

#include "hoge.h"

int global;

-----

hoge.h

-----

extern int global;

-----

で、globalを使う別のソースはhoge.hをインクルードする。基本的にはメインでその変数を管理するモジュールで実宣言を行い、外のモジュールはRead Onlyとすべし。まあグローバル変数はよっぽどのことがない限りとりあえず使うな。

 

1.21 あるよねこういうなぞなぞw 英語で内から外に読むルールを知らないと大混乱。 この辺はこっちのほうが詳しい。

http://kmaebashi.com/programmer/pointer.html

1.22 うーん、ステートマシンはステートと関数ポインタのテーブルを作っておいて、各ステート処理関数では次のステートもしくはイベントを値で返すほうが良いのでは...。処理した関数で次の関数ポインタを返したくなるような状況ってのが分からない。

1.30 PICではゼロ初期化するライブラリをリンクしないとしてくれなかったなぁ…。 これはコンパイラ特有の問題か。

1.32 今まで経験した環境だと、大体文字列リテラルは書き込み禁止領域に置かれてたなぁ。 どっかで前書いたけど、文字列リテラルはその先頭文字へのcharポインタを返すのだよね。

1.34 ステートマシンとか書くときはお世話になります。 関数名がポインターに成り下がるので、関数名でprintすれば関数が配置されてるアドレスが分かる。デバッガやICE使えりゃ苦はないが、スタックトレースなんかを見ながらデバックするときは重要。

今回はこんなところで。