パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

もうやらなくていい昔のコーディングテクニックあれこれ」記事へのコメント

  • あれを未だにやめず使う人の気が知れんです。
    • Re: (スコア:3, 参考になる)

      アプリケーションハンガリアン [joelonsoftware.com]は結構有効な気はします。
      char szHogeHoge[64]のようなシステムハンガリアンを使うことについては、僕も大嫌いですが。
      • そうですか? ポインタには、p つけとかないと何となく不安になるんですが。
        • 自分ではやりませんが、人がやっている分にはスルーする事にしています。

          ただ、

          Windows界隈ですが、変数名ではなく型名にハンガリアン記法(っぽい)定義がされているのが、よくあります。

          符号無し32ビット整数である DWORD に対して、それのポインタである LPDWORD が定義されているわけです。
          これだと頭が混乱するので、素直に DWORD * と書いて欲しいわけです。

          ポインタ値を“ポインタ返し”関数があったとします。たとえば以下のようなものです。

          void hoge (void **p);

          これをマイクロソフト流に書くと、

          void hoge (LPVOID *p);

          となります。この辺で、かなりイラっときます。

          文字列ポインタは、マルチバイト文字かワイド文字か、constの有り無しで、以下のように定義されています。

          LPSTR
          LPCSTR
          LPWSTR
          LPCWSTR

          ときどき LPCWSTR * なんてのが出てきます。この辺で、殺意を覚えます。

          素直に、

          char *
          const char *
          wchar_t *
          const wchar_t *

          って書いてくれれば、混乱しなくて済むのに。

          親コメント
          • by Anonymous Coward on 2009年05月04日 20時11分 (#1559180)

            それは、ターゲット環境によって
            typedef const char *LPCSTR;

            typedef const char __far *LPCSTR;
            を定義し分けなければいけなかった時代の名残なのです。今となってはまさに「もうやらなくていいコーディングテクニック」ですね。

            親コメント
          • HANDLE が void* なのか struct { ... } _HANDLE, *HANDLE; なのかとかの違いを再コンパイルだけで通せるようにするためのものですから。
            TCHAR が char なのか wchar_t なのかもコンパイルスイッチ依存で LPTSTR とかを使う場合が多いように思いますけど、そんなに LPSTR とか使いますか?

            # そして printf_s() の呼び出しを軒並み wprintf_s に変えたりすることに。

            親コメント
            • char か wchar_t をコンパイルスイッチで切り替えて、どちらでもコンパイルが通るように保守すること自体が、(今となっては)無理があると思うのです。

              私はデータ型のサイズをいつも意識に入れながらコードを書くので、TCHARがマルチバイト文字なのかワイド文字なのかを“意識せずに”コードを書くのは、私には無理です。なのでT〜系の文字型を使ったことはありません。

              MFCと決別してQtを使い始めてから、T〜系の文字列型は必要なくなったので char か wchar_t を意識して書き分けます。普段のGUIアプリならそれでいいのですが、まれに要件の制約でMFC等を使わざるを得ない場合は、“文字セット=Unicode文字セットを使用する”にして、 wchar_t * を使います。それでも char * が必要なときは FunctionNameA() の用にサフィックス(?)付きで使います。

              そんなわけで、T〜系の文字列型は「もうやらなくていい昔のコーディングテクニック」だと思うです。

              親コメント

にわかな奴ほど語りたがる -- あるハッカー

処理中...