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/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
あらたに書くときに使うべきではないと思うけど古いコードがあるのも現実なんやで。
2021/08/10(火) 11:49:11.43ID:9wi/dlAk0
++, -- は、バグが多いから、Ruby から排除された

Go でも、単独文でしか書けない。
組み合わせることができない

これらを組み合わせると、MISRA-C 違反。
MISRA-C に則っていないものは、製品レベルとして使えない

Andrew Koenig のC Traps and Pitfalls「Cプログラミングの落とし穴」、
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、2006、MISRA‐C研究会

こういう本を読んでいないだろ
2021/08/10(火) 12:28:40.74ID:MOslRoWuM
書いてはいけないが、読める必要はある。
目を背けるな
2021/08/10(火) 12:38:24.67ID:PfQcBK0N0
「おやつは300円以内」のようなくだらねえことが延々書き連ねてある
ツッコミどころ満載なやつ馬鹿馬鹿しくて相手してらんね
2021/08/10(火) 15:45:47.63ID:21u4vH9ca
>>324
いろんなスレでNG推奨と言われてることから目を背けている奴に何を言っても無駄だろう
2021/08/10(火) 15:51:29.27ID:Ix5h21qC0
マ板でぼろぼろに言われてますが、
このコードは何が悪いのでしょう

https://wandbox.org/permlink/JQc6ZwNrcNThSfkY
2021/08/10(火) 15:52:38.52ID:PfQcBK0N0
プログラミング以外のところでも「俺様が知らない言葉を使うな」という痛いやつがいるのと同じ
2021/08/10(火) 15:54:17.27ID:PfQcBK0N0
>>327
IOCCCのルールを守っていないからだろ
2021/08/10(火) 18:42:13.96
テステス
2021/08/10(火) 18:45:30.07
>>327
何をやっているのか努力しないと読めないのが辛いです、そういう曲芸を仕事でやられたらボロクソなのも仕方がないとおもいますね
2021/08/10(火) 18:58:54.35ID:98gOzHW9d
>>327
型キャスト使わなくても型を合わせばいいのに。
ループ変数がcharってありえないでしょう。
2021/08/11(水) 08:41:39.44ID:19rzwYjH0
doubleでfor回したりはするね
2021/08/11(水) 10:26:21.33ID:fvD2fRTR0
>327
単純にソースの目的がわからない。
バイトオーダ(エンディアン)の確認?

{{ ... }/*コメ*/}というコーディングもなんかキモイ。
2021/08/11(水) 13:02:40.93ID:c2ypq8+M0
レスありがとうございました。

>>327は、

https://medaka.5ch.net/test/read.cgi/prog/1625843192/

というスレで、初心者の1が質問を投げるとこから始まります。
入力された文字を逆順で表示したいという内容です。
それで1が貼ったコードを巡り、いつしか省力化の流れになって、
そして投下されたのが>>327です。
2021/08/11(水) 13:57:42.27ID:EWMgwFeS0
なるほどなあ
とりあえず文字列としてしか使われない領域に意味ありげにint配列使ってるのと、バイトオーダーに依存している、の2点が最大のクソポイントか
2021/08/11(水) 16:04:17.52ID:fvD2fRTR0
>334
>{{ ... }/*コメ*/}というコーディングもなんかキモイ。
Chromeのせいか?
なんか変な文字化け(変換?)起こしてるっぽい。

>char len,i;
が char len、i; ってなるとか。
FireFoxで開いたら正常表示された。

>335
>入力された文字を逆順で表示したいという内容です。
把握

>327
>Stdin
>abcdefg
7文字ってことは

>printf("%c%c%c%c",...
の最初のループの1文字目は "\0"が出力されてるのかな?それでいいのか?
int t[25];が0クリアされてるならいいけど、
ゴミが残ってると正しく表示されないんじゃないか?
2021/08/11(水) 16:25:45.76ID:91mms/zJ0
バイトオーダー決め打ちなのと
sizeof(int) == sizeof(char) * 4 前提にしつつ 4文字づつパックで処理してる工夫なんだろうけど

わざわざ難しくしてってのおふざけ暴走が生んだ結果だな
339デフォルトの名無しさん (ワッチョイ 13ad-E1rX)
垢版 |
2021/08/12(木) 04:13:22.60ID:zN4hKecF0
>>327
それって入力した文字をただ出力したいだけ?
なんでそんなに複雑に書いたの?
340デフォルトの名無しさん (ワッチョイ 13ad-E1rX)
垢版 |
2021/08/12(木) 04:15:08.28ID:zN4hKecF0
あ、逆順に出すの?それにしても複雑怪奇だなあ。どうしてそうなった?
341デフォルトの名無しさん (ワッチョイ 13ad-Z6Ah)
垢版 |
2021/08/12(木) 06:20:29.21ID:zN4hKecF0
>>335
そっちのスレにまともなやつのURLを貼っといた。
2021/08/12(木) 07:41:49.84ID:+O9ZyhRw0
わざと複雑怪奇に書く遊びはC使いの古来の文化だよ

有名サイトだけど
https://www.ioccc.org/
2021/08/12(木) 15:37:03.65ID:s+UN3BdM0
i>-1 は、i >= 0 の方が、分かりやすい
2021/08/12(木) 16:26:35.93ID:qgQ8hJHG0
char型のiをわざわざintにキャストしてるのは何か理由があるのか
最初からintでiを定義しておけばいいのに
2021/08/12(木) 17:14:43.67ID:s+UN3BdM0
8ビットを、32ビットに変換するのは汎整数拡張

実際のCPU でも、8ビットでは処理できないので、
32ビットに変換してから処理して、8ビットに戻す

つまり汎整数拡張は、ほぼ無害
2021/08/12(木) 17:48:37.78ID:iQcpjp5R0
INT07-C. 数値には符号の有無を明示した char 型のみを使用する
https://www.jpcert.or.jp/sc-rules/c-int07-c.html
347デフォルトの名無しさん (ワッチョイ 49a6-NW/4)
垢版 |
2021/08/12(木) 19:28:25.65ID:PwkehoUJ0
処理系によってcharがunsignedだったりするから
ライブラリのポーティングでえらい目にあったりするのよね
2021/08/12(木) 20:05:44.88ID:s+UN3BdM0
MISRA-C でも、単なるchar 型は使用禁止。
-128〜127 か、0〜255 か、どちらか分からないから

signed char か、unsigned char を、明示して使わなければならない。
または、int8 か、uint8
2021/08/12(木) 20:13:25.34ID:+O9ZyhRw0
信者以外には全く何の関係もないことだな
2021/08/12(木) 23:08:22.05ID:hI2dv5iP0
信仰しなさい。
2021/08/12(木) 23:18:10.25ID:qgQ8hJHG0
char「我をたたえよ」
「チャー!」「チャー!」
2021/08/12(木) 23:20:40.68ID:iqzxJUR40
やっぱりプログラム板は勉強になります
2021/08/12(木) 23:22:37.60ID:ZBXe4sG30
あれは「チャー」って叫ぶのか?「キャー」じゃだめなの?
2021/08/13(金) 01:00:42.90
「シャー」が正解です…
355デフォルトの名無しさん (ワッチョイ 42ad-Iu++)
垢版 |
2021/08/14(土) 01:39:23.05ID:Znm3fqvr0
きゃら
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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