C言語なら俺に聞け 150

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (アウアウクー MM57-IE4z)
垢版 |
2019/02/06(水) 13:39:03.21ID:c4bnQMl3M

次スレを作る時は上記1行をコピーして2行に増やして必ず1行目に入るようにしてください。

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言語なら俺に聞け 149
https://mevius.5ch.net/test/read.cgi/tech/1540731704/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/02/25(月) 10:42:31.86ID:KHsK1sBo0
>>299
READアクセスでSR、WRITEアクセスでCRというケースは珍しくないが
なんで突然volatileが出てくるんだ? 全然関係ないぞ
2019/02/25(月) 11:12:53.53ID:/Zb+jKgT0
Read動作を確実に実行するためだろう
プログラム上はSFR変数からダミー変数への代入にしか見えないので何の演算にも関与しないと判断されて
コンパイル時の最適化で処理が削除される恐れがある
SFR変数はvolatile宣言しておくのが普通
2019/02/25(月) 11:41:24.89ID:KHsK1sBo0
それはREADの回数やタイミングの話だろ
READとWRITEで対象が異なる場合があることと何の関係があるんだよ
2019/02/25(月) 11:52:53.97ID:/Zb+jKgT0
そこに拘っていたのか
てっきりメモリとIOによる変数の扱いの注意点のことかと思っていたわ
2019/02/25(月) 11:58:40.63ID:QDSDQN71x
volatileなしだと、同じsfrにwriteした直後にreadすると最適化により実際にはreadされないことがある。
2019/02/25(月) 12:03:53.38ID:s/jxdMxMa
メモリとIOは違うっていっても、要は裏でなんかやってるだけだし。
だからvolatileなんて話も出てくる。
2019/02/25(月) 12:15:38.73ID:KHsK1sBo0
>>305
他に何に拘っていると言うんだ?

> 書き込みと読み出しが別のものに繋がっていることもある
 ↑
 何の関係があるんだ
 ↓
> volatileは本来このためにある

答えるか撤回かどうなんだ
2019/02/25(月) 12:41:00.22ID:QDSDQN71x
>>308
>>306
2019/02/25(月) 12:44:45.62ID:KHsK1sBo0
>>309
306は話のすり替えだ
READの回数やタイミングの話なんかしていない
READとWRITEの対象が違うということについてだ
volatileと何の関係があるのか
ただの言い間違えか
どっちだ?
2019/02/25(月) 12:48:10.76ID:QDSDQN71x
>>310
CRにwriteした直後に同じアドレスのSRをreadした時に最適化され、write値がそのままread値に使われるのをvolatileなしでどうやって回避するのん?
2019/02/25(月) 12:49:09.15ID:y5m/9TYHM
>>308
横からだけど>>305の2行目ぐらい読んでやれよ
それとも俺様に謝らないと許せないってか? w
2019/02/25(月) 12:53:40.05ID:/Zb+jKgT0
>>308
知らんがな、>>299本人に聞けよ
一般に言えることはメモリ上の変数の場合は読み込みと書き込みの間には必ず何らかの関連性を持っている
意味もなく読み込みや書き込みを行うことはなくその値は必ず何処かで利用される
利用されなければ変数もろとも普通は最適化で削除される
SFRの変数の場合はRead/Writeその操作の行為そのものが目的であってその結果その値がどうなろうが値そのものには何の意味もない
コンパイラにそのことを明示的に指示する方法がvolatileということ
2019/02/25(月) 12:57:22.86ID:P8ZqxZ/40
こうして見るとやはりC言語は組み込み屋専門ということか
話が難しすぎてついていけねえw
2019/02/25(月) 12:59:43.43ID:KHsK1sBo0
>>311
という説明ができるの、あんただけみたいだな
頓珍漢なレスばっかでイラついてたわ
2019/02/25(月) 13:15:23.23ID:QDSDQN71x
>>314
全然難しくはないし、組み込みに限った話じゃないよ。
ただ単に「今見えている処理とは別のとこからそのアドレスの値が更新される可能性があるので最適化しちゃダメよ」ってのを明示的に示すためのvolatileなので。
C#やJavaとかでもスレッドをまたいで不用意にアクセスする変数はvolatileつけないとバグるし。
2019/02/25(月) 13:16:39.48ID:X/kVtIsHa
組込専門、みたいなひとって抽象的な話のできないクソ多いよ。
コードもクソが多い。sleepせずにビジーウェイト使うタイプ。
2019/02/25(月) 13:17:16.26ID:/Zb+jKgT0
横レスだけどWrite属性のSFRの値(この場合CR)をReadしても値は不定だけどね
同一アドレスにマッピングされているRead属性のSFRの値(SR)の値が返ってきて変数に代入されているだけ
普通はWrite属性のSFRの状態を記憶する必要があればバッファ変数に内容を保存しておく
2019/02/25(月) 13:49:48.67ID:KHsK1sBo0
write属性なんて用語あったっけ
ゲートだけ出てるのはREでデコード
トーテムポールになってるのをWEでデコード
というのは属性か?
2019/02/25(月) 14:03:17.60ID:/Zb+jKgT0
Read/Write属性というのはあるよ
むしろその方が多い
ただ前レスに出てきたCR(コントロールレジスタ)とSR(ステータスレジスタ)は意図的にその名称通りにWriteまたはRead専用属性の例として
提示してきたんだろ、多分
2019/02/25(月) 14:20:45.00ID:KHsK1sBo0
いやーないだろ
ゲートが出てるだけのユニットにWRITEサイクルを実行なんてしねえし
2019/02/25(月) 14:31:07.16ID:/Zb+jKgT0
すまん
書き込みの意図がいまいちよく分からんのだけど出力形式の切り替えの話か?
オープンコレクタ出力とトーテムポール出力の切り替えか?
というかこの文脈でデコードの意味が分からん、何のこと?
2019/02/25(月) 14:45:57.95ID:P9mrobVPa
キモい奴だなおい
2019/02/25(月) 14:54:09.36ID:ruBOF67JM
誰かわかる奴いるのか?
俺も>>319は意味わからん
2019/02/25(月) 15:17:20.76ID:80dSpUWIM
何となくだけど入出力兼用ポートの設定か?
2019/02/25(月) 17:25:52.43ID:8PqGNbvAd
volatileの話が本筋と関係ないなら適当に流して先に進めばよかったんだよ。
それなのに噛みついて話を爆発させてしまったところにコミュニケーション能力の欠如を感じる。
2019/02/25(月) 17:28:47.58ID:t1ehA5N1M
このスレはC言語という話題を通じてマウント取り合うスレなので、今日も平和に通常運転。
2019/02/25(月) 18:07:46.57ID:Gp/kzS5R0
ゲートが出てるのがオープンコレクタとかもう
そのうち電圧が流れるとか言い出しそうな勢いだな
2019/02/25(月) 18:39:15.96ID:HIs9VhePM
volatileまではまだ分かる
ゲートやトーテムポールやデコードの単語の羅列は意味不明
2019/02/25(月) 19:02:12.96ID:y5m/9TYHM
>>320
> Read/Write属性というのはあるよ
いやいや、 Read onlyとかWrite onlyって言うのはわかるけどRead/Write属性なんて言う用語を使うか?
って話な

>>324
なんとなくデコードって言うのはアドレスデコードした信号(要するにChip select)にRE(多分Read enable)とかWE(Write enable)をandする話だと思う
ゲートとトーテムポールはよくわからん
2019/02/25(月) 20:16:10.80ID:UvFSeIeRM
>>330
そういうことか
マイコン内蔵デバイスの話ではなくてガチのハードウェア回路設計のアドレスデコードとコントロール信号の話か
唐突過ぎて訳が分からなかった
2019/02/25(月) 20:28:08.49ID:QIf4DqH5M
ReadやWriteではなくて入力信号と出力信号だな
2019/02/25(月) 20:33:09.01ID:8ylBAHsD0
内部or外部CPUバスのことを言ってるにしても、Write onlyがないってとこに繋がらない。
やっぱ解読不可だわ。
2019/02/25(月) 20:33:17.49ID:MFA8pp4Y0
そういえばread-modify-writeっのを思い出したな
もう10年以上前の事だが
2019/02/25(月) 20:50:44.04ID:QIf4DqH5M
懐かしい話題だな
わざわざラッチ回路を設けて問題回避したりしていたな
2019/02/26(火) 06:45:38.56ID:H5mf7PMC0
>>330
ちょっと亀レス気味だけど、確かに属性というのは一般的ではなかったかな
当時使っていたCコンパイラでは同一アドレスにマッピングされたRead OnlyとWrite OnlyのSFR変数は
共用体unionで宣言するのだけど、それぞれが読み込み/書き込み専用の変数名であることを明示するために
プリプロセッサの#pragmaでいわゆる属性(R, W, R/W)を宣言することが出来た
Read属性変数に代入操作を行なったりするとコンパイル時に警告されるような仕組みになってた
2019/02/26(火) 07:46:54.76ID:25yR6Zgwx
write属性レジスタってのは確かに一般的ではないけど、かといって用語としてwrite専用レジスタじゃないといけないって明確なルールもないだろうし、仕様書書いてるわけじゃないので別に雰囲気で伝わるから気にしなくていいんじゃない?
2019/02/26(火) 08:50:06.80ID:Dl2cSn2NM
一般的な用語じゃないとそこにどんな機能が含まれてるかわからんからな
>>336見りゃわかると思うがそもそもレジスタの機能ですらなかったわけだし
2019/02/26(火) 09:19:26.09ID:8U12byKKM
議論の流れで大体わかるけどな
さすがにプログラム言語やマイコンの話の中でいきなり回路設計の話が出てきた時は
しばらく話について行けなかったが
2019/02/26(火) 12:28:24.64ID:Dl2cSn2NM
>>339
お前はわかるのかも知れんが>>319みたいにちゃんと確認しようとする奴もいる
そもそも一般的で無い用語を使う理由もないだろ
2019/02/26(火) 12:41:52.52ID:25yR6Zgwx
これぐらいのことが話の流れで推測できないなんて、生き辛そう。
お大事に。
2019/02/26(火) 12:49:02.64ID:7/JIXwXVM
>>317で指摘されているけど抽象的な話のできない人というのは確かにいるからな
2019/02/26(火) 13:31:09.42ID:H5mf7PMC0
確かに昔からハードウェア弄ってきた純粋の組込み専門屋にとって、周辺デバイスの制御レジスタをSFR変数として抽象化して捉えることが出来ないとは思ってもなかった
一般的ではなくても属性で話は通じると思ってたんだけどなあ
というか本当にC言語で開発してるのだろうか?
344デフォルトの名無しさん (ワッチョイ a95f-qM0Q)
垢版 |
2019/02/26(火) 13:45:18.64ID:hfhf4rvY0
「出来ないとは思ってもなかった」

否定の否定表現でわかりにくい。
2019/02/26(火) 14:19:05.67ID:QncW9pKQH
SFRって特定アーキテクチャの特殊用語じゃん。何勝手に一般化してるん。
2019/02/26(火) 14:38:19.53ID:WUqkAqLeM
ワンチップマイコン使ったことが無いのなら口を挟まないほうがいいよ
どこの製品でもSFRで話は通じる
2019/02/26(火) 14:46:05.57ID:qT2RVqJL0
分かったからワンチップマイコンは別の所でやれ
2019/02/26(火) 14:55:37.46ID:4VLeDBYTd
もしかして組み込み以外の話は
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
で聞いた方がいいのか?
2019/02/26(火) 15:07:48.55ID:qT2RVqJL0
C言語の一般的な話題を扱うスレなんだから
特定の人間を排除するような発言をするのはおかしいだろう
そういう特定の話題をしたいならスレを立ててすればいい
ワンチップマイコンは専用スレ立ててそこでやれと言う話
2019/02/26(火) 15:14:00.56ID:XovqVjcQM
今や純粋なC言語の所理系は初心者の学習用途か組込み開発用途くらいでしか使われていない
スレに組込み開発経験者が集まるのは自然な流れ
2019/02/26(火) 15:18:02.00ID:XovqVjcQM
どちらかといえばC言語学習者は高圧的で排他的な気はする
2019/02/26(火) 15:29:48.44ID:qT2RVqJL0
集まるのは良いが、「黙ってろ」はないな
2019/02/26(火) 15:45:14.31ID:vHMOYNHiM
妥当な発言なら問題ないんだけどね
挑発的な発言が目に余るので煽り発言は控えたほうがいいと言ってるだけ
2019/02/26(火) 15:46:01.71ID:qT2RVqJL0
そういう発言自体が荒らしになるとは思わないのか
2019/02/26(火) 15:48:03.09ID:qT2RVqJL0
そもそもワンチップマイコンの知識は
C言語の話題をやり取りする上で必須ではないだろう
そういう話題を話したいなら専用スレを立てろと言っている
2019/02/26(火) 15:48:26.91ID:vHMOYNHiM
人にとやかく言う前に自分の発言見直して見れば?
2019/02/26(火) 16:10:12.93ID:lxe9rt7zM
相変わらずみんな仲いいな。
今日も平和に通常運転。
358デフォルトの名無しさん (アウアウウー Sa21-rusg)
垢版 |
2019/02/26(火) 17:43:39.42ID:k06atLuFa
みんな愛し合っているのさ
2019/02/26(火) 18:00:07.68ID:4VLeDBYTd
現実から目をそらすな。明らかに仲悪そうだぞ。
2019/02/26(火) 18:03:23.92ID:UtNGjYRh0
大嫌い 大嫌い 大嫌い 大好き☆
361デフォルトの名無しさん (アウアウウー Sa21-0aQJ)
垢版 |
2019/02/26(火) 18:35:04.99ID:c2o2e7e/a
>>359
つんでれ
362デフォルトの名無しさん (ワッチョイ a95f-qM0Q)
垢版 |
2019/02/26(火) 19:43:38.47ID:hfhf4rvY0
>>346
それ単にプログラム内のルールにすぎない。どんな言語であれ、入れ物を使い分けを限定することで、プログラマのミス防止や可読性、保守性が高まるのは、まともなプログラマなら必ずやっている。

これがハードウェアの機能にあるのか、ソフトウェアの機能にあるのか、それともそんな機能はないのでコーディングルールなのかの違いにすぎない。
363デフォルトの名無しさん (ワッチョイ a95f-qM0Q)
垢版 |
2019/02/26(火) 19:52:11.95ID:hfhf4rvY0
>>346
それ単にプログラム内のルールにすぎない。どんな言語であれ、入れ物を使い分けを限定することで、プログラマのミス防止や可読性、保守性が高まるのは、まともなプログラマなら理解している。

これがハードウェアの機能なのか、ソフトウェアの機能なのか、それともそんな機能はないのでコーディングルールなのかの違いにすぎず、現代では常識的な話。

コンピュータにとっては動けばいいわけで、設計の話とアーキテクチャの話をごちゃ混ぜするからよくない。

高水準言語であればあたりまえすぎることだが、C言語は中水準言語で、OS、ハードウェアの組み合わせにより、動きが異なるから、本来は仕様、設計があって考えること。

これがアーキテクチャがこうだから、こういう発想になるというのは順番が逆。
2019/02/26(火) 19:57:57.62ID:Dl2cSn2NM
普通に一般化してる用語で話せばいいのになぜかオレオレ用語使って指摘されたらわからないのかとか逆ギレw
なんとなくはわかってもそのローカル用語が意図してるものと自分が思ってるものが同じかどうかはわからんから指摘してるのに…
まともなエンジニアじゃないんだろうな
365デフォルトの名無しさん (アウアウウー Sa21-0aQJ)
垢版 |
2019/02/26(火) 20:20:38.82ID:c2o2e7e/a
長文が溢れるスレ
2019/02/26(火) 20:45:40.56ID:rW40iFORM
知識や能力の不足に対する自己防衛反応みたいなものだから流し読みしてればいい
2019/02/26(火) 21:45:18.69ID:7TQlJfaY0
>>366
>>353, >>356
2019/02/27(水) 12:00:03.35ID:wHsSBDML0
具体例なしで一般論しか言わないやつは信用できない
特徴は具体的な質問されると話をそらすか黙り込むやつ
369デフォルトの名無しさん (アウアウウー Sa21-0aQJ)
垢版 |
2019/02/27(水) 12:55:17.62ID:1o6M4rIDa
そんな一般論だけ書かれても・・・
2019/02/27(水) 17:52:20.13ID:n00Gq01P0
>>346
あ? ベアメタル系のプロだが
おまえみたいな手合いがSFRとかどういう意味で言ってるのかは警戒するぞ
2019/02/27(水) 18:37:51.02ID:OX9NrkAd0
ベアメタル系のプロの意味がよく分からないけどC言語と何か関係あるの?
372デフォルトの名無しさん (アウアウウー Sa21-0aQJ)
垢版 |
2019/02/27(水) 21:26:14.35ID:1o6M4rIDa
Bare ボーン
まゆげボーン
2019/02/27(水) 22:06:45.86ID:n00Gq01P0
貴様が知る必要はない
2019/02/27(水) 23:34:44.12ID:OqYQPgaeM
大体何と勘違いしたのか予測はつくがおそらく間違ってるぞ
少なくともx86系では通用しない
2019/02/28(木) 08:01:20.41ID:7nNuTdUM0
だから具体例を書けよ
2019/03/01(金) 15:17:20.50ID:ixp8onlm0
すみません、初心者なんですが図書館にプログラミング言語Cという本があったので借りてきて勉強中です。
p105のコード
nはint

if(n / 10)
printd(n / 10)

なんで割り算自体を条件に出来るのですか。
2019/03/01(金) 15:19:35.58ID:24bVz3/E0
出来るかどうかは自分で試した方がいい
その上で、なんでそうなるかを考え、
分からないときに聞きにおいで
2019/03/01(金) 15:20:45.58ID:7MuZNvWwd
>>376
わり算の結果(この場合は整数)がゼロじゃなかったら論理値の真(true)と見なされる。
379デフォルトの名無しさん (アウアウウー Sa9b-RuLt)
垢版 |
2019/03/01(金) 15:23:30.96ID:ber2ILYja
>>376
C言語のifは0か0以外かしか見ていないため。
2019/03/01(金) 15:38:09.31ID:ixp8onlm0
>>378 >>378
ありがとうございます、==とか>とかでの比較しか頭になかったんですけど、ifは0かどうかだけなんですね。
2019/03/01(金) 15:53:16.08ID:nQNJhNQvd
他の言語でいえば
1:true
0:false
って感じですな
2019/03/01(金) 15:54:07.94ID:nQNJhNQvd
>>381
この表現は語弊があるので忘れてください、すみません
2019/03/01(金) 16:01:43.78ID:yZJ4Zkhu0
>>376
こういうように条件文に、実質的なbool 値以外を書いたら、ダメ!

MISRA-C みたいな、安全なコーディング規則があって、禁止事項になってるから、
普通のプログラマーは、変に思うはず
2019/03/01(金) 16:53:12.47ID:omZ6F1i00
他の言語ならともかくC言語プログラマ的には普通だな
2019/03/01(金) 16:59:37.54ID:wVb5PmwP0
説教くせえことを書くならてめーの言葉遣いくらい気をつけろ
boolじゃねえだろ_Boolだ
MISRA-Cが安全だなんて決まりはどこにもねえぞ
コーディング基準はそれを守りさえすれば安全だなんて信じているようだが自分の頭で考えることを放棄した手合いか?
少なくともそういうカスはPGとして普通未満だぜ
386デフォルトの名無しさん (アウアウウー Sa9b-RuLt)
垢版 |
2019/03/01(金) 17:32:32.07ID:ber2ILYja
>>380
そう。比較する演算子を使うとその結果が0または1になるので他の言語でのifと同じようにも使える。
2019/03/01(金) 17:49:40.28ID:lMpRUADOa
boolも予約語だと思うよ。ただの別名だけど。
2019/03/01(金) 18:05:13.76ID:wVb5PmwP0
ISO/IEC 9899:2011 7.18 Boolean type and values <stdbool.h> には
マクロと書いてあるが、どこかに予約語と書いてあるのか?
ISO/IEC 9899:2011 6.4.1 Keywords にはねえぞ
2019/03/01(金) 18:07:32.60ID:OVLCgqzva
まあboolでもいいってことだな
2019/03/01(金) 18:17:05.43ID:wVb5PmwP0
話そらすな
boolは予約語か違うのか
2019/03/01(金) 18:24:56.22ID:nQNJhNQvd
>MISRA-Cが安全だなんて決まりはどこにもねえぞ
>コーディング基準はそれを守りさえすれば安全だなんて信じているようだが自分の頭で考えることを放棄した手合いか?
>少なくともそういうカスはPGとして普通未満だぜ

この3行が主張なわけでboolについて話してる時点で話それてないか?w
2019/03/01(金) 18:25:12.46ID:yZJ4Zkhu0
漏れが言ってるのは「実質的なbool 値」
特定の物を指していない、一般的な言語での概念

条件文に、実質的なbool 値以外を書いたら、ダメ!
品質基準から減点される

トヨタでも、100点満点中、5点しか取れなかったとか、言ってる人いる

MISRA-C 無しのC 言語は使ってはならないと、決まっている!
393デフォルトの名無しさん (アウアウウー Sa9b-RuLt)
垢版 |
2019/03/01(金) 18:32:42.09ID:ber2ILYja
昔々、int bool = 0; と書いてあって普通に変数として bool が使われている夫馬ログラムを見た事がある。
2019/03/01(金) 18:33:26.36ID:5vu7ZTEs0
昔はintの別名でマクロ定義してたな
今は予約語だったのか
395デフォルトの名無しさん (アウアウウー Sa9b-RuLt)
垢版 |
2019/03/01(金) 18:33:54.49ID:ber2ILYja
夫馬ってなんやねんw
スマホでの打ち間違いは候補間違いもあるからより変な風になるなあ。
2019/03/01(金) 18:37:31.49ID:V2sWjbOV0
boolが予約語というのは聞いたことない。
<stdint.h>で使えるのは知ってるけど。
2019/03/01(金) 18:37:42.66ID:wVb5PmwP0
>>392
決まってねえよ
嘘書くんじゃねえ
2019/03/01(金) 18:38:42.45ID:wVb5PmwP0
>>391
ほう論点が2つあるのをおまえの脳内では話がそれたと言うのか
2019/03/01(金) 18:40:37.97ID:V2sWjbOV0
https://www.wdic.org/w/TECH/_Bool
2019/03/01(金) 18:41:18.61ID:nQNJhNQvd
>>398
いやすまん、boolについては論点にしてないと勘違いしていた。
2019/03/01(金) 18:42:35.19ID:V2sWjbOV0
<stdbool.h>の間違いだった。すまぬ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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