自分のようなプログラミング初心者にとって何かしらの「壁」はつきものだとは思うのですが、結構初期からずっとなじめないものがあります…。
それは「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++なら右クリックして定義へ移動でわかるから)
慣れればこんなものが簡単に思えてくる日が来るのでしょうか?
なじめないもの
Re: なじめないもの
ああ!!
ものすごく共感します!!ここまで他人の話題に共感したのは久々ですっ!!
私はC言語を始めて6年目になりますが、同じようなことを感じています^^;
ものすごく共感します!!ここまで他人の話題に共感したのは久々ですっ!!
私はC言語を始めて6年目になりますが、同じようなことを感じています^^;
Re: なじめないもの
コメントありがとうございます
そうですか…6年目の方でもそうなんですか…
なんか聞いて逆に安心しました!
しかしそうは言っても使わざるを得ないのですね^^;
そうですか…6年目の方でもそうなんですか…
なんか聞いて逆に安心しました!
しかしそうは言っても使わざるを得ないのですね^^;
Re: なじめないもの
私がよく行く現場ではBIT、BYTE、WORD、DWORDってのはよく使われるので、むしろ有り難く感じていますが…(^_^;)
Re: なじめないもの
>>バグさん
なるほど。やはりつかわれていますか。
たしかに意味と使うタイミングを覚えてさえいれば、バグの防止と可読性の向上につながりそうだとは感じます。…しかし法則性だけでも覚えるのにどれだけかかることやら
しかし「現場」ですか…。職になされているとは尊敬します
なるほど。やはりつかわれていますか。
たしかに意味と使うタイミングを覚えてさえいれば、バグの防止と可読性の向上につながりそうだとは感じます。…しかし法則性だけでも覚えるのにどれだけかかることやら
しかし「現場」ですか…。職になされているとは尊敬します
Re: なじめないもの
プログラムを作る上で理解できなかったり納得ができないものがあると大変ですね;
私も講義を受けてプログラムの例を教えてもらうことがあるのですが、「詳しい意味は各自考えろ」と言われて困ることがあります…。
私も講義を受けてプログラムの例を教えてもらうことがあるのですが、「詳しい意味は各自考えろ」と言われて困ることがあります…。
Re: なじめないもの
>LPCTSTR
気持ちはわかります。
頭から見ていけば何の型かは判別できますが、瞬時には判別できないので見辛いことこの上なしですね。
>DWORD
長いこと Wordは 32bit、DWordは 64bitの世界にいたので、この定義は私も馴染めないというか違和感が強いです。
気持ちはわかります。
頭から見ていけば何の型かは判別できますが、瞬時には判別できないので見辛いことこの上なしですね。
>DWORD
長いこと Wordは 32bit、DWordは 64bitの世界にいたので、この定義は私も馴染めないというか違和感が強いです。
Re: なじめないもの
どれもこれも16bit時代の名残なんですよね。
LPTSTR の定義を見るとtypedef TCHAR FAR * LPTSTR; となっています。
今時 FAR も NEAR も無いんじゃないかと思うのですがね。。。
個人的に LP というプリフィックスが嫌いで、TCHAR 型自体は便利なのでよく使いますが、ポインタを取る時は、普通に TCHAR* としますね。
LPNMHDR なんて見るとちょっとげんなりします。
DWORD も、今時の32bitマシンだとレジスタ長もやっぱり32bitな訳で、1WORD=32bitと考えるのが自然なのですが、まぁ、OS に歴史有りって事なのでしょう。
LPTSTR の定義を見るとtypedef TCHAR FAR * LPTSTR; となっています。
今時 FAR も NEAR も無いんじゃないかと思うのですがね。。。
個人的に LP というプリフィックスが嫌いで、TCHAR 型自体は便利なのでよく使いますが、ポインタを取る時は、普通に TCHAR* としますね。
LPNMHDR なんて見るとちょっとげんなりします。
DWORD も、今時の32bitマシンだとレジスタ長もやっぱり32bitな訳で、1WORD=32bitと考えるのが自然なのですが、まぁ、OS に歴史有りって事なのでしょう。