C言語なら俺に聞け! Part 135©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net
2016/05/10(火) 13:13:49.45ID:3fG5/CbChttp://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(木)
0153デフォルトの名無しさん
2016/05/21(土) 23:04:59.40ID:XW0E+OmDそれって誰でもC言語に変換できたらコードが解析されて大変になるから
圧力でもかかってるんですかね?大げさですが技術者って技術についてあんまり
おおっぴらにしてほしくないとかあったりするのかな。あまりにも情報が
垂れ流しにされて困ってる人も多いのではと思いますね。
0154デフォルトの名無しさん
2016/05/21(土) 23:05:44.09ID:XW0E+OmDなんかワクワクしてきました。やってみます。
0155デフォルトの名無しさん
2016/05/21(土) 23:11:37.09ID:/vZ9lW0K0156デフォルトの名無しさん
2016/05/21(土) 23:12:46.76ID:/Psi2UItそんな陰謀論めいた話はなくて,単にマシン語で記述するメリットが正直なくなってきたからだよ
0157デフォルトの名無しさん
2016/05/21(土) 23:15:02.99ID:XW0E+OmDでは何故プログラムはクラックされるんですか?
社員が情報を流出してるからですか?
>>156
でも制御系プログラミングとか機械語で書いてるんじゃないでしたっけ?
0158デフォルトの名無しさん
2016/05/21(土) 23:28:28.27ID:/vZ9lW0Kクラックするためには、元のC言語にたどり着く必要が無いから
機械語レベルで解読し、書き換えをすれば良いし、
そのレベルの事ができない人なら、クラックなんてできないよ
0159デフォルトの名無しさん
2016/05/21(土) 23:36:53.61ID:XW0E+OmDさりげなく解答頂きありがとうございます
機械語だけをいじるってそんな器用な事ができるのかと思ったのと同時に
それしか無理なのかなーと納得もしました
0160デフォルトの名無しさん
2016/05/21(土) 23:38:05.09ID:/Psi2UIt今はCで書いてるんじゃないかな
0161デフォルトの名無しさん
2016/05/22(日) 00:48:41.64ID:1OYErECzHacking:美しき策謀 第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:FgH6NpYj0164デフォルトの名無しさん
2016/05/22(日) 13:25:56.29ID:vCgoPFhrすげーワクワクする
こういうの勉強したらクラックとかできるようになるんでしょ
0165デフォルトの名無しさん
2016/05/22(日) 13:46:55.18ID:vKoFE7Z9住人一人一人を尾行して部屋番号と勤め先を調べたり
電話を盗聴したりするようなもの
魔法みたいに突然出来るものじゃない
0166デフォルトの名無しさん
2016/05/22(日) 16:16:45.97ID:5k8BO1OF通信データのうち転送エラーで、500バイト中、1バイトは、
間違ったデータを返すルーターがあるため、
はなから通信データを信用せず、独自にチェックしているので、
データをいじっても、サーバー側でエラーになる
0167デフォルトの名無しさん
2016/05/22(日) 16:26:27.19ID:llPwnouvgcc+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
(続く)
0168167
2016/05/22(日) 16:26:52.01ID:llPwnouv.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したんだけどいまいち応用したいことがないという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立てるならこっちの方外衣のではないかな?
0174デフォルトの名無しさん
2016/05/23(月) 10:19:39.52ID:8vldmLpi誤変換すまん
0175デフォルトの名無しさん
2016/05/23(月) 10:36:11.05ID:mr7kZnmZ0176デフォルトの名無しさん
2016/05/23(月) 12:52:21.51ID:BbHX4Eo2エミュレータとかアセンブラ
はこの板でいいような気がする
FPGA は
電気・電子
http://wc2014.2ch.net/denki/
かな
0177デフォルトの名無しさん
2016/05/23(月) 14:29:21.48ID:EqRWnqiTあー、ゲームは全然分かんないんですよ。それこそスーマリやったことある程度なんで。
ゲームの話の方に行っちゃうとちんぷんかんぷんになるかも。
0178デフォルトの名無しさん
2016/05/23(月) 14:31:50.76ID:EqRWnqiTいいですかね?Cとアセンブラ詳しい人達と話してみたかっただけです。
0179デフォルトの名無しさん
2016/05/23(月) 14:33:02.94ID:EqRWnqiTホント優しい世界ですね。日本のそういうとこ好きです。
0180デフォルトの名無しさん
2016/05/23(月) 14:41:05.37ID:RYuvL5QP立てたら教えてくださいね
0181デフォルトの名無しさん
2016/05/23(月) 14:44:07.66ID:rInNNyjw君はなかなかやるなあ。
このスレの俺を除く誰よりも君の方が優秀だ。
0182デフォルトの名無しさん
2016/05/23(月) 15:13:31.31ID:RYuvL5QP何て謙虚な人なんだ
0183デフォルトの名無しさん
2016/05/23(月) 15:45:37.76ID:W4bNz0YE0184デフォルトの名無しさん
2016/05/23(月) 15:49:42.45ID:hH63TVCl0185デフォルトの名無しさん
2016/05/23(月) 16:04:42.33ID:V758P28P0186デフォルトの名無しさん
2016/05/23(月) 16:12:32.37ID:2nxNFjiS同じアセンブラでも命令の内容が違うのは何故ですか?
後NOPとかROTATEとか本によっては無い命令もあります。
もしかしてアセンブラって機種依存ですか?
0187デフォルトの名無しさん
2016/05/23(月) 16:15:28.27ID:bDXz1lkXもしかしなくてもアセンブリは機種依存です。
0188デフォルトの名無しさん
2016/05/23(月) 16:46:57.15ID:WJyvxaEHLLVM, CASL2 などの、仮想・抽象アセンブラを見た方がいい
0189デフォルトの名無しさん
2016/05/23(月) 16:49:01.69ID:2nxNFjiS標準アセンブリというのを学んでみたいんですけど…
0190デフォルトの名無しさん
2016/05/23(月) 17:00:59.85ID:PCdOqhja自分の場合はゲーム作成目的でBASICから呼び出すレベルから始めたけど。
0191デフォルトの名無しさん
2016/05/23(月) 17:30:36.10ID:2nxNFjiS自分が言ったアセンブラはPICアセンブラです
NOPとかMOVLFとかPIC専用アセンブラなんですよ
これ覚えてるだけでもwindows7Cのアセンブラもすんなり理解できますか?
0192デフォルトの名無しさん
2016/05/23(月) 18:04:14.84ID:vsZv3DVO0193デフォルトの名無しさん
2016/05/23(月) 18:25:03.43ID:bDXz1lkXそもそも、CPU毎に機械語が違うんだから
機械語とほぼ一対一対応するアセンブリ言語がCPU毎に違うって事くらい
アセンブリ言語とはなんぞやってのを知ってれば分かる事なんだがなぁ
Windows 7が動作するCPUはx86系だから、
どうしてもアセンブリを覚えてWindows 7上で動かしたいと言うのであれば
x86アセンブリを覚えれば良い。
0194デフォルトの名無しさん
2016/05/23(月) 18:25:55.21ID:bDXz1lkXLLVM IRを覚えるとかね。
0195デフォルトの名無しさん
2016/05/23(月) 18:41:44.56ID:q9fFfbWe0196デフォルトの名無しさん
2016/05/23(月) 19:35:41.34ID:2nxNFjiSx86やx64ってアセンブラの名前だったんですね。
ただCPUごとにアセンブラが違ってもhelloworldが同じコンパイラで
動くのは何故なんだぜ?とは思いますけど
0197デフォルトの名無しさん
2016/05/23(月) 19:42:56.92ID:bDXz1lkXx86やらx64やらは、正確にはアーキテクチャの、それも通称の方。
何故CPUが違っても同じコンパイラで動くか?
コンパイラが頑張ってるからさ。
0198デフォルトの名無しさん
2016/05/23(月) 20:16:14.16ID:2nxNFjiSなるほど!
さっそくx86アセンブラ勉強します!
何て本買えばいいですか?
0199デフォルトの名無しさん
2016/05/23(月) 20:20:05.61ID:zyN7MWUp最近はいいテキストがなくてね‥
0200デフォルトの名無しさん
2016/05/23(月) 20:28:11.43ID:zzMperjFアセンブラの参考書は、無い。むかしから、無い
0201デフォルトの名無しさん
2016/05/23(月) 20:45:08.88ID:vsZv3DVO初めから読むと良い。
もしくはAMDのAm186 and Am188 Family Instruction Set Manual
とか古いのだと量が少ないので楽。
0202デフォルトの名無しさん
2016/05/23(月) 21:21:37.40ID:2nxNFjiS無いww
これはやる気でますね
アセンブラ覚えたらほかの学生と差がつくってことですもんね
0203デフォルトの名無しさん
2016/05/23(月) 21:23:47.26ID:G//Wy7psCPUのマニュアルがそれに相当するよ
MMX命令が〜とか聞いたことあるだろ?
そういう○○命令とそれに対応するニーモニックの組み合わせってだけ
0204デフォルトの名無しさん
2016/05/23(月) 21:56:12.14ID:bDXz1lkXインテルのマニュアル。
昔は上中下巻の中巻が2本立てという謎仕様だったが今よりマシという
0205デフォルトの名無しさん
2016/05/23(月) 22:00:35.12ID:bDXz1lkX強いて言えば、ちょっと古い本だが「高級言語プログラマのためのアセンブラ入門」
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理解できないなら具体的にコードを引用して誰かに質問すればいい。
0207デフォルトの名無しさん
2016/05/23(月) 22:08:20.97ID:bEUIJma6PICはアセンブラが基本だからアセンブラ分からなければPICいじる意味ないくらいですね。
0208デフォルトの名無しさん
2016/05/24(火) 09:49:37.98ID:AiuqlWdY昔スパコンOS開発部に派遣された時、デバッグで
「ダンプを逆アセして原因探してね。ニーモニック表あそこにあるから」
と言われたのには驚いたわ。PowerPC系は触ったことなかったのに(X68kのアセンブラ解説書を少し読んだ事があった程度)。
0209デフォルトの名無しさん
2016/05/24(火) 13:35:34.09ID:H+uoNdTKRISCのCPUならあり得ますね。逆アセするのも慣れてれば簡単だし。スパコンってppcがベースなんですね。
MMXなどコンパイラが生成しないような命令は特殊用途と割り切って、局所的に使うんですかね?汎用性が下がりますもんね。
0210デフォルトの名無しさん
2016/05/24(火) 13:43:09.34ID:t6Kxw5HS0211デフォルトの名無しさん
2016/05/24(火) 14:30:12.12ID:zoeZ+LAKMMXなどの拡張命令はオプションを指定しないと入らないと思ってましたけど、勝手に使われるもんなんですかね。
0212デフォルトの名無しさん
2016/05/24(火) 15:37:26.91ID:tdzye3Zz勝手に使われて、オプションで使われなくする方が多いんじゃないか?
0213デフォルトの名無しさん
2016/05/24(火) 15:41:55.35ID:t6Kxw5HShttp://www.isus.jp/products/c-compilers/compiler_part1/
0214デフォルトの名無しさん
2016/05/24(火) 17:34:51.51ID:zoeZ+LAKそうなんですね。OS開発してると拡張命令なんて使われるの見たことないんで、アプリの人達は大変ですね。それこそ逆アセなんてもうできないような気がするなあ。
0215デフォルトの名無しさん
2016/05/24(火) 18:25:17.62ID:yhhSFwtW0216デフォルトの名無しさん
2016/05/24(火) 19:02:12.95ID:2lDnpmo+最初からコードいっぱい書かれてて何をしていいか分かりませんでした。
これらのコードは消していいんですか?
ハローワールドのプログラム書きたいだけなんですけど困ってしまいました。
0217デフォルトの名無しさん
2016/05/24(火) 19:09:46.55ID:Mn8/L3Nimfc選ぶなよ。
初心者にはc++/cliがオススメだぞ。
0218デフォルトの名無しさん
2016/05/24(火) 19:22:26.77ID:2lDnpmo+いや通っぽいの選んだら他人と差つくかなと思って
ちなアセンブラ質問してた奴です
とにかくMFCでやりたいんです。
関数も多いそうですしほかの奴だとMFCAPIつかえないんですよね?
0219デフォルトの名無しさん
2016/05/24(火) 19:41:26.30ID:NcOn82rz0220デフォルトの名無しさん
2016/05/24(火) 19:47:03.54ID:9gec5rAihello world 動かせない時点で他人に差をつけられてるよ
独学ならちゃんと順序を踏め
0221デフォルトの名無しさん
2016/05/24(火) 19:53:36.74ID:ehSASbT+directwriteでhello world描画できる方がよっぽど重宝されそう
0222デフォルトの名無しさん
2016/05/24(火) 19:54:21.71ID:LoTiGm3Rまず8ビットマイコンで色々弄って見たらどうだろう
0223デフォルトの名無しさん
2016/05/24(火) 19:56:51.25ID:TK7Wrztfwin3.1とかwin95とかの頃は大流行りだったよ
0224デフォルトの名無しさん
2016/05/24(火) 20:02:23.11ID:ehSASbT+ありがとうございました
文献に2002年とか多いのはそういうことか
0225デフォルトの名無しさん
2016/05/24(火) 20:27:33.40ID:H+uoNdTKま、フレームワーク変わっても書く内容はあんま変わんないような気がするけど。
0226デフォルトの名無しさん
2016/05/24(火) 20:31:41.19ID:D0tZyPZ2gtkとかどうなんでしょう。
0227デフォルトの名無しさん
2016/05/24(火) 20:42:16.63ID:mt0PIiy10228デフォルトの名無しさん
2016/05/24(火) 20:51:45.36ID:TtTF6uFS0229デフォルトの名無しさん
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君はクラスのことを知っているのか?
継承チェーンをさかのぼって、Baseクラスの同名のメソッドを、
自動的に順々に呼んでいく言語と、
自動的には呼ばないので、自分で呼んでいく言語の、2種類がある
まあ、このスレはCのスレだから、C++の話はスレ違い
0231デフォルトの名無しさん
2016/05/24(火) 23:15:07.66ID:wt2wiSzh>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)のどちらかわからない
0232231
2016/05/24(火) 23:27:48.52ID:wt2wiSzh>i = 1; の時
>i + i++; は、1 + 2, 2 + 2 のどちらかわからない
1 + 1, 2 + 1 だな
>func(i, i++);
>これも同様に引数が、(1, 2), (2, 2)のどちらかわからない
(1, 1), (2, 1) だな
0233231
2016/05/24(火) 23:45:57.48ID:wt2wiSzh>さらに,変更前の値の読取りは,格納される値 を決定するためだけに行われなければならない
これは、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人に一人は カ ル ト か 外 国 人
「ガ ス ラ イ テ ィ ン グ」 で 検 索 を !
0236231
2016/05/25(水) 03:53:16.87ID:0v8CMiQbGoでもインクリメントは単独文で、他の式と組み合わせられないから、
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あー分かった
> とにかく、1つの文内で、更新される同じ変数を、2回アクセスしたらダメ
と
> > さらに,変更前の値の読取りは,格納される値 を決定するためだけに行われなければならない
がイコールか
> 直前の副作用完了点から次の副作用完了点までの間に,式の評価によって一つのオブジェクトに格納さ れた値を変更する回数は,高々1 回でなければならない。
> さらに,変更前の値の読取りは,格納される値 を決定するためだけに行われなければならない
2行目の「格納される値 を決定する」は、1行目の「(高々1回の)格納さ れた値を変更する」を指しているんだ。
iに副作用が発生する式(i++)を書いたのであれば、iの値の読み取りはi++のため以外ではしてはならないと。
それを簡単に言うと
> とにかく、1つの文内で、更新される同じ変数を、2回アクセスしたらダメ
となる
> とにかく、バグを避けるには、まぎらわしい書き方をしない。
> 長い文を書かない。
はい、自分が書く時はそうしたいと思います。
ありがとうございます
お陰で理解できました
0238デフォルトの名無しさん
2016/05/25(水) 07:21:38.02ID:Qq1d4n8Iそれを解決しようと足掻いてるのがMISRA-C
C言語を学ぶ上で参考にするのは構わないが、NGワードに設定しておいた方がノイズリダクション出来て良いかもね
0239デフォルトの名無しさん
2016/05/25(水) 12:55:28.50ID:pZYZ14wu0240デフォルトの名無しさん
2016/05/25(水) 13:12:27.40ID:ADImxnBqM$馬鹿じゃねぇの?()
0241デフォルトの名無しさん
2016/05/25(水) 13:14:52.07ID:PX54IJWYいい学習素材だと思うから、
そのエラーの原因と直しをしてみたら?
0242デフォルトの名無しさん
2016/05/25(水) 13:22:36.73ID:JRGw8yciそれで警告が出るからMSが馬鹿だと結論づけるお前が馬鹿
0243デフォルトの名無しさん
2016/05/25(水) 14:50:18.90ID:Qq1d4n8IMISRA-Cはバカのための規格なので、バカを排除している職場では不要、使ってない。
0244デフォルトの名無しさん
2016/05/25(水) 16:59:51.98ID:grsxbFu15名分の数学の点数と英語の点数を入力する。
以下の計算式に基づいて合計点数を計算する。
(合計点数)=(数学の点数)×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#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:grsxbFu1for( 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表示の方は「何人目」で int (%d) の値として扱ってるね。
他にも色々間違ってるけど、意味のある値が見えてくれば
検討の取っ掛かりになると思う。
0248デフォルトの名無しさん
2016/05/25(水) 17:32:24.26ID:8+OpaV010249デフォルトの名無しさん
2016/05/25(水) 18:09:12.23ID:mqK6DNQr最後の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:mqK6DNQrprintf("合格(A):%d人目 %d点",no+1,(int)tempmax);
0251デフォルトの名無しさん
2016/05/25(水) 18:46:25.87ID:grsxbFu1でも、数学英語の両方とも上から5,4,3,2,1て入力したら-858993459人目って出るようになった
どっかforの範囲間違えたかな?
0252デフォルトの名無しさん
2016/05/25(水) 20:07:47.10ID:GAaLSrgNエミュならこの板で良さげなんで、スレッド立ててみました。
http://itest.2ch.net/test/read.cgi/tech/1464174113
良かったら遊びに来てください。
■ このスレッドは過去ログ倉庫に格納されています