C言語なら俺に聞け 153

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん (ワッチョイ 5fba-LL4R)
垢版 |
2019/08/17(土) 23:02:42.00ID:tN5mSQYg0
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/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
※前スレ
C言語なら俺に聞け 152
https://mevius.5ch.net/test/read.cgi/tech/1560763630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/12/27(金) 22:09:21.87ID:G2Hqp8Jj0
はじめてのOSコードリーディング UNIX V6で学ぶカーネルのしくみ、青柳 隆宏、2013

そう言えば昔、こういう本も読んだ
2019/12/28(土) 01:02:34.32ID:Td7wq8Cw0
ジャンケンのコードを書いてみました
よろしければ、ご指摘等をお願いします
https://pastebin.com/HCLJ5m7p
2019/12/28(土) 02:00:59.65ID:xvOJ+UySM
>>825
少しは取り繕えよ
何かのコピペだろ
2019/12/28(土) 06:31:05.78ID:r5X0es4d0
>>823
> それに最近のコンパイラは lint に似た warning も出せるようになったし
初期のlint使ったことないだろw
2019/12/28(土) 07:57:54.17ID:b9pc6wBR0
>>817
そんな可能性は絶対の絶対にゼロだ
2019/12/28(土) 08:04:30.24ID:b9pc6wBR0
>>815
俺に言わせれば、おまえ文系くせえんだよ
俺はハード設計もやるから負論理だのド・モルガンだのは息をするくらい当たり前なことで
待遇だの裏だのという用語で得意がるやつは専門分野は何だろうと思ってしまうのさ

それから突っ込まれてるのはおまえだぞ、741本人よ
2019/12/28(土) 08:18:01.34ID:5fvEktMvd
待遇で得意がるvsドモルガンで得意がる
小学生同士かよ
2019/12/28(土) 08:39:28.74ID:r5X0es4d0
>>829
対偶の話に負論理とかド・モルガン?
恥の上塗りか?
あと741に突っ込んでるのは頓珍漢なお前だけだぞw
2019/12/28(土) 09:32:59.76ID:b9pc6wBR0
やっぱり通じねえなw
2019/12/28(土) 09:45:41.04ID:5fvEktMvd
C言語の話しようぜ
2019/12/28(土) 10:06:23.41ID:VDzFwrot0
printf("やっぱり通じねえなw\n");
2019/12/28(土) 11:10:17.46ID:vnZXJluZ0
電子回路・HDL などの組み込みでは、
AND, OR, NOT, NAND,NOR などの回路、
負論理、ド・モルガン、カルノー図とか、初歩だぞw

まず、情報処理の組み込みの教科書を読め!
836デフォルトの名無しさん (ワッチョイ 2135-YzVQ)
垢版 |
2019/12/28(土) 11:11:43.15ID:CljHkVQA0
>>831
負論理とかドモルガン知ってる人が対偶の意味知らないと思ってるの?
837デフォルトの名無しさん (ワッチョイ 328c-M7II)
垢版 |
2019/12/28(土) 11:18:29.36ID:BVlwLEoZ0
双対は知らないだろう?
2019/12/28(土) 11:34:08.50ID:KhDEPBLca
このスレっていつも下らない喧嘩を延々と続けてる奴らがいるけど、何なんだろう。どっちが正しいとか以前に言ってる中身(議論の仕方)が下らなくて他人からはどっちもバカにしか見えないから消えてくれないか。
2019/12/28(土) 11:34:44.58ID:9Pig40yt0
>>827
Sun OS 4.1 のはやったことがありますが、初期の頃とは変わっていたのかも
2019/12/28(土) 11:54:34.25ID:xvOJ+UySM
>>836
彼は分かってない
2回も指摘されてるのに論理が破綻していることに気付いてない
>>747,750,751,752
>>782,784,786
2019/12/28(土) 12:53:03.04ID:1RUtvmltM
>>836
さあどうだろうね、「ド・モルガンの定理知ってる」なら「待遇を理解してる」という命題が証明されたとか聞いたことないし
そもそもド・モルガン知ってるとか言うのも>>829が言ってるだけだし、>>747が対偶でない事を知ってるのかすら怪しいしなw
842デフォルトの名無しさん (ワッチョイ 2135-YzVQ)
垢版 |
2019/12/28(土) 13:01:09.99ID:CljHkVQA0
読んでないから知らんけどこんな雑談に対偶ガーとか論理ガーとか証明ガーってのは馬鹿馬鹿しいね。
2019/12/28(土) 13:08:05.93ID:xvOJ+UySM
似て非なるもの
ド・モルガン
A ∩ B = ¬(¬A ∪ ¬B)
A ∪ B = ¬(¬A ∩ ¬B)
対偶
A ⇒ B = ¬(¬B ⇒ ¬A)
844デフォルトの名無しさん (ラクッペ MM4b-HCDf)
垢版 |
2019/12/28(土) 13:09:43.37ID:1WIkADffM
正直、アスペ馬鹿が下らないことを追求したがってるだけにしか見えない
2019/12/28(土) 13:14:14.77ID:xvOJ+UySM
コピペ改変してから何か変だと思い直してみれば正解はこうだったすまん
対偶
A ⇒ B = ¬B ⇒ ¬A
2019/12/28(土) 13:19:13.30ID:Td7wq8Cw0
>>826
いえ、typedefの文はスッキリCを参考にしましたが、
あとのアルゴリズムはオリジナルです

こんなところで意見を求めるのは図々しいと分かってはいますが、
何とかお願いします
2019/12/28(土) 14:01:27.13ID:L2lyDMSgM
後出しで負けを実装するとよりじゃんけんぽくなるぞ
848デフォルトの名無しさん (ワッチョイ f6d2-Bxcu)
垢版 |
2019/12/28(土) 15:05:05.31ID:VCBq52Cm0
C言語のBNFって何種類あるの?
知ってるだけ全部教えて
2019/12/28(土) 15:51:37.71ID:r5X0es4d0
>>842
うん、俺もそう思うよ
>>747が裏も正しいと思い込んでるバカってだけの話だしw

>>844
何を追求してると思うの?
追求すべき事柄なんて特にないと思うけど
2019/12/28(土) 15:54:09.64ID:r5X0es4d0
>>848
https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of%20C%20in%20Backus-Naur%20form.htm
2019/12/28(土) 15:54:25.66ID:Srq0kgZJa
>>848
ググれ
2019/12/28(土) 17:33:03.88ID:y9rwRM9T0
OKグーグル、CのBNFを教えて
2019/12/28(土) 17:41:03.87ID:c/4LCSnv0
K&Rの付録ページになかったかなかな?
2019/12/28(土) 17:45:59.25ID:y9rwRM9T0
BNFで思い出したが

enum { a } func(void) { return a; }

この文法使い道ないよな
2019/12/29(日) 03:22:40.86ID:GZSHSaBs0
>>714
エイリアスの否定とはいただけない
直値だけの糞コードはゴメンだわ
意味によって0とNULLは書き分けるよ
2019/12/29(日) 10:41:38.70ID:yqbBnK7b0
>>855
その書き分けに意味はあるのでしょうか?
2019/12/29(日) 10:49:06.87ID:OzwmxFfFa
>>856
お前にとっては意味がない。
俺や俺以外の書き分けたい人には意味がある。
それだけだから気にしなくていいぞ。
2019/12/29(日) 11:39:04.46ID:k3T+0Ot70
やたら長いコードの中で
it = &a;
*a = 0;
it = 0;
a = 0;
とか書かれたら混乱するだろ。
あ、でも屑はハンガリー人なんだっけ?
2019/12/29(日) 11:58:28.30ID:yqbBnK7b0
>>858
ハンガリアンはやらないです
2019/12/29(日) 22:32:49.20ID:Y3W4ZjXNd
>>858
混乱するから数値のゼロもdefineしなさい
2019/12/29(日) 23:06:45.98ID:jE46OAyh0
ハンガリー人は宇宙人だから仕方ないね
2019/12/30(月) 06:33:44.11ID:ypuMXf6z0
>>825,846
自分ならこんな感じで書く、程度のものですが思うけど良かったらどうぞ
https://pastebin.com/idm94WiU

別の機能を追加する必要とか出てきたとき、
ジャンケン自体を関数化してあげたほうがmain()関数内がゴチャゴチャしなくて良いかなと思って書きました。
2019/12/30(月) 08:17:18.73ID:JZjS6BbQ0
ゴチャゴチャがjankenに移るだけ
2019/12/30(月) 09:11:36.36ID:W9rqQHA30
typedef char String[1024];

とtypedefしてるのはたしかどこかの教科書の流儀だったはずだ
最近その話題を見かけた
2019/12/30(月) 12:24:04.93ID:M1MgDNrq0
あいこでの再戦と、もう一回じゃんけんするのは、
目的が違うんだから別ロジックにすべき。
2019/12/30(月) 12:31:51.34ID:/N6WhDZId
同じ処理を共通化する
今後異なる可能性のある処理をあらかじめ分けておく

いろんな設計思想がある
2019/12/30(月) 17:54:24.59ID:DLFwINBS0
#define O 0
2019/12/30(月) 23:34:38.97ID:QMDb+rs/0
>>864
配列のtypedefって代入で問題にならんのかな
今のCの仕様追ってないけど昔は構文エラーになるから構造体に入れる必要があった
869デフォルトの名無しさん (ワッチョイ e2ad-sLG6)
垢版 |
2019/12/31(火) 00:15:56.34ID:Qb6UeAHn0
>>825
これは危険なので普通はやらない。

scanf("%s", nextStr);
2019/12/31(火) 00:24:22.42ID:jyfGwMQG0
1文字入力ならgetc使うかな。
2019/12/31(火) 07:44:51.11ID:8dhupYNq0
>>868
jmp_bufは配列のtypedefだよ
2020/01/01(水) 00:17:51.96ID:DMjscTxe0
>>871
そういやそうだね
ローカルに作って環境保存にmemcpyした覚えないから代入できるのか
色々忘れてるわ
2020/01/02(木) 09:27:06.04ID:9VSdJ8Nx0
ポインタを受け取る関数先頭では必ずnullチェックを行うコーティングルールが有るのですが
malloc失敗したポインタをそのまま渡した時ぐらいしか使い道が思い付きません…
2020/01/02(木) 09:28:21.50ID:mLLKwKl50
freeしたときに0入れるルールもあるんじゃないのそれ
2020/01/02(木) 09:37:24.05ID:+UNtt4nj0
>>873
杓子定規に適用したら形だけの無駄なチェック処理の典型だね。
上位レイヤとの境界のような意味のあるところだけなら現実的だけども。
2020/01/02(木) 09:53:01.45ID:qr+4fHWP0
仕様としてnullを許可する関数ではチェック不要としているのかあるいは一律に
null渡し禁止としているのかで評価は変わりそうだが。
2020/01/02(木) 10:24:26.88ID:Lvb+z/bpM
get_state()みたいな関数があって失敗時はnullを返す。それを知らずに別の関数に戻り値を直接渡してしまったとか、nullが誤って渡されるケースなんていくらでもあると思うが。

873が超天才でそんなミスは絶対ありえないとしても、他人のコードやドキュメントが間違ってる可能性もある
2020/01/02(木) 10:39:04.82ID:Dgcghn810
Player*とEnemy*を取るRPGのバトル関数で
どちらかが死んでたらplayer->attack()関数は盛大に失敗する

この時の当該playerは消滅したわけでは無いが
enemyはメモリ上から消えている

ついでにこのattack関数が実は関数ポインタに付けられたプレイヤーのスキルだった場合、
attackがカラッポだと、徒手空拳になるか防御するか何もしないか、何故か敵味方全員が即死していきなりエンディングが始まるかのどれかになる
2020/01/02(木) 11:31:53.70ID:FHRar1Ix0
安全性を取るならいついかなる時もNULLチェックは行うべき

だがそもそもパフォーマンス至上主義だから
Cという太古の言語を危険を冒してまで使っているということを考えると微妙

パフォーマンスが重要でないならCを使っていることからして論外
880デフォルトの名無しさん (ブーイモ MMb6-vILD)
垢版 |
2020/01/02(木) 11:38:58.14ID:ZKet2vMyM
成否を含んだtupleを渡し実行時に判別、式全体を読み飛ばす粒度の小さい隠れた分岐構文みたいなの有ればいいのにねー
成否要素だけの反転は !!tulpevalue みたいな感じで

c言語の仕事じゃないだろうしそもそもtupleなんて持ってないし
うんこマが技巧駆使してわけわからんコード書くツールになるだけかもしれんし弊害いろいろ思いつくけど
2020/01/02(木) 11:39:55.37ID:+UNtt4nj0
>>878
召喚された悪魔が鼻から出てきて世界滅亡エンドも追加しといて。
2020/01/02(木) 12:33:18.19ID:LqVuN/CI0
>>879
Assertマクロとかでいいだろ
テストとかで引っ掛けるという実利に加えて「nullなんて渡すんじゃねーよボケ」と言うのを表明する意味もあるし
2020/01/02(木) 12:38:16.19ID:wpzQe/fn0
nullに意味を持たせないプログラムなら、
null checkしないと落ちる環境ならする意味ないんじゃね
884デフォルトの名無しさん (アウウィフ FFa5-p4uH)
垢版 |
2020/01/02(木) 14:45:20.78ID:fRqsjLPxF
Release build だと assert 消えるって知らない人意外と多いんですね
2020/01/02(木) 15:06:10.66ID:+UNtt4nj0
>>884
消えるって知ってるからassertにしろっていう意見なんだろう
886デフォルトの名無しさん (アウウィフ FFa5-p4uH)
垢版 |
2020/01/02(木) 15:47:44.05ID:NYIo0K4bF
その意見を完全にスルーしてコメントしてる人がいるよね
2020/01/02(木) 16:46:49.09ID:YqaismelM
>>886
誰のことを言ってるの?
2020/01/02(木) 19:01:18.56ID:/MiE1Mk20
ぬるぽ
2020/01/02(木) 19:06:06.49ID:LbxbUX1g0
がっ!
2020/01/02(木) 19:09:50.49ID:ZQF68/R30
酷い自演を見た
2020/01/02(木) 19:13:07.31ID:LbxbUX1g0
ジ・エンド!
2020/01/02(木) 19:21:03.30ID:koJayFbu0
assertを本番環境に持ち込むべきと
主張する痛いやつが昔いたが
奴は今どうしてるかな
2020/01/02(木) 19:35:59.09ID:VmmTWzwp0
C++11 の static_assert は便利なんですけれどもね…これ、C に入らないかな…
assert も static_assert と同じ用途・考え方で使うべきものかと思いますね
2020/01/02(木) 20:05:40.84ID:koJayFbu0
Cにもstatic_assertか
考えたこともなかったが
確かにあったらよさそうだな

もういじるなってのが
俺の基本だが
追加に賛成できる珍しい例だ
2020/01/02(木) 20:45:56.41ID:LqVuN/CI0
>>892
> assertを本番環境に持ち込むべきと
> 主張する痛いやつが昔いたが
> 奴は今どうしてるかな
本番用はいちいちassert外してるのか?w
2020/01/02(木) 20:51:06.32ID:hML6I4krM
おいおいおい
2020/01/02(木) 20:59:07.77ID:tgRnMcUUM
>>895
assert は Debug ビルドのときだけチェックを行う実装になってるのが普通
2020/01/02(木) 21:59:00.14ID:LqVuN/CI0
>>897
だから>>892が意味不明なんだけどw
2020/01/02(木) 22:07:28.72ID:tgRnMcUUM
>>898
リリースビルドで有効な assert を用意するだけだろ
何が不思議なの?
2020/01/02(木) 22:08:11.77ID:SH5dgl7q0
本番環境に持ち込むべき
影響出ないんだから
こういうことでは
901デフォルトの名無しさん (ブーイモ MM6d-vILD)
垢版 |
2020/01/02(木) 22:22:27.18ID:oLW+m36dM
深いところで拾ったエラーを浅層に戻して対応する必要がなく「ダメよ」と述べ落ち許されるプログラムならば
assert残すのも有りよね
実際#ifdef DEBUGで包んでるだけだし
imagemagickなんかも引数チェックを通った後の個々パラメータ内で不整合出たらassertでメッセージ流して落ちるし
2020/01/02(木) 22:27:00.54ID:VmmTWzwp0
>>900
assert が発動してアプリが止まるのは終わり方として最悪だとおもいますよ
もし assert が発動する可能性があるんだったら assert ではなくて、きちんとしたエラー処理を記述するべきなのでは?

assert って辞書をみると「断言」「主張」「出しゃばり」くらいの強い意味ですね
私は assert はコメントの一種一様態として使います=>>893
2020/01/02(木) 22:29:39.05ID:LqVuN/CI0
>>899
えっ?
>>892が正しいという主張?
まあ>>901みたいな考え方もあるだろうけどさ
2020/01/02(木) 22:30:49.81ID:+UNtt4nj0
>>901
assertに引っ掛かったときの挙動は置いとくとしても、assertの処理内容や頻度によっては実行時コストが問題になる可能性も無くはないから、単純にやってよしとはならないと思うぞ。
905デフォルトの名無しさん (ブーイモ MM6d-vILD)
垢版 |
2020/01/02(木) 23:00:40.06ID:oLW+m36dM
効率厨はログ出力を見れるGNUemacsのeshell辺りででもwindowsプログラム立ち上げてみ?
プロプラ、オープンソースに関係なく大半のリリースビルドが膨大な出力を出しっパになってる現状に絶望するだろうから
2020/01/02(木) 23:03:44.94ID:SH5dgl7q0
>>905
その環境で動かすと、プリプロセッサ段階で消去されているはずのデバッグ文実行結果が見れる様になるんですか?
2020/01/03(金) 01:04:07.68ID:kXvb5Zcs0
>>905
処理内容や頻度によって実行時コストが問題になる可能性があると言っただけで効率厨扱いとはw
既存プログラムでログを大量に出しているからと反論しているが、だからそれがどうしたというのだ? ログを出しても性能的に問題ない範囲、頻度、量で出しているだけだろう。
2020/01/03(金) 03:24:18.79ID:RUwUdhzc0
>>907
assertion は「コメントの一種」という私の立場では、重い assertion の罪は軽い、許容できると感じています
2020/01/03(金) 08:42:01.33ID:3k7MKqlh0
組み込みだとタイミング込みで評価するから
ビルドを切り替えられないんだよね

assertはログだけ出すようにしてるが
ウォッチドッグを効かすってのもありかな

起こり得ないところで使うってのはその通り
2020/01/03(金) 14:46:00.81ID:SORF6jE90
ロケット打ち上げ2秒後でassert出ても意味が無いな
そのまま大爆発だ

衝突する0.5秒前でassert出ても意味が無い
時速90kmでそのまま衝突だ
2020/01/04(土) 21:11:48.66ID:rVQt0/h/0
uint64_t を配列の添え字に使えるかどうかって何か規格はありますか?
手元の環境は unsigned int のようなんですが、gcc/ming32-x64
2020/01/04(土) 22:03:02.52ID:hAlxX0tq0
uint64_tどころかポインタも使えるぞ
2020/01/04(土) 22:09:03.08ID:49Uce+wI0
>>911 何を見て「unsigned int のよう」と言っているの?
2020/01/04(土) 22:28:50.08ID:HbavYk5j0
>>911
ISO/IEC 9899:2011 (E)

6.5.2.1 Array subscripting
1 One of the expressions shall have type "pointer to complete object type", the other
expression shall have integer type, and the result has type "type".

7.19 Common definitions <stddef.h>
size_t
which is the unsigned integer type of the result of the sizeof operator;

どこにもunsigned intに限定するとは書いてねえぞ
unsigned integerと書いてあるのが
おまえはunsigned intに見えるのか?
2020/01/04(土) 23:21:44.72ID:rVQt0/h/0
>>912-914
コメントありがとうございます
uint64_t と int をいいかげんにチャンポンに使っていたための祟りに襲われてしまっているところでして…
a[i] = *(a + i)
を考えれば、i が int = int32_t, であろうと uint64_t であろうと、うまくやってくれると予想できますね
2020/01/05(日) 12:03:03.18ID:buL7vvPT0
そこは
[a]i = *(a+i)
だろ
2020/01/05(日) 12:18:38.35ID:JLxpDEWT0
>>916
それを言うならi[a]だ
ドヤるなら動作確認くらいしてからにしろ
そもそも後置演算子の[]が[a]iなわけねえだろ
2020/01/05(日) 12:50:09.43ID:+e7zv/8B0
STLの配列の添え字は、std::size_tと同じ範囲が使えるように思う。
このstd::size_tには長さの制約は多分ない。
常識的に考えて、32ビットのプログラムで64ビットの配列を使うことはあまり現実的ではない。
なので、std::size_tの長さはNビットプログラムにフィットするようにコンパイル時にスイッチされる。はず。
2020/01/05(日) 12:58:44.11ID:JLxpDEWT0
思うんじゃなく確認しろ、多分とか寝言ぬかしてねえで

N4713

26.2.1 General container requirements
Table 83 ? Container requirements
X::size_type
size_type can represent any non-negative value of difference_type

26.3.8.1 Class template deque overview
// element access
reference operator[](size_type n);
const_reference operator[](size_type n) const;
920デフォルトの名無しさん (ラクッペ MM61-Gr30)
垢版 |
2020/01/05(日) 13:25:51.85ID:qO+R3XJXM
教官湧いててワロタ
921デフォルトの名無しさん (ワッチョイ 9901-8/Ff)
垢版 |
2020/01/05(日) 13:55:25.64ID:+b/hvkzN0
教官使い倒そうぜ。
タダだし。
2020/01/05(日) 15:43:26.81ID:Apdi0tl00
具体的な規格の文面を引用して示してくれるのは有難いことでしょ。
手元にPDFとかで持ってても場所を見つけるのが苦労で諦めることが多いし。

size_type can represent any non-negative value of difference_type
の部分を見ると size_t の大きさは difference_type の大きさに依存する、
少なくとも difference_type の正の範囲より広い、で合ってるかな。
ならば difference_type の範囲はどうなってるの? って具合に
疑問の先が移動するね。答えに近づいたけれど到達はしてない感じ。
923デフォルトの名無しさん (アウアウエー Sa4a-p4uH)
垢版 |
2020/01/05(日) 20:35:48.07ID:eK7nc1Ssa
添え字は size_t が良き
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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