X



C言語なら俺に聞け 144
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん (ワッチョイ 838a-3nWA)垢版2017/12/23(土) 19:33:43.89ID:dghfoRy20
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


http://mevius.5ch.net/test/read.cgi/tech/1509107288/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0832デフォルトの名無しさん垢版2018/02/10(土) 08:04:34.03
int ret = 1;
int fdA = -1;
int fdB = -1;
int fdC = -1;

if (ret) {
 fdA = open(A);
 if (fdA < 0) {
  printf(“ファイルAオープンエラー¥n”);
  ret = 0;
 }
}

if (ret) {
 fdB = open(A);
 if (fdB < 0) {
  printf(“ファイルBオープンエラー¥n”);
  ret = 0;
 }
}

if (ret) {
 fdC = open(A);
 if (fdC < 0) {
  printf(“ファイルCオープンエラー¥n”);
  ret = 0;
 }
}

if (ret) {
 いろいろ処理
}

if (fdA >= 0) close(fdA);
if (fdB >= 0) close(fdB);
if (fdC >= 0) close(fdC);

return ret;
0833デフォルトの名無しさん (ワッチョイ 4193-jcwv)垢版2018/02/10(土) 08:04:56.81ID:aodeHLjm0
O'ReillyのLinuxデバイスドライバ本では
初期化の失敗時、一部分だけ確保できたリソース群を
確保時とは逆順に行儀良く解放するのにgotoを使う方法を勧めてるね。

そういう具合にgotoが出てくる場面が明確ならば
必ずしもgotoが可読性を落とす、とは言えないじゃろ。
0836デフォルトの名無しさん (ワッチョイ e1a1-nHV3)垢版2018/02/10(土) 08:54:55.97ID:DmmJmf560
goto を使わないようにというのは
昔、ダイクストラ大先生が「gotoは有害だ!」
とのたまわれたので、それ以後gotoを使わない
構造化プログラミングというのが流行ってFortranなども
Fortran 77で一部構造化されたりしてきたという経緯が
あります。

たしかに、昔のBASICプログラムはやたらgoto が多くて
まさにスパゲッティプログラムで論理を追うのに苦労しました。

最近のBasis(たとえばFree Basic)などは構造化されていて
使いやすく感じます。

Cもgotoを使わなくて書けるのですから、やむおえない
(gotoを使わなければ、どうしようもない)場合場合以外は
使わないにこしたことはないと思います。
0837デフォルトの名無しさん (ワッチョイ 6ed7-jA6l)垢版2018/02/10(土) 09:02:56.46ID:cpx12OHt0
ダウト
昔のBASICはGOTO文のせいで読みづらいんじゃない
最大のネックは変数が全てグローバルであること
次いでFOR文のNEXTの自由度が高すぎることだ
メインフレーム脳でPCを語るジジイどもが
行番号を批判していたが的外れもいいとこ
0843デフォルトの名無しさん (ワッチョイ 99b3-7Au1)垢版2018/02/10(土) 11:35:32.34ID:4W9TXsf60
>>818
初心者…gotoを使いまくる
中級者…gotoを一切使わない
上級者…適材適所を覚える
0844デフォルトの名無しさん (ワイモマー MMa5-O4V4)垢版2018/02/10(土) 12:01:34.42ID:s8Yuzl0xM
>>818
内部的には全部goto(継続とか)だって事を理解すれば、適切な使い方が出来るようになる。
0845デフォルトの名無しさん (アークセー Sxf1-c21i)垢版2018/02/10(土) 12:09:51.29ID:BZD8vxg8x
ドラクエもテトリスもファイナルファンタジーも全部
C言語で作っているのですか?ふと疑問に思いました。
0847デフォルトの名無しさん (ワッチョイ 419f-VKlD)垢版2018/02/10(土) 14:08:50.97ID:wR2OqAa50
>>846
> C言語なら理由があるgoto文は普通に使われるぞ
さすがにこれは言い過ぎだろう。
ただしgoto不要論も50年前の理論であり、盲信するのも間違いだというだけだ。

問題は、goto を無くしたいだけの理由で余分なフラグやループ(もどき)を導入する是非だ。
ソースが余計に見にくくなるのは事実だからね。
最近の風潮なら、linter等によって「間違ったgotoの使い方」を検出できるようになれば、
gotoは完全にありになるだろう。
問題はこれが難しい(と言うよりやる気がない)ことで、
Cのノリなら「お前が間違えなければいいだけ、何故特化文法が必要になる?」になってしまう。
ラベル付きbreakとか、導入しても俺はいいと思うけどね。

例外については、今のところ他言語でも上手い解を見つけられていない。
goto文を使った場合はあくまで自関数内のtry-catchになってしまうが、正直、これで十分だ。
OOPでの継承先からのcatchとかを許可すると、便利な反面、密結合になってしまい、
noexceptとか言いだしているし、完全にあっちは暗礁に乗り上げつつある。
Cだと最初からnoexceptしかない。OOPが色々屋上屋を架しているのも事実だね。
0850デフォルトの名無しさん (オッペケ Srf1-5OAx)垢版2018/02/10(土) 14:35:35.79ID:hk3lMPpyr
>>836
「gotoは有害!」と言われるそのgotoは昔のBASICみたいな、別のサブルーチンの中に無節操にジャンプできる機能のことだったんじゃないかと思われる。
関数の外に飛べないgotoなら、関数の行数が少なければさして問題じゃない。
0852デフォルトの名無しさん垢版2018/02/10(土) 15:41:31.33
こんな時代だからこそあえてmain関数にすべてを詰め込むプログラミングスタイルを確立していきたい
0853デフォルトの名無しさん (ワッチョイ 319f-R9JW)垢版2018/02/10(土) 15:42:18.37ID:l9ZzjyKP0
あー。別サブルーチンにgotoあったねえ。

6502アセンブラで書かれた Apple ][ のモニタプログラムにもそういうの結構あって当時すげえとか思ったが、無理矢理2KBのROMに押し込むための苦肉の策だったんだよな。
当時はメモリが高価で少ないのが当たり前だったから何でもかんでもトリッキーな方法使って小さくしてた。
0854デフォルトの名無しさん (ワッチョイ 0676-3MxQ)垢版2018/02/10(土) 15:45:49.28ID:jClKPuF30
long_jump
0855デフォルトの名無しさん (ワッチョイ 319f-R9JW)垢版2018/02/10(土) 15:47:06.49ID:l9ZzjyKP0
>>851
試してみ。お前のコンパイラは何か違うかも知れない。
ただし出来た場合、それをC言語と読んで良いのかどうか悩ましいところだ。
それと、一体どのようなコードを作っているのかが気になる所だな。

>>852
変なことに挑戦するなよw
Cだとそれできちゃうんだからw
0858850 (オッペケ Srf1-5OAx)垢版2018/02/10(土) 19:34:42.47ID:hk3lMPpyr
>>851
ああ、>>850 で書いたのはもちろんC言語のgotoじゃない。
そもそもgotoはよくないという主張が叫ばれたのが1960年代、C言語ができたのは1972年らしいんだから。
0859デフォルトの名無しさん (ワッチョイ 6e24-yPCn)垢版2018/02/10(土) 21:42:11.48ID:YQ6eMVvy0
ガチの初心者で申し訳ないんやが...。
unsigned char型変数には8ビットしか入らんはずやのに
0〜255の数値が入るのはなんでなんや?
8ビットを二進数変換すると11111111でこれを10進数に変換すると255になるのは分かるんやが
なぜ255の半角が入るのかがわからんのや。

#質問するとこ、ここで合ってるよな?
0861デフォルトの名無しさん垢版2018/02/10(土) 21:48:30.15
>>859
うん、”255”の半角を入れるなら終端文字まで含めると4バイト必要だね
‘2’(0x32) ‘5’(0x35) ‘5’(0x35) ‘¥0’(0x00)
0863デフォルトの名無しさん (ワッチョイ 99b3-7Au1)垢版2018/02/10(土) 22:17:10.51ID:4W9TXsf60
>>861
小人さんがASCIIコードに変換してる
0864デフォルトの名無しさん (ワッチョイ 6e24-yPCn)垢版2018/02/10(土) 22:18:39.30ID:YQ6eMVvy0
すまん、いま投稿しようと思ったら、クソ規制に弾かれたわ
だから詳細が書けない。
0865デフォルトの名無しさん垢版2018/02/10(土) 22:19:04.81
たぶんこんな感じ

2進数で格納すると8文字(11111111)
16進数で格納すると2文字(FF)
10進数で格納すると3文字(255)分の領域が必要なはず

なのになんで10進数の数値255を
1文字分の領域(unsigned char型変数)に格納できるの???
0866デフォルトの名無しさん (ワッチョイ 6e24-yPCn)垢版2018/02/10(土) 22:23:07.55ID:YQ6eMVvy0
>>865
だいたいこんな感じ。
0868デフォルトの名無しさん (ワッチョイ 6e24-yPCn)垢版2018/02/10(土) 22:26:25.15ID:YQ6eMVvy0
簡単に書くわ

signed char var = 255;

↑これが何故格納できるのかわからない。
0869デフォルトの名無しさん (ワッチョイ 99b3-7Au1)垢版2018/02/10(土) 22:31:38.43ID:4W9TXsf60
>>868
さっきまでunsigned言うてたのに…
0871デフォルトの名無しさん垢版2018/02/10(土) 22:44:47.34
>>868
signed charでは-1を意味しているけど
中身は同じ8bit(2進数で表すと11111111)だから格納はできる
0872デフォルトの名無しさん (ワッチョイ 6e24-yPCn)垢版2018/02/10(土) 23:11:03.86ID:YQ6eMVvy0
>>869
ごめん、「un」を書き忘れてた。
0873デフォルトの名無しさん (ワッチョイ 3181-Ejv6)垢版2018/02/10(土) 23:18:49.98ID:mAbz3z0v0
何が分からないのか、それがよく分からない
1ビットなら、0,1
2ビットなら、0,1,2,3
3ビットなら、0,1,2,3,4,5,6,7




8ビットなら、0,1,2,3,4,5,6,7.....253,254,255

指折るなりしてちょっと考えてみよう
0875デフォルトの名無しさん (ワッチョイ e1a1-nHV3)垢版2018/02/11(日) 00:27:54.48ID:aNzM17qZ0
>856

Edgar Dijkstra: Go To Statement Condidered Harmful

Communications of the ACM 11, 3(March 1968) 147-148

というように、ダイクストラ大先生が権威ある
Communications of the ACM
にお書きになっていますが。

この論文は検索すれ読めますよ。
0876デフォルトの名無しさん (ワッチョイ 319f-jA6l)垢版2018/02/11(日) 00:43:28.76ID:B0DbdRYG0
>>868
数値としての255だからだよ。コンパイラが"255"の文字の並びを見て数値の255として扱って8bitのvarを初期化するコードを作ってくれるの。
0877恥人!id:ignore (ワッチョイ e175-80pK)垢版2018/02/11(日) 00:43:51.30ID:/hLQhQLG0
コンディダードってなんだよ
0878デフォルトの名無しさん (ワッチョイ 319f-jA6l)垢版2018/02/11(日) 00:45:40.11ID:B0DbdRYG0
知らない
0879デフォルトの名無しさん (ワッチョイ 4193-jcwv)垢版2018/02/11(日) 07:01:25.77ID:o7b316W00
>>877 そんなのネットですぐ分かるだろ、と「コンディダード」を検索したら
5ちゃんねるの「C言語なら俺に聞け 144」て掲示板の投稿877番がトップに出た。

最新のネット用語で言うところの「モルゲッソヨ」みたいな感じね。
0880デフォルトの名無しさん (ワッチョイ 42b3-/0XS)垢版2018/02/11(日) 08:37:08.13ID:S5L6PYJ00
>>875
だからその
> Go To Statement Condidered Harmful
って言うタイトルはダイクストラじゃなくてニクラウス・ヴィルト(Pascal作った人)が付けたって話な
ちなみに本人がつけたタイトルは A Case Against the Goto Statement
そもそも論文の中身を読めばgoto有害一辺倒でないこともわかる
読んでない知ったかさんがタイトルだけで騒ぎすぎ w
0881デフォルトの名無しさん (ワッチョイ 6e24-yPCn)垢版2018/02/11(日) 11:51:21.08ID:90c1E0800
>>876
なるほど、数値だから格納できるのか。
仕組みに関しては初心者が触れたら戻ってこれなさそうだから
「そういう物」って感じに覚えておくよ。
0883デフォルトの名無しさん (アウアウエー Sa4a-W92t)垢版2018/02/11(日) 12:57:51.12ID:aLeqVhz7a
test
0884デフォルトの名無しさん (ワッチョイ 99b3-7Au1)垢版2018/02/11(日) 16:12:35.10ID:QA9xO9uU0
>>882
テストすんな
0885デフォルトの名無しさん (ワッチョイ ddc3-saCW)垢版2018/02/11(日) 16:45:51.58ID:Iux9XEWP0
CとC++、C#の違いすら把握していない初心者だけど
構造体っていうのはC++にのみあってCにはない概念なの?
ポインタはCにもあるよね?
0886デフォルトの名無しさん (アウアウカー Sa69-DUI6)垢版2018/02/11(日) 17:06:15.27ID:HsXbtZ8Ra
>>832
これはヒドい
0887デフォルトの名無しさん (ワッチョイ 99b3-7Au1)垢版2018/02/11(日) 17:27:21.28ID:QA9xO9uU0
>>885
あるね
0889デフォルトの名無しさん垢版2018/02/11(日) 17:58:53.20
>>886
そうかな?
MISRA-Cの一つの出口の原則を守りつつ、ネストもあまり深くならない。
問題と言えば、一瞥して「これはヒドい」と思う人がいるのと、retの評価コストと、retの使い方に一貫性を持たせないとバグを生むリスクくらいじゃないかな?
0890デフォルトの名無しさん (ワッチョイ ddc3-saCW)垢版2018/02/11(日) 22:36:44.98ID:Iux9XEWP0
簡単なSTGが作れるようになったが次は何を勉強したらいいんだ?
まだまだわからないことだらけだ
指定子だとかポイントだとかアロー演算子だとかまだまだ
0891デフォルトの名無しさん (ワッチョイ 42d2-e8Wn)垢版2018/02/12(月) 03:18:10.68ID:t1XkZnCw0
>>890
自分が作りたいものがないんならやる意味ないよ
0894デフォルトの名無しさん (ワッチョイ ddc3-saCW)垢版2018/02/12(月) 10:57:03.46ID:sATukCOa0
>>891
そんな意味なんて人それぞれやん…
バカじゃねえの
0904デフォルトの名無しさん (ワッチョイ ed23-3MxQ)垢版2018/02/12(月) 14:53:57.93ID:5RLElXD90
マジでわからんのか?
小学生?
0909デフォルトの名無しさん (ワッチョイ 319f-jA6l)垢版2018/02/12(月) 17:13:21.80ID:gfcybQxo0
>>892
問題の意味がわからない。
0911デフォルトの名無しさん (ワッチョイ 2eea-Db5I)垢版2018/02/12(月) 17:23:25.54ID:uipfUTPJ0
複数の条件 (xi,yi,ci) ci =白か黒 と 市松模様の大きさ K

KxK の市松模様を任意の位相でプロットし(=(周期2Kの中で)位相を適当に振ったとき)
与えられた条件をできる限り満たしたい。 変数は位相
解で要求されているのは満たした条件数
0915デフォルトの名無しさん垢版2018/02/12(月) 17:52:57.98
どうやるの?
パターンを全種類生成してから条件に合わないものを弾いていくの?
数学苦手だから分からない><
0917デフォルトの名無しさん (ワッチョイ 319f-jA6l)垢版2018/02/12(月) 17:55:21.96ID:gfcybQxo0
あー。なんとなくわかってきたぞ。白か黒かに塗りたいのはその指定された座標の1マスだけということか。
その希望を実現するためのマス目を求めるってこと?
でもその出力例ってなんなの?数字一つしか出力されてないけど。なんの値が出力されてるの?マス目の一辺の長さ?
0921デフォルトの名無しさん垢版2018/02/12(月) 18:25:06.20
N=100000、K=1000の場合、考え得る模様のパターン数は幾つになるのかな?
全部計算するのに何分かかる?
生成パターンを保存するためのメモリ容量は何MB必要?
0925デフォルトの名無しさん (ワッチョイ 4193-jcwv)垢版2018/02/12(月) 19:25:10.56ID:EAmFNd0B0
確かにパズルの解き方の部分と、Cによる実現は別々に考えた方が良さそう。

それにしても問題文が酷いね。
たぶん元は外国語で、サイエンティフィック・アメリカン誌の
読者への問題コーナーみたいなノリの文章だったんだろうけど、
日本人向けにはまるまる再構成すべきだわ。
0929デフォルトの名無しさん (ワッチョイ 22f9-YiuZ)垢版2018/02/14(水) 07:54:39.17ID:TsEGZMPg0
>>927
そのサイトは知らないけど、解説読んだり課題解くだけじゃ大して進歩しないから、とにかく自分でコード書いて悩んで調べて考えて乗り越えるのを繰り返してみたら。やってるうちに自分が理解していないのはどこか、自分がやりたいことに必要な物が何か分かると思う。
あと、こういうことやりたいのにこんなめんどくさい方法しかないの?って思うようなことは既に上手いやり方が確立してたりするから、そういうのも一度自分で経験してから身につけると理解が深まると思うよ。
0930デフォルトの名無しさん (ワッチョイ c212-VKlD)垢版2018/02/14(水) 10:40:30.59ID:waZcmI6l0
>>927

              「C実践プログラミング」 でCの文法、make、gdbなど、基礎を習得

                                ↓

     「C言語ポインタ完全制覇」 or 「秘伝C言語問答 ポインタ編」 でポインタに関して完全理解する

                                ↓

「エキスパートCプログラミング―知られざるCの深層」 でスタック、ヒープ、リンカ、ローダなど周辺知識を習得

                                ↓

      「C言語によるオブジェクト指向プログラミング入門」 で大規模プログラムの作り方を学ぶ

                                ↓

           「C言語デバッグ完全解説」でバグに強いプログラムの記述法をマスター

                                ↓

        「Code Complete(上)(下)」でより良いC言語プログラムとは何かを各人で考察する

                                ↓

                              神の誕生
レス数が900を超えています。1000を超えると表示できなくなるよ。

ニューススポーツなんでも実況