雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
gcc4でtolsetはコンパイルできるのか!?
とりあえず、これまでやっていたgcc3系列のパッチを当てたソース。こいつをgcc4でコンパイルできるかどうかやってみる!
※ウチの実験はFreeBSDのgcc4.2で行いました。
go_0023s
- 順調にコンパイルが進んでいたけど、やっぱり出た!エラー!
- cp/内のdecl.c内で、以下のエラーが大量に!
- lvalue required as left operand of assignment
コード current_binding_level = newlevel;
- 左辺の値は変更可能でないといけないって意味らしい。
- 左辺すなわちcurrent_binding_level。これはなにかというと・・・
#define current_binding_level \ (cfun && cp_function_chain->bindings \ ? cp_function_chain->bindings \ : scope_chain->bindings)
- こんなことしてあった。なんじゃこれ? 構造体??
- #defineって、文字の置き換えだよね?。えぇ? でもさ、なんで括弧があるの?それに、置き換え後の値も定義されてないじゃん・・・・
普通のdefine #define aaa 123 <-aaaと書かれたらコンパイル時に123に置き換えろ! x = aaa + 456; --->コンパイル時には置換される--> x = 123 + 456;
- そうすると、あそこを素直に考えると
current_binding_level = newlevel; ↓ (cfun && cp_function_・・・略・・・pe_chain->bindings) = newlevel;
- そうすると、あそこを素直に考えると
- こうなるわけ??? なんじゃ?こりゃ???
- あっれ? 難しく考えすぎてたかな??。これ、単なる計算式じゃない??
(cfun && cp_function_chain->bindings \ ? cp_function_chain->bindings \ : scope_chain->bindings) ↓ ちょっと長くなるのでcp_function_chainをCFCと書く ↓ (cfun && CFC->bindings ? CFC->bindings : scope_chain->bindings)
- で、この?と:って条件演算子じゃないの??。そうするとさ、こういうふうにならない?
if(cfun && CFC->bindings) { CFC->bindings; } else { scope_chain->bindings; }
- ぐはぁ! これなら意味は通じるぞ!。これで合ってるのかな???
- ・・・じゃあさ、じゃあさ!! エラーがでるあの部分って、こういうふうに書き換えればいいってこと??
コード current_binding_level = newlevel; ↓ if(cfun && CFC->bindings) { CFC->bindings = newlevel; } else { scope_chain->bindings= newlevel; }
- で、この?と:って条件演算子じゃないの??。そうするとさ、こういうふうにならない?
bim2bin
- でました。エラー。
- ((int) p) &= ~0x03;
- たぶん型キャストに問題がある。左辺はキャストしちゃいけないはず。
- たぶんこんな型キャストしてるということは、pはintじゃない。で、~0x03がintなんだろうと思われる。
void tek1_btseek(struct TEK1_STR_BTBUF *btbuf, UCHAR *p) { int bit = (((int) p) & 0x03) << 3; ((int) p) &= ~0x03; btbuf->rest = 32 - bit; btbuf->buf0 = (*(unsigned int *) &p[0]) >> bit; btbuf->buf1 &= 0; btbuf->ptr = (unsigned int *) &p[4]; return; }
- やっぱり。UCHAR *p ってことは、pは「アドレス変数」ということになる。
- つまりここは、分解してちゃんと書くと、こういう意味になるはず。
((int) p) &= ~0x03 → ((int) p) = ((int)p) & ~0x03 -> ((int) p) = ((int)p) & ~0x03
- ・・・ということは、こうすればいいのかな???
p = (UCHAR *)((int)p & ~0x03)
- ふむ〜。たぶんこれでいけるかも〜。
最終更新: 2024-01-06 (土) 22:39:12 (JST) (110d) by