タグ

2010年3月14日のブックマーク (2件)

  • C 言語 三種の神技: void*/(cast)/#define: uyota 匠の一手

    C 言語の能力を最大限に引き出すには、これらが重要な役割を果たす。 void *ボイドポインタ (type)タイプキャスト #defineマクロ である。実は、マクロ自体は C 言語の規格ではなく、プリプロセスのものである。しかし、既に C 言語のコンパイル手順はプリプロセスと一体化し、マクロのない C 言語など考えられないので一つとして数える。 C 言語が扱う型は大きく分けると値とメモリ番地だけなのである。値は更に分かれ、int や double などとなるのである。そして、メモリ番地はそれらの値が存在するメモリの位置となる。struct は値の集合体であり、すなわち値である。 さて、お気づきであろうか。void * は全てのメモリ番地を指すことができ、(cast) は如何なる値も cast 型として読むことを指定する。すなわち、この二つが C 言語の根底を示しているのである。 void

  • 3.1 配列の要素数を返す. - C/C++ 関数・マクロ集 ((ほぼ?) 処理系・OS 非依存)

    「C/C++ 関数・マクロ集」というタイトルですが, そのうちのいくつかはC専用だったりします.(苦笑) 2007/06/24(日) 追記 高木さんより, Cの規格上移植性に問題がある点をご指摘いただいたので, 現在修正中です. (たくさんあります….orz) とはいってもその多くは, めったにお目にかかれないような珍しい処理系とか, 「そんなの実在するの?」という処理系に移植する場合の話なので, 実用上ほとんどの場合は問題ないと思います. (一部そうとはいえないものもありますが.) Cの規格に照らして完全に「処理系・OS 非依存」 にするのは困難な場合もあり, 完璧な移植性にこだわるあまりプログラムが書けなくなっては末転倒なので, タイトルに「ほぼ?」を入れました.orz 2007/06/21(木) 追記 このページを含め,私が C/C++ 関連記事を書くに当たりたびたび参考に&リンク