C言語なら俺に聞け 146

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 839f-AnMQ)
垢版 |
2018/04/30(月) 04:47:37.50ID:XX4FB8lc0
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言語なら俺に聞け 144
https://mevius.5ch.net/test/read.cgi/tech/1514025223/

次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
-
※前スレ
C言語なら俺に聞け 145
http://mevius.5ch.net/test/read.cgi/tech/1519046038/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
402デフォルトの名無しさん (アウアウカー Saab-GY9v)
垢版 |
2018/07/25(水) 15:50:06.17ID:rOB4O81ba
明解と
書いてる方が
不明解
403デフォルトの名無しさん (ブーイモ MMbf-4pMd)
垢版 |
2018/07/25(水) 18:17:36.85ID:LRuCLCqQM
今からC言語覚えて何に使うの?
2018/07/25(水) 18:38:39.52ID:ru0lrBQYM
デバドラを書く
低速言語のボトルネックをカバーする
2018/07/25(水) 19:01:18.88ID:WBw1LCSkd
こういう連続線をクリックで描きたいなんか参考になる本だとかサイトってありませんか?
https://i.imgur.com/Emj85bk.jpg
2018/07/25(水) 19:07:02.74ID:h5CHP+XR0
>>405
それをCで書こうって考えている?
2018/07/25(水) 19:11:06.73ID:WkyhwwwQ0
>>403
小規模マイコンのプログラミング
とか
408デフォルトの名無しさん (アウアウカー Saab-GY9v)
垢版 |
2018/07/25(水) 19:19:25.92ID:ekeRKo17a
>>405
環境は?
OSやコンパイラは?
2018/07/25(水) 20:53:24.83ID:IVngiw360
>>407
揚げ足とるわけじゃないけれど
なんで小規模マイコン限定?
2018/07/25(水) 20:53:47.05ID:IVngiw360
大規模は違うの?って意味ね
2018/07/25(水) 20:57:49.18ID:E4aNPZoQ0
まずint(4バイトとする)とmalloc(4)の違い教えて
話しはそれからだ
2018/07/25(水) 21:01:13.33ID:Gtkf0v1Td
>>411
mallocは使い終わったらfreeで解放しないといけない。
2018/07/25(水) 21:02:09.90ID:DGkeAJEO0
Windows Win32 GDIで作ってみた
中身はいい加減だけど、マウスのボタンクリックイベントでポインタ座標を取得して順に直線で繋げているだけ
http://codepad.org/QqqOuloX
https://i.imgur.com/J8woM1h.png
2018/07/25(水) 21:04:29.51ID:Gtkf0v1Td
101回目のバッファオーバーフロー?
2018/07/25(水) 21:09:14.98ID:DGkeAJEO0
エラー処理なし
ウインドウハンドラ作成もメッセージループの処理も適当なのでプロシージャもいい加減な作り
2018/07/25(水) 21:13:14.68ID:E4aNPZoQ0
俺の言い方がまずかったようだ。
int* a = (int*)malloc(4);
これはわかる

int* a = (int*)malloc(5);
この場合でもコンパイルは通るし実行も出来る。

でも、やっていいことなんだろうかってね。
余った1バイトは気にしないでいいのだろうか?
2018/07/25(水) 21:18:04.56ID:Gtkf0v1Td
>>416
余分に確保しても大丈夫。連続したメモリーブロックと呼ばれるものだよ。頭に構造体を使ってもいいし。
2018/07/25(水) 21:21:01.07ID:Gtkf0v1Td
例えば、int *p = (int*)malloc(5*sizeof(int));と書けば、pは、int p[5];のように使える。
2018/07/25(水) 21:24:03.17ID:E4aNPZoQ0
>>418
そう。これは分かる。インクリメントで確保した変数にアクセス出来るのも分かる。
>>416の下の例で、例えばa++した時、そしてそのアドレスの中身を変更すようとすると
何か途轍もなく悪いことが起きそうな気がするんだけど大丈夫なんだろうか?
2018/07/25(水) 21:29:51.06ID:Gtkf0v1Td
連続したメモリーブロックからはみ出るから、そのアクセスは違法になるね。
2018/07/25(水) 21:32:51.80ID:E4aNPZoQ0
ああ、なるほど。そういう時はエラー出るのね。
今試しにインクリメントしたら確かにエラーになった。なるほど良く出来てる。
なんか試すのも怖かったんだわ。ありがとう!
2018/07/25(水) 21:33:37.75ID:kwDgMq/WH
>>419
未定義だから鼻から悪魔が出てもおかしくないよ

冗談はおいといて、現実には5バイトじゃなく、64バイトとかのサイズをとったりするので、何事もなく動く。ただし、動くのはたまたま。
2018/07/25(水) 21:36:12.00ID:E4aNPZoQ0
>>422
エラーをちゃんと出してくれるのが分かったから良かった。
まぁ適当な数字入れることなんか絶対ないだろうけど、これが動いたらやべぇなって心配だった
2018/07/25(水) 21:36:50.93ID:Gtkf0v1Td
ただし、アクセスにおいてエラーが出ない事もあり、この手のバクはやっかいで、下手をすると数億円が吹き飛ぶことがある。
だから、最近ではなるべく生ポインタを使わないでやるのがプロ。
2018/07/25(水) 21:39:44.99ID:Gtkf0v1Td
アクセス制御の貧弱なOSでは、不正アクセスは感知されない。
2018/07/25(水) 21:55:12.69ID:WkyhwwwQ0
>>409
大規模はC++の率が高くなる
2018/07/25(水) 21:56:03.32ID:LjfK0h7i0
>>406
>>408
すみません。ここCでしたね。C♯でした。場所間違えました。
2018/07/25(水) 21:57:27.86ID:LjfK0h7i0
>>413
すげぇ。わざわざありがとうございます。
2018/07/25(水) 23:13:13.16ID:99/tYlRKM
>>421
一般にエラーは出ないぞ
2018/07/25(水) 23:32:18.85ID:RmE/AZ04x
>>416
このれいだと.引数が 4でも 5でも、バウンダリが不安かな...
mallocは 4とか 16バイトの境界にアジャストされたアドレスを返しそうだけど
2018/07/25(水) 23:53:34.35ID:RmE/AZ04x
>>430
430ですが、mallocの返す番地は、大概の型にキャストできる境界になってるんだろうね、知らんけど
2018/07/26(木) 11:01:17.82ID:Oz5vlcaw0
C11はアラインメントが決めれるmallocがあるよ
普通は8の倍数になってる。
433デフォルトの名無しさん (アウアウカー Saef-2Ess)
垢版 |
2018/07/26(木) 12:52:49.36ID:EM3EzxKLa
ま、しかし、intが4バイトの保証はないし、malloc()で確保した範囲外がどうなってるかもライブラリ依存だし、変な事に挑戦しない方が良いと思うw
2018/07/26(木) 15:59:28.57ID:VR2PsH3f0
mallocの返すアドレスはワード教会に揃ってるように
POSIXで決まってなかったっけ? 気のせいか
2018/07/26(木) 16:54:25.22ID:ixC9BcxzH
>>432
aligned_alloc()だね
2018/07/26(木) 17:01:26.31ID:Vf/lMr8pd
>>434
決まってる
2018/07/26(木) 17:03:12.87ID:0PbkpRUpH
C99には
The pointer returned if the allocation succeeds is suitably aligned
so that it may be assigned to a pointer to any type of object and
then used to access such an object or an array of such objects
in the space allocated (until the space is explicitly deallocated).
とあるので、どんなオブジェクトでもその場所に置けることは保証されている。
ただ、アラインメントがずれてるとアクセスできるけど遅くなるとかいう
変態環境でどうなるかとかは規定されていない。
(ふつうの実装ならまともにアラインメントされていると思うが)
これをどうしても合法的に確実にアラインメントしたい人向けなのが、aligned_alloc()。
2018/07/26(木) 17:08:47.42ID:VR2PsH3f0
>>437
そうなんだ
おれはてっきりもっと全然違う基準、例えば64バイトとか16KBとかで
アライメントしたいときaligned_allocの方を使うものかと思ってた
2018/07/26(木) 17:17:59.96ID:0PbkpRUpH
>>438
そりゃもちろんそういう用途にも使えるよ
2018/07/26(木) 19:04:38.15ID:Vf/lMr8pd
>>437
パフォーマンスはCの仕様で規定されてないから
そんな事を心配したら標準ライブラリも使えないぞ
memcpyが劇遅かもしれないとか
2018/07/26(木) 19:07:36.39ID:Vf/lMr8pd
普通の用途は>>438みたいなヤツ

zmmレジスタのサイズ
キャッシュのラインサイズ
HDDのセクタサイズ
FIFOのサイズ

なんかにしたい場合
2018/07/27(金) 00:14:41.96ID:J2z2B0JS0
家でC言語の独学してたけど眠くなって続かないから週末だけ学校にいこうと思う。関西でお勧めはどこですか?
2018/07/27(金) 07:12:56.09ID:GxaYOivnM
金の無駄遣い
2018/07/27(金) 09:20:14.17ID:UMN2C6wAd
大阪大学基礎工学部情報科学科
2018/07/27(金) 09:52:20.15ID:mngCBxZNM
勉強を成功させるには強い動機付けが必要
やる気も効率も上がらないのはまずそこに失敗してる
2018/07/27(金) 20:31:18.69ID:dNDh2QHO0
>>445
動機付け、ですか…
そんなものは初めからありませんでした…
2018/07/27(金) 21:04:40.28ID:Gi4wb1wwM
個人的にはLinuxのデバドラから入るのがおすすめ
分かってくると俺の方が上手く書けるとか拗らせる
448デフォルトの名無しさん (ワッチョイ 6f9f-YSnv)
垢版 |
2018/07/28(土) 02:43:37.63ID:E0E9ZkiG0
動機を自分で意識的に付けようとしても中々出来ないのが普通なのでは?
何かそれなりのメリットがあると信じられないと何もしないのが普通の人間だろうし。
例えば何かをするとモテモテになるだとか、そういう自分にとってのメリットがあるならその何かをやる気は出るだろうけど、そんなのがないなら、あるいはもしあってもそれに気付けないなら普通はやる気は起きんでしょう。
2018/07/28(土) 07:47:22.78ID:CM3Pz0hR0
C言語、あるいはプログラムそのものの入門書で、文庫か新書サイズの良書はありますか?
2018/07/28(土) 08:07:15.42ID:xtvz/nLF0
C++ならこれならわかるC++があるが・・・
2018/07/28(土) 08:08:34.90ID:8G21bbxI0
はじめてのC
2018/07/28(土) 09:55:07.43ID:VMG9DnUG0
>>449
講談社ブルーバックスなら新書サイズでC本やプログラミング本があったはず。
ただ、書名は挙げられないし、良い入門書かどうかも分からん。

参考までに、本の寸法に制約があるのは何故かな?
2018/07/28(土) 10:28:26.03ID:CM3Pz0hR0
電車の中や、昼飯食べながら片手で読めるものがあれば、と思ったんです
パソコンいじりながら読むなら大きい方がいいんですけどね
454デフォルトの名無しさん (ワッチョイ c65a-FZq6)
垢版 |
2018/07/28(土) 11:19:05.91ID:fTj3LZGS0
Kindleで読めば?
2018/07/28(土) 12:06:22.12ID:s8FQvaoRM
さっさとkindleで読めアホ
2018/07/28(土) 14:09:45.43ID:xtvz/nLF0
マンガはタブレット端末で見るけど
参考書系は紙じゃないとなんか駄目だわ。全然集中できない。
2018/07/28(土) 16:49:06.40ID:XyATpAmoa
kindleとか電子書籍って参考書系読みにくいよね
漫画みたいにページそのままならいいのに
458デフォルトの名無しさん (ワッチョイ c65a-FZq6)
垢版 |
2018/07/28(土) 17:02:27.00ID:fTj3LZGS0
何年も前からiPadや電子ペーパー端末でプログラミングや法律の本読んでるけど特に不都合感じてないな
むしろ紙は持ち運びし辛いし検索もできないから不便だわ
459デフォルトの名無しさん (ワッチョイ 12e4-oxGy)
垢版 |
2018/07/28(土) 19:13:56.62ID:sJabZ7tp0
すみません
この2行のコードを1行にするスマートな書き方ってありますか?

idx = idx << 12;
idx = idx ^ _data;
2018/07/28(土) 19:15:47.78ID:CM3Pz0hR0
kindleですか、参考にします。
ありがとうごさいました。
2018/07/28(土) 19:31:07.68ID:g7V8p7HEd
>>459

idx = (idx << 12) ^ _data;
2018/07/28(土) 19:52:37.67ID:mee2LTKv0
>>461
うむ
2018/07/28(土) 20:05:12.26ID:0bzuzSMVM
初心者スレじゃないんだからidxがvolatileの場合を無視した回答は良くない
2018/07/28(土) 20:12:34.82ID:cv0xu0xkM
それを言うならvolatileでない場合を無視するのが問題では?
volatileであれば問題ないだろ
2018/07/28(土) 20:26:36.40ID:mee2LTKv0
わしここの住人じゃなくて通りすがりなんだけど、
>>461 だとなにか問題あるの?
2018/07/28(土) 21:15:36.33ID:DyF9e7oqM
>>465
もしもidxが送信データを書き込み受信データを読み出すためのレジスタだったら、
複数回書き変えること自体が重要だったり、読み込み時は異なる値を返却するかもしれない、
という割とどうでもいい話。
2018/07/28(土) 21:32:40.43ID:mee2LTKv0
>>466
C的に見れば無駄なコードが実は必要だったという、そういう話しかな
468デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/28(土) 21:52:57.65ID:jbwKRPPF0
最適化で一瞬レジスタの値が変わらなくなったから
それがどうしたのという話だからな

むしろ一瞬レジスタの値が変わるようなコードがそもそもぜんぜんダメ
2018/07/28(土) 21:55:35.27ID:remUbofq0
そういう話になってくるとレジスタってなんや?って話になるからな?
470デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/28(土) 22:00:32.66ID:jbwKRPPF0
ちゃんと確定値入れろよ
なんで計算中の値いれてんの

なんでそんな頭悪いことすんの

一行にしたいということは
間違いなく計算過程のコードだからな
2018/07/28(土) 22:02:55.51ID:aLrZyGnX0
通信プロトコルでCPUレジスタ使ってやり取りする様な方法ってあったっけ?
472デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/28(土) 22:05:44.90ID:jbwKRPPF0
メモリマップドI/Oなんか簡単に消える
2018/07/29(日) 00:51:03.42ID:++N1yuL90
>>471
「レジスタ」って「CPUのレジスタ」だけじゃなくて「I/Oチップのレジスタ」って使い方もするよ
2018/07/29(日) 07:02:57.29ID:YD8oKrYq0
>>463を書くためにわざと>>459の質問しただろ
まあ確かにvolatileだと>>461ではダメ

明らかに初心者の質問に>>463の回答もどうかと思うが

idx = idx << 12; idx = idx ^ _data;
これで良い
2018/07/29(日) 07:15:13.10ID:YD8oKrYq0
質問というよりスレのレベルを見るための問題だな
>>468みたいな素人が見事に引っかかっちゃう
2018/07/29(日) 09:00:29.62ID:+KuOy2bC0
触らぬ質問に騒乱無し
477デフォルトの名無しさん (ワッチョイ 6f9f-53i4)
垢版 |
2018/07/29(日) 09:09:25.31ID:7lOBGcOb0
実は本物の初心者で volatile などというものの存在すら知らず最初の回答で全く問題なかったのだが
知識があるものが知識がある故にあらゆる妄想を膨らませまくって勝手に争って大混乱になり、
最初に質問した者は怖くなって素早く逃亡。このスレで質問するのは止めようと固く心に誓う。←いまここ
2018/07/29(日) 10:14:38.25ID:Ga4xmacd0
明示してないvolatileなんて考慮する必要ないわ
479デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 11:40:21.87ID:LQAkWqzt0
知恵遅れのクソニートが
またテキトーなこといってるわ

2ちゃんねるはどこのスレも同じだわ

クソニートはどこにでもいる

やっぱりなクソニート2ちゃんねるから
クソニートの駆除が必要
480デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 11:43:48.42ID:LQAkWqzt0
まずプロフェッショナルなカンペキなオレの回答の
どこがおかしいか
だれも指摘できてないからな
481デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 11:51:38.06ID:LQAkWqzt0
ちなみに知恵遅れどものテキトーな回答のどこがおかしいか
オレはすべて回答してる
ここも同じだ
2018/07/29(日) 11:58:20.56ID:1hBCvnSx0
夏休み?
483デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 11:59:21.49ID:LQAkWqzt0
プロフェッショナルの回答に
シロウトが口をはさむ余地はない

クソニートは毎日が夏休みだもんな
484デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 12:01:00.22ID:LQAkWqzt0
マジでなクソニートどもは身の程知らずなわけ
クソニートがまともな社会生活を送ってる社会人に勝てると思ってんの
2018/07/29(日) 12:08:05.09ID:Rgaf8fSN0
プロフェッショナルかなんか知らんけど組み込み系は苦手のようだな
486デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 12:09:43.67ID:LQAkWqzt0
な知恵遅れがオレのレスのどこがおかしいか指摘できない
指摘しようがないからな

なぜならスキのないカンペキなレスだからな

どこのスレでも知恵遅れが偉そうにしてるのは同じだ
487デフォルトの名無しさん (ワッチョイ 6f9f-YSnv)
垢版 |
2018/07/29(日) 12:09:51.76ID:7lOBGcOb0
>>480
何処で回答してんの?
488デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 12:11:10.71ID:LQAkWqzt0
>>470>>468 でおもいっきり回答してるわ
知恵遅れはなにが書いてあるか理解できない
489デフォルトの名無しさん (ワッチョイ 6f9f-YSnv)
垢版 |
2018/07/29(日) 12:12:34.88ID:7lOBGcOb0
>>488
それ回答になってねえじゃん。ちゃんと回答書けよ。
490デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 12:14:12.01ID:LQAkWqzt0
それが回答になってないなら
オマエのオツムに問題があるか
ただの仕事未経験のクソニートがなにも分からずテキトーなこといってるだけだからな

ただクソニートである確度が極めて高い
491デフォルトの名無しさん (ワッチョイ 6f9f-YSnv)
垢版 |
2018/07/29(日) 12:15:16.00ID:7lOBGcOb0
>>490
はいはい。おだいじに。
492デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 12:15:53.84ID:LQAkWqzt0
はい
クソニート図星
493デフォルトの名無しさん (ワッチョイ 6f9f-YSnv)
垢版 |
2018/07/29(日) 12:17:35.80ID:7lOBGcOb0
やはり気温40℃超えは人をおかしくするには十分な気温だったようだな。
猛暑も酷なことをするもんだ。合掌。
494デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 12:19:13.56ID:LQAkWqzt0
クソニートは家からでないから関係ないだろ
電気代も親に払ってもらってるからな

クーラーの電気代もパチョコンの電気代もな
親が払ってくれてんだぞ
2018/07/29(日) 12:33:12.40ID:Rgaf8fSN0
組み込み系の周辺チップの制御レジスタの仕様書見たことある?
制御レジスタの特定ビットのRead/Write動作そのものに意味があるんだよ
直に制御レジスタをアクセスしないと駄目
最適化でCPUレジスタの中で値を書き換えても無意味、周辺チップは何の動作もしない
volatileはそんな時にコンパイラの最適化を抑制するために使用する
例えば、
idx = (idx << 12) ^ _data;
の例で言えば、(idx<<12)の部分で実際にidxのアドレスにマップされたメモリの値が変更される
その後に最終的に、(idx << 12) ^ _dataの値が上書きされる
idxがvolatile宣言されていない場合は、途中の評価結果はCPUの内部レジスタだけで最適化されてマップされたメモリの値は最終評価結果の書き込みしか保証されない可能性がある

組み込みの制御レジスタの例としてPICのデータシートのリンクを貼っておく
ビット毎にR/Wでチップの機能を制御している様子が分かる
https://www.microchip.co.jp/download/index.php?Mode=4&;CategoryID=08ff3e00bf7fedc9fd6adb0aa9a3499b55a4aff3
496デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 12:46:01.14ID:LQAkWqzt0
最適化で、一瞬変わってたのが変わらなくなったらどうすんのとかいってるアホなこといってる知恵遅れに
その一瞬だけ変わってたコードが正しいコードとか
ホンキで思ってんのといってるだけだからな

そもそもvolatileついてなかったら
そのあと書き変わる保証すらどこにもない

そもそも保証がないコードのなんの保証をするわけ?

知恵遅れがいうことはさっぱり理解できないわ
2018/07/29(日) 12:47:08.34ID:XJOvENJB0
C++相談室 part137 あたりに書き込もうと思った悪態を
間違えてこちらに投稿したのに気づいたが引っ込みがつかなくなった、
という感じがしないでもない。

今までの自分の態度をかえりみると「誤爆しました、すまん」と
書くことも照れ臭いと思ってる、かも知れない。
おそらく俺の勘違い(嫉妬に基づく邪推)だろうけどネ。
498デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 12:48:26.49ID:LQAkWqzt0
あっちもこっちも
クソニートがえらそうにしてるからな

2ちゃんねるからクソニートの駆除は必要
499デフォルトの名無しさん (ワッチョイ 1680-1o86)
垢版 |
2018/07/29(日) 12:50:28.71ID:LQAkWqzt0
むしろあっちでもこっちでも
オレは間違った回答は一切してないからな

すべてカンペキなレスだ

知恵遅れがテキトーなこといってるのは
あっちもこっちも同じ
2018/07/29(日) 12:57:17.34ID:Rgaf8fSN0
>>469
そりゃvolatileも万能ではないよ
最終的に確認するのは実機デバッグしかない
アセンブラで直接叩くしか解決できない場合もある
ICEで直接追跡しながらプログラムコードとチップの動作を確認するのが組み込みシステムの開発
ただしvolatileすら使わないのでは無駄に書き替え工数が膨れ上がる
最低限の対応はあらかじめ取っておくべき
2018/07/29(日) 12:57:38.10ID:Rgaf8fSN0
間違えた
>>498
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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