なじめないもの

アバター
GRAM
記事: 164
登録日時: 14年前
住所: 大阪

なじめないもの

投稿記事 by GRAM » 14年前

自分のようなプログラミング初心者にとって何かしらの「壁」はつきものだとは思うのですが、結構初期からずっとなじめないものがあります…。

それは「typedef」です。いや、語弊があります。よく考えてみるとtypedefそのものについては何の恨みもありません。特にテンプレートクラスを使ったときや、長い名前空間に使いたいクラスがあったりすると、やはりtypedefは重宝します。

typedef Graph::Node::BaseNode NodeType;

みたいな感じで使う事は自分でもよくあります。
…しかし
typedef unsigned long DWORD;
みたいなやつがどうもなじめません(涙)
いいじゃんunsigned long で!!
いや、わかりますよ!何か深い理由があるのでしょう!
でもこれはまだましなんです!だってDWORDって
Double WORDの略で32bitのことなんでしょ!まだだいたい意味が通じます。ところが
「LPCTSTR」…これは何の略なんだ!しかも
LPSTR
LPCSTR
LPTSTR
LPCTSTR
LPWSTR
LPCWSTR
となんと紛らわしい…こんなもん流し読みで識別できるか!
LPでポインタ?このLって何?
CはconstのCか?Tってなんだ?Wってなんの略なんだ?
…と型名だけ見ても一体何を表しているかさっぱり分からないという事態が起き、その度にインターネットに頼ることになってしまいます。
…せめて省略する前の元の意味をtypedefの横にちょびっとコメントアウトして載せておいてくれるだけでずいぶん覚えやすくて助かるのだが…(VC++なら右クリックして定義へ移動でわかるから)

慣れればこんなものが簡単に思えてくる日が来るのでしょうか?

アバター
山崎
記事: 2
登録日時: 14年前

Re: なじめないもの

投稿記事 by 山崎 » 14年前

ああ!!
ものすごく共感します!!ここまで他人の話題に共感したのは久々ですっ!!
私はC言語を始めて6年目になりますが、同じようなことを感じています^^;

アバター
GRAM
記事: 164
登録日時: 14年前
住所: 大阪

Re: なじめないもの

投稿記事 by GRAM » 14年前

コメントありがとうございます
そうですか…6年目の方でもそうなんですか…
なんか聞いて逆に安心しました!
しかしそうは言っても使わざるを得ないのですね^^;

アバター
バグ
記事: 130
登録日時: 14年前

Re: なじめないもの

投稿記事 by バグ » 14年前

私がよく行く現場ではBIT、BYTE、WORD、DWORDってのはよく使われるので、むしろ有り難く感じていますが…(^_^;)

アバター
GRAM
記事: 164
登録日時: 14年前
住所: 大阪

Re: なじめないもの

投稿記事 by GRAM » 14年前

>>バグさん
なるほど。やはりつかわれていますか。
たしかに意味と使うタイミングを覚えてさえいれば、バグの防止と可読性の向上につながりそうだとは感じます。…しかし法則性だけでも覚えるのにどれだけかかることやら
しかし「現場」ですか…。職になされているとは尊敬します

crux
記事: 6
登録日時: 14年前

Re: なじめないもの

投稿記事 by crux » 14年前

プログラムを作る上で理解できなかったり納得ができないものがあると大変ですね;

私も講義を受けてプログラムの例を教えてもらうことがあるのですが、「詳しい意味は各自考えろ」と言われて困ることがあります…。

アバター
Justy
副管理人
記事: 122
登録日時: 14年前

Re: なじめないもの

投稿記事 by Justy » 14年前

>LPCTSTR
 気持ちはわかります。
 頭から見ていけば何の型かは判別できますが、瞬時には判別できないので見辛いことこの上なしですね。


>DWORD
 長いこと Wordは 32bit、DWordは 64bitの世界にいたので、この定義は私も馴染めないというか違和感が強いです。

アバター
へろりくしょん
記事: 92
登録日時: 14年前

Re: なじめないもの

投稿記事 by へろりくしょん » 14年前

どれもこれも16bit時代の名残なんですよね。

LPTSTR の定義を見るとtypedef TCHAR FAR * LPTSTR; となっています。
今時 FAR も NEAR も無いんじゃないかと思うのですがね。。。

個人的に LP というプリフィックスが嫌いで、TCHAR 型自体は便利なのでよく使いますが、ポインタを取る時は、普通に TCHAR* としますね。

LPNMHDR なんて見るとちょっとげんなりします。

DWORD も、今時の32bitマシンだとレジスタ長もやっぱり32bitな訳で、1WORD=32bitと考えるのが自然なのですが、まぁ、OS に歴史有りって事なのでしょう。