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/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
きゃら
2021/08/14(土) 16:41:42.16ID:r/g27g8Q0
ヒャル
2021/08/14(土) 16:51:07.63ID:xM4RG8+90
語源というか原形は character でその綴りを縮めたのだと考えれば、
(そしてあえて発音をカタカナに当てはめようとするのであれば)
キャー、もしくはキャラが順当なんじゃないかな。
358ハノン ◆QZaw55cn4c
垢版 |
2021/08/14(土) 19:03:43.32
欧米人なら letter を使いそうなものを、それを character(=象形文字系統)としたその心が知りたい‥‥どうでもいい話ですみません
2021/08/14(土) 20:55:06.51ID:kmQRiZG00
characterはcharと略せるけどletterは略せないとか?
一文字でも縮めることにやっきになってたみたいだし

charは「きゃら」だけど、enumを「いなむ」って言っちゃう
enumerateは「あにゅむれい」なのに
2021/08/14(土) 21:43:24.21ID:g6ShE1m2M
アニメで良いよ
361デフォルトの名無しさん (ワッチョイ 42ad-Iu++)
垢版 |
2021/08/14(土) 22:34:56.70ID:Znm3fqvr0
性格,性質,気質,特質,特性,特色,人格,品性,高潔さ,正直さ
2021/08/14(土) 22:38:05.04ID:io8zq2Gb0
むこうの語感的にletterだとアルファベットだけで数字とか記号を含めないかもしれない
363デフォルトの名無しさん (ワッチョイ 4d85-/ojN)
垢版 |
2021/08/14(土) 23:51:39.71ID:lbIZmRLc0
>>358
letterだとletになりそうだから嫌ったんだろ
2021/08/15(日) 00:01:55.60ID:oR5NZ4bd0
いっそのこと単に byte とでもしておけばよかったのかもしれない。
2021/08/15(日) 00:05:31.44ID:U+FsjVqC0
>>362 が正解
>>363 は単なるバカ
2021/08/15(日) 00:25:17.76ID:ftNChFXo0
>>364
char8_t ですね

bool が int も無駄が多い
2021/08/15(日) 01:04:08.98ID:lrNh9u+Sa
歴史的に char と byte はどっちが先なのかな
2021/08/15(日) 04:44:19.93ID:Jy6PA5Os0
英語圏でもチャーだけどな
ググればすぐわかる
369デフォルトの名無しさん (アウアウウー Saa5-ZsKU)
垢版 |
2021/08/15(日) 06:15:17.61ID:FL52AdfHa
https://eow.alc.co.jp/search?q=char

焦がす。
370デフォルトの名無しさん (アウアウウー Saa5-ZsKU)
垢版 |
2021/08/15(日) 06:18:12.36ID:0d93Uofwa
char siu

チャーシュー
2021/08/15(日) 16:55:39.88ID:76TevYyAa
>>368
もうずいぶん昔だけど「キャラクター」とか「インテジャー」とか省略しないで呼んでたぞ
今は「チャー」なんか
2021/08/15(日) 17:59:18.88ID:oR5NZ4bd0
>>359
enumerate の頭の音はグーグル翻訳だとエに近い発音に聞こえるけど
weblio だと明瞭にイに聞こえる。
2021/08/15(日) 19:39:25.14ID:Jy6PA5Os0
>>371
英語設定でググってみるといいよ
チャー派とカー派がいてチャー派が優勢のように見える。
reddit見るとお前ガンダム見たことないんか?シャーーー!とかlisperが混乱するだろがってコメントがあってワロ
2021/08/15(日) 19:58:39.32ID:l+/QmNzh0
care派も結構いるっぽいが
375デフォルトの名無しさん (アウアウクー MMb1-9nCG)
垢版 |
2021/08/15(日) 21:05:49.36ID:g44nIVaSM
プログラムを書くのに読み方なんて意味が通じればどっちでもいいやん
2021/08/16(月) 00:02:13.11ID:r0BCUeQy0
初心者です、stdio.hの保存場所が知りたいです

Visual Studio Communuty 2018を使っており、標準ライブラリはインクルードディレクトリに指定された場所にあるということでした
プロパティでインクルードディレクトリを確認したところ、以下のようになっていましたが意味が分かりません
$(VC_IncludePath);$(WindowsSDK_IncludePath);

変数になっているようですが、どこかで確認できるのでしょうか?
377デフォルトの名無しさん (アウアウウー Saa5-PlbL)
垢版 |
2021/08/16(月) 00:13:21.48ID:x3HJsFala
間違っていたらごめんなさい

その $() で囲まれた文字列をコマンドプロンプトから
echo %文字列%
として表示される文字列はどうでしょう
2021/08/16(月) 00:14:50.67ID:wg/zbZxl0
その値のところをクリックして<編集...>を選べば評価された値が見えると思う
その画面の右下の「マクロ>>」ってボタンを押せば使われてる変数の値も見える
上の構成がDebugかReleaseかで値が違う変数もあるけどIncludePathはたぶん同じ

2019で確認したから微妙に違うかもしれない
2021/08/16(月) 00:19:13.32ID:x3HJsFala
echo で確認する方法は、その環境下でなければ
なので、別にコマンドプロンプトを起動してではダメですね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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