◀ANSI版開発トップへ
  • 3055 複合代入で
    • 3057 Re:複合代入で
      • 3058 Re2:複合代入で
        • 3065 Re3:複合代入で
          • 3097 Re4:複合代入で
            • 3098 Re5:複合代入で
              • 3099 Re6:複合代入で
              • 3149 Re6:複合代入で
                • 3166 Re7:複合代入で
                  • 3170 Re8:複合代入で
                    • 3175 Re9:複合代入で
                • 3167 Re7:複合代入で
                • 3222 キャストと符号拡張
                  • 3230 Re:キャストと符号拡張
        • 3092 Re3:複合代入で
  • [3055] 複合代入で みく 2003年08月31日 16:53


    複合代入で左辺をキャストしている箇所が2箇所あるのですが、
    これも修正されないかなぁ、なんて。
    • [3057] Re:複合代入で wmlhq 2003年08月31日 17:33

      ▼ みくさん
      > 複合代入で左辺をキャストしている箇所が2箇所あるのですが、

      個所が分かってたら、diffか行番号書いてくれよ
      • [3058] Re2:複合代入で みく 2003年08月31日 18:50


        CEditView_New2.cpp:910行あたり
         (int)(*mode) |= 4;

        CMemory.cpp:405行目あたり
         (unsigned char)pszWork[j] -= (unsigned char)0x80;


        -----

        わかる方がいたら教えてください。

        MinGWでビルドするとき、
        タイプ別設定画面系では問題ないのですが、
        共通画面系のCPropCom*.cppでエラーになります。
        どうすればいいんでしょう?

        ../sakura_core_mingw/CPropComBackup.cpp: In static member function `static int
        CPropCommon::DlgProc_PROP_BACKUP(HWND__*
        , unsigned int, unsigned int, long
        int)':
        ../sakura_core_mingw/CPropComBackup.cpp:82: error: no matching function for
        call to `CPropCommon::DlgProc(<unknown type>, HWND__*&, UINT&, WPARAM&,
        LPARAM&)'
        ../sakura_core_mingw/CPropCommon.h:138: error: candidates are: static int
        CPropCommon::DlgProc(int (CPropCommon::*)(HWND__*, unsigned int, unsigned
        int, long int), HWND__*, unsigned int, unsigned int, long int)
        mingw32-make: *** [..\sakura_core_mingw\CPropComBackup.o] Error 1
        • [3065] Re3:複合代入で wmlhq 2003年09月01日 12:47

          CPropCommon::DlgProc_PROP_BACKUPの中で
          CPropCommon::DlgProcが変な宣言のため、第一引数の型なんて分かるかー、ってぼやいてるのです。「candidates are」の後をヒントにして修正しといて。

          コンパイラ屋さん、ひまでしたら片っ端から無駄なキャストと警告を取り除いてくださいね。見通しが悪すぎますから。
          • [3097] Re4:複合代入で じゅうじ 2003年09月07日 17:51

            ▼ wmlhqさん
            > コンパイラ屋さん、ひまでしたら片っ端から無駄なキャストと警告を取り除いてくださいね。見通しが悪すぎますから。

            関数のパラメータ以外の場合、定数の前のキャストは必要無い。
            「[^C]\) *([0-9]|')」で探すと、約120個有ります。

            以上
            • [3098] Re5:複合代入で みく 2003年09月07日 18:15


              >関数のパラメータ以外の場合、定数の前のキャストは必要無い。

              本当に?
              • [3099] Re6:複合代入で じゅうじ 2003年09月07日 19:18

                ▼ みくさん
                >
                > >関数のパラメータ以外の場合、定数の前のキャストは必要無い。

                すみません、一般的にではなくて、符号を取るような、
                (unsigned short) -1
                は、別です。
              • [3149] Re6:複合代入で じゅうじ 2003年09月17日 22:57

                ▼ みくさん
                >
                > >関数のパラメータ以外の場合、定数の前のキャストは必要無い。

                間違えました、半角カナも負の値でした。
                (unsigned char)'゜'

                眠い目を擦りながら、なんと!見つけたのではないでしょうか? >>単語単位で探す(W)
                CDocLineMgr.cpp(2236,)
                - if( pData[nIdx] >= (char)0xa1 && pData[nIdx] <= (char)0xdf ){ // Mar. 30, 2003 genta fd
                + if( (unsigned char)pData[nIdx] >= 0xa1 && (unsigned char)pData[nIdx] <= 0xdf ){ // Mar. 30, 2003 genta fd
                • [3166] Re7:複合代入で もか 2003年09月20日 15:16

                  複合代入でも、キャストでもないんですが、代入のバグです。

                  ■"CEditView_Command.cpp"
                  ・(6693,19): if( p[1] == '\\\\' ) //ネットワークパスか?
                  '\\\\' → '\\'
                  • [3170] Re8:複合代入で じゅうじ 2003年09月21日 14:08

                    ▼ もかさん
                    > 複合代入でも、キャストでもないんですが、代入のバグです。

                    冗談、比較してます。
                    - if( p[1] == '\\\\' ) //ネットワークパスか?
                    + if( p[1] == (char)'\\\\' ) //ネットワークパスか?
                    • [3175] Re9:複合代入で もか 2003年09月22日 16:41

                      >> 複合代入でも、キャストでもないんですが、代入のバグです。
                      >▼ じゅうじさん
                      >冗談、比較してます。
                      たしかに比較ですね。(^^;

                      >- if( p[1] == '\\\\' ) //ネットワークパスか?
                      >+ if( p[1] == (char)'\\\\' ) //ネットワークパスか?

                      if( p[0] == '\\' ) //ドライブなし絶対パスか?
                      {
                      - if( p[1] == '\\\\' ) //ネットワークパスか?
                      + if( p[1] == '\\' ) //ネットワークパスか?
                      前の行が上記で、1文字比較で、'\\'でいいはずです。
                • [3167] Re7:複合代入で じゅうじ 2003年09月21日 00:13

                  続きです。(頭突き?)
                  (char)0xA1 == -0x5F
                  (char)0xDF == -0x21

                  ついでながら、
                  CLayoutMgr_New.cpp(1279,)
                  - it.getCurrentChar() == (char)0x81 && it.getCurrentPos()[1] == (char)0x40 ))
                  + (unsigned char)it.getCurrentChar() == 0x81 && it.getCurrentPos()[1] == 0x40 ))
                • [3222] キャストと符号拡張 げんた 2003年10月09日 01:33

                  >眠い目を擦りながら、なんと!見つけたのではないでしょうか? >>単語単位で探す(W)
                  >- if( pData[nIdx] >= (char)0xa1 && pData[nIdx] <= (char)0xdf ){ // Mar. 30, 2003 genta fd
                  0x80をまたいでいないので,*pData 0xa1, 0xdfがすべてcharであればintに拡張したとき負の値と見なされますが値の大小比較では問題ないのでは?

                  #この下の行のコメントをなおし忘れているのはさておき.

                  >it.getCurrentChar() == (char)0x81 && it.getCurrentPos()[1] == (char)0x40
                  こちらもcharに合わせて定数もcharとすることで,同一の値になって問題ないのでは?

                  じゅうじさんの
                  >(unsigned char)it.getCurrentChar() == 0x81
                  ではcharの負の値をunsigned charにキャストすることになって正しい値が入らないのではないかと思います.(未確認)
                  char*をunsigned char*で読み替えるのはうまくいきますけどcharにunsigned charのキャストをかぶせてもどう変換されるのか??

                  >p[1] == '\\'
                  Cでは文字定数はintだけど,C++ではcharと解釈されて問題ないはず.
                  • [3230] Re:キャストと符号拡張 じゅうじ 2003年10月09日 21:36

                    ▼ げんたさん
                    ご指導有り難う御座います。

                    (unsigned char)のキャストは、どちらの方法でも同じです。
                    it.getCurrentChar() == (char)0x81
                    (unsigned char)it.getCurrentChar() == 0x81

                    -0x7F == (char)0x81
                    (unsigned char)-0x7F == 0x81
        • [3092] Re3:複合代入で げんた 2003年09月07日 13:23

          >CEditView_New2.cpp:910行あたり
          > (int)(*mode) |= 4;
          int *mode なのだからintのキャストは不要なのになぜ付いているのだろう?

          >
          >CMemory.cpp:405行目あたり
          > (unsigned char)pszWork[j] -= (unsigned char)0x80;
          こっちも pszWorkはunsigned char* なのだから冗長ですね.取り除いておきます.