K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>なんとなくネタ的に面白いので追加検証。gcc ならソースコードがあるので読んでみた。 >gcc-3.4.5 を追っかけ。 gcc-4 では大幅な変更が入っているので変わっているかもしれない。 > >int array[1]; >array=0; >なるソースコードに対する挙動 > >C の場合 gcc/c-typeck.c Line 3677 でエラーメッセージを出力 >これは convert_for_assignment() 関数の末尾である。この関数の先頭部分で > if (TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE > || TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE) > rhs = default_conversion (rhs); >なるコードが実行されている(すなわち右辺はデフォルト変換が実施されている) >のに対して左辺のデフォルト変換を行うコードは見当たらない。 >=代入式の左辺においては「配列名を先頭へのポインタに読み替える」変換は実施していない > >C++ の場合 gcc/cp/typeck.c Line 5295 でエラーメッセージを出力 >これは build_modify_expr() 関数の一部であり > if (TREE_CODE (lhstype) == ARRAY_TYPE) >の内側にある。この例では右辺左辺の型が異なるのでこのエラー。 >もし array=array; であるなら、型一致なのでこの行ではなく先に進んで >ISO C++ forbids assignment of arrays エラーが発生。 >いずれにせよ左辺のデフォルト変換を行う関数は呼ばれていない。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!