C言語なら俺に聞け 155

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 76ba-P5bm)
垢版 |
2020/05/10(日) 23:20:27.99ID:Z3WQBr9X0
!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言語なら俺に聞け 154
https://mevius.5ch.net/test/read.cgi/tech/1578997950/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/07/23(木) 13:55:19.10ID:TTqTgaIL0
>>622
ほんとだw
data1 か data2 かは置いといてもどっちも i を添字とするループか。
マトリクス状に組み合わせてるんだと錯覚してたすまん
2020/07/23(木) 14:11:44.83ID:TTqTgaIL0
>>623
値が volatile なことと操作が atomic なことは別の話だよ。
自分が書き換えない同じ領域を複数参照するとき、それを他の誰も書き換えないならその参照は一度目の値と同じになる前提で最適化できるけど、他の誰かがいつの間にか書き換えることがあるならそういう最適化はできなくなる。
そういう領域であることを明示するのが volatile。
atomic は同じ領域を誰かが書き換える前提なので基本的にその領域は volatile だけど、それに加えて値を参照して手を加えて書き戻すなどの一連の手続きの途中で他の誰かにいじられないことを保証すること。
それを CPUレベルの命令で行うかソフトウェア的なロックで行うかで色分けされてるだけ。
2020/07/23(木) 14:28:36.26ID:V2V2cZYad
>>627
CPUは何?
2020/07/23(木) 14:33:33.27ID:V2V2cZYad
メモリアクセスの影響がないなら

iとjのループを入れ換える
ループアンロール
rを偶数奇数で分ける
SIMD

などが有効
2020/07/23(木) 14:36:26.08ID:V2V2cZYad
>>627
同じメモリに100回アクセスしてるんだから
メモリサイズが小さければキャッシュが効くはず
633デフォルトの名無しさん (ワッチョイ 1394-keh3)
垢版 |
2020/07/23(木) 14:42:55.39ID:tYvDqilk0
>>632
確かにそうだ。
でも1000 * 100も試してみたが2msで線形だった。
2020/07/23(木) 14:44:16.58ID:V2V2cZYad
CPUは何?
2020/07/23(木) 16:21:21.26ID:WGvvEAFm0
>>629
別スレッドからの値の書き換えについて話をしていたよね?
だったらvolatileは何も保証してくれないよ
2020/07/23(木) 16:39:16.32ID:TTqTgaIL0
>>635
保証ってなんの話?
2020/07/23(木) 20:41:12.28ID:j3eQi4Nn0
>>629
分かってると思うけど誤解なきよう勝手に補足するけどvolatileの最適化抑制はreadだけではなくてwriteに対してもな。
ドライバ書いてる人には常識レベルだけど。
638デフォルトの名無しさん (ワッチョイ 13ad-5TCi)
垢版 |
2020/07/24(金) 03:10:38.82ID:6ZonvnML0
volatile ってスレッドに限らず値が知らない内に変化する可能性のある何かの入力でも使うよね。
例えばマイクから拾った音を A/D 変換した値がメモリマップドI/Oで特定のアドレスのメモリ読む方法で読める場合。
CPUが予想不能な形で値がコロコロ変わるので volatile にせざるを得ない。(volatile って揮発性とか不安定って意味だし、言葉の意味そのままだ)。
これは読む側だけど書いて何かを出力する場合も、書いた値を読めないような作りになっている場合もある。
1を書いたのに直後に読むと0だったりなんていう事はあり得る。要するに一々覚えていない。または覚えていても読み出しに対応していない。
そんなハードウェアが接続されていたらそうなる。
2020/07/24(金) 04:44:18.69ID:So4dssPK0
そりゃ、外部装置と連動しているから、値がいつ変わるか分からない

外部装置が読み書きしたら、合図として、0.1ms 後に、値を反転させたりとか、
色んな事をするから、予測できない
2020/07/24(金) 09:33:19.23ID:ASBY7bf4M
volatileは変数(I/Oアドレス)に対するアクセス行為は保障するけど値そのものに対しては何の意味もない
そもそも外部要因で変化する値に対して干渉するのは不可能
2020/07/24(金) 10:20:02.92ID:4h264/iA0
どこから干渉するとか出てきたんだ…
知ってる知識を開陳したくてしょうがないんだろうなw
2020/07/24(金) 15:22:34.69ID:jNVRIcub0
volatileな変数を読むのは怖いよね
ワード単位ならいいけど、構造体読むときはチェックサム欲しくなるよね
2020/07/24(金) 18:25:04.01ID:ogZVfXfN0
別に怖くはないだろ。
他所と排他するなりしかるべきタイミングでアクセスすればいいだけなんだから。
排他や同期が必要な領域にそれをせずにアクセスするならただのアホってだけで、volatile がどうとかいう話じゃない。
2020/07/24(金) 20:10:16.16ID:Cmq7VG8v0
LL/SC命令が結構使える
2020/07/25(土) 04:21:09.10ID:qNFJliza0
>>642
それはatomicとかクリティカルセクションの話であって
volatileで何とかしようという発想がそもそも間違いだ
2020/07/26(日) 03:07:46.88ID:4oXiyEBn0
「書きこんだものの読み込んでないからコードから消しちまえ」
「読み込んでるけど、代入以降値がかわる気配がないから、読み込みを止めて固定値にしちまえ」
これを抑制するだけ
書き込や読み込みを記述通り生き残らせる
2020/07/26(日) 08:34:28.91ID:M65fvK3w0
W=>R : R省略
R1=>R2 : R2省略
W1=>W2 : W1省略
2020/07/26(日) 10:41:35.23ID:3q3cv3BJ0
volatile覚えて嬉しいのはわかるけど…
2020/07/26(日) 11:55:59.05ID:7t5aGHPkd
volatileの意味を知らない人 vs volatileを覚えたての人
2020/07/26(日) 12:24:46.27ID:oYG2ZyVyM
vs 30年前の常識で語る人
2020/07/26(日) 13:35:18.59ID:6eSsd+mZ0
ANSIは邪道。
652デフォルトの名無しさん (ワッチョイ 13ad-5TCi)
垢版 |
2020/07/26(日) 18:14:24.05ID:hRZi6+cn0
あんししー
2020/07/26(日) 20:08:24.24ID:VBmKLhih0
アンジー、なんてこと言うの
シー
2020/07/27(月) 02:57:00.46ID:BRKetx390
30年くらい前までドヤる人が好んで口にしてたけどね
そういう人はC89ができたらピタリとやめた

今まだ言ってる珍獣って何なん?
2020/07/27(月) 08:26:00.92ID:IvOd7acF0
姫宮アンシー
2020/07/27(月) 16:25:16.57ID:BRKetx390
C89以前のK&R Cは個人的には好きなので
gcc -traditional復活して欲しい
2020/07/27(月) 16:41:53.18ID:euzbjA/F0
関数定義で引数が()の外に書かれる記述みると、
今は違和感が湧いてしまう
2020/07/27(月) 16:45:47.58ID:IvOd7acF0
書き方が違うだけなら古いスタイルでもいいんだけど、型チェックが緩いんだよな。
2020/07/27(月) 17:14:06.93ID:BRKetx390
アセンブラ屋出身の俺っちにはどうでもいいことだ
2020/07/27(月) 17:35:58.30ID:IvOd7acF0
引数の数を間違えているのに黙って通してしまう例。

https://wandbox.org/permlink/FEu474UVSsilTq0L

最適化オプションを付けたらフロー解析も強まるのか警告してくれたけど。
661デフォルトの名無しさん (ワッチョイ 13ad-5TCi)
垢版 |
2020/07/27(月) 18:50:57.45ID:8GZ2GqSj0
その他の例
https://wandbox.org/permlink/gz8u1YkarV3RuM1M
2020/07/27(月) 23:59:05.30ID:UIY75t8S0
スタックが壊れないならまあいいんじゃね?
2020/07/28(火) 03:43:48.32ID:JnUAmZD/0
あのなあ、おまえら。。。。
K&R Cに対する批判なんて今さらドヤるか?
規格Cを憶えるときにプロトタイプは何のためか
説明受けてないやつがここにいるとでも思うのか?
664デフォルトの名無しさん (アウアウウー Sa5d-d0Nl)
垢版 |
2020/07/28(火) 13:28:44.28ID:DVrEteyfa
(キリッ
2020/07/28(火) 19:40:24.44ID:1JEs8/dl0
"#C-PLA" という店名をどう思いますか。
2020/07/28(火) 19:48:32.54ID:cWad1kwo0
>>663
やっぱり C99 or later を叩くのがかっこいいですよね
2020/07/28(火) 20:02:16.84ID:geCJz7H80
>>665
オブジェクトをカプセル化・・・?
668デフォルトの名無しさん (ワッチョイ fa94-UdrD)
垢版 |
2020/07/29(水) 17:10:37.12ID:tqWMyndD0
浮動小数の演算で生じる誤差は常に絶対値が小さくなるように行われる、
という前提は正しい?
669デフォルトの名無しさん (ワッチョイ fa94-UdrD)
垢版 |
2020/07/29(水) 17:11:14.42ID:tqWMyndD0
C限定の話じゃないからスレ違いか
670デフォルトの名無しさん (ワイーワ2 FF62-lIev)
垢版 |
2020/07/29(水) 17:12:49.06ID:hY/5h1XOF
日本語として可笑しいのでgoto語学板へ
2020/07/29(水) 17:14:56.87ID://053udPa
>>668
正しい気がする
2020/07/29(水) 17:18:22.13ID://053udPa
>>668
ごめん嘘ついた。
2020/07/29(水) 17:21:06.57ID:8sSsdFab0
>>668
ライブラリやFPUの実装の話だね

例えばだけどIEEE754の定義では
仮数部は1.xxxxxxと、整数部が常に1なので
整数部を省き、その分の1bitを小数部に回す「ケチ表現」で
誤差がなるべく小さくなるように工夫している
2020/07/29(水) 17:25:55.07ID:Bu6uxHFv0
>>668
浮動小数点制御ワードの設定によっては丸め方向が変わるから、必ずしもそうだとは言えないかも。環境によるのかもしれないけど、詳しくは知らない。
_controlfp_sとかでググってみて。
675デフォルトの名無しさん (ワッチョイ fa94-UdrD)
垢版 |
2020/07/29(水) 17:28:44.72ID:tqWMyndD0
doubleを分解(0.1や0.3とかでかけて複数のdouble値にする)して足し合わせて比較、
という処理を無限回繰り返して元の絶対値を超えていたら停止、
みたいなテストコードを書いてみたけど、低確率で元の絶対値を超える。
この誤差が分解と足すときどちらで生じているか分からないが
なんにせよ浮動小数点数演算の誤差で絶対値が増加する場合があるようだ。
2020/07/29(水) 17:45:17.74ID:8sSsdFab0
あ、誤差の絶対値ではなく、結果の絶対値ということ?
俺の勘違いだったら悪いんだけど、それじゃ意味なくね?
結果が正数ならともかく負数の場合デメリットだけやん
2020/07/29(水) 18:11:52.28ID:+Q7sP3F+d
丸めモードによって変わるだろうに
絶対値が小さくなるのはround toward zeroにしたときだな
2020/07/30(木) 05:23:55.72ID:82YOHtIh0
Cのソースコードを解析するツールで有名なものって何かありますでしょうか?
679デフォルトの名無しさん (ワッチョイ ce8c-LW7E)
垢版 |
2020/07/30(木) 06:42:57.43ID:ixil7w/z0
上司がこっそり使っていた cflow
2020/07/30(木) 07:04:40.85ID:SsIpxIlu0
>>668
加減乗算のほとんどの実装ではそう
681デフォルトの名無しさん (ワッチョイ 0101-iVY1)
垢版 |
2020/08/10(月) 04:07:37.60ID:SKFyjjt90
デファクトスタンダードなCのコーディング作法を手っ取り早く
身につけるために何をすべきですか?
682デフォルトの名無しさん (ワッチョイ 0101-Ea0s)
垢版 |
2020/08/10(月) 04:47:16.15ID:o5h87VM/0
所属がわからないと何とも言えませんね。
社名と部署お願いします。
2020/08/10(月) 04:53:08.55ID:P+mDn/zj0
車載の組み込み系以外は
それぞれの会社にコーディング規約あるんじゃない?
知らんけど
684デフォルトの名無しさん (ワッチョイ 1b8c-oftG)
垢版 |
2020/08/10(月) 06:50:01.64ID:ruBmk/3z0
お手本のプログラムを上司に見せてもらい完コピする。
2020/08/10(月) 06:53:36.45ID:k2ud7k4K0
>>681
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006

この研究会は、トヨタなど大企業から、数十人のベテが集まって、
欧州人に聞きながら、作った本

未だに、コーディングルールのバイブルだろ

元々は、Andrew Koenig の本

C Traps and Pitfalls, 1988, c1989
Cプログラミングの落とし穴
2020/08/10(月) 07:14:44.55ID:JYoLJZbsH
>>685
>数十人のベテ
司法試験板をみると「ベテ」というのは30代以降の複数回受験者のことらしいですよ
文脈によっては veteran は階級を問わず退役軍人を意味することもありますし‥‥「わしが現役の頃には」を壊れたレコード盤のように繰り返すイメージとか
ベテランという言葉に必ずしもプラスイメージが伴っているとは限らないことはしっておいたほうがいいんじゃないですか?
2020/08/10(月) 07:23:02.78ID:tfnxCl0S0
能書きはいいから内容を見ろや

あれを見てくだらねえと思うことが何もないやつは
自分がなさすぎだ
688デフォルトの名無しさん (ワッチョイ 0101-iVY1)
垢版 |
2020/08/10(月) 09:47:53.28ID:SKFyjjt90
>>682-684
なるほど,やっぱり利用場面とか会社の文化などで
全然違ってくるんでしょうかね

>>685
ありがとうございます.見てみます.
689デフォルトの名無しさん (エムゾネ FF33-SiUo)
垢版 |
2020/08/10(月) 11:57:46.08ID:wInlBSoOF
何も知らないなら手あたり次第写経してみ
それで何でこんな描きかたになってんの?
ってここで質問繰り返せば良い
みんな暇だから答えてくれるはず
690デフォルトの名無しさん (ワッチョイ 895f-Ea0s)
垢版 |
2020/08/10(月) 14:56:52.81ID:xpVmb7Uo0
printfってどれだけメモリ使うんですか?
2020/08/10(月) 15:00:54.55ID:tfnxCl0S0
実装による
以上
2020/08/10(月) 15:02:14.80ID:7NjJFrXk0
printf()の戻り値は本当に捨てて良いんですか?
とか
2020/08/10(月) 15:36:42.46ID:tfnxCl0S0
返却値の意味くらい知ってる?
2020/08/10(月) 15:44:16.59ID:cUENozhv0
だいたいの戻り値は無視してよいよ
2020/08/10(月) 15:50:24.83ID:tfnxCl0S0
アホ
2020/08/10(月) 16:38:24.39ID:BXZAjCBt0
>>692
捨てては駄目だな。答えが表示できなくなる。

#include <stdio.h>
int main()
{
 printf("%d\n",printf("1+2+3="));
 return 0;
}
2020/08/10(月) 18:19:20.30ID:tfnxCl0S0
返却値を捨てて良いか否かを他人に聞いて
そこに固執する教条主義者か
いかにもMISRA大好きそうだな
2020/08/10(月) 21:28:34.35ID:CQsKBDF30
MISRA〜ヤ MISRA〜
2020/08/10(月) 21:32:33.10ID:JYoLJZbsH
MISRA も、MISRA 対応性的解析ツールを公開してくれていてもよさそうなものですが‥‥ただで
2020/08/10(月) 22:13:11.57ID:DZgybkpe0
性的解析...
2020/08/11(火) 01:09:34.46ID:EJAYjJkN0
MISRA だって MISRA を採用する場合に何がなんでも全ての項目に準拠しなければならないというわけではない。
(逸脱する場合には文書化しておくことを推奨してはいるが。)

ただ、気を付けなければならない箇所がまとめられているというのも間違いないので、
目を通すくらいのことはしたらいいんじゃないの。
俺は読んだことないけど。
2020/08/11(火) 07:47:01.13ID:SWJYIPbx0
規格、仕様の奴隷
2020/08/11(火) 07:50:09.41ID:RSsrE9PW0
俺は規格や仕様に縛られないで自由にプログラミングするのさ
翼が生えた蛙みたいにケロケロいいながら大空を羽ばたくのさ
2020/08/11(火) 08:12:17.68ID:cZN35xi70
いや規格は守らなきゃ
工業人の法律みたいなもんだから

MISRAの話がどう化けると仕様になるのかは意味不明
2020/08/11(火) 09:12:05.23ID:02tHA6AW0
>>704
規格が法律に例えられるように、MISRAは憲法になぞらえることができる
2020/08/11(火) 09:29:25.90ID:nKBbqh2w0
>>705
なんでMISRAの方が規格より上位なんだよw
せいぜい一地方都市の条例程度のものだろう
707デフォルトの名無しさん (ワッチョイ 13a5-w77N)
垢版 |
2020/08/11(火) 11:41:57.49ID:l01whKN50
でもやっぱりどれくらいMISRAに準拠してるかチェックするツールが全く出てないのは不自然
もしかしてMISRAって目視チェックを前提にした規格なのか?
それとも企業で門外不出のツールになってんのか?
2020/08/11(火) 11:44:29.40ID:cZN35xi70
【手を挙げて】横断歩道を渡りましょう
 ↑
この程度だよ

憲法だの条例だのと違い司法機関は相手にしない
2020/08/11(火) 11:46:02.07ID:XFONBlSQM
小池百合子が掲げるフリップみたいなもんだろ
今年の夏は特別な夏です、破廉恥なコードは自粛しましょう
2020/08/11(火) 12:17:39.96ID:gJF+/AhQ0
「警報!侵蝕されてます!パターン青です!コードを切り離せません!」

夏はこれ
2020/08/11(火) 12:28:40.57ID:RcrtMjNU0
>>707
全くて、市販の静的解析ツールならいくつかあるじゃん。
2020/08/11(火) 13:59:44.70ID:QMJ1Ew+q0
おまえらミスラの話と見せかけて髻(みずら)の話につなげようとしてんだろ
どうせここで髪の話して俺の悪口言う魂胆なんだろ
おまえら最悪だな
2020/08/11(火) 14:47:19.21ID:nKBbqh2w0
>>712
髻なんて糞、そんな下らないものを気にする奴は馬鹿、という流れでお前さんへのエールのはずだったんだ
714デフォルトの名無しさん (アウアウウー Sa55-1t4k)
垢版 |
2020/08/11(火) 18:54:59.41ID:j5xuOst8a
きみはこう言いたいのでしょう
ヅラはどこだ!
2020/08/11(火) 19:18:03.85ID:IiIy4i0JH
>>711
MISRA の対応するコメントを付けてくれる性的解析ツールは、無料で提供されるべきでしょう、業界標準を目指すのなら
2020/08/11(火) 20:25:37.46ID:RcrtMjNU0
>>715
規格書の類すらみんな有償なのに夢見すぎ。
そもそもMISRAって金も出せないアマチュアに使ってもらうようなものでもないしね。
2020/08/11(火) 20:31:23.80ID:IiIy4i0JH
>>716
でも MISRA の対象者レベル設定ってアマチュアレベルでしょう?
2020/08/11(火) 21:02:15.95ID:RcrtMjNU0
金取るかどうかの話をしているのにレベルの話を持ち出したのは意図的に話をそらしたわけ?
それとも日本語をちゃんと理解できない?
2020/08/11(火) 21:19:03.39ID:IiIy4i0JH
>>718
無論、前者ですね、というかモノの値段はその価値と深い相関があるのが普通でありマトモだとも思いますから、
支払う価値の話に対して対象レベルの話を持ち出すことは、あながち間違っているとはいえないでしょう?
2020/08/11(火) 21:46:45.35ID:RcrtMjNU0
言ってることがむちゃくちゃすぎw
やっぱり日本語もダメだろ
2020/08/11(火) 23:30:38.44ID:X5c8vKvD0
VSCode の拡張機能で、misra で検索すると、これが見つかる

Parasoft C/C++test Standard
https://marketplace.visualstudio.com/items?itemName=parasoft.vscode-cpptest
https://docs.parasoft.com/display/CPPTEST20201

C/C++ Static Analysis, Safety and Security Coding Standards,
MISRA C 2012, AUTOSAR C++ 14, CERT C/C++, and others.
2020/08/12(水) 05:43:26.21ID:/aSZJl0C0
>>717
アマチュアとアマチュア以外の定義を述べよ。
2020/08/12(水) 08:33:57.98ID:YginzyYa0
プロってどの位のレベルなのかに興味津々なんだろうな
サンプルがなくてw
2020/08/12(水) 09:52:08.77ID:3JHviGe70
複雑になっても自分で何を作っているのか理解しているかしていないかぐらいの差じゃないの?
2020/08/12(水) 13:20:01.63ID:UG+oufucH
>>722
トータル 1 万ステップ以上のプロジェクトを扱ったことがあればプロ、そうでなければアマ、というのはどうでしょうか?
無論、私は後者です
2020/08/12(水) 13:35:54.95ID:+rovT3b20
ステップ数なんて飾りだよ
2020/08/12(水) 14:22:01.62ID:XADAagqaM
業として行っている個人やそのような組織に属しているのがプロ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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