雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
1: 2007-02-18 (日) 20:49:42 ソース バックアップ No.1 を復元して編集 現: 2024-01-06 (土) 22:39:12 ソース 編集
Line 1: Line 1:
-[[gcc_error]]+gcc4でtolsetはコンパイルできるのか!? 
 + 
 +とりあえず、これまでやっていたgcc3系列のパッチを当てたソース。こいつをgcc4でコンパイルできるかどうかやってみる! 
 + 
 +''※''ウチの実験はFreeBSDのgcc4.2で行いました。 
 + 
 + 
 +*go_0023s [#lfc22ed7] 
 +-順調にコンパイルが進んでいたけど、やっぱり出た!エラー! 
 +-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 [#dd3248bd] 
 +-でました。エラー。 
 +-        ((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) 
 + 
 +-ふむ〜。たぶんこれでいけるかも〜。 
 + 
 + 
 +*コンパイル完了! はたして!! [#t1591ead] 
 +-さてー。そんなわけでコンパイルができました。さてこれではりぼては動くか?