C言語なら俺に聞け 157

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0345-kMi9)
垢版 |
2021/06/28(月) 11:22:51.50ID:so+vl3vs0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
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/

※前スレ
C言語なら俺に聞け 156
https://mevius.5ch.net/test/read.cgi/tech/1601271690/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/08/06(金) 11:25:57.87ID:QgUKHcUo0
>>222
スペルを変えるだけでは無駄ってことだよ
どこから出てきたのか、何から導いたのかが示されていなければ同じことだ
2021/08/06(金) 11:59:37.28ID:GGzcYLSBM
>>223
何わけわからんこと言ってるんだよ
EXIT_SUCCESS がわからないならプログラマ辞めちまえよw
2021/08/06(金) 12:04:06.56ID:QgUKHcUo0
は? EXIT_SUCCESSの意味を英語で理解しろとか言ってきたのおまえさんだぜ
NO_PROBLEMなんてオレオレマクロでもおまえさんは満足なんだろ
どうりで規格票もロクに読まねえわけだ
プログラマ辞めちまえをそのまま返すぜドスカタン
2021/08/06(金) 13:43:09.92ID:3zvDecHz0
> は? EXIT_SUCCESSの意味を英語で理解しろとか言ってきたのおまえさんだぜ
EXITもSUCCESSも英語だから英語「を」理解しろって言ってるんだが?
英語の前にお前は日本語を理解できるようになならないと駄目だなw
2021/08/06(金) 14:26:52.67ID:QgUKHcUo0
知らねえやつがまずいない英単語でドヤってて恥ずかしくねえの? ちょっと神経わからんなw
Cを使う以上はISO/IEC 9899に書かれていることが前提だからこそEXIT_SUCCESSというスペルの意味を知っているべきだが
おまえさんが露呈したアレこそがプログラマにあるまじき姿だろうがよ
2021/08/06(金) 14:34:50.29ID:KBiduyaj0
シェルスクリプトスレの名物キチガイコンビみたいだなお前ら
2021/08/06(金) 15:10:51.95ID:3zvDecHz0
>>227
> 知らねえやつがまずいない英単語でドヤってて恥ずかしくねえの?
どこを見たらドヤッてるように見えるんだよ…

> ちょっと神経わからんなw
そもそもドヤるという神経がわからんわw
2021/08/06(金) 15:15:17.60ID:QgUKHcUo0
>>229
どこを見るってPCのモニタだがw
1たす1は2なんだぞ〜ぼくすごいだろ〜みたいなお気の毒な姿
2021/08/06(金) 15:23:31.43ID:QgUKHcUo0
規格票は英語で書かれているわけだが
読んでないのは誰かさんだったね(プークスクス
2021/08/06(金) 15:34:06.02ID:3zvDecHz0
>>230
> どこを見るってPCのモニタだがw
わー、おもしろい

これで満足かな?w
2021/08/06(金) 15:37:08.92ID:QgUKHcUo0
スルーすれば逃げられると思っているようなのでもう一度言ってやる

Cを使う以上はISO/IEC 9899に書かれていることが前提だからこそEXIT_SUCCESSというスペルの意味を知っているべきだが
おまえさんが露呈したアレこそがプログラマにあるまじき姿だろうがよ
2021/08/06(金) 17:07:54.01ID:3zvDecHz0
露呈したのはEXITやSUCCESSでドヤられたとか思うお前のレベルだろw
2021/08/06(金) 19:16:51.91
なんだか香ばしいですね‥‥

>>218
完璧な回答ですね‥‥
2021/08/06(金) 20:02:31.35ID:CzNdrnJF0
main以外の関数だと、成功失敗の値は特に決められてはいないんですよね?
2021/08/06(金) 20:47:42.91ID:y8oe7xdW0
>>236
うん、決められてないよ

まあユーザ的には0を成功としておけばいい雰囲気だけど
システムコールに近づくとだいたい0が失敗になってくよね
0っつーかぬるぽっつーか
2021/08/06(金) 20:49:05.43ID:+/iE6x4C0
(s)scanf() の戻りは渡った非引数への変換に成功した数ですし ケースバイケースですわね
2021/08/06(金) 20:49:34.62ID:+/iE6x4C0
s/非/被/
2021/08/07(土) 00:16:24.99ID:YBZ7G4A60
>>236
規定はないけどある程度の習慣はあって、おおざっぱにまとめると

・関数が受け持つ機能が副作用であり、
 返却値は成功or失敗のみを通知すればよいときは 0 を成功値とする
・関数が意味のある値を返すときはありうる値の範囲ではない値を失敗値とする
 (0、ヌルポインタ、負数、無限、NaNなど)
・入力値 (関数の引数) が正しい限り失敗がないことを見込めるときは
 不正な入力があった場合を未定義とする
 (呼出し前にチェックされているか、ロジック上正しいことをプログラマが保証することを期待する)

という感じだと思う。

あくまでも標準ライブラリやそれを踏襲した習慣をまとめるとこんな感じだろうという私なりのまとめなので
常に正しい選択というわけではないということはことわっておくが、
標準ライブラリを全く使わないようなプログラムもないだろうし
標準ライブラリを真似ておけば全体として一貫性が出て綺麗なんじゃないかな。
241デフォルトの名無しさん (ワッチョイ 6985-6hcM)
垢版 |
2021/08/07(土) 00:29:33.44ID:rXkekRAR0
strcmp
2021/08/07(土) 00:54:21.18ID:YBZ7G4A60
strcmp は失敗しない。
2021/08/07(土) 06:09:45.55ID:ZNSsPCBy0
>>234
それでexitやsuccessの意味を知らないと証明したつもりになっているアホを
じゃあドヤる以外のどんな表現をすればいいんだ?
2021/08/07(土) 08:46:51.55
>>240
cctypes
2021/08/07(土) 09:05:40.63ID:AEz+LKNR0
>>243
> それでexitやsuccessの意味を知らないと証明した
どこからそんなアホなことを言い出したんだ?
またPC画面からかな?w
2021/08/07(土) 09:15:42.75ID:xdlB1E9b0
exitなんかで終わらしちゃダメでしょ
returnで終わらせないと
2021/08/07(土) 09:50:33.76ID:YBZ7G4A60
>>244
文字判定系の関数に失敗はない。
2021/08/07(土) 11:27:30.28ID:sspluaGX0
exit は どこでもドアで便利
249デフォルトの名無しさん (ワッチョイ 13ad-E1rX)
垢版 |
2021/08/07(土) 17:43:31.00ID:efxonHum0
どこから終わっても良いのか?それとも出口は一つにすべきか?
2021/08/07(土) 18:13:40.12
>>249
どこからでも return してよいのか?それとも return 文の記述は一箇所に限定するべきか?
2021/08/07(土) 18:18:29.86ID:sspluaGX0
一つの関数内でreturnは一つにするというコーディング規約があったときは
gotoの使用が増えてましたっけ
252デフォルトの名無しさん (ワッチョイ 13ad-Z6Ah)
垢版 |
2021/08/07(土) 18:31:09.62ID:efxonHum0
Cなので仕方がないな。他の言語のように例外処理が try ... catch とかで使えれば gogo なくしても見易く書けるだろうけど。
2021/08/07(土) 18:35:47.91ID:HEQEjPMP0
出口を1つにしたほうが達成感がある
だがreturnお前はだめだ
254デフォルトの名無しさん (ワッチョイ 13ad-Z6Ah)
垢版 |
2021/08/07(土) 18:36:21.14ID:efxonHum0
goto なしでやる方法は色々あるが、30年ぐらい前に何も参考にせずに俺が考えついたのは for (;;) のブロックに入れて途中で条件により break する方式。
2021/08/07(土) 18:44:02.64ID:608OSAzY0
無限ループって怖くね?
2021/08/07(土) 18:54:15.41ID:vvCAvRb50
実利の無いこだわりはやめていただきたく……
257デフォルトの名無しさん (ワッチョイ 13ad-E1rX)
垢版 |
2021/08/07(土) 18:54:27.54ID:efxonHum0
>>255
最後のbreakを忘れたらそうなるのでそれだけは注意が必要
258デフォルトの名無しさん (ワッチョイ 13ad-E1rX)
垢版 |
2021/08/07(土) 18:58:54.78ID:efxonHum0
ま、しかし、今はそういう例外処理的なやつは躊躇せずにgoto使うけどね。そうしないと見づらいし分かり難くなるから。
2021/08/07(土) 19:27:07.82ID:HEQEjPMP0
gotoを上手く使えないのは自制心がないやつだけだ
俺みたいに自制心のある人間はgotoとはマブダチになれる
2021/08/07(土) 20:03:57.86ID:AEz+LKNR0
>>258
に一票
2021/08/07(土) 20:13:31.71ID:sspluaGX0
フルメタルジャケット思い出したw
2021/08/07(土) 21:20:33.45ID:ZNSsPCBy0
>>245
あ、じゃあ違うんだな?

> EXIT_SUCCESSがどういう意味かもわからないなら英語からやり直せよw

規格票もロクに読まないからEXIT_SUCCESSがどういう意味かわからんやつが
英語がどうたら言うのは確たる根拠もなく言ってた戯れ言てことだな

PC画面に映ってるアフォはオモロイなwww
2021/08/07(土) 21:41:58.88ID:AEz+LKNR0
まずマジックナンバーの話なのか規格の話なのかはっきりさせようか…
あと「〇〇がわからないなら□□しろ」と言うのは「〇〇がわからない」と言ってる訳じゃないぞw
2021/08/08(日) 05:41:26.37ID:X9nZYb130
つまり出鱈目な前提で寝言ぬかしてるってことか
2021/08/08(日) 06:43:20.13ID:3G5PI5Y70
仮定法も知らないアホかよw
2021/08/08(日) 07:32:57.11ID:X9nZYb130
根拠なし、前提は出鱈目
恥を知れよまずは
2021/08/08(日) 09:53:42.66ID:766a9h8SM
仮定法を理解できなかったのか…
可哀想にw
2021/08/08(日) 10:19:43.20ID:X9nZYb130
証明も承認もされていない前提で何かぬかして
それを肯定して欲しがるのは二重質問だろアフォ
2021/08/08(日) 10:55:03.30ID:3G5PI5Y70
証明とか承認とか、仮定法に全く関係なくて笑える
肯定とかに至っては全く意味不明w
2021/08/08(日) 10:56:31.55ID:X9nZYb130
前提を間違ってるのをどんなに言い訳しても無駄だよ

         ,,-―--、
        |:::::::::::::;;;ノ  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        |::::::::::( 」 <仮定法仮定法仮定法仮定法・・・・
        ノノノ ヽ_l   \______________
       ,,-┴―┴- 、    ∩_
     /,|┌-[]─┐| \  (  ノ
      / ヽ| |  バ  | '、/\ / /
     / `./| |  カ  |  |\   /
     \ ヽ| lゝ    |  |  \__/
     \ |  ̄ ̄ ̄   |
      ⊂|______|
       |l_l i l_l |
       |   ┬    |
2021/08/08(日) 10:58:09.47ID:o6Sz00kX0
いい加減にしろキチガイコンビ
もう3日目だぞ
2021/08/08(日) 11:40:04.29ID:3G5PI5Y70
なんの前提も置いてないのに前提が間違ってると言い続けるしかないポンコツBOT並みの知能だからねぇw
2021/08/08(日) 11:45:29.53ID:X9nZYb130
> EXIT_SUCCESSがどういう意味かもわからないなら英語からやり直せよw

前提: EXIT_SUCCESSがどういう意味かわからない
主張: 英語からやり直せ

該当者がいないんだが
あ、1人いたな規格票読まねえやつがw
2021/08/08(日) 12:51:11.36ID:aqugezwJ0
>>257
for (;;) するくらいなら do {} while (0); 選ぶかな
2021/08/08(日) 12:53:24.15ID:3G5PI5Y70
こんなのもわかんねーなら会社辞めちまえまえ!
って言われて会社辞めるアホやな
まあ辞めた方が会社にも本人にも良さそうだけどw
2021/08/08(日) 12:56:23.19ID:3G5PI5Y70
>>274
同意
無限ループは for(;;)
途中脱出は do {} while(0) を使うな
2021/08/08(日) 13:34:46.83ID:yE7YGXiy0
なるほどね
do{}while(0)ね
2021/08/08(日) 13:38:12.62ID:EooHPpNB0
while (1) は、たまに使います
2021/08/08(日) 14:30:57.58
>>278
for(;;)
ウォーニングが出ないからこちらを好みます
2021/08/08(日) 14:44:42.99ID:Cdmlpdjr0
while(1)だとどのツールでどういう警告が出る?
2021/08/08(日) 14:55:49.48ID:3G5PI5Y70
>>280
https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4127?view=msvc-160
最近(でもないか)の奴はwhile(1)だと警告を出さないようにしてるみたいだけど
2021/08/08(日) 15:21:56.83ID:ubSlJzPI0
Warningって読み方ウォーニング?
ワーニングじゃないの?
2021/08/08(日) 15:24:23.58
>>282
Star Wars
×スターワーズ
◎スターウォーズ
って覚えてね
2021/08/08(日) 15:41:10.34ID:EooHPpNB0
>>280

cl -W4 while.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86

while.c
while.c(5) : warning C4127: 条件式が定数です。
2021/08/08(日) 15:56:39.95
>>280,281
うーん、手元の cygwin gcc 10.2.0 では while (1) も while (42) もウォーニングは出ませんね、コメントありがとうございます‥‥昭和は遠くなりにけり
2021/08/08(日) 22:32:52.55ID:19kZVfwv0
>>282
アメリカ人だと ゥワーニン って言ってた
インド人(会話は英語)は ウォニング ってグまではっきり言ってた

こっちから言うときは片仮名で「ワーニング」って言っても余裕で通じた
まあエンジニアどうしで通じりゃ適当でいいんだよ
2021/08/09(月) 00:46:08.57ID:OWI9S7jW0
>>282
グーグル翻訳に発音させてみたらどちらともつかぬ半端な発音に聞こえる。
2021/08/09(月) 07:13:46.14ID:eF2Q2UUf0
>>279
つーかマジックナンバーがないのが魅力

# 組み込みでは無限ループがないほうが珍しい
2021/08/09(月) 11:00:51.25ID:5Oj13b1Xd
for(;;) はforeverと読む(俺定義)
290デフォルトの名無しさん (ワッチョイ ebd2-NW/4)
垢版 |
2021/08/09(月) 11:51:07.90ID:Lb8CQXvk0
>282
「ア」と「オ」の発音の違いは曖昧。
…というのをトリビアの泉でやってた。
2021/08/09(月) 12:03:01.28ID:eF2Q2UUf0
アに近い←米語
オに近い←英語
2021/08/09(月) 12:40:56.75ID:GX8oEfXz0
ウォーニング
と発音した方が通じやすいけどな
2021/08/09(月) 12:42:49.10ID:78aLRiJY0
while( 条件式 )

そもそも条件式には、実質的なブール値・真偽値しか使えない。
MISRA-C 違反
2021/08/09(月) 13:25:39.38ID:c/YgMY770
これ最初に間違えた奴誰?
2021/08/09(月) 13:41:09.70ID:eF2Q2UUf0
whileの括弧の中は制御式な
== と != は等価式
不等号は関係式

条件式はいわゆる三項演算子だぞ
2021/08/09(月) 13:54:46.12ID:Hd/9N5qL0
参考までに
2021/08/09(月) 14:03:11.33ID:c/YgMY770
>>295
等価式と関係式の意味的違いがよく分からん
2021/08/09(月) 14:30:20.02ID:OWI9S7jW0
>>297
・ 優先順位が違う
・ 関係演算子は複素数型をオペランドにとれない
2021/08/09(月) 15:32:43.41ID:WWM043YB0
結局は成り立つか成り立たないかってことでしょ
その2つを厳密に分ける意味はなに?
2021/08/09(月) 15:43:28.94ID:qYrd5+ip0
算術式 関係式 論理式 という分類は聞いたことがあるが>>295みたいなのは初耳だなぁ。
2021/08/09(月) 16:04:49.05ID:OWI9S7jW0
>>300
条件式 (conditional expression) については C99 なら 6.5.15 に記述がある。
制御式 (controlling expression) という言葉は当たり前のように出現して
明確に定義を与えているらしい箇所がみつからないんだけど
仕様では >>295 の意味で使われていることは自明。
2021/08/09(月) 16:10:06.60ID:hymvfobjM
等価式 ⊂ 関係式
でしょ
2021/08/09(月) 16:23:09.32ID:JaaB5Egp0
文法定義上の用語だよ
区別する最大の意義は演算子優先順位の定義

>>293が不用意に「条件式」と書いてしまったばっかりに本質的でないツッコミが発生しただけ
2021/08/09(月) 16:36:37.59ID:OWI9S7jW0
>>302
構文規則としては

等価式:
  関係式
  等価式 == 関係式
  等価式 != 関係式

と書いてあるからその考え方でも間違いとは言い切れないけど
それを言うなら

シフト式:
  加減式
  シフト式 << 加減式
  シフト式 >> 加減式

だからといって 加減式 ⊂ シフト式 と言ってしまうと (日常的な感覚としては) ちょっと違和感があるし、
このへんの言葉はシンタクスを定義する上での便宜的な概念 (BNF で書くとそうなるってだけ)
だから、演算子の機能上の意味付けとは分けて考える必要がある。
2021/08/09(月) 16:38:11.39ID:S8n0VVLE0
>>301
>>295の意味というのがよくわからんけどcontrolling expressionって例えばswitch( )のカッコ内もそうだから等価式と関係式だけじゃないよ
2021/08/09(月) 16:39:33.74ID:qYrd5+ip0
>>303
>区別する最大の意義は演算子優先順位の定義

まさにそこが疑問なんだけど、優先順位ごとに全部「△△式」って名前を付けて区別するのは見たことない。
2021/08/09(月) 16:41:53.02ID:S8n0VVLE0
>>304
日常的な話をしてるのか規格の話をしてるのかはっきりさせてからレスしてくれ
規格の話をしてるのはあんたともう一人だけだとも思うぞ
>>305のツッコミは別にして…
2021/08/09(月) 16:51:05.91ID:OWI9S7jW0
>>307
違う話が混ざってるのは意図的。
レイヤが違うものを混ぜて考えるとおかしいよねという話なんで。
2021/08/09(月) 17:02:47.61ID:eF2Q2UUf0
6.8.5.1 while 文 制御式の評価は,ループ本体の各実行の前に行う。
6.8.5.2 do 文 制御式の評価は,ループ本体の各実行の後に行う。
6.8.5.3 for 文 文
for ( 節1 ; 式2 ; 式3 ) 文
の動作は次のとおりとする。式2 は制御式とし,ループ本体の各実行の前に評価する。
2021/08/09(月) 17:06:46.07ID:eF2Q2UUf0
条件式なんてオレ用語はwhileの括弧の中で比較だけが許されると思いたがるバイアスの顕れだろ
いいか、もっぺん言うぞ バイアス
2021/08/09(月) 17:12:09.00ID:S8n0VVLE0
>>308
要するに荒らしたいと言うことか
ウザいけどこう言う奴は言って聞くわけ無いしな
2021/08/09(月) 17:18:59.09ID:OWI9S7jW0
>>311
どこを要したの?
2021/08/09(月) 18:00:51.96ID:78aLRiJY0
if ( 条件式 )

Ruby では、条件式にオブジェクトを書いても、
偽になるのは、nil, false の2つだけだが、

他の動的言語では、各型に偽がある。
空文字列・空配列・空辞書、0, 0.0 など

あまりに、バグの組み合わせが多いために、
実質的なブール値・真偽値しか使えないのが普通

それで、TypeScript みたいに型チェックが流行るようになった。
C も同じで、型チェック必須言語

これらが無いと、バグが多すぎて、製品レベルの品質基準にならない
2021/08/09(月) 18:05:14.63ID:WWM043YB0
ループを制御するための式だから制御式というんだろうけど、

制御式のなかで
例えば

while(i++==10)

なんて出来たとしてもそんな書き方しないだろうし
2021/08/09(月) 18:20:08.88
>>314
while 文なら時々します
https://ideone.com/9Tkokb
2021/08/09(月) 18:26:16.77ID:S8n0VVLE0
>>314
昔は
while((*dst++ = *s++) != '¥0');
とか定番だったけどね
2021/08/09(月) 18:40:40.16
>>316
ノンノン!
while (*des++=*src++)
;
2021/08/09(月) 20:27:51.00ID:eF2Q2UUf0
>>313
勝手にレビュー落ちてろ
俺らには関係ない
2021/08/09(月) 20:56:50.79ID:CmP62z0OM
while(i++!=10)
なら、あるかも
2021/08/10(火) 01:18:25.50ID:7+xjomdk0
プログラミング言語C 第2版 (いわゆる K&R) に載っているくらいなので C では珍しくないのは確か。
日本語版の 129 ページあたりに「こうした慣用法はマスターすべきである」と書いてある。
2021/08/10(火) 01:22:24.66ID:wjw1gmPx0
K&Rは古典なので現代において参考にするようなものではない
2021/08/10(火) 02:16:48.33ID:7+xjomdk0
あらたに書くときに使うべきではないと思うけど古いコードがあるのも現実なんやで。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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