新C言語を作ろう
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドの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); } 変数のアドレス限定なのは、初期化式中に変数の値を参照しても 何の意味もないからです。もし参照してたらエラーにすべきでしょう。
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
4977日前に更新/197 KB
担当:undef