トップページ⇒tech
1002コメント314KB

C言語なら俺に聞け! Part 135©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net2016/05/10(火) 13:13:49.45ID:3fG5/CbC
Language C FAQ
http://www.kouno.jp/home/c_faq/

K&R
プログラミング言語C 第2版 ANSI規格準拠
http://www.amazon.co.jp/dp/4320026926

C99
JIS X 3010:2003 プログラム言語C
http://kikakurui.com/x3/X3010-2003-01.html

C11
ISO/IEC 9899:2011 - Information technology -- Programming languages -- C
http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=57853
価格:198 CHF
----
C言語なら俺に聞け
http://echo.2ch.net/test/read.cgi/tech/1408709181/
2014/08/22(金)

【初心者お断り】ガチ規格準拠C専用スレ Part133
http://pc11.2ch.net/test/read.cgi/tech/1201153965/
2008/01/24(木)

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 132
http://pc11.2ch.net/test/read.cgi/tech/1190261457/
2007/09/20(木)
0159デフォルトの名無しさん2016/05/21(土) 23:36:53.61ID:XW0E+OmD
>>158
さりげなく解答頂きありがとうございます
機械語だけをいじるってそんな器用な事ができるのかと思ったのと同時に
それしか無理なのかなーと納得もしました
0160デフォルトの名無しさん2016/05/21(土) 23:38:05.09ID:/Psi2UIt
>>157
今はCで書いてるんじゃないかな
0161デフォルトの名無しさん2016/05/22(日) 00:48:41.64ID:1OYErECz
こういうの読んで勉強した方が早い。最初の数章がCやgccツールの復習になっている

Hacking:美しき策謀 第2版――脆弱性攻撃の理論と実際
https://www.oreilly.co.jp/books/9784873115146/

0x200 プログラミング
0x210 プログラミングとは何か?
0x230 制御構造
======================================
0x252 x86プロセッサ
0x253 アセンブリ言語
======================================
0x260 基本に立ち返る
0x261 文字列
0x263 ポインタ
======================================
0x267 変数のスコープ
0x270 メモリのセグメント化
0x271 C言語におけるメモリセグメント
0162デフォルトの名無しさん2016/05/22(日) 00:59:24.33ID:5k8BO1OF
将棋ソフトのやねうら王の作者、やねうらおの書いた本、
解析魔法少女美咲ちゃん マジカル・オープン!

OllyDbg を使って、ハッキング
0163デフォルトの名無しさん2016/05/22(日) 05:36:57.29ID:FgH6NpYj
やねうらおも今やそういう肩書で呼ばれる時代か
0164デフォルトの名無しさん2016/05/22(日) 13:25:56.29ID:vCgoPFhr
>>161
すげーワクワクする
こういうの勉強したらクラックとかできるようになるんでしょ
0165デフォルトの名無しさん2016/05/22(日) 13:46:55.18ID:vKoFE7Z9
クラックの本質は高級マンションに張り付いて
住人一人一人を尾行して部屋番号と勤め先を調べたり
電話を盗聴したりするようなもの
魔法みたいに突然出来るものじゃない
0166デフォルトの名無しさん2016/05/22(日) 16:16:45.97ID:5k8BO1OF
ドラクエXでは、ハッキングできないよ

通信データのうち転送エラーで、500バイト中、1バイトは、
間違ったデータを返すルーターがあるため、

はなから通信データを信用せず、独自にチェックしているので、
データをいじっても、サーバー側でエラーになる
0167デフォルトの名無しさん2016/05/22(日) 16:26:27.19ID:llPwnouv
他板から誘導されてきました

gcc+ldのリンカスクリプトについて質問があります。
現在、ヒープとスタックを同じメモリ領域に確保しています。
/* User_heap_stack section, used to check that there is enough RAM left */
._user_heap_stack :
{
. = ALIGN(4);
_heap_start = .;
PROVIDE ( end = . );
PROVIDE ( _end = . );
. = . + _Min_Heap_Size;
. = . + _Min_Stack_Size;
. = ALIGN(4);
} > RAM
このような感じです。それを、ヒープとスタックで別領域のメモリを確保したいので、
/* heap data section */
.heap :
{
. = ALIGN(4);
_end = .;
end = _end;
PROVIDE ( _end = .);
PROVIDE ( end = _end);
PROVIDE ( _heap = .);
*(.heap .heap.*)
*(.HEAP)
. = . + _Min_Heap_Size;
. = ALIGN(4);
} > RAM
(続く)
01681672016/05/22(日) 16:26:52.01ID:llPwnouv
/* stack data section */
.stack :
{
_stack_top = .;
PROVIDE ( _stack_top = .);
*(.stack .stack.*)
*(.STACK)
_stack = .;
PROVIDE ( _stack = .);
. = ALIGN(8);
_stack_end = _estack;
PROVIDE ( _stack_end = _estack);
} > DRAM
としてみました。ところが、ヒープに十分な容量があるにもかかわらず、mallocでメモリ確保ができません。
これは、.heapをヒープとして認識されていないような気がするのですが対処法はないでしょうか?
よろしくお願いします。
0169デフォルトの名無しさん2016/05/22(日) 21:42:51.41ID:vCgoPFhr
C言語勉強した後→今はやりのニューラルネットワークの勉強
したんだけどいまいち応用したいことがないというww
思ったんだけど言語の勉強は簡単だけど情報理論の勉強ってめちゃくちゃ
大変ですね
0170デフォルトの名無しさん2016/05/22(日) 23:13:00.28ID:kh4BCROc
ちょっと板違いかもしれないんですけど、ここなら技術者がたくさんいるかなって思ったので書きます。
言語はCじゃなくてアセンブラとハードウェア記述言語なんですけど、
ファミコンを作ってみました。
http://youtu.be/ASx5mEBuKJE
色々技術者の感想とか聞いてみたいです。
まだ途中です。
アセンブラとエミュレータも作りました。
なんか響くものありますか?技術者の方々。。。
0171デフォルトの名無しさん2016/05/23(月) 08:54:53.18ID:bDXz1lkX
バグバグだけどそれっぽく動いてるね!
でもスレ違いだよ!
該当スレは無いから新しくスレッド立ててみたらどう?

ソースが無いから「すげぇ!動いてる!」以外の感想は出ないと思うの。
0172デフォルトの名無しさん2016/05/23(月) 10:12:40.21ID:EqRWnqiT
ありがとうございます!カーネーション。

ソースは公開はしてます。昔のsourceforgeで。

FPGA
https://osdn.jp/projects/motonesfpga/scm/git/motonesfpga/

エミュレータ
https://osdn.jp/projects/motonesemu/scm/git/motonesemu/

アセンブラ
https://osdn.jp/users/astoria-d/pf/motonesas/scm/tree/master/

スレ違いですねー。すいません。

時間あるときにスレッド立ててみますー。
0173デフォルトの名無しさん2016/05/23(月) 10:18:58.57ID:8vldmLpi
http://echo.2ch.net/gamedev/

立てるならこっちの方外衣のではないかな?
0174デフォルトの名無しさん2016/05/23(月) 10:19:39.52ID:8vldmLpi
方が良いのではないかな

誤変換すまん
0175デフォルトの名無しさん2016/05/23(月) 10:36:11.05ID:mr7kZnmZ
板違いにかまってあげるみんな優しい
0176デフォルトの名無しさん2016/05/23(月) 12:52:21.51ID:BbHX4Eo2
スレ違いだとは思うが
エミュレータとかアセンブラ
はこの板でいいような気がする

FPGA は
電気・電子
http://wc2014.2ch.net/denki/
かな
0177デフォルトの名無しさん2016/05/23(月) 14:29:21.48ID:EqRWnqiT
>>174
あー、ゲームは全然分かんないんですよ。それこそスーマリやったことある程度なんで。
ゲームの話の方に行っちゃうとちんぷんかんぷんになるかも。
0178デフォルトの名無しさん2016/05/23(月) 14:31:50.76ID:EqRWnqiT
>>176
いいですかね?Cとアセンブラ詳しい人達と話してみたかっただけです。
0179デフォルトの名無しさん2016/05/23(月) 14:33:02.94ID:EqRWnqiT
>>175
ホント優しい世界ですね。日本のそういうとこ好きです。
0180デフォルトの名無しさん2016/05/23(月) 14:41:05.37ID:RYuvL5QP
この板で良いんじゃないかな?
立てたら教えてくださいね
0181デフォルトの名無しさん2016/05/23(月) 14:44:07.66ID:rInNNyjw
>>172
君はなかなかやるなあ。
このスレの俺を除く誰よりも君の方が優秀だ。
0182デフォルトの名無しさん2016/05/23(月) 15:13:31.31ID:RYuvL5QP
最初から自分を除いてしまうって

何て謙虚な人なんだ
0183デフォルトの名無しさん2016/05/23(月) 15:45:37.76ID:W4bNz0YE
暗に自分が一番だって言ってるののどこが謙虚なんだ
0184デフォルトの名無しさん2016/05/23(月) 15:49:42.45ID:hH63TVCl
>>183 も一連のネタに含まれるの?
0185デフォルトの名無しさん2016/05/23(月) 16:04:42.33ID:V758P28P
世界中のハッカーより2chのが優秀だと思うのでここに書き込みました。
0186デフォルトの名無しさん2016/05/23(月) 16:12:32.37ID:2nxNFjiS
C言語がアセンブラに変換される仕組みを勉強したくて色んな参考書買ったんですが
同じアセンブラでも命令の内容が違うのは何故ですか?
後NOPとかROTATEとか本によっては無い命令もあります。
もしかしてアセンブラって機種依存ですか?
0187デフォルトの名無しさん2016/05/23(月) 16:15:28.27ID:bDXz1lkX
>>186
もしかしなくてもアセンブリは機種依存です。
0188デフォルトの名無しさん2016/05/23(月) 16:46:57.15ID:WJyvxaEH
機種依存のアセンブラを覚えても、意味なし

LLVM, CASL2 などの、仮想・抽象アセンブラを見た方がいい
0189デフォルトの名無しさん2016/05/23(月) 16:49:01.69ID:2nxNFjiS
ではWindows7とかは標準のアセンブリなんですか?
標準アセンブリというのを学んでみたいんですけど…
0190デフォルトの名無しさん2016/05/23(月) 17:00:59.85ID:PCdOqhja
今からアセンブラ覚える人って大変だろうなぁ。
自分の場合はゲーム作成目的でBASICから呼び出すレベルから始めたけど。
0191デフォルトの名無しさん2016/05/23(月) 17:30:36.10ID:2nxNFjiS
>>190
自分が言ったアセンブラはPICアセンブラです
NOPとかMOVLFとかPIC専用アセンブラなんですよ
これ覚えてるだけでもwindows7Cのアセンブラもすんなり理解できますか?
0192デフォルトの名無しさん2016/05/23(月) 18:04:14.84ID:vsZv3DVO
出来ません。
0193デフォルトの名無しさん2016/05/23(月) 18:25:03.43ID:bDXz1lkX
>>189
そもそも、CPU毎に機械語が違うんだから
機械語とほぼ一対一対応するアセンブリ言語がCPU毎に違うって事くらい
アセンブリ言語とはなんぞやってのを知ってれば分かる事なんだがなぁ

Windows 7が動作するCPUはx86系だから、
どうしてもアセンブリを覚えてWindows 7上で動かしたいと言うのであれば
x86アセンブリを覚えれば良い。
0194デフォルトの名無しさん2016/05/23(月) 18:25:55.21ID:bDXz1lkX
あるいは>>188にあるように
LLVM IRを覚えるとかね。
0195デフォルトの名無しさん2016/05/23(月) 18:41:44.56ID:q9fFfbWe
gas使えば。
0196デフォルトの名無しさん2016/05/23(月) 19:35:41.34ID:2nxNFjiS
>>193
x86やx64ってアセンブラの名前だったんですね。
ただCPUごとにアセンブラが違ってもhelloworldが同じコンパイラで
動くのは何故なんだぜ?とは思いますけど
0197デフォルトの名無しさん2016/05/23(月) 19:42:56.92ID:bDXz1lkX
>>196
x86やらx64やらは、正確にはアーキテクチャの、それも通称の方。

何故CPUが違っても同じコンパイラで動くか?
コンパイラが頑張ってるからさ。
0198デフォルトの名無しさん2016/05/23(月) 20:16:14.16ID:2nxNFjiS
>>197
なるほど!
さっそくx86アセンブラ勉強します!
何て本買えばいいですか?
0199デフォルトの名無しさん2016/05/23(月) 20:20:05.61ID:zyN7MWUp
>>198
最近はいいテキストがなくてね‥
0200デフォルトの名無しさん2016/05/23(月) 20:28:11.43ID:zzMperjF
MASM 6.0のマニュアル

アセンブラの参考書は、無い。むかしから、無い
0201デフォルトの名無しさん2016/05/23(月) 20:45:08.88ID:vsZv3DVO
インテルのマニュアル3巻組のを
初めから読むと良い。
もしくはAMDのAm186 and Am188 Family Instruction Set Manual
とか古いのだと量が少ないので楽。
0202デフォルトの名無しさん2016/05/23(月) 21:21:37.40ID:2nxNFjiS
>>200
無いww
これはやる気でますね
アセンブラ覚えたらほかの学生と差がつくってことですもんね
0203デフォルトの名無しさん2016/05/23(月) 21:23:47.26ID:G//Wy7ps
>>202
CPUのマニュアルがそれに相当するよ
MMX命令が〜とか聞いたことあるだろ?
そういう○○命令とそれに対応するニーモニックの組み合わせってだけ
0204デフォルトの名無しさん2016/05/23(月) 21:56:12.14ID:bDXz1lkX
3巻組と銘打ってるのに最終的に8個のpdfのセットになってるのが
インテルのマニュアル。

昔は上中下巻の中巻が2本立てという謎仕様だったが今よりマシという
0205デフォルトの名無しさん2016/05/23(月) 22:00:35.12ID:bDXz1lkX
>>202
強いて言えば、ちょっと古い本だが「高級言語プログラマのためのアセンブラ入門」
http://www.amazon.co.jp/dp/4797332816
とか、「30日でできる! OS自作入門」
http://www.amazon.co.jp/dp/4839919844
とかがx86の参考書としては使えるかな。
0206デフォルトの名無しさん2016/05/23(月) 22:03:19.56ID:bEUIJma6
アセンブラ勉強したいなら文法はネットで調べるだけで十分。コードをみたほうがいい。linuxのブートストラップがお勧め。16ビット、32ビット、64ビット、MMU、全て最小限のコードはある。
理解できないなら具体的にコードを引用して誰かに質問すればいい。
0207デフォルトの名無しさん2016/05/23(月) 22:08:20.97ID:bEUIJma6
あ、PICか。マイコンの雑誌とかがいいんじゃないでしょうか。
PICはアセンブラが基本だからアセンブラ分からなければPICいじる意味ないくらいですね。
0208デフォルトの名無しさん2016/05/24(火) 09:49:37.98ID:AiuqlWdY
386まではニーモニック表見ながら勉強出来たけどMMXで躓いてからは全く勉強してないなぁ。



昔スパコンOS開発部に派遣された時、デバッグで
「ダンプを逆アセして原因探してね。ニーモニック表あそこにあるから」
と言われたのには驚いたわ。PowerPC系は触ったことなかったのに(X68kのアセンブラ解説書を少し読んだ事があった程度)。
0209デフォルトの名無しさん2016/05/24(火) 13:35:34.09ID:H+uoNdTK
>>208
RISCのCPUならあり得ますね。逆アセするのも慣れてれば簡単だし。スパコンってppcがベースなんですね。
MMXなどコンパイラが生成しないような命令は特殊用途と割り切って、局所的に使うんですかね?汎用性が下がりますもんね。
0210デフォルトの名無しさん2016/05/24(火) 13:43:09.34ID:t6Kxw5HS
コンパイラは指定されたCPUに対して最適コードを書き出すんじゃないの?
0211デフォルトの名無しさん2016/05/24(火) 14:30:12.12ID:zoeZ+LAK
>>210
MMXなどの拡張命令はオプションを指定しないと入らないと思ってましたけど、勝手に使われるもんなんですかね。
0212デフォルトの名無しさん2016/05/24(火) 15:37:26.91ID:tdzye3Zz
>>211
勝手に使われて、オプションで使われなくする方が多いんじゃないか?
0213デフォルトの名無しさん2016/05/24(火) 15:41:55.35ID:t6Kxw5HS
>>211
http://www.isus.jp/products/c-compilers/compiler_part1/
0214デフォルトの名無しさん2016/05/24(火) 17:34:51.51ID:zoeZ+LAK
>>212
そうなんですね。OS開発してると拡張命令なんて使われるの見たことないんで、アプリの人達は大変ですね。それこそ逆アセなんてもうできないような気がするなあ。
0215デフォルトの名無しさん2016/05/24(火) 18:25:17.62ID:yhhSFwtW
gccだと古くは-msoft-floatオプションとかあるな
0216デフォルトの名無しさん2016/05/24(火) 19:02:12.95ID:2lDnpmo+
visual studio C++でmfcプロジェクト選んだら
最初からコードいっぱい書かれてて何をしていいか分かりませんでした。
これらのコードは消していいんですか?
ハローワールドのプログラム書きたいだけなんですけど困ってしまいました。
0217デフォルトの名無しさん2016/05/24(火) 19:09:46.55ID:Mn8/L3Ni
>>216
mfc選ぶなよ。
初心者にはc++/cliがオススメだぞ。
0218デフォルトの名無しさん2016/05/24(火) 19:22:26.77ID:2lDnpmo+
>>217
いや通っぽいの選んだら他人と差つくかなと思って
ちなアセンブラ質問してた奴です
とにかくMFCでやりたいんです。
関数も多いそうですしほかの奴だとMFCAPIつかえないんですよね?
0219デフォルトの名無しさん2016/05/24(火) 19:41:26.30ID:NcOn82rz
自動生成されてるコードの意味が解らなきゃMFC使うの夢物語だよ
0220デフォルトの名無しさん2016/05/24(火) 19:47:03.54ID:9gec5rAi
>>218
hello world 動かせない時点で他人に差をつけられてるよ

独学ならちゃんと順序を踏め
0221デフォルトの名無しさん2016/05/24(火) 19:53:36.74ID:ehSASbT+
おれまだ20代で歴も薄い雑魚グラマだから知らないんだけど、MFCはあれ流行ってたことあるの?
directwriteでhello world描画できる方がよっぽど重宝されそう
0222デフォルトの名無しさん2016/05/24(火) 19:54:21.71ID:LoTiGm3R
>>218
まず8ビットマイコンで色々弄って見たらどうだろう
0223デフォルトの名無しさん2016/05/24(火) 19:56:51.25ID:TK7Wrztf
>>221
win3.1とかwin95とかの頃は大流行りだったよ
0224デフォルトの名無しさん2016/05/24(火) 20:02:23.11ID:ehSASbT+
>>223
ありがとうございました
文献に2002年とか多いのはそういうことか
0225デフォルトの名無しさん2016/05/24(火) 20:27:33.40ID:H+uoNdTK
え、逆に今はMFC使わないんだ。知らんかったw
ま、フレームワーク変わっても書く内容はあんま変わんないような気がするけど。
0226デフォルトの名無しさん2016/05/24(火) 20:31:41.19ID:D0tZyPZ2
勉強しててもGUIじゃないとモチベーション維持できないよね。
gtkとかどうなんでしょう。
0227デフォルトの名無しさん2016/05/24(火) 20:42:16.63ID:mt0PIiy1
まずAPIって何か分かる?
0228デフォルトの名無しさん2016/05/24(火) 20:51:45.36ID:TtTF6uFS
間違ってc++スレに迷い込んだ気がした
0229デフォルトの名無しさん2016/05/24(火) 22:12:51.25ID:fsM+Gj6y
副作用関連の未定義について教えて下さい

> 直前の副作用完了点から次の副作用完了点までの間に,式の評価によって一つのオブジェクトに格納さ れた値を変更する回数は,高々1 回でなければならない。
> さらに,変更前の値の読取りは,格納される値 を決定するためだけに行われなければならない
の2行めが何を言っているかさっぱり分からんとです。

i = i + 1; // ... (1)
a[i] = i++; // ... (2)

(1)が許されて、(2)は許されないことから逆算して考えてみました。


・「変更前の値の読取り」は、「格納される値 を決定する」ケースにおいてのみ許される

・「変更前の値の読取り」とは、(1)における右辺のi、(2)における左辺のiを示す
イコール「副作用の発生するオブジェクトの値の読み取り(その値は副作用による変更前のものになる)」

・「格納される値 を決定するため」は、「代入される値を算出するため」
 ((2)は、配列の位置を決めるためだからNG)

という認識であっていますでしょうか?


a = i + i++;
とか(2)がダメなら何となくダメそうに感じましたが、
iが「代入される値を算出するため」にしか使われていないからOKだったりしますか?
0230デフォルトの名無しさん2016/05/24(火) 22:30:44.98ID:wt2wiSzh
C++は、Cと違ってクラスがある。
君はクラスのことを知っているのか?

継承チェーンをさかのぼって、Baseクラスの同名のメソッドを、
自動的に順々に呼んでいく言語と、
自動的には呼ばないので、自分で呼んでいく言語の、2種類がある

まあ、このスレはCのスレだから、C++の話はスレ違い
0231デフォルトの名無しさん2016/05/24(火) 23:15:07.66ID:wt2wiSzh
>>229
>i + i++;
インクリメントを他の式と、組み合わせられない。
必ず単独で使うこと。MISRA-C 2004、ルール12.13

ルール12.2、1つの副作用完了点内での、部分式の評価順序は未規定
i = 1; の時、
i + i++; は、1 + 2, 2 + 2 のどちらかわからない

次の文が実行される時には、インクリメントされているけど、
そのタイミングは同じ文内では、はっきり決まっていない

func(i, i++);
これも同様に引数が、(1, 2), (2, 2)のどちらかわからない
02322312016/05/24(火) 23:27:48.52ID:wt2wiSzh
>231 修正

>i = 1; の時
>i + i++; は、1 + 2, 2 + 2 のどちらかわからない
1 + 1, 2 + 1 だな

>func(i, i++);
>これも同様に引数が、(1, 2), (2, 2)のどちらかわからない
(1, 1), (2, 1) だな
02332312016/05/24(火) 23:45:57.48ID:wt2wiSzh
>>229
>さらに,変更前の値の読取りは,格納される値 を決定するためだけに行われなければならない

これは、MISRA-C 2004、ルール12.2、volatile 変数のことかな?

vがvolatile 変数だとして、
v + v;
ハードウェアをアクセスする度に、コロコロと値が変わるから、
これは、1 + 1, 1 + 2 かも知れない

だから、vに不用意にアクセスせず、
a = v; のように、一旦変数に入れてから、aを使う

v; みたいにアクセスしては、いけない
0234デフォルトの名無しさん2016/05/25(水) 00:44:05.85ID:gdJJQ64a
ご回答ありがとうございます

>>231
> インクリメントを他の式と、組み合わせられない。
> 必ず単独で使うこと。MISRA-C 2004、ルール12.13
例えば
a = b * c + i++;
は、C言語規格上許されると思っているのですけれど、ルールに抵触するのでしょうか?

> ルール12.2、1つの副作用完了点内での、部分式の評価順序は未規定
a = i + i++;
がダメな理由はしっくりきました。


>>233
>さらに,変更前の値の読取りは,格納される値 を決定するためだけに行われなければならない
C言語の規格書から持ってきました
JISX3010 2003 プログラム言語C 6-5 式

a[i] = i++;
がダメな理由が、この一文らしいのですが・・・
この文をどう解釈すればよいかさっぱりだったので質問に至った次第です。
0235デフォルトの名無しさん2016/05/25(水) 03:01:42.03ID:sGJacJpA
マ イ ン ド コ ン ト ロ ー ル の手法

・沢山の人が、偏った意見を一貫して支持する
 偏った意見でも、集団の中でその意見が信じられていれば、自分の考え方は間違っているのか、等と思わせる手法

・不利な質問をさせなくしたり、不利な質問には答えない、スルーする
 誰にも質問や反論をさせないことにより、誰もが皆、疑いなど無いんだと信じ込ませる手法

偏った思想や考え方に染まっていたり、常識が通じない人間は、頭が悪いフリをしているカルト工作員の可能性が高い

靖 国 参 拝、皇 族、国 旗 国 歌、神 社 神 道を嫌う カ ル ト

10人に一人は カ ル ト か 外 国 人

「ガ ス ラ イ テ ィ ン グ」 で 検 索 を !
02362312016/05/25(水) 03:53:16.87ID:0v8CMiQb
>a = b * c + i++;
Goでもインクリメントは単独文で、他の式と組み合わせられないから、
MISRA-C 2004、ルール12.13 には違反する

>a[i] = i++;
これも、i = 1 だとして、a[1], a[2]のどちらかわからない。
ルール12.2、1つの副作用完了点内での、部分式の評価順序は未規定

iの読み取りが、1つの副作用完了点内で、
左辺・右辺の2回起こっていて、そのタイミングがわからない。
とにかく、1つの文内で、更新される同じ変数を、2回アクセスしたらダメ

言語の規格書を読んで勉強するのは、素人には絶対無理。
MISRA-Cの日本語訳を書いている集団でさえ、
規格書に詳しい人はいないし、皆欧州の委員会へ、問い合わせて作っている

まず規格書を説明するための、例題や概念が必要。
副作用と副作用完了点、キャストの潜在型・汎整数拡張・平衡化、複合式など

とにかく、バグを避けるには、まぎらわしい書き方をしない。
長い文を書かない。誰も規格について詳しい人はいないから
0237デフォルトの名無しさん2016/05/25(水) 05:12:46.44ID:gdJJQ64a
>>236
あー分かった

> とにかく、1つの文内で、更新される同じ変数を、2回アクセスしたらダメ
と
> > さらに,変更前の値の読取りは,格納される値 を決定するためだけに行われなければならない
がイコールか


> 直前の副作用完了点から次の副作用完了点までの間に,式の評価によって一つのオブジェクトに格納さ れた値を変更する回数は,高々1 回でなければならない。
> さらに,変更前の値の読取りは,格納される値 を決定するためだけに行われなければならない

2行目の「格納される値 を決定する」は、1行目の「(高々1回の)格納さ れた値を変更する」を指しているんだ。
iに副作用が発生する式(i++)を書いたのであれば、iの値の読み取りはi++のため以外ではしてはならないと。

それを簡単に言うと
> とにかく、1つの文内で、更新される同じ変数を、2回アクセスしたらダメ
となる


> とにかく、バグを避けるには、まぎらわしい書き方をしない。
> 長い文を書かない。
はい、自分が書く時はそうしたいと思います。


ありがとうございます
お陰で理解できました
0238デフォルトの名無しさん2016/05/25(水) 07:21:38.02ID:Qq1d4n8I
MISRA-C推しの底辺がかきまわしてるけど、C言語は自由度が高いので、高い信頼性を要求される分野では単価の安い底辺PGを使えない
それを解決しようと足掻いてるのがMISRA-C

C言語を学ぶ上で参考にするのは構わないが、NGワードに設定しておいた方がノイズリダクション出来て良いかもね
0239デフォルトの名無しさん2016/05/25(水) 12:55:28.50ID:pZYZ14wu
PM, >>238 が WARNING 無視するなと何度言っても聞きません 首にしてください
0240デフォルトの名無しさん2016/05/25(水) 13:12:27.40ID:ADImxnBq
だって警告レベル一番キツくしてSDKサンプルをコンパイルすると警告出るんだもん
M$馬鹿じゃねぇの?()
0241デフォルトの名無しさん2016/05/25(水) 13:14:52.07ID:PX54IJWY
>>240
いい学習素材だと思うから、
そのエラーの原因と直しをしてみたら?
0242デフォルトの名無しさん2016/05/25(水) 13:22:36.73ID:JRGw8yci
>>240
それで警告が出るからMSが馬鹿だと結論づけるお前が馬鹿
0243デフォルトの名無しさん2016/05/25(水) 14:50:18.90ID:Qq1d4n8I
>>239
MISRA-Cはバカのための規格なので、バカを排除している職場では不要、使ってない。
0244デフォルトの名無しさん2016/05/25(水) 16:59:51.98ID:grsxbFu1
以下のようなプログラムを作成せよ。
5名分の数学の点数と英語の点数を入力する。
以下の計算式に基づいて合計点数を計算する。
(合計点数)=(数学の点数)×1.2 + (英語の点数)×0.8
上位2名を「合格(A)」とする。
上記合格者以外について、以下の計算式に基づいて合計点を再計算する。
(合計点数)=(数学の点数)×0.8 + (英語の点数)×1.2
上位2名を「合格(B)」とする。
つまり、不合格者は1名のみとなる。
同じ合計点数はないと仮定してよい。

こういう課題なんだけど、とりあえず1.2とかの計算はおいといて、入力した点数の最高点の人を合格にしようとしたんだけど
合格が0人目になってしまう 途中までのプログラム下に貼るんでアドバイスください
0245デフォルトの名無しさん2016/05/25(水) 17:00:51.35ID:grsxbFu1
>>244の続き
#include<stdio.h>

void main()
{
int i=0;
int a[5];
int b[5];
int c[5];
double tempmax;

printf("5人分の数学の点数を入力してください\n");

for( i=0; i<5; i++)
{
printf("%d人目の数学の点数:",i+1);
scanf_s("%d",&a[i]);
}

printf("英語の点数を入力してください\n");

for( i=0; i<5; i++)
{
printf("%d人目の英語の点数:",i+1);
scanf_s("%d",&b[i]);
}
0246デフォルトの名無しさん2016/05/25(水) 17:02:05.60ID:grsxbFu1
連投すいません さらに続き

for( i=0; i<5; i++)
{
c[i] = a[i] + b[i];

}
printf("%d,%d,%d,%d,%d",c[0],c[1],c[2],c[3],c[4]);
tempmax = c[0];

for( i=0; i<4; i++)
{
if(c[i]>tempmax)
{
tempmax = c[i];
}
}

printf("合格(A):%d人目 ",tempmax);
}
0247デフォルトの名無しさん2016/05/25(水) 17:13:25.35ID:hmlo+RWl
tempmax は最高得点を記録した double の値らしいが、
表示の方は「何人目」で int (%d) の値として扱ってるね。

他にも色々間違ってるけど、意味のある値が見えてくれば
検討の取っ掛かりになると思う。
0248デフォルトの名無しさん2016/05/25(水) 17:32:24.26ID:8+OpaV01
printf("合格者の得点: %f\n", tempmax);
0249デフォルトの名無しさん2016/05/25(水) 18:09:12.23ID:mqK6DNQr
最後のループではi<4ではなくてi<5。
最後のprintfでは最高点tempmaxを表示するようだけど、
何人目だからiを表示しないといけない。
最高点を取った人の番号を保存するための変数を用意して
最後のループを書き換える。
int no=0;
for( i=0; i<5; i++)
{
if(c[i]>tempmax)
{
tempmax = c[i];
no=i;
}
}
printf("合格(A):%d人目 ",no+1);
これでどうだ?
0250デフォルトの名無しさん2016/05/25(水) 18:12:42.26ID:mqK6DNQr
こっちの方がいいかな。
printf("合格(A):%d人目 %d点",no+1,(int)tempmax);
0251デフォルトの名無しさん2016/05/25(水) 18:46:25.87ID:grsxbFu1
>>249-250を参考にしたら数学英語の得点の最高合計点取った人が出るようになった ありがとう
でも、数学英語の両方とも上から5,4,3,2,1て入力したら-858993459人目って出るようになった
どっかforの範囲間違えたかな?
0252デフォルトの名無しさん2016/05/25(水) 20:07:47.10ID:GAaLSrgN
ちょっと前にFPGAでファミコン作ってみたって書いて、スレ違い、板違いって怒られた者です。
エミュならこの板で良さげなんで、スレッド立ててみました。

http://itest.2ch.net/test/read.cgi/tech/1464174113

良かったら遊びに来てください。
0253デフォルトの名無しさん2016/05/25(水) 20:09:18.71ID:grsxbFu1
>>251
自己解決しました
また質問なんだけど上から二番目の点数のデータ、もしくは、一番目のデータを除いた最高点数のデータ
ってどう表現すればいいの?
0254デフォルトの名無しさん2016/05/25(水) 20:12:29.33ID:6ZfKurqy
>>240
サンプルはいいとしてヘッダーファイルの警告ぐらい抑止しといてくれ
0255デフォルトの名無しさん2016/05/25(水) 20:25:21.80ID:Il38ptRz
>>217
でもあれでしょ?
c++/cliだとセットアップしたばかりのwindowsでは動かないでしょ?
0256デフォルトの名無しさん2016/05/25(水) 20:46:37.33ID:8+OpaV01
>>253
ソートしろ
0257デフォルトの名無しさん2016/05/25(水) 22:07:32.21ID:3hC190Yp
教えてください。
固定長テキストデータを、別ファイルに読み込む方法。
例えば3か月分の給料、15万6千円、18万7千円、19万3千円が
156187193とテキストデータで入っている。
156,187,193と切り出したい。
fscanf,fseek使ってもできませんでした。未熟者です。
0258デフォルトの名無しさん2016/05/25(水) 22:09:08.14ID:8+OpaV01
fgetcで1文字ずつ読み込める。
それを3回繰り返す。
■ このスレッドは過去ログ倉庫に格納されています