C言語なら俺に聞け 149

■ このスレッドは過去ログ倉庫に格納されています
2018/10/28(日) 22:01:44.38ID:D9Gt7gmT0
!extend:checked:vvvvv:1000:512

次スレを作る時は上記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言語なら俺に聞け 148
https://mevius.5ch.net/test/read.cgi/tech/1537347410/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2018/11/20(火) 17:18:12.25ID:ls520OJz0
>>107
元コードをそのまま横断的に眺めてるとわからないけど
症状が残るまま、余計な箇所をがんがん削っていって簡単化していくと見つかることがあるよね

a[i++] = i; のような副作用完了点内での複数回の参照とかはどうしようもないけどw
2018/11/20(火) 17:26:38.15ID:GGiSm8Yna
値自体は型情報を含んでないという点は押さえないとあかんが、そういう問題でもないか。
妙なtypedefしてたりしてね。
2018/11/20(火) 17:33:06.78ID:oWNEdszs0
アセンブリコード読んで見るとか
割り込みでレジスタ確認とかすれば
cで見てると気づかないことが見えてくるかも
2018/11/20(火) 19:23:37.02ID:2i13hG6Q0
printf("check : sizeof %d: DATA = %d\n",sizeof(DATA),DATA);
if((signed int)DATA > (signed int)0)
とかやって一つ一つ動作確認してみるとか。

よくわからん動作不良起こした時は配列変数がスタックサイズ超えてたとか
16Bit環境なら32kb/64kb超えたとかが原因だったことあるけど。
2018/11/20(火) 19:37:09.53ID:TCh3BaRvM
>>108
そもそもその環境で>>102のコードを実行したらどうなるのさ?
114デフォルトの名無しさん (アウアウウー Sa91-AAco)
垢版 |
2018/11/20(火) 20:38:14.44ID:xyhgdzIUa
>>102
本当に DATA の型は signed int か?
良く見たら unsigned int ってことはないか?
2018/11/20(火) 21:11:07.99ID:d/DSkvWpM
>>102
16進リテラルが16bitで収まらないからunsigned intで解釈された。(c99)
そんでintに暗黙キャストされたときに最上位bitが落ちたと思われ
2018/11/20(火) 22:03:30.03ID:HgsWcywV0
>>108
> 今日はこの件で非常に疲れたので、ソースの提示は少し時間を下さい。ありがとうございます。
正しい。疲れたら休め。結果的にその方が早い。

君も分かっていると思うが、まともなコンパイラ(実績のあるコンパイラ)なら、そんなところにバグはない。
ほぼ間違いなく君の勘違いだ。
それは根詰めて見てても気づかないが、一旦忘れて見直したらあっさり見つかる、ということもよくある。
残業してグダグダやるよりも、早く帰って早く寝て、次の日に早めに出社した方が捗る。

おそらくあっさり解決すると思うぜ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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