- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:39:50 ]
- C言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 17 pc11.2ch.net/test/read.cgi/tech/1185286631/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 94代目 pc11.2ch.net/test/read.cgi/tech/1185452895/
- 137 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 13:25:54 ]
- >>136
0終端の為だけに態々そんな余計な文字列パースさせるの?
- 138 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 13:31:17 ]
- >>137
余計なメンテナンスに時間取られるくらいならありじゃね? パフォーマンスが問題になるようなら入れ替えればいいことだし。 # まさかMS-DOSの時代みたいにprintf()系をリンクしないでサイズ節約なんて考えないだろうし。
- 139 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 18:58:08 ]
- >>135
文がひとつのケースでも括弧をつけたほうがミスがなくなる。
- 140 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 20:58:52 ]
- 宗教論争になるからそろそろやめようぜ。
- 141 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:18:10 ]
- という指摘は既に >>128 でなされているわけですが
どーしても自分語りがしたい阿呆が多くてなかなか収束しません。
- 142 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:19:17 ]
- なに仕切ってんのコイツ
- 143 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:35:48 ]
- ヽ○ 小学校のころから、学級委員してました♪
|> (( 〇∧〃 / > でもそんなの関係ねぇ! < \ そんなの関係ねぇ! 〇/ はい! /| オッパッピー!! /> チントンシャンテントン♪ チントンシャンテントン♪
- 144 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:10:27 ]
- いろんな意味で終わったネタを引っ張るなよ
- 145 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:57:39 ]
- >>135
一行のときは{}は無いほうがいいよ。 10年に一度もしないようなミスのために、読みやすさを損なうことはない。 コードを大量に書いてる人は、省略する派が多いし。
- 146 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:21:38 ]
- 笑わせてくれるぜ
- 147 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:39:51 ]
- >>145
コードを大量に書いてる人ってだれ?
- 148 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:54:27 ]
- 読みやすさを考えたらコードを大量に書くとか・・・
- 149 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 23:56:52 ]
- >>147
linux書いてる人とか、apache書いてる人とか、postgres書いてる人とか、その他いろいろ。
- 150 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 00:01:02 ]
- 「一行でも{}をつけた方が良いか」とかの、
くだらない事を質問するような奴なら、つけた方が良いと思う。 俺はつけないが
- 151 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 00:42:31 ]
- >>149
その人たちは本当に読みやすさのために省略してるのか?
- 152 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 00:44:55 ]
- そもそも「コードを大量に書く人」のソースをlinuxやapache書いてる人として
その人たちの中じゃこっち派が多いよってのは無理があるだろう。 そこらへんのプログラマだって大量にコードは書いてる。
- 153 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 00:45:55 ]
- うぅ、日本語が変だ・・・orz
- 154 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 05:56:54 ]
- 「if」って打ったらエディタが
if () { } って勝手に出してくる(ように設定している)ので、 消すのが面倒だし害はないし後々の面倒を予防できるのでそのまんまにしてまーす。
- 155 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 06:49:28 ]
- そういうのって()の中にカーソル移動すんの面倒じゃないの?
- 156 名前:デフォルトの名無しさん [2007/08/21(火) 07:51:06 ]
- >>135 つけたほうがいいっぽいですね^^
質問内容は釣ネタに見えますがまだレスが流れている様ですので プログラムは評価を受けるとかレビューとかされる場合があり 必ず中括弧'{}'で括るケースでも例えば1行しかないのに何でわざわざ中括弧で括るの?と質問された時 何と答えるかです 自分なりに定性的定量的な論旨展開で結論を出すか ご存知かと思いますが世の中にあるコード標準とか規約とかを引用するかですね 例えば以下リンクが良く纏まっていますのでお勧めですが www.literateprogramming.com/nrad.pdf 次レスに続く
- 157 名前:wolf ◆8VH3XAqjlU mailto:sage [2007/08/21(火) 07:51:49 ]
- >>135 つけたほうがいいっぽいですね^^
続き 中括弧で括るケースについての記述は 2.C++ Coding Standard └─Usage Of The Implementation Language └─Control Structures └─Branching └─if ... else statement に有りますが中括弧だけでなくインデントや比較代入記号に関しても検討して下さい if(ia==0){ printf("HelloWorld\n"); } 僕ならこう書きます if(0==ia) { printf("HelloWorld\n"); }
- 158 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 07:54:31 ]
- 定量的な論旨展開ってなんだ?
- 159 名前:デフォルトの名無しさん [2007/08/21(火) 08:08:03 ]
- いきなり書き込まれてしまいまして訂正かねて
>>135 つけたほうがいいっぽいですね^^ 続き if(ia==0){ printf("HelloWorld\n"); } 僕ならこう書きます if(0==ia) { printf("HelloWorld\n"); <---- 訂正 } >>158 定量的な論旨展開ってなんだ? あまり即答はしないほうですがたまにはソフトウエア工学的な 意見展開もいいかもしれませんので 例えば ひと纏まりしたコードは1画面内に収まったほうがreadabilityが良いですから
- 160 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:12:00 ]
- 日本語おかしい
- 161 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:19:17 ]
- 「たとえば」がなにとたとえてるのかさっぱりわかりませんが。
- 162 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:23:40 ]
- 比較で定数を左にもってくるというテクニックも、警告が出ないよう
にコーディングするって当たり前のことをしてれば必要ないですね。 変に技巧にはしるようなことはやめて、素直に書きましょう。
- 163 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:24:48 ]
- 定量的といいつつ、定量的なことは一切書いてない件。
- 164 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:26:06 ]
- そもそも論旨は展開するようなもんじゃない
- 165 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:27:25 ]
- 本当に釣りネタに見えるなぁ・・・
- 166 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:58:16 ]
- インデント論争に発展するのだけはやめような
- 167 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 10:24:11 ]
- >>145
どこが > 読みやすさを損なう のかさっぱり。やっぱ、主観的なことしかいえないだろ? だからやめろつってんのにw コンパイルが通ればどっちでも良いんだよ。 むしろ必要性について知らない方がダメ
- 168 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 10:25:24 ]
- >>151
そういう人たちは複雑になるんで、やはり規則性を持った記述をしているため 書いたり書かなかったりみたいな、ことはしてないはず。
- 169 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 10:41:52 ]
- >>168
書いたり書かなかったりしていますが何か。 // 書かないケース if (foo) bar(); // 書くケース if (foo) { bar(); }
- 170 名前:デフォルトの名無しさん [2007/08/21(火) 10:47:34 ]
- scanfだと入力後エンター押す必要がありますが
画面に入力した瞬間から反映される関数ってありますか?
- 171 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 10:50:15 ]
- >>170
標準ではありません。環境依存になりますが、例えばcursesなどのライブラリを使えばできないわけではありません。
- 172 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 10:51:10 ]
- あるいは、{ } が不要な1文のみの場合、
if() の後ろにそのまま続けてifと同じ行に書いていたり。 だから読みづらいだの主観的な意見はナンセンス。 自分が思うとおりに動作するように記述できて、コンパイルが通れば良し。
- 173 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:04:53 ]
- 読みづらさをないがしろにする意見はナンセンス
- 174 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:08:07 ]
- 読みづらいなんてのは主観なんだから放っておけばいいさ。
読みにくいという指摘なら、話を聞かないでもないが。
- 175 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:12:10 ]
- 読みにくさは主観じゃないの?
- 176 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:14:40 ]
- 客観的立場に立とうとした表現だね。定量的ではないが。
- 177 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:14:52 ]
- 誘導
コーディングトラブルの約70%はif文などでの{}省略 pc11.2ch.net/test/read.cgi/tech/1173416521/
- 178 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:16:12 ]
- >>173
だからその読みづらいって主観が個人的なものでナンセンスだって言っているんだが? 人それぞれで、括弧があれば読みづらい、なければ読みづらいとか言われても んじゃどっちだよ?って争いになるから、括弧の必要性を理解した上で 自分が思う通りに処理するソースがコンパイラに通ればそれで良いだっつってんだよ、バカかてめぇはw
- 179 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:22:53 ]
- 括弧がなくても通るからって理由でつけるつけないをわざわざ
一個人の読みやすさという客観的ではない曖昧な基準で話を進められても困るだろ。 とりあえず、オープンソースのように、他者と交互にやりとりしている人たちのソースを見て 参考にするのも良いだろ。自分だけが編集するソースならどっちをとろうが個人の自由。
- 180 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:24:39 ]
- どっちでもいいけどソース内で統一されてれば読みやすい
- 181 名前:デフォルトの名無しさん [2007/08/21(火) 12:05:16 ]
- >>171さん
例を教えてください お願いします
- 182 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:28:52 ]
- >>181
例としてcursesライブラリを挙げていますが。
- 183 名前:デフォルトの名無しさん [2007/08/21(火) 12:58:43 ]
- ifの括弧についてもれがまとめるからもうこの話題はおわろうぜ。
[結論] ifに括弧はつけなさい。 [理由] つけてもつけなくてもいい文法が問題だけど このスレだけでも大半の人間がどちらでもよい、又はつけたほうがいい というんだからつけなさいYO! 可読性なんてものは人それぞれ違うんだから議論自体が無意味。 もし{}つけたら効率が落ちるんなら あんたのプログラムif文使いすぎ。作り直しなさい {}つけるのにそんな面倒か? なんでそんなにつけるのに反発するんだ? YOU!つけちゃいなYO 以上まとめでした
- 184 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:08:18 ]
- if(bFlag) i++;
これとか括弧付けるだけ無駄だろ
- 185 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:11:48 ]
- んじゃ、1行纏め。
・迷ったらつけとけ。つけないなら理論武装しておけ。
- 186 名前:デフォルトの名無しさん [2007/08/21(火) 13:15:49 ]
- >>185
先生ノ >>184に「なんで無駄な{}つけてんだ!」ってからまれたら どういう理論武装しておけばいいですか?
- 187 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:35:18 ]
- >>186
日本語読めますか? >185には「つけないなら」と書いてあるのですが。
- 188 名前:デフォルトの名無しさん [2007/08/21(火) 13:37:10 ]
- >>187
じゃあ「つけないなら」どういう理論武装しておけばいいですか?
- 189 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:38:48 ]
- 俺は括弧もゴムも付けない派
- 190 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:39:34 ]
- 武装できるような理論があればそもそも論争は起きん
- 191 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:43:31 ]
- 理論武装しないならつけとけw
- 192 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:44:57 ]
- なぜ?
- 193 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:16:00 ]
- >>184 誰がそういうのにも必ず付けろって言った?だからそういう議論は
相手を罵倒したり屁理屈が横行するからやめろつってんのに、うざっ 所詮夏厨か
- 194 名前:デフォルトの名無しさん [2007/08/21(火) 14:35:00 ]
- >>182さん
ぐぐったら理解できました ありがとうございました
- 195 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:42:11 ]
- なんで>181は自分の環境を書こうとしないのだろう……
- 196 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 16:20:33 ]
- >>195
国家機密なんです(><)
- 197 名前:デフォルトの名無しさん [2007/08/21(火) 17:42:35 ]
- Windows XPのGUIのプログラムをc言語で作りたいのですがどうすればいいですか?
- 198 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 17:44:55 ]
- >>197
教えたいのはやまやまですが国家機密なんです。
- 199 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 17:45:06 ]
- >>197
どう、とは? 環境の話なのか、前提知識の話なのか、 それともそれらはクリアしてて、コーディングの話なのか。
- 200 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 18:15:47 ]
- >>197
まず、Windows NT系の入ったパソコンを用意します。
- 201 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 18:42:03 ]
- 次に、VCを違法コピーします。
- 202 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 18:43:43 ]
- >>155
もちろんエディタが()の中にカーソルを勝手に移動させまーす。 あと、そこに加えて{}の中にマークをつけるので、 ()と{}の中にキー一発で飛べるようにしてまーす。
- 203 名前:197 [2007/08/21(火) 18:52:30 ]
- >>198
え、そうなんですか?私は国家には忠誠を誓っているものですから安心しておしえてください。 >>199 あ、すいません、前提知識ですね。 APIとかをOSの仕組みなどを勉強すればいいのでしょうか? APIの実装方法やアルゴリズムなどの実装がなんか漠然としてしまって理解できません、 >>200 パソコンは、Windows XPなのでNT系だと思うので多分大丈夫だと思います。 >>201 VC2003なんとかというコンパイラとボーランドの無料のコンパイラをインストールしてあります。
- 204 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 19:00:54 ]
- 猫でもわかるでも読んどけ
- 205 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 19:06:18 ]
- >>203
VC2003なんとかというコンパイラを使います。 ひとりでGUIを勉強するときは、チュートリアルがないと無理。 サンプルのたくさん載った参考書が必要。 Windowsアプリの作成は理解するというより慣れるです。 理解しようとすると挫折します。サンプルを入力、コンパイルして慣れてください。
- 206 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 19:10:37 ]
- >>203
まさかノってくれるとは思わなんだ。 つかGUIプログラミングはせめてC++とMFCでする気は無いか? もっと簡単にするならC#という言語を使う手もある。 C言語でやるのは面倒だが、何か理由があっての事か?
- 207 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 19:31:01 ]
- >>203
・Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/ ・Win32 API入門 ttp://wisdom.sakura.ne.jp/system/winapi/
- 208 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 21:03:04 ]
- >>179
コーディングスタイルって、経験が足らないヤツが頭で考えたっていびつになるんだよな。 実際コードをたくさん書いて、世間で実際に評価されてる人のを参考にしたほうがいいよね。
- 209 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 22:55:29 ]
- 括弧があってもなくても、可読性に影響がでないくらいシンプルな記述を希望します。
COBOLを連想させるような200行以上もある関数はヤメレ
- 210 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:13:44 ]
- じゃあ俺はFORTRANを連想させるようなgoto使いまくりの関数にするぜ。
- 211 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:15:33 ]
- >>209
同感です。if文だけに着目するよりも、前後の文を含めて、 そして全体を通してシンプルであることが望ましいですね。 適当に空行を入れるだけでも、それなりに変わりますからね。
- 212 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:24:05 ]
- 正直、こんな書き方はやめて欲しい。
-- double sum = func( sx[ox] ,cx[ox] ,sy[oy] ,cy[oy] ,xDim ,yDim ,wr ,wi );
- 213 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:33:15 ]
- >>212
1行にしてみました。どうでしょう? double sum = func(sx[ox], cx[ox], sy[oy], cy[oy], xDim, yDim, wr, wi); それとも構造体にまとめて、ポインタ渡しが良いですか? 具体的に希望があればどうぞ。
- 214 名前:212 mailto:sage [2007/08/21(火) 23:38:29 ]
- >>213
いやまぁ、とっくに整形済みだけどね。
- 215 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:52:40 ]
- >>213
全部グローバル変数で渡して引数はなしの方向で
- 216 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:04:31 ]
- 手動インライン展開で
- 217 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:45:29 ]
- >>212
コーディング規約でそのスタイルを規定しているところもある。 これだと、引数一つ一つにコメントがつけられるという利点がある。 コーディングスタイルはそれぞれ良いところもあれば、悪いところもあるのが普通で、 プロジェクトあるいは会社でコーディングスタイルが統一されていることが大事。
- 218 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:56:14 ]
- >>217
カンマを行頭に持っていくのは規約以前の問題。 英語圏の人が見たら発狂するぞ。
- 219 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:16:24 ]
- >>215
悪質にも程があるわ
- 220 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:58:01 ]
- カンマ行頭はSQLじゃよくやるけどな
- 221 名前:デフォルトの名無しさん [2007/08/22(水) 14:19:32 ]
- gets関数やscanf関数は想定外の入力をされて変な挙動をする可能性があるので使わない方がいいと
聞いたのですが、ではどういう風にすればいいのでしょうか、実際のプログラムではどうしているか教えてください。
- 222 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 14:23:44 ]
- >>221
>>52参照。 getsは問題がないだろう。
- 223 名前:221 [2007/08/22(水) 14:29:44 ]
- >>222
gets関数はバッファオーバーランの危険性がありませんか? 例えば、char buffer[1024] と宣言した場合に1024バイトであるという情報を gets関数に伝える手段がないと思うのですが、、、
- 224 名前:デフォルトの名無しさん [2007/08/22(水) 14:40:39 ]
- test
- 225 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 14:41:42 ]
- >>223
fgets
- 226 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 14:51:24 ]
- >>222 みたいなのがいるところをみると、やはり日ごろ来ていない夏厨なんだなぁ〜って思う
- 227 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 14:53:32 ]
- ずっと居る奴も痛いがな
- 228 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 15:11:44 ]
- gets なんて捨てプログラムでしか使えねえ
- 229 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 15:13:18 ]
- 捨てプログラムでは使う
- 230 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 15:14:00 ]
- >>223
入力可能な最大文字数を超えるサイズののバッファを確保しておけばいいだけじゃん。
- 231 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 15:21:56 ]
- >>230 みたいなのがいるところをみると、やはり日ごろ来ていない夏厨なんだなぁ〜って思う
- 232 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 15:27:17 ]
- >>231 getsに関する君の考えは?
- 233 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 15:30:33 ]
- >>232
getsに対する俺の考えなんてどーでも良い。存在そのものが問題視されているのは とっくの昔に知れ渡っていること。それに関する文献を自分で調べな。この板に 一定の期間来て色々と議論を見てきた人なら、まず知っているよ。そう、そんなのは使わないのが鉄則。
- 234 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 15:31:31 ]
- >>233 だから、それをここで君の言葉でいいなさいよ。
- 235 名前:デフォルト名無しさん mailto:1111111 [2007/08/22(水) 15:37:29 ]
- 「DOS窓を開く」を説明してください。
- 236 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 15:38:14 ]
- >>233
知らないならレスしないでください!
- 237 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 15:40:18 ]
- セキュリティに関しても問題とされるバッファオーバーラン、固有の環境とか仕様で
対処すりゃみたいなことを言わず、プログラム側でしっかり対処すること。 とにかく、getsだけはありえん。
|

|