新C言語を作ろうat TECH新C言語を作ろう - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト50:デフォルトの名無しさん 07/07/24 20:45:39 むしろlisp級にまでマクロ強化 51:デフォルトの名無しさん 07/07/24 21:00:44 結局C++が出来上がる気がするな 52:sage 07/07/24 21:09:48 C+++ 53:デフォルトの名無しさん 07/07/24 21:38:12 C-- 54:デフォルトの名無しさん 07/07/24 21:39:30 >>50ではないが、俺もマクロの強化を望む。 lisp の defmacro の強力さを知らんのだよ。 Symbolics の FORTRAN はマクロによって lisp に展開されていた。 餓鬼どもには想像も出来んだろうがな(w 55:デフォルトの名無しさん 07/07/24 21:39:40 実はC言語はこんなこともできないのです。 int f(int n) { return n + 1; } int g(int n) { int x = f(n); { int x = f(x); { int x = f(x); return x; } } } int main() { printf("g()=%d\n", g(1)); return 0; } さて、g(1)はいくつを返すでしょう? このコードに対してエラーも警告も出さなかったコンパイラがあったら要注意です。 C言語は { int x = f(x); ~} を期待通り処理しません。 初期化式中のxは変数宣言xによって既に親を上書きしています。 つまりこの規則は変数のアドレスを再帰的に初期化式に 適用したいというかなり特殊な状況以外に全く役に立ちません。 h() { struct _tag { struct _tag *next, *prev; } a = {&a, &a}; printf("&a=%d a.next=%d a.prev=%d\n", &a, a.next, a.prev); } 変数のアドレス限定なのは、初期化式中に変数の値を参照しても 何の意味もないからです。もし参照してたらエラーにすべきでしょう。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch