鍋あり谷あり

テーマを決めずに適当に書いています。

昨日と一昨日の続き

先日言及しただけで書かなかった、cl で通らないソースは以下の通り:

typedef int (*foo)( void * );
void test()
{
  foo( foo );
  foo( foo );
}

ご覧の通り、http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20051124#p01 にあるものと全く一緒。
gcc だとOK。私も OK だと思う。
マイクロソフトコンパイラで、cl /Tc*1 だと、エラー。cl /Tp*2だとOK。逆じゃないのか>マイクロソフト


あと。C++ で、2回目は違う意味の別バージョンを思いついた。1行目で変数を導入し、型名を隠すというのは今までと同じだが:

struct foo{
  foo & operator&( const foo & ){  return *this;  }
};
void test()
{
  foo Foo;
  foo &foo = Foo; // 参照型の変数を定義。
  foo &foo = Foo; // foo::operator&(...) を呼び出したあと、代入。
}

2回目の foo & foo = Foo; が変数定義じゃないというのはかなり意外な気がする。

それと。
先日(id:Nabetani:20051118:p2)書いた ++C は、D言語に非常に近い。非常に近いんだが、D言語ではだめだと思う理由が一つある。
D言語ではOSを書くことができない。いや、もしかしたらできるのかもしれないが、GCを内蔵している言語にOSを書くことができるような気がしない。
たぶん、炊飯器や洗濯機のプログラムを書くのにも向いてないと思う。
その点。C++ は、C言語が使える場所ならどこでも(RTTIを off にして、例外処理を使わず、注意深く書けば)C言語と同等以上の効率(速度でもスペースでも)で使うことができる*3
とはいえ。
私自身は、GCの使えないようなクリティカルだったり低レベルだったりする仕事は最近してないので、D言語には大いに魅力を感じる。
使ったことはないんだが。

#写真と本文は関係ありません

*1:compile file as .c

*2:compile file as .cpp

*3:インライン関数が書ける分 C++ の方が効率がよくなりうるが、C99 と比較すれば同等か