- 締切済み
職業Windowsプログラマの方へ質問です。
職業Windowsプログラマの方へ質問です。 Windowsプログラムの勉強を始めて早2ヶ月ちょっとたちますが 連日悩むことばかりです。 関数多いし引数多いし変数の型多いしメッセージ&パラメータもめっちゃ多いし。 お仕事でプログラム作られてる方ってまさか全部覚えてるんですか? この処理どうやったらいいんだろうって悩んだりしないんですか? 僕はしょっちゅうです。 是非そのへんが聞きたいです。 合わせて一つ教えてください。 switch文の中でbreak;とreturn 0;の使い分けがわかりません。 どちらを使っても今のところ何の問題も起きていません。 break;はその処理を抜けさせて次へ移る。 たとえばforやifで特定条件に合致したら抜ける。みたいな使い方しています。 return 0;は関数等で戻り値が必要ないときとかにvoidと合わせて使っています。 switch文ではどのように考えればいいんでしょうか?
- みんなの回答 (11)
- 専門家の回答
みんなの回答
- tsuduki123
- ベストアンサー率32% (21/65)
Windows系の人ではありませんが、他の人もいっているように基本的にすべてのライブラリを覚える必要はないです。 ただし、WindowsAPIの場合、 取得したリソース解放が自前で必要だったり/不要だったり/はてはしてはいけなかったり、で、 関数の名前からでも判断できないのでその点だけは覚えるようにしないとまずいかもしれません。 まぁ。長時間動くものを作るのでなければ落ちない限りはメモリリークしていてもよいでしょうけど。。。 switch文はあくまで、処理途中の一時的な分岐と考えて使用した方がよいです。 なので、フォールスルーする分には処理の合流するだけなので問題ありませんが、 親ブロックから抜けたいような場合には、処理の中断にあたいするのでifをおすすめしますね。 returnは。。。。 せめて、関数の戻り型をintにしましょう(笑 もちろん、関数の戻り値を判定することも忘れずに。 voidにして戻り値なしという手もありますが、正否判定の必要ない関数って 個人的に必要ないんじゃないの?とも思っているので^^;; # マクロ的な関数ではよく使います。
- D-Matsu
- ベストアンサー率45% (1080/2394)
全部憶えておく必要なんてありません。 必要な機能の名前を憶えてさえいればあとは検索一発。 Windowsアプリケーションを作る上ではMSDN Libraryはブックマークに必携でしょうね。 ・breakを使う場合、returnを使う場合 書き方の上では「どこで制御を止めるか」という違いに過ぎません。 ブロックの外に処理を続けないのならreturn、ブロックの外まで処理を続けるならbreakというのが基本路線。 ただ、制御の上では単にgotoの表現を変えているに過ぎないbreakと「戻り値を渡す」という機能も併せ持つreturnでは明確な違いがある、という事は忘れずに。
- asuncion
- ベストアンサー率33% (2127/6289)
>戻り値が必要ないときの関数はreturn;でいいんでしょうか? その関数の途中で、強制的に呼び出し元に戻す必要があり、かつ、 戻り値がなければ、単に return; でよいです。 その関数の最後で呼び出し元に戻り、かつ、 戻り値がなければ、単に return; と書くか、または何も書かなくてもよいです。関数の最後に来れば呼び出し元に戻るに 決まっていますので。
ANo.3 です。 Switch 文はif 文に置き換えられます。というか、値を判断するアルゴリズムは、まさに総当たりしかないからです。つまりどちらで書いても、同じコードがコンパイルされるという事です。Switch 文はまさに プログラマにとって使いやすい式として用意されてるだけです。 しかしながらSwitch 文は独特です。goto 文に似て無くもないです。それゆえに敬遠しているという訳です。ただし、これは好みの問題です。 比較件数が膨大であれば最適化が計られるかもしれませんが、それはコンパイラの仕事です。 私は値を返さない関数では、return は記述しません。値を返す必要がある場合も、Switch 文(またはif文)を終えてからreturnします。こういう書き方に統一する事で、バグの入る余地を少しでも減らすという事で。もちろんこれも好みです。 ここまで言っておいて何ですが、私ほとんどC#オンリーですw
- zwi
- ベストアンサー率56% (730/1282)
2ヶ月でWindowsプログラミングを始められているのでしょうか? それともWindowsPCでプログラミングしていると言う意味でしょうか? まず、基本的なC言語の文法やC言語の標準関数を理解しないうちに、WindowsAPIの関数に手を出すと分けがわかない分からないと思います。と言うより混乱するのでなるべく、手を出さないでください。 まず、C言語の基礎固めにコンソールだけで半年から一年、少なくとも3ヶ月は必要です。これで基本的なC言語の文法と標準関数の使い方を覚えてください。標準関数は、全部覚える必要はありませんし、よく使うものは自然と覚えます。 その後に、Windowsアプリを作るためにWindowsAPI(Win32API)の本を読んでWindowsの仕組みやAPIを使い方を学んでください。どの様な関数の種類があるか、どの様な機能があるかを頭に入れるのが中心で関数名や細かいパラメータまで覚える必要はありません。よく使うものは自然と覚えます。こちらは1年から2年ぐらいちゃんと組めると思えるまで時間がかかると思います。 こんな本が基礎固めに役立つでしょう。 http://coin.nikkeibp.co.jp/coin/itpro-s/book/dtl/nsw014.html
- hidebun
- ベストアンサー率50% (92/181)
全部覚えられるわけはありません。 あなたはどこかに行かなければならないとき、路線図や時刻表を見るでしょう。 しかし、それらの内容を漏れなく覚える人はいないでしょう。それと同じです。 メッセージ、パラメータが多いということは、複雑であると同時に 細かくカスタマイズ出来るということもあるのです。
- SaKaKashi
- ベストアンサー率24% (755/3136)
関数が多い、引数が面倒。break;とreturn 0;の使い分けがわからない? 転職してください。あなたのような人が作るプログラムもどきで社会は多大な被害を被ります。 是非とも、中国で就職してください。あなたの考えで十分に通用します。 もどき製品が氾濫しているところですから。
お礼
待ってください(汗汗汗) 僕は趣味でプログラムやってます。 ただ世の中にはいろんな製品があり素晴らしいソースを書く プログラマの方がたくさんいらっしゃると思います。 だからそういう人たちってどんな感じなんだろうって思って 質問しただけです。 別に引数が多くて面倒とか思ってません。 どういう風に設計とかしてるのかなって気になっただけです。 それに僕が職業プログラマだったらわざわざ質問の投稿なんてしなくても 同じ会社の人に聞けば済む話ですよ。 趣味でやってて周りにいないから質問させていただきました。 ホント勘弁してください。。。
- asuncion
- ベストアンサー率33% (2127/6289)
当該のbreak文が属するブロックを脱出する 当該のreturn文が属する関数を戻り値ゼロで脱出する 上記の差異をじゅうぶん理解しましょう。
お礼
回答ありがとうございます。 戻り値が必要ないときの関数はreturn;でいいんでしょうか?
同じく趣味グラマで恐縮です。 仰るとおり昔はそれで挫折する人は多かったです。私も分厚いマニュアル(ボーランドCだったか、10cm以上の幅があるマニュアルが数冊入っていた)を何度もめくっては調べて、実際コーディング時間の10倍位を紙をめくる手間にかけていました。 今は本当に一瞬で調べられるし、開発環境が先読みして表示してくれるし、入力までやってくれますね。 全部覚える必要はありませんが、全く知らないでは話になりません。暇なときに目を通しておけば、ピンと来る時に役立つでしょう。 break とreturn では処理の流れが変わってきますから、その違いだけは分かってないといけません。 ちなみに私はswitch 文も使わない方です。
補足
同じく趣味グラマです。 趣味でやってるって事はアプリを使う人=作る人って事で 自分が何かをするとき少しでも楽になるように作っています。 ですので挫折するわけにはいきません。 確かに開発環境の性能はすごいですね。 VC++のエキスプレスエディションを使ってますが 基本的な機能の端っこのほうしか使い切れてません。 無料であんなに高機能なんて凄すぎです。 ところでswitch文を使わないって事はifで対処してるって事ですか? そっちのほうが処理が早いんですか?
- php504
- ベストアンサー率42% (926/2160)
趣味プログラマで恐縮ですが全部覚えている人はいないと思いますよ そのつど検索すればすむ話ですし長くやって自然に覚える程度でいいのでは break; returnについては書き方次第でしょう LRESULT CALLBACK WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch( uMsg ) { case WM_DESTROY: PostQuitMessage( 0 ); break; default: return( DefWindowProc( hwnd, uMsg, wParam, lParam ) ); } return 0; } と LRESULT CALLBACK WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch( uMsg ) { case WM_DESTROY: PostQuitMessage( 0 ); return 0; } return( DefWindowProc( hwnd, uMsg, wParam, lParam ) ); } でやってることは同じです
お礼
回答ありがとうございます。 僕も趣味グラマです。 ただ仕事中に趣味グラマやってます。 家だと遊んでしまって全然はかどらなくって・・・ 会社の人も勉強してるんだから全然いいよって(汗) 具体的なソースを示していただきありがとうございます。 好きでやってる事ですしもっと理解を深められるよう頑張ります。
- 1
- 2
お礼
回答ありがとうございます。 なるほど、確かに順路を完璧に覚えるのではなく そういうことを調べる方法を覚えて生活していますね。 全てを細かく覚えるのではなく 「こんな事が出来る」っていうのを頭に入れとけば 都度調べて利用することができますね。