2006-12 << 2007-01 >> 2007-02

2007-01-03 (水)

*プリプロセッサ

下のCで書かれたプログラムの出力はどうなるでしょうか?

#define VAR(t) v_##t
#define A x
int main(){
    int v_A=0,v_x=0;
    VAR(A)=1;
    printf("%d %d\n",v_A,v_x);
    return 0;
}

「0 1」の出力を期待して書いていたのだけど,「1 0」と出力されます.マクロが外側から展開されるのを忘れていました.VAR(A)がv_Aになった時点で,Aをxに置き換えできないわけですね.

#define _VAR(t) v_##t
#define VAR(t) _VAR(t)
#define A x
int main(){
    int v_A=0,v_x=0;
    VAR(A)=1;
    printf("%d %d\n",v_A,v_x);
    return 0;
}

このように書けば意図したとおりに動くようです.しかし,正直,プリプロセッサの仕様を確認してないので,常に使えるのかどうかわかりません.

そういえば,C言語の入門書ってプリプロセッサおざなりな気が.まぁ,確かにプリプロセッサはC言語ではないけれど,それでも重要な要素には変わりないわけで……(以下略)

*Cell

IBMのCell Broadband Engine Software Development Kitを見てました.

そろそろPS3のCell用の開発環境が整ってきたかなという感じもしてきますね.

開発環境がPS3の発売後に整ってくるというのもなんだかアレですが….真っ当な開発環境が中々出来ないのが問題だとSonyの中の人も言ってた気がするけど.

Cell触ってみたいな…….PS3をゲーム機として買うなんて勿体無い!というか,Cellの性能を引き出せるゲームメーカって存在するんですか?ゲーム市場はよく知らないけど.

*サイエンスチャンネル

サイエンスチャンネルのスペシャルの中にある「江戸のテクノロジー」が面白かった.