1 名前:デフォルトの名無しさん [2017/08/10(木) 20:21:23.44 ID:hEocmkh50.net] C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ 前 mevius.2ch.net/test/read.cgi/tech/1500293207/ www.geocities.jp/c_cpp_cs/about_c/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
449 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 12:44:46.02 ID:mP+8qDfMd.net] そもそも再現しないコードを提示されてもなあ
450 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 14:52:11.00 ID:YUFfLdQY0.net] >>437 処理系は何じゃらほい
451 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 15:25:21.73 ID:rugh+s9w0.net] >>437 >char charList[10000][10000]; // 32文字の文字列をn+1確保・・・@ くらい確保して実行すれば動くだろ
452 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 15:27:20.07 ID:xmgx6pPY0.net] int n = 2; char charList[n+1][32]; C言語的に、これってOKだっけ?
453 名前:デフォルトの名無しさん [2017/10/03(火) 15:39:40.20 ID:2Eoq+Ro56.net] >>446 だめ
454 名前:デフォルトの名無しさん [2017/10/03(火) 16:18:15.22 ID:9r7sfmBO0.net] char charList[n+1,32]こうしないとダメだよね?なにかっこ二つ使ってんだよ読み込めねえよって昔2次元配列で怒られたな
455 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 16:39:41.13 ID:uTLw0mNj0.net] >>446 最近は大丈夫になった
456 名前:デフォルトの名無しさん [2017/10/03(火) 16:45:08.36 ID:ZkSEHHAS0.net] うん、今の1回生が生まれた頃から
457 名前:デフォルトの名無しさん [2017/10/03(火) 18:25:07.16 ID:9r7sfmBO0.net] >>449 なったのか少しは便利になったのか
458 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 18:27:21.85 ID:eHwxQvGT0.net] 最近どころか、20年近く前からだ
459 名前:し >>448 みたいな文法は存在しないんだけど、どこの世界のC言語なんだろ [] [ここ壊れてます]
460 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 18:32:06.89 ID:HgW0fxVo6.net] >>448 みたいな文法欲しかった
461 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 18:48:25.91 ID:9KgPFlPY0.net] >>449 最近、ダメかもしれなくなったんだが
462 名前:デフォルトの名無しさん [2017/10/03(火) 18:53:27.85 ID:9r7sfmBO0.net] >>448 これダメだC#だった、エラーになるわ
463 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 19:11:20.28 ID:XytTuyvU0.net] LLVMの作者に物凄い勢いで嫌われたから…
464 名前:デフォルトの名無しさん [2017/10/03(火) 22:39:06.25 ID:djTGgeKPp.net] iOS11にしたらまともに入力できない このクソOS
465 名前:デフォルトの名無しさん [2017/10/03(火) 22:39:07.29 ID:djTGgeKPp.net] iOS11にしたらまともに入力できない このクソOS
466 名前:デフォルトの名無しさん [2017/10/03(火) 22:46:23.61 ID:djTGgeKPp.net] このクソOS死ね
467 名前:デフォルトの名無しさん [2017/10/03(火) 22:46:56.99 ID:djTGgeKPp.net] まともに入力できないって
468 名前:デフォルトの名無しさん [2017/10/04(水) 00:38:32.06 ID:JPTWWYYO0.net] >>446 www.buildinsider.net/language/clang/01
469 名前:437 mailto:sage [2017/10/04(水) 01:30:41.39 ID:+TP/cS/R0.net] 返事が遅れてすみません。レスありがとうございます。 再現性の乏しい質問で申し訳ないです。 >>438 nは変わらないです。 >>441 文字列操作ではあるんですが終端記号は書き込みません(全部文字だけ) >>444 OSはCentOS 6.9、言語はc++、コンパイラはgcc7.1.0です。 さっぱり原因が想像できないのですが、考えられる可能性としては、funcの中でメモリがずたずたに壊れたものの 偶然エラーにならずに戻ってきてmemsetでやっと死んだ、というパターンでしょうか?
470 名前:デフォルトの名無しさん [2017/10/04(水) 06:19:36.24 ID:Sd/env2d0.net] >>452 存在するだろ char charList[32]と等価になるぞ
471 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 06:24:24.64 ID:dCjKMF950.net] 二次元配列の宣言についての話で合って コンパイルが通るかどうかだけの話なんてしてねーぞ
472 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 07:22:39.57 ID:zhlDARQmM.net] >>462 func何やってんの?
473 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 08:10:59.64 ID:F93q6j3ba.net] *charList=0とかやってんじゃない?
474 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 08:22:11.58 ID:F93q6j3ba.net] ってか二次元配列と二重配列間違ってねーか? それとfunc呼んでからmemsetしたらfunc呼ぶ意味あるの? memsetもループさせるんじゃなく一回で全部fillした方がよくない? とかとか。
475 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 11:24:36.83 ID:hBVSLcAId.net] >>467 1行目 イミフ 2行目 意味があるから呼んでるんだろ 3行目 明確な利点があるならそれを書け
476 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 13:29:31.00 ID:ugGBRoRga.net] >>468 ポインタの配列と二次元配列を間違ってるのではないかってこと。 書き込んだあと空白で埋めたら意味なくないか?funcが何してるか知らんけど
477 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 13:49:31.85 ID:hBVSLcAId.net] >>469 funcの中身を知らないのに「意味無い」とか「意味あるの?」とかっていう書き込み、意味あるの? それを聞けば問題の解決になるの? 少なくとも空白を埋めてない部分があるし 問題が発生する範囲で簡略化したのかもしれないし 当然意味があるから呼んでるんだろうと思うのが普通
478 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 14:20:16.63 ID:Ot6iICCz0.net] C言語は俺に訊くなスレになってるな
479 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 14:30:40.85 ID:eeE5kOTG0.net] 最近オブジェクト指向が入り口で、C言語がわからんっていう子が多いからなあ
480 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 14:50:53.16 ID:38WTG0/g0.net] 再現する最小限のコードに削ってるうちに問題点を自ら発見して終了
481 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 14:54:54.68 ID:PNa+p1hk0.net] つーかfunc()以外の部分で特に問題が見当たらないならfunc()のせいで確定という単純明快な話 自作コードならfunc()もうpできるっしょ
482 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 14:56:07.21 ID:6Zs0a9ZSa.net] >>470 出されたソースのコメント見ると、配列の考え方が間違ってるように感じるけどね。それを示唆したかっただけだよ。
483 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 15:12:09.84 ID:f7rOF4qk0.net] >>462 ふと疑問に思ったんだが、 >func(charList); // charListに書き込む関数 関数を呼び出す際に、nの値を教えなくて良いのか?
484 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 16:34:23.23 ID:hBVSLcAId.net] >>475 例外とは関係ない 合コンじゃないんだから無駄に話を広げる必要はない 問題の解決が遅くなるだけ
485 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 16:35:46.39 ID:hBVSLcAId.net] あとはfuncの中身を見ないとなんとも 組み込みのショボい環境だとスタックオーバーフローって可能性も無いことは無いが
486 名前:デフォルトの名無しさん [2017/10/04(水) 16:51:26.35 ID:+admsRHQ0.net] struct I2C_MEM //構造体の型宣言 { char DEV_ADR ; char REG_ADR ; char DATA[0x03] ; }; struct I2C_MEM I2C_MEM[3] =//構造体の型宣言 { { 0x7C , 0x01 , 0x00000000 } { 0x7C , 0x01 , 0x00000000 } { 0x7C , 0x01 , 0x00000000 } } ;
487 名前:デフォルトの名無しさん [2017/10/04(水) 16:56:16.34 ID:+admsRHQ0.net] ↑構造体の初期化で charを連続4byte設定するときの書き方 0x00000000はたぶん違いますよね? どう書けば良いんですか? 初心者過ぎてすいません
488 名前:デフォルトの名無しさん [2017/10/04(水) 16:59:03.20 ID:+admsRHQ0.net] struct I2C_MEM //構造体の型宣言 { char DEV_ADR ; char REG_ADR ; char DATA[0x03] ; }; struct I2C_MEM I2C_MEM[3] = //構造体の初期化 { { 0x7C , 0x01 , 0x00000000 } { 0x7C , 0x02 , 0x00000000 } { 0x7C , 0x03 , 0x00000000 } } ;
489 名前:片山博文MZ mailto:sage [2017/10/04(水) 17:01:20.64 ID:HMkkIXOid.net] >>479 > struct I2C_MEM > { > char DEV_ADR ; > char REG_ADR ; > char DATA[0x03] ; > }; struct I2C_MEM I2C_MEM[3] = { { 0x7C , 0x01 , {0} } { 0x7C , 0x01 , {0} } { 0x7C , 0x01 , {0} } } ;
490 名前:デフォルトの名無しさん [2017/10/04(水) 17:04:07.51 ID:+admsRHQ0.net] >>482 回答ありがとうございます! ちなみにこれだったらどうかくんでしょうか? struct I2C_MEM I2C_MEM[3] = //構造体の初期化 { { 0x7C , 0x01 , 0x12345678 }, { 0x7C , 0x02 , 0x12345678 }, { 0x7C , 0x03 , 0x12345678 }, } ;
491 名前:片山博文MZ mailto:sage [2017/10/04(水) 17:19:18.44 ID:HMkkIXOid.net] >>483 struct I2C_MEM I2C_MEM[3] = { #ifdef BIG_ENDIAN //ビッグエンディアンの場合 { 0x7C , 0x01 , {0x12, 0x34, 0x56, 0x78} }, { 0x7C , 0x02 , {0x12, 0x34, 0x56, 0x78} }, { 0x7C , 0x03 , {0x12, 0x34, 0x56, 0x78} }, #else // リトルエンディアンの場合 { 0x7C , 0x01 , {0x78, 0x56, 0x34, 0x12} }, { 0x7C , 0x02 , {0x78, 0x56, 0x34, 0x12} }, { 0x7C , 0x03 , {0x78, 0x56, 0x34, 0x12} }, #endif } ;
492 名前:片山博文MZ mailto:sage [2017/10/04(水) 17:21:40.35 ID:HMkkIXOid.net] >>484 > char DATA[0x03] ; おっと、これじゃあ4バイト入らないぜ。 char DATA[4]; にしないと。
493 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 17:27:10.52 ID:PA2rRcfg0.net] 全くどうでもいいことだが最近の若いモンはスマホに合わせて上矢印なのな 一つ勉強になった
494 名前:デフォルトの名無しさん [2017/10/04(水) 17:28:20.90 ID:VznoOWf36.net] PCでも上じゃね?
495 名前:片山博文MZ mailto:sage [2017/10/04(水) 17:40:04.96 ID:HMkkIXOid.net] >>484 #ifdef BIG_ENDIAN # define ENDIAN_FIX(a,b,c,d) a,b,c,d #else # define ENDIAN_FIX(a,b,c,d) d,c,b,a #endif struct I2C_MEM I2C_MEM[3] = { { 0x7C , 0x01 , {ENDIAN_FIX(0x12, 0x34, 0x56, 0x78)} }, { 0x7C , 0x02 , {ENDIAN_FIX(0x12, 0x34, 0x56, 0x78)} }, { 0x7C , 0x03 , {ENDIAN_FIX(0x12, 0x34, 0x56, 0x78)} }, } ;
496 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 18:04:30.94 ID:9y3nqzOw0.net] 構造体の中身から推測すると、 書く順番はエンディアンに依存しないと思う 単純に配列の頭から1バイトずつ送信するだけ 仮にエンディアンで順番が変わるとしても どうせガッツリ環境依存なコードなんだから 依存しちゃえばいい 環境依存が無いコードを書くつもりなら、 charが1バイトかどうかにも依存しないようにしないとね
497 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 18:10:15.78 ID:9y3nqzOw0.net] >>488 みたいなマクロは最悪 エンディアンていう言葉を覚えたばっかりの初心者が作る糞コード
498 名前:デフォルトの名無しさん [2017/10/04(水) 18:48:35.51 ID:VznoOWf36.net] もちつけよw
499 名前:片山博文MZ mailto:sage [2017/10/04(水) 19:22:55.76 ID:HMkkIXOid.net] エンディアンについて解説が必要ですか? はい/いいえ
500 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 20:07:04.96 ID:V7FXDajl0.net] いいえ
501 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 20:09:03.80 ID:V7FXDajl0.net] Definitely no.
502 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 20:18:42.31 ID:38WTG0/g0.net] struct I2C_MEM //構造体の型宣言 struct I2C_MEM I2C_MEM[3] =//構造体の型宣言 この手の文法で自明なことをコメントにする文化はなくならないのかな
503 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 20:46:10.64 ID:hBVSLcAId.net] 俺のコードはその対極 大きな流れしかコメントをかかない
504 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 21:20:04.88 ID:azmmV5/P0.net] I2Cか。データは8ビットで受けて、8ビットシフトしてビットORだな。 data = hi<<16 | mid<<8 | lo
505 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 21:27:53.34 ID:hBVSLcAId.net] どう見ても送信
506 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 21:31:39.40 ID:hBVSLcAId.net] >>492 お前の糞マクロ、どの辺が糞か解説が必要?
507 名前:デフォルトの名無しさん mailto:sage [2017/10/04(水) 21:32:35.25 ID:hBVSLcAId.net] ちなみに、ゆで玉子は輪切り派
508 名前:デフォルトの名無しさん [2017/10/05(木) 01:23:13.38 ID:ioWgBjMx0.net] >>483 やってみな。
509 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 01:24:28.79 ID:ioWgBjMx0.net] やってみなじゃない。どう動くかじゃなくてどう書くかか。 どうなって欲しいのかが書かれてないから答えられないな。
510 名前:437 mailto:sage [2017/10/05(木) 03:25:02.16 ID:JVwY/YZa0.net] >>465 全体のコードは自作というか(自社製)ですが、funcは他社のライブラリなんです。 ソースがあればなんとかなったのかもですが・・・。 >>467 実際はfunc呼んだ後にcharListの値を呼んで色々作業しています。 >>469 普通の2次元char配列のつもりです。2次元配列というのはC言語的にはシンタックスシュガーにすぎず、 char a[m][n]もchar a[m*n]も等価なのですよね。なので、先頭ポインタから(m*n-1)個先までの アドレスの範囲内なら範囲外アクセスエラーは起こり得ないと理解しています。 >>474 の結論に至る前に、何かC言語で致命的な勘違いや思い込みをしているのかと 思って質問した次第です。今思うとエスパー回答を強いてしまって大変申し訳ありませんでした。 ひとまずはfuncを一切呼ばない形に直して事なきを得ました。 >>437 で言った、「charListをプリントしたりすると何故か問題なく動く」からそれで一時凌ぎする考えも 頭をよぎりましたが、思いとどまりました。 ひとまずこれで終えます。回答くださった方々、本当にありがとうございました。
511 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 03:26:43.92 ID:JVwY/YZa0.net] >>503 ×charListの値を呼んで ○charListの内容をstringに変換して(charListは不変)
512 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 05:32:30.50 ID:PdAAtG4s0.net] >>503 >char a[m][n]もchar a[m*n]も等価なのですよね そうだっけ?
513 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 05:39:44.88 ID:+DJIpzmcM.net] char[m][n]はchar**、char[m*n]はchar*、データ型は違う
514 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 08:10:49.48 ID:2SMjslBqM.net] funcに与える引数の条件がちゃんと理解できてないとか
515 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 08:15:39.56 ID:Nh1QNpvaF.net] char[m*n]って何? 結局ただの一次元配列でしょ?
516 名前:デフォルトの名無しさん [2017/10/05(木) 10:10:50.98 ID:6niZC7Nf0.net] >>506 堂々と嘘つくんじゃねえ sizeof(char[m][n]) != sizeof(char**)
517 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 10:11:07.83 ID:TrTYAooo0.net] >>503 > 2次元配列というのはC言語的にはシンタックスシュガーにすぎず、 > char a[m][n]もchar a[m*n]も等価なのですよね。なので、先頭ポインタから(m*n-1)個先までの > アドレスの範囲内なら範囲外アクセスエラーは起こり得ないと理解しています。 だいたいの実装では、特に char 類なら、動作上問題が起こることは考えにくいものの、 言語規格上の保証は無いよ。 https://www.jpcert.or.jp/m/sc-rules/c-arr30-c.html
518 名前:デフォルトの名無しさん [2017/10/05(木) 12:14:43.27 ID:6niZC7Nf0.net] そういう保証は紙っきれの条文より自分で確認・検証することが最重要だ いくら「保証されている」ことでもコンパイラがバグったり中には確信的に違反するケースまである 空想論の域を出ないくだらんことのために 現実的なアイディアを諦めていては生産性が上がらない
519 名前:デフォルトの名無しさん [2017/10/05(木) 12:51:26.83 ID:TRdRMfhC0.net] struct I2C_MEM { char DEV_ADR ; char REG_ADR ; char DATA[4] ; } static I2C_MEM0 ; I2C_MEM0.DEV_ADR = 0x7C ; I2C_MEM0.REG_ADR = 0x01 ; I2C_MEM0.DATA[4] = { 0x11,0x12,0x13,0x14 } ; ←これはエラーになる //I2C_MEM0.DATA[0] = 0x11 ; ←こちらのパターンはエラーにならない //I2C_MEM0.DATA[1] = 0x12 ; //I2C_MEM0.DATA[2] = 0x13 ; //I2C_MEM0.DATA[3] = 0x14 ; 4バイト一気に設定の書き方はどうすればいいんでしょうか?
520 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 12:51:30.07 ID:/OlbfMDH0.net] コメント邪魔
521 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 12:52:03.70 ID:/OlbfMDH0.net] 誤爆m(_'_)m
522 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 12:59:34.91 ID:/OlbfMDH0.net] >>512 一気に初期化する必要性がわからんが 糞コード assert( 4 == sizeof ( unsigned long ) ); *( unsigned long* )I2C_MEM0.DATA = *( unsigned long* )"\x11\x12\x13\x14";
523 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 13:01:44.78 ID:gOaVCYiad.net] >>512 配列の複数の要素を一気に代入する記述はない そういう風にひとつひとつ代入するか memcpy使ったり構造体にして代入したりする
524 名前:デフォルトの名無しさん [2017/10/05(木) 13:04:36.67 ID:TRdRMfhC0.net] なるほどー ありがとうございました
525 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 13:06:18.55 ID:/OlbfMDH0.net] ARMだと1バイトづつ初期化した方が小さくなるような気がする
526 名前:デフォルトの名無しさん [2017/10/05(木) 13:13:39.58 ID:/W/G46pt6.net] 無名配列のリテラルは初期化時には使えるけど代入には使えないってこと?
527 名前:デフォルトの名無しさん [2017/10/05(木) 13:16:53.65 ID:/W/G46pt6.net] 初期化時というか宣言時
528 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 19:51:18.71 ID:72rIdNeW0.net] ビッグエンディアンの環境を教えてください
529 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:02:42.15 ID:Xv32D2hUd.net] HP-UX、MOTOROLA、AIX、Solaris
530 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:09:22.11 ID:Xv32D2hUd.net] Apple PowerPC Mac、Sun Blade、SGI O2
531 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:14:07.63 ID:Xv32D2hUd.net] ビッグエンディアンの仮想環境はQEMU以外にないから、エミュレータを作れば有名になれるよ。
532 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:29:07.01 ID:Xv32D2hUd.net] >>524 ごめん、PowerPCのエミュレータにPearPCがあった。
533 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 20:30:19.57 ID:3IfCpLlr0.net] SH
534 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:32:46.00 ID:Xv32D2hUd.net] SolarisエミュレータにCHARONがある(有料)。ビッグエンディアンの環境はお金がかかるよ。
535 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 20:34:21.70 ID:3IfCpLlr0.net] 整数の負の数に1の補数を用いる環境 整数の負の数に絶対値と符号ビットを用いる環境 整数にトラップ表現がある環境 charが8の倍数ビットでない環境 を教えてください
536 名前:デフォルトの名無しさん [2017/10/05(木) 20:34:53.22 ID:olaqz/S6p.net] ARMは選択出来たっけ? まあ、みんなリトルで使ってるがな。 地味にMicroBlazeがビッグだな。
537 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 20:39:08.91 ID:3IfCpLlr0.net] MIPSもバイ ミドルエンディアンの環境を教えて下さい
538 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 20:41:19.68 ID:3IfCpLlr0.net] おれはリトル わざわざお尻から食べないよね普通
539 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:42:01.73 ID:Xv32D2hUd.net] 博物館に所蔵されてるようなコンピュータ調べて何の意味があるんだろう。。。
540 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 20:44:02.75 ID:3IfCpLlr0.net] >>522 >>523 のこと?
541 名前:片山博文MZ mailto:sage [2017/10/05(木) 20:46:00.84 ID:Xv32D2hUd.net] >>528 絶滅したコンピュータアーキテクチャの話はしたくない。
542 名前:デフォルトの名無しさん [2017/10/05(木) 20:46:52.00 ID:olaqz/S6p.net] 6502とか、地味に生きてるやん? あ、あれはエミュレータか。
543 名前:片山博文MZ mailto:sage [2017/10/05(木) 21:04:49.44 ID:Xv32D2hUd.net] ほとんどの環境のcharが8ビットなのは、基本ASCIIが7ビットで表現できることと、7ビットより8ビットの方が切りが良くてパリティビットなどに使えて便利だったことによる。
544 名前:デフォルトの名無しさん [2017/10/05(木) 21:09:26.31 ID:PAHxl06e0.net] 最近C言語ハマってる 言語がシンプルなのと直にコンピュータを操ってる感
545 名前:片山博文MZ mailto:sage [2017/10/05(木) 21:16:28.12 ID:Xv32D2hUd.net] charが7ビットだったら、パックトBCDもなかった。
546 名前:片山博文MZ mailto:sage [2017/10/05(木) 21:25:12.02 ID:Xv32D2hUd.net] 7ビットだったら1バイトの16進表示で1ビット無駄になるところだった。
547 名前:片山博文MZ mailto:sage [2017/10/05(木) 21:44:27.38 ID:Xv32D2hUd.net] GCCかLLVMを使えば、適当なアーキテクチャのC言語コンパイラーを自由に作ることができるらしい。
548 名前:片山博文MZ mailto:sage [2017/10/05(木) 21:54:15.38 ID:Xv32D2hUd.net] まあ、例えばNintendo SwitchのアーキテクチャをGCCかLLVMで定義すれば、そのアーキテクチャのコンパイラーが作れる訳だ。
549 名前:デフォルトの名無しさん mailto:sage釣 [2017/10/05(木) 22:04:36.58 ID:dkgh60ez0.net] そういう用途なら「高位合成」でggrと幸せになれるぞ LLVMは多分出番なしだ
550 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 23:19:53.46 ID:G8RM0vBkM.net] スイッチはテグラじゃないの?
551 名前:片山博文MZ mailto:sage [2017/10/05(木) 23:34:31.98 ID:Xv32D2hUd.net] うん、NVIDIA Tegra のカスタムだね。例えが悪かったか。
552 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 23:36:35.55 ID:3IfCpLlr0.net] >>536 charが16bitなら最近使ったけど
553 名前:デフォルトの名無しさん [2017/10/05(木) 23:58:01.04 ID:ioWgBjMx0.net] >>512 strncpy(I2C_MEM0.DATA, "\x11\x12\x13\x14", 4);
554 名前:デフォルトの名無しさん [2017/10/06(金) 00:05:52.06 ID:L6h7mNkA0.net] 実行時間の長い再帰関数(ハノイの塔)を実行しながら過程をglutというOpenGLライブラリで開いたウィンドウに描画させたいのですが方法ありませんか? ステップ毎に再帰関数を最初から実行するしかないですか?
555 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 01:40:53.41 ID:tqIbkLAn0.net] 再帰して、関数を無限に呼ばない。 答えをメモ化しろ 「メモ化」で検索!
556 名前:デフォルトの名無しさん [2017/10/06(金) 01:51:40.09 ID:FhOeSxdK0.net] -1.400000e+01 2.043459e+01 1.738866e-15 -1.398525e+01 2.029842e+01 3.900652e-01 -1.399008e+01 2.029842e+01 -1.300367e-01 3DデータのSTLと言う形式で使われてるこの様な数字の型は printfで出力する場合どの型フィールドになるのでしょうか %e %gだけでは何だか違います
557 名前:デフォルトの名無しさん [2017/10/06(金) 02:18:01.36 ID:x0C9073k0.net] >>549 いやずばり %e だと思うが?
558 名前:デフォルトの名無しさん mailto:sage釣 [2017/10/06(金) 03:03:00.77 ID:RA0YJgv70.net] >>546 最近出来た関数かな?
559 名前:デフォルトの名無しさん [2017/10/06(金) 03:37:10.08 ID:x0C9073k0.net] >>551 最近って・・・うーん。
560 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 03:40:43.51 ID:aYA4G4wj0.net] >>547 ハノイの塔の実行スレッド(A)と描画スレッド(B)を別にする Bは計算過程を変数Cに書き込む Aは画面リフレッシュのタイミングでCを描画
561 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 03:41:39.90 ID:aYA4G4wj0.net] 逆だw Aは計算過程を変数Cに逐次書き込む Bは画面リフレッシュのタイミングでCを描画
562 名前:デフォルトの名無しさん mailto:sage釣 [2017/10/06(金) 04:15:34.73 ID:RA0YJgv70.net] >>552 memcpyとか、strcpyとか、strncpyは知っているし、_s付き なんてのも知っているけど、これは初めてかな
563 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 06:22:04.70 ID:RySAjNni0.net] スペルミスかと思ったけど合ってるよな 間違い探し難しい どこが変?
564 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 07:43:06.02 ID:p4va+yl10.net] 検索でちゃんと 555 と 546 がヒットするし何か見間違えたんだろうか
565 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 07:45:29.75 ID:iQ5MtuBR0.net] 目を細めて見るとstmcpyに… いや無理があるな
566 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 08:33:19.91 ID:4Iec6HYc0.net] 老眼がすすんで字が読めなくなったジジイだろ >>546 が本当にスペルミスだったとしても全然面白くないツッコミだし 老害は早く死ねば良いのに
567 名前:デフォルトの名無しさん mailto:sage釣 [2017/10/06(金) 09:47:31.52 ID:RA0YJgv70.net] str[n]cpyが最後に0を書く条件は? memcpyを使わない理由は?
568 名前:デフォルトの名無しさん [2017/10/06(金) 10:38:12.40 ID:EDz06gtM6.net] 自分のミスはスルー
569 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 10:39:45.78 ID:d6jfQR1X0.net] strncpyは0で終端される条件が毎回わからなくて敬遠していたんです。 でも、strlcpyを使うようになってから肌年齢が10歳若返りました! 今は毎日がとっても楽しいです。
570 名前:デフォルトの名無しさん [2017/10/06(金) 10:54:46.60 ID:U5/7Dlcy0.net] >>548 おお!センクス!
571 名前:デフォルトの名無しさん [2017/10/06(金) 13:16:11.88 ID:qH0Ei3hn0.net] >>559 おまえさんが言わなくても老いた者は死にゆくように自然はできている それを妨げるなという主張なら医療業界に言え
572 名前:デフォルトの名無しさん [2017/10/06(金) 14:05:32.93 ID:UT/zOTNDp.net] 何の為にサイズ指定があるか、考えりゃわかるじゃん?
573 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 14:53:14.89 ID:4Iec6HYc0.net] >>564 「早く」の意味を調べてからほざきなさい
574 名前:デフォルトの名無しさん [2017/10/06(金) 15:16:39.88 ID:qH0Ei3hn0.net] >>566 形容詞には比較をつけろ 一年目でおぼえる初歩だろうがボケ
575 名前:デフォルトの名無しさん [2017/10/06(金) 15:20:28.76 ID:B4vVDMXU0.net] うんち!
576 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 17:45:14.09 ID:4Iec6HYc0.net] >>567 朝鮮語ではそう言うルールがあるのか? 日本語にはないぞ
577 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 18:41:01.91 ID:fZ4i0/3ka.net] >>567 >>559 のレスの中の「早く」の使い方は自然だと思うが…。 日本語学校の1年目に、どう教わったの?
578 名前:デフォルトの名無しさん [2017/10/06(金) 20:42:56.05 ID:qH0Ei3hn0.net] >>569 朝鮮語か日本語かには関係ない 電気屋のルールだ
579 名前:デフォルトの名無しさん [2017/10/07(土) 14:47:24.49 ID:f9dDdlSq0.net] >>555 >>546 にはそのstrncpy()が書かれているが?
580 名前:デフォルトの名無しさん [2017/10/08(日) 10:02:50.14 ID:iaWD4MFGE.net] PHPしかできないザコだったけどC言語が楽しい Cのスタンダードなコーディングスタイルってないですか? インデントにタブ使ってたりifに{}使ってなかったりするコードをよく見かけますけど
581 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 10:09:18.29 ID:+nfO/L5n0.net] 戦争でも起こす気か?
582 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 11:30:23.33 ID:HosRocIl0.net] >>573 C言語 コーディングスタイル でググれ あと結果の報告は要らん と言うか報告するな 理由は>>574 に書いてある
583 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 11:56:53.58 ID:SX/6L99bd.net] 戦いの火蓋は切って落とされた
584 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 13:00:43.13 ID:FR3ELF64M.net] インデントは空白4個だね
585 名前:デフォルトの名無しさん [2017/10/08(日) 13:04:33.16 ID:SXbZ1Yc30.net] >>573 ほんまC言語楽しいよな 俺もC#かWeb系スクリプト言語しか使ったことなかったんだが
586 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 13:04:53.34 ID:e96mZsST0.net] >>577 2つで十分ですよ
587 名前:デフォルトの名無しさん [2017/10/08(日) 13:05:13.53 ID:SXbZ1Yc30.net] C++はゴミ
588 名前:デフォルトの名無しさん [2017/10/08(日) 14:51:03.41 ID:c+/m9riq0.net] >>579 いやタブ1つにして表示幅はスペース4つ分だ。
589 名前:デフォルトの名無しさん [2017/10/08(日) 14:54:49.62 ID:c+/m9riq0.net] >>576 ああ。もうこのスレはスペース開けるか開けないか改行するかしないか何文字にするか中括弧はどうするか行末にバックスラッシュ入れて次行に書くか書かないかgotoどうするか等の話で延々と10年ぐらい費やされるんだろうな。 もちろんエディタの話に飛び火してviがvimがemacsがとなる。
590 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 14:55:08.52 ID:bhcsmcAx0.net] スペース一つで充分
591 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 15:03:04.04 ID:Eg4i3QFB0.net] プログラム終了前にfree()が必要かどうかを忘れちゃいかん。
592 名前:デフォルトの名無しさん [2017/10/08(日) 16:00:19.88 ID:tULmhvm40.net] ちょっと教えてくださいとあるHPから抜粋 意味が分からないので解説お願いします 私が負荷した文は<< >>で囲みます struct Person { char name[20]; int sex; // char sex; int age; double height; double weight; } person_s; <<←今までの自分の認識:Person構造体のインスタンスperson_sを生成 しかしこの認識は後述@でpがインスタンスであると推定できることから間違っていると推定できる>> << person_sは構造体宣言の為の鋳型と推定 しかし様々なプログラムをチェックするとここでインスタンス宣言している例も見受けられる >> << 変数が構造体宣言の為の鋳型なのかインスタンスなのかはコンパイラが記述から自動判断???>> person_s p; << ←pがPerson構造体のインスタンスであることは後述@のメンバ呼び出しで推定できる >> とかけば、不要な宣言を減らすことができます。 構造体メンバの初期化 各メンバの初期化方法として次のようなものがあります person_s p = {"Tom", 0, 20, 175.2, 66.5}; <<←構造体宣言鋳型person_sを使用しpをインスタンス宣言??>> // または person_s p; << 構造体宣言鋳型person_sを使用しpをインスタンス宣言?? >> p.name = "Tom"; << この記述でpが構造体Personのインスタンスであると推定できる ・・・@ >> p.sex = 0; << person_sは構造体宣言の鋳型 pはインスタンスであると推定できるが >> << 何故ダイレクトにPersonを使ってpを宣言しないのか? >> << 何故person_sなどという変数を使って間接的に宣言するのか? >> << うんちくきぼんぬ >>
593 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:03:19.22 ID:dE95R3nJ0.net] struct Person の前に typedef がありそうな雰囲気
594 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:13:28.90 ID:yi/NbOiJ0.net] ここかな https://qiita.com/nom
595 名前:unomu/items/1a72b0150ea0fcf442b0 typedef の書き漏れだろうね [] [ここ壊れてます]
596 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:38:19.39 ID:HosRocIl0.net] >>584 exit() の前にだろ
597 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:08:17.03 ID:F9J/pQ0V0.net] C++ならtypedefなくても可 多分.cppでビルド通したんだろうね
598 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:13:11.77 ID:dE95R3nJ0.net] >>589 後の句 person_s を型名として使ってるんで typedef は必須じゃない? (strust 省略の Person で宣言してるのとは違う)
599 名前:デフォルトの名無しさん [2017/10/08(日) 17:16:54.10 ID:tULmhvm40.net] なるほどー ありがとうございました
600 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:26:51.19 ID:F9J/pQ0V0.net] >>590 C++ではtypedefは不要だよ(別にあっても構わないけど) structとclassはメンバーのデフォルト設定がpublicかprivateかという違いを除けば構文的には全く同じように使える structで継承することすら出来る
601 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:32:00.82 ID:dE95R3nJ0.net] >>592 論点はそこじゃなくて struct Person { }; Person p; が C++ では文法として通るのは指摘の通り 質問元の記述では struct Person { } person_s; person_s p; こうなってるから、これじゃ C++ の文法でも通らないでしょうよ ってことで
602 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:37:28.39 ID:F9J/pQ0V0.net] 通るよ class宣言ではいちいちtypedefなど使わないのと同じように構造体でもtypedefは省略するのが一般的 むしろ先頭の構造体テンプレート名を省略して最後の型名だけ宣言する場合も多い
603 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:42:06.58 ID:dE95R3nJ0.net] https://ideone.com/e1pLf2 通ったっけ? って確認コード インスタンスとtypedef の区別つく?
604 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:04:45.47 ID:PUMPETat0.net] structが省略可能になってtypedefしなくなったのを typedefが省略可能と間違って覚えてるんじゃないだろうか
605 名前: mailto:sage [2017/10/08(日) 18:08:10.27 ID:dlDwfjxk0.net] >>594 >>595 を見る限り通らないようだね
606 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:14:58.26 ID:ALuk3l/eM.net] あれ? 通らないのかこれ?
607 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:20:47.85 ID:dE95R3nJ0.net] 型名のエイリアス宣言と その型のインスタンスの生成 typedef を省略した場合には、全く同じ記述になるんだけど 後者のインスタンスの生成で翻訳してるぜ
608 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:29:26.73 ID:HosRocIl0.net] 通ると思う方がどうかしてる
609 名前: [] [ここ壊れてます]
610 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:32:58.84 ID:LFQQ2ZHvd.net] なぜ通ると思ったのか
611 名前:デフォルトの名無しさん [2017/10/08(日) 19:03:56.08 ID:uO7C8UFXE.net] コーディングスタイルってたくさんあるんですね とりあえず検索したらエリートの人達が使ってそうなものを集めてみました C Coding Standard - CMU (ECE) https://users.ece.cmu.edu/~eno/coding/CCodingStandard.html GNU Coding Standards https://www.gnu.org/prep/standards/html_node/Writing-C.html NASA C Style Guide homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf C Coding Style - GNOME Developer Center https://developer.gnome.org/programming-guidelines/stable/c-coding-style.html.en CERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ Linux kernel coding style https://www.kernel.org/doc/html/v4.10/process/coding-style.html どれも難しそうなのでコーディングスタイル見るのやめようと思います。 githubで適当に見ても全然統一されてないし とりあえずインデントは空白8個で{}を省略しないルールだけにしたいと思います。
612 名前:デフォルトの名無しさん [2017/10/08(日) 19:04:57.70 ID:uO7C8UFXE.net] 空白8個なのはメモ帳で見た時にこのくらいだから合わせてるだけです
613 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:18:41.81 ID:PUMPETat0.net] また戦争がしたいのか、アンタは
614 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:26:45.12 ID:+nfO/L5n0.net] 戦闘民族
615 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:30:12.30 ID:HosRocIl0.net] 書いてりゃわかると思うけど8は多すぎ 単に昔のシステムがそうだったと言うだけのことだから4とか2でいいと思う
616 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:36:28.95 ID:+nfO/L5n0.net] あーあ
617 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 21:11:10.70 ID:bhcsmcAx0.net] >>573 会社や複数人作業ならそれにあわせる 一人で書く分には何でもいいだろ なんなら、PHPで使ってたスタイルでいいだろ ってか、PHPの時はどうしてたんだよ
618 名前:デフォルトの名無しさん [2017/10/09(月) 01:05:37.72 ID:6VRPxojV0.net] マンデルブロの描画がうまくいきません。ズームするとすぐに単調になってしまいます。 動画 https://youtu.be/Ompp_YwrLPw ソースコード codepad.org/mlm33eRT
619 名前:片山博文MZ mailto:sage [2017/10/09(月) 01:30:56.68 ID:vdfcSFiBd.net] >>609 クリックしたら画面の中心を移動させる。
620 名前:片山博文MZ mailto:sage [2017/10/09(月) 01:32:01.57 ID:vdfcSFiBd.net] ドラッグされたらずらす。
621 名前:デフォルトの名無しさん [2017/10/09(月) 01:53:40.87 ID:6VRPxojV0.net] >>610 一応クリックするとある境界線付近を拡大するようにプログラムに書いてるのですが...
622 名前:片山博文MZ mailto:sage [2017/10/09(月) 03:32:25.69 ID:vdfcSFiBd.net] >>612 環境によって座標系が違うのかも知れない。ずらす値を変えてみては?
623 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 03:39:59.55 ID:69HXGpsc0.net] >>609 単調になるのは k のループ回数が少ないせいでは
624 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 06:38:40.98 ID:hRP3P7r40.net] そうだね k=1000くらいで
625 名前:デフォルトの名無しさん [2017/10/09(月) 08:53:44.75 ID:IXUwPWpS6.net] >>613 変えても同じでした >>614 >>615 なるほど!家に帰ったらやって見ます!
626 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:35:07.86 ID:IkImbMA7a.net] >>594 変数宣言が全てtypedefになるなんて狂気な言語 実例を教えてくれ
627 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:51:45.98 ID:UMVukllE0.net] 俺はこの書き方 if (condition) { } else { }
628 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:55:27.10 ID:pMEz2IHg0.net] コーディングスタイルにこだわる奴は素人。
629 名前:デフォルトの名無しさん [2017/10/09(月) 12:12:59.35 ID:9ioWbZDx6.net] Linuxのソースコードは?
630 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 13:24:11.42 ID:N3YX2Zf80.net] ソース整形ツールの動作オプションの数で眩暈がするぜw
631 名前:デフォルトの名無しさん [2017/10/09(月) 14:12:40.72 ID:98rFBdXp0.net] ■■たびたびお世話になります なにが悪いのかご指摘おねがいします■■ struct I2C_MEM { char DEV_ADR ; char REG_ADR ; char DATA[4] ; } static I2C_MEM[2] ; task02_tst ( struct I2C_MEM *aaa ) { char i,a[2],b[2],c[2]; i = 0 ; while ( i <= 1 ) { aaa -> DEV_ADR ; a[i] = *aaa ; // データタイプがインコンパチでエラーになる char DEV_ADR を参照してくれない? aaa -> REG_ADR ; b[i] = *aaa ; // データタイプがインコンパチでエラーになる char REG_ADR を参照してくれない? aaa -> DATA ; c[i] = *aaa // データタイプがインコンパチでエラーになる char DATA を参照してくれない? p += 1 ; i += 1 ; } }
632 名前:デフォルトの名無しさん [2017/10/09(月) 14:22:20.38 ID:98rFBdXp0.net] ↑単純に関数内で構造体のデータにポインタ+インデックスでアクセスしたい
633 名前:デフォルトの名無しさん [2017/10/09(月) 14:26:06.29 ID:98rFBdXp0.net] 間違い発見 p += 1 ; は aaa += 1 ; に置き換えてください
634 名前:片山博文MZ mailto:sage [2017/10/09(月) 14:39:31.76 ID:vdfcSFiBd.net] >>622 何がしたいのかわからない。 代入の左辺は右辺と互換性のある型じゃないといけないし、配列まるごとの代入はできない。 まずは代入の型をそろえないと。
635 名前:片山博文MZ mailto:sage [2017/10/09(月) 15:09:21.54 ID:vdfcSFiBd.net] char型のデータを代入したいのなら、両辺の型をcharにしないといけないよ。
636 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 15:26:29.02 ID:G+wiEnLh0.net] >>622 > aaa -> DEV_ADR ; > a[i] = *aaa ; 例えばこの部分は a[i] = aaa->DEV_ADR; という処理を意図してるのではないかと思う ただし aaa->DATA のところは char* 型になるので char 型の c[i] に代入できない
637 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 15:56:12.50 ID:of8Vs49yM.net] >>622 エスパーするとたぶんこう言うことだと思う task02_tst ( struct I2C_MEM *aaa ){ int i; char a[2],b[2],c[2]; for(i = 0; i < 2; i++){ a[i] = aaa[i].DEV_ADR; b[i] = aaa[i].REG_ADR; c[i] = aaa[i].DATA; // ここは >>627 の言う通りなにをしたいのかよくわからん } }
638 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 17:01:40.23 ID:u+Z6y4O20.net] 初心者相手に表記法を変えると理解しにくいかも。 本質から外れた部分が目についてしまうからね。 int i = 0; while ( i <= 1 ) { a[i] = aaa -> DEV_ADR ; // ポインタaaaが指す構造体の DEV_ADR メンバの値 b[i] = aaa -> REG_ADR ; // ポインタaaaが指す構造体の REG_ADR メンバの値 c[i] = aaa -> DATA ; // c[i] の型と DATA メンバの型が違うからエラー aaa += 1 ; i += 1 ; } てな感じかと。 >>627-628 をまとめただけ、だけど。
639 名前:デフォルトの名無しさん [2017/10/09(月) 17:19:35.64 ID:tFlwnlNI0.net] >>629 c を char *c[2] で宣言しておけばなんとかなるね。
640 名前:デフォルトの名無しさん [2017/10/09(月) 17:34:38.15 ID:98rFBdXp0.net] 皆様 どうもありがとうございます とりあえず代入の書き方が知りたかっただけでありまして ちなみにインデックスを使用した配列メンバーのアクセスなんだけど c[i] = aaa -> DATA +0 ; d[i] = aaa -> DATA +1 ; e[i] = aaa -> DATA +2 ; f[i] = aaa -> DATA +3 ; こんな書き方ってできるの?
641 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 17:44:30.12 ID:N3YX2Zf80.net] ポインタを返す場合はそういう書き方 aaa->DATA+3 ポインタの指してる先を求めたい場合は aaa->DATA[3] 左辺が何を要求しているのか(どういうものを操作したいのか)を頭の中で整理せずに 記述法だけを即物的にトレースするのはとてもまずい
642 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:00:40.01 ID:tNKVEDsJ0.net] task02_tst()の呼び出しが task02_tst(I2C_MEM)なのか task02_tst(&I2C_MEM[1])なのかわからん 前者と仮定するとDEV_ADRにアクセスする方法は 1. (*(aaa + i)).DEV_ADR 2. aaa[i].DEV_ADR 3. (aaa + i)->DEV_ADR なんかが考えられるけど(2は1の糖衣構文)、ドットとアローそれぞれの 左側の違いを理解しないと先には進めないよ
643 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:02:21.36 ID:tda6mQVw0.net] >>631 意図が分からないからマトモに答えら
644 名前:れない 実際に数字入れて教えてくれ 例えば>>622 はI2C_MEM = {4, 8, {0, 1, 2, 3}} でa,b,cはどうなるの? [] [ここ壊れてます]
645 名前:デフォルトの名無しさん [2017/10/12(木) 10:23:33.14 ID:jY+yK3vs6.net] 過疎ってるな
646 名前:デフォルトの名無しさん [2017/10/12(木) 11:18:46.53 ID:mQ4S5/8+0.net] ちょっと質問です ↓下記のようなwhileの中身を複製するために使う実体化されない変数iをコンパイラ制御のための変数と明示する書き方ってあるんですか? task02_tst ( I2C_MEM_typ *p , char i) { char i ; i = 0 ; while ( i < 2 ) { p = p + i ; a[i] = p -> DEV_ADR ; b[i] = p -> REG_ADR ; c[i][0] = p -> DATA[0] ; c[i][1] = p -> DATA[1] ; c[i][2] = p -> DATA[2] ; c[i][3] = p -> DATA[3] ; } }
647 名前:デフォルトの名無しさん [2017/10/12(木) 11:24:19.55 ID:mQ4S5/8+0.net] task02_tst ( I2C_MEM_typ *p ) { char i ; i = 0 ; while ( i < 2 ) { p = p + i ; a[i] = p -> DEV_ADR ; b[i] = p -> REG_ADR ; c[i][0] = p -> DATA[0] ; c[i][1] = p -> DATA[1] ; c[i][2] = p -> DATA[2] ; c[i][3] = p -> DATA[3] ; } } に修正します
648 名前:デフォルトの名無しさん [2017/10/12(木) 11:26:34.34 ID:mQ4S5/8+0.net] task02_tst ( I2C_MEM_typ *p ) { char i ; i = 0 ; while ( i < 2 ) { p = p + i ; a[i] = p -> DEV_ADR ; b[i] = p -> REG_ADR ; c[i][0] = p -> DATA[0] ; c[i][1] = p -> DATA[1] ; c[i][2] = p -> DATA[2] ; c[i][3] = p -> DATA[3] ; i += 1 ; } } に修正します
649 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 11:50:40.24 ID:z+R5CP9n0.net] >>636 先ず日本語をなんとかした方がいい 『whileの中身を複製する』とはどういうことか? 『実体化されない変数』とは何か? 『コンパイラ制御のための変数』とは何か?
650 名前:デフォルトの名無しさん [2017/10/12(木) 12:32:35.60 ID:mQ4S5/8+0.net] こんな感じで構造体をインデックスで指定した転送命令にコンパイルする意図で書いています p = p + i ; //*実体化されない(マシンコード化されない)コード mov a[0] , [構造体I2C_MEMの基底番地+0] mov b[0] , [構造体I2C_MEMの基底番地+1] mov c[0][0] , [構造体I2C_MEMの基底番地+2] : mov c[0][3] , [構造体I2C_MEMの基底番地+5] i += 1 ; //*実体化されない(マシンコード化されない)コード p = p + i ; //*実体化されない(マシンコード化されない)コード mov a[1] , [構造体I2C_MEMの基底番地+6] mov b[1] , [構造体I2C_MEMの基底番地+7] mov c[1][0] , [構造体I2C_MEMの基底番地+8] : mov c[1][3] , [構造体I2C_MEMの基底番地+11] i += 1 ; //*実体化されない(マシンコード化されない)コード ・・・で意図通りコンパイルしてくれるわけですが 実体化されない(メモリー空間またはレジスタファイルにアサインされない)char iの意味が 希薄になるのでコンパイラに対する変数だよと明示(コンパイラ&設計者に)したいのだが そんな書き方ある?ということでありまして
651 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 12:41:11.33 ID:Z8zboj8V0.net] 多少は意図した記述に沿って機械語出力するだろうけど、 保障されてるわけでもないし、最適化他でどうなるかもわからん 「機械語でこうなって欲しい」という目的を達成させるならその部分を機械語で書くか、 (環境によるだろうけど)その部分だけをインラインアセンブラにする
652 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 12:42:56.26 ID:cscfLNVP0.net] memcpy使ったらいいんじゃないの?
653 名前:片山博文MZ mailto:sage [2017/10/12(木) 12:52:32.73 ID:loBt1/dEd.net] volatile
654 名前:デフォルトの名無しさん [2017/10/12(木) 13:04:26.04 ID:mQ4S5/8+0.net] うーーん・・・ volatileは最適化抑止(消すなー!)のための記述と認識しているんですが volatileの逆の機能が欲しいんですよね 実体化するなー!ってやつです
655 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 13:37:51.69 ID:jX4dlPv10.net] volatile揮発性の当初の意図は 70年代コンピュータでの磁気コアメモリに置いておく、程度なんじゃあねえの
656 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 13:45:28.14 ID:Z8zboj8V0.net] 実体化するな=機械語としてコードにおくな ということは、言語上での変数を一切使わずに繰り返し展開するような テンプレートやマクロでメタプログラミングしたい って話になるが・・・ #define IMP(idx) do { \ a[idx] = p[idx].DEV_ADR; \ b[idx] = p[idx].REG_ADR; \ : : 以下同じ様に記述 : c[idx][3] = p[idx].DATA[3] ; } whle(0) IMP(0); IMP(1); IMP(2); 変数を使ってループできないから 繰り返し分リテラルを手で並べる必要あるしー 正直ほめられたやりかたじゃないと思うわ
657 名前:デフォルトの名無しさん [2017/10/12(木) 14:25:00.48 ID:1sF6m3D2p.net] 実体化させたく無いものを記述? …スラ二本じゃダメなのか?
658 名前:デフォルトの名無しさん [2017/10/12(木) 14:30:09.97 ID:9bJ1Vwh10.net] そういう話ではないでしょ そもそもループによるコードのキャストは 記述を短縮化するのが目的なんだから キャストのためのループであることをコンパイラに 推論させるための変数指定の仕組みがあるのかな?ってはなし
659 名前:デフォルトの名無しさん [2017/10/12(木) 14:32:07.54 ID:9bJ1Vwh10.net] まあ 指定しなくても現状でコンパイラは推論してるけれどもねw なんかキモチ悪いといえばキモチ悪いんで指定できればうれしいってだけです
660 名前:デフォルトの名無しさん [2017/10/12(木) 14:36:32.09 ID:OhN0e73F6.net] 死ねゴミ
661 名前:デフォルトの名無しさん [2017/10/12(木) 14:37:45.66 ID:9bJ1Vwh10.net] なんかすぐ出てこないところをみると そこらへんはコンパイラまかせなのね
662 名前:デフォルトの名無しさん [2017/10/12(木) 14:38:53.90 ID:OhN0e73F6.net] クッサ
663 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 14:45:29.40 ID:Z8zboj8V0.net] 結局 >>639 だったのか・・・
664 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 14:46:41.92 ID:z+R5CP9n0.net] 返答が幾つもついてるのに出てこないとか言っちゃうのは見たいものしか見ない人の典型だね
665 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 14:48:17.07 ID:XqOCC09Fd.net] とりあえずお前には無理だ 諦めな
666 名前:デフォルトの名無しさん [2017/10/12(木) 15:03:43.28 ID:9bJ1Vwh10.net] 大体わかりました ありがとうございました
667 名前:デフォルトの名無しさん [2017/10/12(木) 15:06:24.03 ID:OhN0e73F6.net] 一から10まで足し合わせるプログラムを教えてください。
668 名前:片山博文MZ mailto:sage [2017/10/12(木) 15:10:29.76 ID:loBt1/dEd.net] >>657 #include <stdio.h> int main(void) { int i, n = 0; for (i = 1; i <= 10; ++i) n += i; printf("%d\n", n); return 0; }
669 名前:デフォルトの名無しさん [2017/10/12(木) 15:18:14.51 ID:OhN0e73F6.net] >>658 ありがとうございます!
670 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 18:50:09.63 ID:7bIAw6590.net] 人に思いを正しく伝えられない奴がうまくプログラミングできるとは思えないけど大丈夫なんだろう
671 名前:デフォルトの名無しさん [2017/10/12(木) 20:36:00.66 ID:1sF6m3D2p.net] 俺は逆だと思っている。 人に上手く思いを伝えられないからこそ、 表現手段を駆使して伝えようと努力するんだよな。 絵とか音楽とか、クリエイターってそんな生き物。
672 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 21:49:52.42 ID:wn8w1zGC0.net] >>661 > 絵とか音楽とか、クリエイターってそんな生き物。 全然違う あいつらは自分の思いを伝えられるのは自分の表現法方だけだと思ってる 絵を描く奴で説明文を書いて思いを伝えるやつなんていないだろ
673 名前:デフォルトの名無しさん [2017/10/12(木) 23:57:59.88 ID:5ILt7KpA0.net] >>645 メモリマップドI/Oに使える。特定のアドレスを読むとキーボードで入力した文字が読めるとか、そういうやつ。 読んだ直後に内容が変わる可能性があるので volatile でないとまずい。
674 名前:デフォルトの名無しさん [2017/10/13(金) 00:30:38.46 ID:neFZx4WS0.net] 共有メモリとか mmap() して複数のプロセスまたはスレッドがアクセスする領域も同じか。 あれ? こんなのちょっと前に話題にならなかったか?
675 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 06:51:32.49 ID:txebgbcNM.net] DMAとかもあるわな
676 名前:デフォルトの名無しさん [2017/10/13(金) 12:09:21.29 ID:UePpwGnn0.net] ちょっとお尋ねします char *a ; と記述すると ↓ char a ; 実体化 int (&a) ; 非実体化(コンパイラが使用する変数) が生成される *の概念が無いと char a ; 実体化 int a_point ; 実体化(アドレス長=intとする) a_point = &a ; 実体化 例えばこう書くことになる ポインタは関数内で宣言できる その場合そのポインタの寿命は関数内に限定される こんな感じの認識であってますか?
677 名前:デフォルトの名無しさん [2017/10/13(金) 12:21:34.93 ID:ZC5rLpvkM.net] ポインタの寿命はプログラム内じゃないん?
678 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 12:24:24.54 ID:y6HLA65k0.net] 実体化とか 非実体化とかの オレオレ用語は何を意図してるのかわからん
679 名前:デフォルトの名無しさん [2017/10/13(金) 12:29:00.47 ID:UePpwGnn0.net] >>667 ということはプログラム内でユニークな名前をつけなければならないということですね?
680 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 12:29:33.87 ID:x6piWjtI0.net] >>666 言ってる意味がわからない 何の言語やってたの?
681 名前: mailto:sage [2017/10/13(金) 12:30:40.15 ID:KnON5zi30.net] >>666 >char a ; 実体化 >int (&a) ; 非実体化(コンパイラが使用する変数) ポインタを定義したからといって,即応して実体が生成されることはない ポインタがさす実体は自分で生成しないといけない
682 名前:デフォルトの名無しさん [2017/10/13(金) 12:31:44.24 ID:UePpwGnn0.net] C言語です 実体/非実体とは機械語に変換されるかどうかということです
683 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 12:33:52.57 ID:piAojqU/0.net] 実体化とか非実体化とか、オブジェクト指向の概念でしょ。 Cではリテラルに対応するエリアがあって、それをデータの入れ物にするか、アドレスの入れ物にするか、だけでしょ。 いずれにしろ変数の寿命はグローバルスコープに定義するか、静的(static)に定義しないかぎり、 使われる関数のスコープ内に限られるでしょ。
684 名前:デフォルトの名無しさん [2017/10/13(金) 12:33:53.32 ID:/fw1jTt60.net] >>666 > char a; 実体化 というのを除き、だいたい合ってる char *a;ではcharの実体は作られずに int(&a);だけが作られる Cの前身のBでは、*3 = 1;で メモリの3番地に1を書き込むようになっていた アドレス演算子もあって auto a, b; /* 型の概念がないので記憶クラスだけ */ a = &b; /* bとして使っているメモリのアドレスを取得 */ *a = 1; /* bに1を代入 */ つまり、おまえさんの言うように整数変数を そのままアドレスの表現に使っていた
685 名前:デフォルトの名無しさん [2017/10/13(金) 12:42:43.01 ID:UePpwGnn0.net] なるほど ありがとうございました
686 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 12:46:55.16 ID:DPD6/A6xM.net] >>672 そんなものはコンパイラ次第で変わる 定数でアドレス取ってなきゃ実体を生成しないとか普通にあるし
687 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 12:48:21.81 ID:y6HLA65k0.net] 機械語に翻訳されるかどうかは それまでの文意や環境(特に最適化)次第だもんな
688 名前:デフォルトの名無しさん [2017/10/13(金) 12:49:08.21 ID:UePpwGnn0.net] ちょっとお尋ねします ベテランとお見受けする方は /* */ ↑コメントにこれつかいますけど // ↑何故これつかわないんですか? なにかしらトラブルの元になったりするんですか?
689 名前:デフォルトの名無しさん [2017/10/13(金) 12:49:26.38 ID:Xi3f71oh0.net] すげえややこしいな コンパイラ作りたくなってきた
690 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 13:06:01.52 ID:QZe0YwYUM.net] >>678 C99準拠を仮定できないなら前者を使わざるをえない 複数行をコメントする場合や文の途中をコメントする場合は基本的に前者を使う 行の後半にコメントを書く場合は両方使う
691 名前:デフォルトの名無しさん [2017/10/13(金) 13:09:27.27 ID:UePpwGnn0.net] おおおおおお ありがとうございます なるほどねー そういうことですか
692 名前:デフォルトの名無しさん [2017/10/13(金) 14:53:58.16 ID:yVfJQeWEp.net] //は、文字コード特有のバグがあってだな。
693 名前:デフォルトの名無しさん [2017/10/13(金) 15:14:34.29 ID:/fw1jTt60.net] >>678 1行コメントならもちろん//を使うが コメントが2行以上になる可能性が否定できない場合、 毎行いちいち//が必要なのは面倒なので /* */ と折り返す恰好にする それと1行コメントは内容的に馬鹿っぽくなりやすい なんて気持ちもちょっとある
694 名前:デフォルトの名無しさん [2017/10/13(金) 16:31:54.32 ID:UePpwGnn0.net] C99非準拠の環境って工場のメンテとかそんな感じっすかね
695 名前:デフォルトの名無しさん [2017/10/13(金) 16:50:15.81 ID:UePpwGnn0.net] >>682 も気になるな アスキーコード "2F2F"って何かあるんですか?
696 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:10:14.68 ID:51NkmwHu0.net] emacsだとコメントリージョンは/*になるからだろうな。
697 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:23:15.84 ID:kwktlkZb0.net] >>682 の話は行の最後に \ があると次の行に継続するってやつかな。 その言語仕様と Shift-JIS の特定文字との組み合わせで問題が起きる。 「表」や「能」は文末に来る可能性が高い字でしょ。
698 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:26:39.84 ID:KnON5zi30.net] いまどき shift jis ですか?
699 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:37:27.25 ID:nzA1z5Pk0.net] 苦Cで勉強してるけど文字列がよくわからん あれいる?
700 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:43:15.33 ID:KnON5zi30.net] >>689 どれだ?
701 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:43:35.67 ID:z3X0WVAY0.net] ただの\0終端の文字型の配列を便宜的に文字列と呼んでいるだけ
702 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:52:09.39 ID:nzA1z5Pk0.net] 文字列処理関数 わざわざ配列に文字列入れる意味あるのか?
703 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 17:56:53.82 ID:KnON5zi30.net] >>692 https://9cguide.appspot.com/14-03.html か? 入力に scanf() 系を薦めているのは古い(fgets() を使うべき)とか問題はあるが、 内容は基本的で絶対に必要なものだ C には「文字列型」はなく文字型の配列で扱うのは基本的な了解事項だ
704 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:02:19.89 ID:nzA1z5Pk0.net] >>693 それ 結構重要なんだな atoi型とかもよくわからんが
705 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:05:48.92 ID:1QR3MvqoM.net] >>692 入れないと文字処理何もできないよ
706 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:06:49.21 ID:KnON5zi30.net] >>694 atoi() は文字列の表現からint型に収まる表現に変換するもの C では "123" と 123 を厳密に区別する
707 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:07:38.35 ID:nzA1z5Pk0.net] わざわざ配列でやるのってprintfじゃ上書きできないから?
708 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:09:43.61 ID:KnON5zi30.net] sprintf() というものはある
709 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:26:23.09 ID:D1RCmTnA0.net] atoi は 文字列から数値へ変換する方向 (s)printf は 数値から文字列に変換する方向
710 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 18:46:00.32 ID:nzA1z5Pk0.net] すまんよくわからん まぁ配列の重要性はわかったけどさ
711 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 19:47:45.81 ID:9FeTZoAH0.net] 入力して下さい ? ? の二倍は--- っての作りたい
712 名前:デフォルトの名無しさん [2017/10/13(金) 19:53:08.82 ID:/fw1jTt60.net] またfgets厨が湧いたか Cスレには付きものだが 誰が吹き込んでるんだかしつこさが異常なんだよな まったく
713 名前:デフォルトの名無しさん [2017/10/13(金) 20:16:18.00 ID:qDJA92iZ6.net] >>701 /* -*- C -*- */ #include <stdio.h> int main() { int input; scanf("入力して下さい:%d", &input); printf("%dの二倍は%d\n", input, input * 2); return 0; }
714 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 20:21:21.47 ID:KnON5zi30.net] >>702 fgets() の方が総合的にすぐれていると思うのだが
715 名前:デフォルトの名無しさん [2017/10/13(金) 21:08:48.11 ID:/fw1jTt60.net] 何がどのように何に対して優れているんだ? 腐っても工学者たるもの客観的で再検証可能な主張をしてみな
716 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 21:11:50.63 ID:D1RCmTnA0.net] >>703 scanf はメッセージを出力したうえで値を受け取る関数じゃないんだ 残念ながら
717 名前:デフォルトの名無しさん [2017/10/13(金) 21:17:30.86 ID:yVfJQeWEp.net] え?scanfは、この通り打ち込まないと認識しないよって事だろ?
718 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 21:20:10.60 ID:D1RCmTnA0.net] >>701 のは 入力して下さい も含めて入力を要求してたのか こりゃ失礼
719 名前:デフォルトの名無しさん [2017/10/13(金) 21:31:55.79 ID:DZqiVJRN0.net] >>706 dクス
720 名前:片山博文MZ mailto:sage [2017/10/13(金) 21:37:13.63 ID:aO55acrud.net] >>701 #include <stdio.h> int main(void) { int n; char buf[32]; printf("入力して下さい:"); fgets(buf, sizeof(buf), stdin); n = atoi(buf); printf("%dの二倍は%d\n", n, n * 2); return 0; }
721 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 21:39:30.87 ID:KnON5zi30.net] >>705 scanf() はバッファオーバーランの温床 scanf("%s"); と何気なく書いてしまうとアウト 最初からバッファサイズを意識しなければならない fgets() の方が教育的
722 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 22:15:45.85 ID:xDZ8VANT0.net] それ都市伝説だから、単に使い方間違えてるだけだから! フィールド幅をちゃんと指定すればscanf系でも安全だよ? まぁ、エラーメッセージの都合上fgets使うかもだけど。。。
723 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 22:16:23.56 ID:HDAg9FRW0.net] gets_s()やscanf_s()を使えば済む話に思えるが
724 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 22:20:11.49 ID:vlU7OwXLM.net] 言いたいことは分かるなぁ printfだって使い方間違えればフォーマットストリングで死ぬしな
725 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 22:28:05.05 ID:KnON5zi30.net] >>712 そのフィールド幅の設定にマクロを使って指定できない,ハードコーディングの形になってしまう これでは確保側との連携が取れない
726 名前:デフォルトの名無しさん [2017/10/13(金) 22:31:22.01 ID:KDt3KwS+0.net] C言語はアセンブラのラッパー言語だから、そう言うもんは各自が気を付ければいいのであって、へんな関数量産すんな。
727 名前:デフォルトの名無しさん [2017/10/14(土) 04:50:34.97 ID:rkGKts9o0.net] scanf() は POSIX.1-2008 で m という修飾子が規定されてだな・・・ https://paiza.io/projects/que1l9qus5fMStBgkGgF9w
728 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 05:25:15.07 ID:G4fIdpwa0.net] m修飾子はscanf()の中でバッファの確保とポインタ代入をしてくれる、か。 使用者側がバッファを用意して容量はこれだけ、と言明するのとはちと違うね。 実用だと書式文字列をsnprintf()か何かで生成する手かなぁ。
729 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 06:38:32.00 ID:qjmLCkqj0.net] 実用なら動的確保で問題ねーだろ
730 名前:デフォルトの名無しさん [2017/10/14(土) 06:44:41.93 ID:YpZiBRe40.net] >>718 文字数制限したい場合は %3mc のように c を使うとできる。メモリ確保は相変わらず scanf() 側でやるので後で free() が必要であることには変わりがないが。 https://linuxjm.osdn.jp/html/LDP_man-pages/man3/scanf.3.html
731 名前:デフォルトの名無しさん [2017/10/14(土) 07:16:53.80 ID:F19RwFTi0.net] >>711 くだらんなあ %sのためにわざわざscanfなんぞ使う珍獣の話しかできんのかおまえは
732 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 09:37:54.97 ID:wj7CJkun0.net] >>721 この話の発端のとあるC教育サイト https://9cguide.appspot.com/14-03.html では scanf("%s"); を使っちまっている 珍獣というほどのものではないのでは? 禁じ手をやってしまう scanf() は悪
733 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 12:38:59.99 ID:wj7CJkun0.net] >>720 所有権をうんぬんするようなところ、たとえば malloc() したところで free() する、という教義のもとでは使うのに抵抗があるかもしれない、 win32api などはそんなかんじ
734 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 12:40:09.00 ID:kY4tNrcHd.net] >>723 教義という表現に込められたいやらしさ
735 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 12:41:35.66 ID:qjmLCkqj0.net] >>723 windowsならscanf_s使え、posixならm修飾使えで解決ってことだな
736 名前:デフォルトの名無しさん [2017/10/14(土) 13:41:17.27 ID:YpZiBRe40.net] windowsの方でもscanf()のmあるのでは?
737 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 14:15:25.78 ID:qjmLCkqj0.net] なんでposix拡張があると思うの?
738 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 14:56:12.00 ID:VRAn8B+V0.net] 配列って[]だったら自力でEOS入れなきゃいけないけど[]の中に数字入れると自動で入るの?
739 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 15:53:03.38 ID:wj7CJkun0.net] >>728 逆だ 数字いれると自分で \0 を入れないといけない 数字がない場合は、\0 を自力で書かなくとも良い
740 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 15:58:39.20 ID:pEkiZp92a.net] [迷信] scanf ではバッファオーバーランを防げない www.kijineko.co.jp/tech/superstitions/buffer-overrun-of-scanf.html [迷信] scanf でキーボードから入力 www.kijineko.co.jp/tech/superstitions/input-from-keyboard-by-scanf.html
741 名前:デフォルトの名無しさん [2017/10/14(土) 15:59:02.19 ID:bKRFV+pB0.net] はい ちょっとお邪魔しますよ ISR() signal() の違いについて どちらを使うべきなのか うんちくきぼんぬですよ
742 名前:デフォルトの名無しさん [2017/10/14(土) 16:17:48.14 ID:bKRFV+pB0.net] ↑割り込みハンドラで使う関数についての質問です
743 名前:デフォルトの名無しさん [2017/10/14(土) 16:24:17.93 ID:J5VLsuMb0.net] 組み込み系だとmallocなんか初期化関数ん中でしか使わない。
744 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 16:32:11.89 ID:qjmLCkqj0.net] >>731 AVR libc独自か、規格で定められているかの違い 環境が限定されるならISRで良い
745 名前:デフォルトの名無しさん [2017/10/14(土) 16:42:09.10 ID:bKRFV+pB0.net] なるほど! ありがとうございました
746 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 16:57:24.91 ID:/3exgnU7M.net] >>731 環境わからんけどavrならISR()推奨 avrwiki.osdn.jp/cgi-bin/wiki.cgi?page=%B3%E4%A4%EA%B9%FE%A4%DF
747 名前:デフォルトの名無しさん [2017/10/14(土) 17:13:04.55 ID:bKRFV+pB0.net] 割り込みにまさかの独自ライブラリがあるとは思わなかった >>736 の参照先見ると色々なアトリビュートが設定できるようになっとるわw その内容をみると自前で割り込み関係のレジスタ叩けば実現可能な機能ばかり ##pop/push/reti自動付加禁止だけはsignal()では実現不能? signalでよさそうな気が。。。
748 名前:デフォルトの名無しさん mailto:sage [2017/10/14(土) 17:25:11.34 ID:qjmLCkqj0.net] ANSI Cのsignalじゃなくて、AVR拡張のSIGNALのこと言ってたの? なら、manualでSIGNALじゃなくてISR使えってなってるよ 違いも、属性指定できるかどうかだけ www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html#ga67cd0dea412157775c2f2a3ffe9fb8ff
749 名前:デフォルトの名無しさん [2017/10/14(土) 19:42:35.98 ID:F19RwFTi0.net] >>722 他には? 珍獣でないと主張するにはnが小さすぎるぜ その小さすぎるnでどうたら言っちゃうおまえ 自らへの死刑宣告を読み上げている自覚はあるのか?
750 名前:デフォルトの名無しさん [2017/10/14(土) 19:59:48.25 ID:4XKuJznc0.net] クッサ
751 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 02:10:37.75 ID:12RNBD+40.net] >>739 https://qiita.com/Tsutajiro/items/a5620b17ac530cc96e87 https://ja.wikipedia.org/wiki/Scanf www9.plala.or.jp/sgwr-t/c/sec05.html rainbow.pc.uec.ac.jp/edu/program/b1/Ex2-1b.htm https://stackoverflow.com/questions/2155518/what-is-scanfs-and-scanfd-format-identifiers 「scanf("%s"」とグルるだけで、バッファオーバーランの危険がある注記のない上記記事が山のようにでてくる。 おすきなだけどうぞ、このように説明の手間を省きおざなりに scanf("%s") としてその場をとりつくろい、 読んだ人間は経験が少ないため、これでもいいのか、と勘違いしてしまう例は多々ある scanf() は悪 やるんなら、fgets() してから sscanf() だの atoi() だの strtol() だので処理するのが定石
752 名前:デフォルトの名無しさん [2017/10/15(日) 04:40:36.84 ID:aLoOQk2A0.net] >>727 てか、C言語のライブラリの問題なのであるともないとも言えるよな。 POSIX準拠でないCコンパイラでも同じ動きをするライブラリをリンク時または実行時にリンクするならそう動くわけだし。 WindowsでもGCCでコンパイルするならそうなるわけだし。Cygwinの中ならなおのことそうだ。
753 名前:デフォルトの名無しさん [2017/10/15(日) 05:29:35.87 ID:ZgJv24or0.net] そう言えば fgets() も1行の長さが指定した長さ以上になった場合に入力に残るよな。 で、だいたいは妙に長いバッファ用意して誤魔化す(またはそういう仕様にするw)わけだが、 そういうのが通用しない場合はそれを上回る入力をされた時にエラーにするかまたは入力に 残った不要な文字列を捨てる処理はあった方が良い。そうでないなら GCC の getline() を 使うかまたは自作するかだ。
754 名前: mailto:sage [2017/10/15(日) 06:22:39.79 ID:12RNBD+40.net] >>743 昔宿題スレで作ったけれども忘れてしまった,まあ誰しも一回はつくるものじゃないかな
755 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 07:05:24.20 ID:KCBqed/H0.net] >>743 > そう言えば fgets() も1行の長さが指定した長さ以上になった場合に入力に残るよな。 当たり前だろ より長い入力が想定されるなら普通に改行がでてくるまで続けて読めばいいだけだし 妙に長いバッファとかアホすぎる w
756 名前:名無し@キムチ [2017/10/15(日) 08:51:39.88 ID:kjrLb6gv0.net] フィギュアスケートアニメーション作成ソフト「振付王」公開!! ダウンロード↓ www.vector.co.jp/soft/winnt/game/se516681.html デモ動画↓ youtu.be/j8KjRXr7zGs
757 名前:デフォルトの名無しさん [2017/10/15(日) 09:47:59.48 ID:J//jr+AC0.net] はははは、やっとn=6か で、%sさえ使わなきゃscanfは安全なのか?
758 名前:デフォルトの名無しさん [2017/10/15(日) 09:48:32.63 ID:J//jr+AC0.net] >>741 >>747
759 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 10:01:56.35 ID:12RNBD+40.net] >>747 >はははは、やっとn=6か いくらでも増やせますが >で、%sさえ使わなきゃscanfは安全なのか? fgets() 推しの俺にきかれても,そんなことはわからない‥(困惑)
760 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 10:17:19.28 ID:2VM8B8DT0.net] %sの危険性を長々と説明しているwikipediaを挙げてるんだからギャグのつもりだろ stackoverflowも%sではなく%*sだし、scanf使ったことないのかな?
761 名前:デフォルトの名無しさん [2017/10/15(日) 13:38:38.59 ID:R4tP3Q0h0.net] >>749 わからないだと? おまえシッタカこいてただけか まあそうだろうな、%s以外に言及できないようだから
762 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 14:19:43.64 ID:12RNBD+40.net] >>751 fgets()でとりあえず読み込むのは有力な方針だからね、まあsscanf() を後段で使うことはあるね scanf() のチマチマした書式は必要時に追いかければいい、今調べる必要はないと思うね >シッタカ 大局観といってほしいね
763 名前:デフォルトの名無しさん [2017/10/15(日) 17:10:16.88 ID:/ln1Xcyy0.net] scanf vs fgets もう終わり?
764 名前:デフォルトの名無しさん [2017/10/15(日) 17:14:39.09 ID:Yk/ODCzd0.net] くだらん戦いだ
765 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 17:27:36.97 ID:12RNBD+40.net] あおりネタがなくてごめん…
766 名前:デフォルトの名無しさん [2017/10/15(日) 19:51:17.65 ID:DZC0OlhV0.net] >>753 終わりつーか始まってない そもそもscanfを把握してない御仁とでは話にならなくて
767 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 20:51:34.80 ID:12RNBD+40.net] scanf() の詳細仕様を把握しないと判断できない、というのはどうかな? scanf() が初期のころから建て増し建て増しでどんどん増えていったあの方向性は、正しくない複雑化のしかただと思うよ scanf() を書く側にたってみると、おぞましい
768 名前:デフォルトの名無しさん [2017/10/15(日) 21:09:03.11 ID:Yk/ODCzd0.net] scanf() scanf() scanf() scanf() scanf()
769 名前:デフォルトの名無しさん [2017/10/15(日) 21:13:13.74 ID:Y+x8OcED0.net] 超ド級初心者なんだけどおすすめの開発環境とかある?
770 名前:片山博文MZ mailto:sage [2017/10/15(日) 21:14:17.56 ID:3VVV/TO4d.net] >>759 Visual Studio 2017。デバッグが簡単で分
771 名前:ゥりやすい。 [] [ここ壊れてます]
772 名前:デフォルトの名無しさん [2017/10/15(日) 21:17:59.72 ID:Y+x8OcED0.net] vs2017コンパイルの仕方がわからなかった(´・ω:;.:...
773 名前:片山博文MZ mailto:sage [2017/10/15(日) 21:20:39.95 ID:3VVV/TO4d.net] >>761 プロジェクトにソースファイルを追加して、デバッグメニューからビルドを選ぶだけだぜ。
774 名前:デフォルトの名無しさん [2017/10/15(日) 21:22:30.69 ID:Y+x8OcED0.net] ビルド押したんだけど反応がなかったんだ・・・ もっかい調べなおしてみる ありがとう
775 名前:デフォルトの名無しさん [2017/10/15(日) 21:51:37.18 ID:DZC0OlhV0.net] >>757 建て増しする前の単純な仕様のscanfでさえ %sしか攻撃できない空っぽ脳みそと どうやってコミュしろというのか教えてくれ
776 名前:デフォルトの名無しさん [2017/10/15(日) 21:56:59.72 ID:kn6M0KEM0.net] >>763 プロジェクト作成しないとビルドできない
777 名前:デフォルトの名無しさん mailto:sage [2017/10/15(日) 22:38:21.05 ID:kUtdNYE20.net] 開発環境はvim+gccだろ?
778 名前:デフォルトの名無しさん [2017/10/16(月) 05:28:44.80 ID:6Nh3McCV0.net] C言語知ってたらC++簡単に扱える?
779 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 05:48:39.32 ID:imM7X4iq0.net] 基本的に別の言語
780 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 06:10:08.45 ID:00rzJKO2d.net] vs2017ならフォルダを開くで 勝手にプロジェクトが作られるんじゃなかったかな
781 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 06:35:40.79 ID:IzFutT5/0.net] 開発環境はvim+gcc、そしてmakeだな。 人に勧めようとは思わないけどね。
782 名前:デフォルトの名無しさん [2017/10/16(月) 06:42:19.28 ID:6Nh3McCV0.net] まあ入出力でCとC++で違うのは解ってたけど本読んで書いてあったのはC++で書いて動かなかったら 最悪Cで書けば動かせるということは書いてあったな
783 名前:デフォルトの名無しさん [2017/10/16(月) 11:15:45.26 ID:tZR41NVXp.net] つか、コマンドラインアプリで文字列受け取るのは、実行時引数だけで充分だろ。
784 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 13:10:18.09 ID:IgMp2p2X0.net] パイプやリダイレクト
785 名前:デフォルトの名無しさん [2017/10/16(月) 14:21:36.48 ID:JrEYnkdn0.net] 対話型ツールなら、きちんと入力解析エンジン載せれや。 なんだよscanfってw
786 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:22:15.72 ID:QsDGIdoW0.net] gccのワーニングで、「declared inside parameter list」これを無視したいです。 -Wではじまるオプションはなにを指定すればよろしいですか? #pragma GCC diagnostic ignored "-W???
787 名前:片山博文MZ mailto:sage [2017/10/16(月) 14:30:52.70 ID:XYyvKIYbd.net] >>775 [enabled by default]と書いてあるだろ? この警告はフラグで消せない。アホなコードを直すしかない。
788 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:47:20.37 ID:QsDGIdoW0.net] >>776 フラグ以外での除去方法もないのでしょうか? 大量にでるために困っています
789 名前:片山博文MZ mailto:sage [2017/10/16(月) 14:50:42.52 ID:XYyvKIYbd.net] >>777 警告は、引数リストの外側で必要なものを宣言すべきという意味だ。
790 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:55:55.53 ID:IgMp2p2X0.net] https://ideone.com/91sohX へぇ 構造体のポインタだし通しそうだけど警告出す仕様なのか (3行目 実体は不明だけど構造体のポインタを受け取るぞ宣言で警告)
791 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 14:58:01.40 ID:rvbv2fod0.net] >>775 gcc -w
792 名前:片山博文MZ mailto:sage [2017/10/16(月) 14:58:20.84 ID:XYyvKIYbd.net] 関数の前にstruct aho;とでも書いておけ。
793 名前:デフォルトの名無しさん [2017/10/16(月) 15:04:51.05 ID:QsDGIdoW0.net] >>778 原因はわかっています。 構造体宣言を別のヘッダーで行っているにもかかわらず、 プロトタイプ宣言しているヘッダーより上に定義がないのが原因です >>780 gcc -w ? #pragma GCC diagnostic ignored "-w" でしょうか?
794 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 15:09:07.34 ID:IgMp2p2X0.net] 本当の定義じゃなくて 仮定義を前に置くだけで消えるのな struct foo; void func(struct foo* arg);
795 名前:sage [2017/10/16(月) 15:25:30.24 ID:QsDGIdoW0.net] >>783 やはりそのように潰していくしかないのでしょうね。
796 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 15:43:34.17 ID:rvbv2fod0.net] >>782 -Wで始まるオプション名は無いので無視するにはコマンドラインで-wを指定するしかない
797 名前:デフォルトの名無しさん [2017/10/16(月) 22:46:04.81 ID:snZUUJVe0.net] >>784 いや、てか、そのヘッダ書き換えられないのか?
798 名前:デフォルトの名無しさん [2017/10/16(月) 22:49:48.00 ID:tZR41NVXp.net] 自身のポインタを構造体に宣言するのと同じ様に書けよ。
799 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:21:23.22 ID:7Byc8Q4r0.net] >>767 C 高級アセンブラ ++ ハナモゲラ
800 名前:デフォルトの名無しさん [2017/10/17(火) 20:18:22.83 ID:Q3d5MYhb0.net] とりあえず勉強の成果として作ってみたら失敗した なんでだ #include <stdio.h> int main(void) { int hyoji; int kakikomi; printf("階乗の表示:"); scanf("%d\n",&kakikomi); for (hyoji = 1;kakikomi > 0;kakikomi--) { hyoji = hyoji * kakikomi; } printf("結果は%dです", hyoji); fflush(stdin); getchar(); return 0; }
801 名前:デフォルトの名無しさん [2017/10/17(火) 20:29:18.04 ID:FJCAd6676.net] >>789 scanfのところの\nって要らなくね
802 名前:デフォルトの名無しさん [2017/10/17(火) 20:54:03.89 ID:Usq7nzejp.net] こんなすぐに桁溢れしちまう様なサンプル作ったら、何を試したいのかわからんだろ。
803 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 21:06:51.02 ID:BSHBGdow0.net] しかしてfor文の中身を見るに全くの素人じゃあないな
804 名前:デフォルトの名無しさん [2017/10/17(火) 21:08:48.81 ID:Q3d5MYhb0.net] >>790 消したら動いた ありがとう
805 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 21:24:15.93 ID:0jVjcAN80.net] >>792 どのあたりが?
806 名前:デフォルトの名無しさん [2017/10/17(火) 21:33:12.55 ID:Usq7nzejp.net] 初期化をあんなとこに書いたらコーディング規約で叩かれるしなぁ〜
807 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 21:46:54.15 ID:fHKaWaxJM.net] >>794 forのカッコ内には同じ変数しか書いちゃダメって思ってる初心者はいるかも 個人的には変数名からCOBOLer疑惑の方が強い気がする
808 名前:デフォルトの名無しさん [2017/10/17(火) 21:57:54.65 ID:Q3d5MYhb0.net] VS2017でやってるんだがさっき作ったプログラムを保存して別のファイルで勉強を再開しようとして新しくファイルを作ったんだ そしてテストも兼ねてさっきのプログラムコピペしたら プリコンパイルヘッダーを検索中に不明なEOFが見つかりました。 '#include"stdafx.h"をソースに追加しましたか? と出た さっきは何もなかったのに
809 名前:デフォルトの名無しさん [2017/10/17(火) 22:19:31.03 ID:PpmRGT3a0.net] >>797 それな よく分からんけど空のプロジェクトってやつでプロジェクト作って自分でソースファイル作成すれば出てこない まあ詳しい人が教えてくれるかも
810 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:26:24.33 ID:/2LkUivAd.net] >>797 プリコンパイルヘッダーというのは、プロジェクト内のヘッダーを事前にまとめてコンパイルしてビルドを早くする仕組みのことだ。 通常、stdafx.hというヘッダーにプロジェクトで使うヘッダーをまとめる。 一つ一つのソースファイルごとのプロパティでプリコンパイルヘッダーを作成するか、使用するかを設定できる。
811 名前:デフォルトの名無しさん [2017/10/17(火) 22:30:05.39 ID:Q3d5MYhb0.net] >>799 つまり…どういうことだってばよ
812 名前:デフォルトの名無しさん [2017/10/17(火) 22:35:56.33 ID:Q3d5MYhb0.net] ソースコード関係の知識は苦Cやらで積めるけどソフトやらの知識はどこで積むんだ
813 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:36:28.37 ID:/2LkUivAd.net] プリコンパイルヘッダーを使用するのであれば、プロジェクト内のどこかのソースファイル(例えばstdafx.cpp)を使って、プリコンパイルヘッダーを作成しないといけない。 あるソースファイルにおいてプリコンパイルヘッダーを使用するのであれば、プリコンパイル対象のヘッダーを#includeして、そのソースファイルがプリコンパイルヘッダーを使用することを設定する。 プリコンパイルヘッダーを使用しないなら、すべてのソースのプロパティでプリコンパイルヘッダーを使用しないように設定する(空のプロジェクトの規定値)。
814 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:39:12.15 ID:/2LkUivAd.net] ソースファイルが二、三個なら、とくにプリコンパイルヘッダーは、必要ない。
815 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 22:43:34.43 ID:kMB04QqG0.net] >>800 おとなしく>>798 の言う通りにしろってこと
816 名前:片山博文MZ mailto:sage [2017/10/17(火) 22:44:21.68 ID:/2LkUivAd.net] ソースファイルのプロパティは、IDE内のソースファイルのアイコンを右クリックして「プロパティ」を選ぶと設定できる。
817 名前:デフォルトの名無しさん [2017/10/17(火) 22:59:14.26 ID:Q3d5MYhb0.net] >>804 とりあえず空のファイルは作れたけどソースが書けん
818 名前:デフォルトの名無しさん [2017/10/17(火) 23:01:36.30 ID:PpmRGT3a0.net] 新しいプロジェクト ↓ 空のプロジェクトを作成 ↓ 空のソースコードファイルを追加 ↓ >>789 をコピペ ↓ 実行
819 名前:デフォルトの名無しさん [2017/10/17(火) 23:02:26.49 ID:Q3d5MYhb0.net] >>807 空のソースコードファイルどうやって作るんだ
820 名前:デフォルトの名無しさん [2017/10/17(火) 23:08:36.86 ID:PpmRGT3a0.net] >>808 プロジェクト開いたときの右にあるソリューションエクスプローラの中のソースファイルというフォルダを右クリックして「追加」から「新しい項目」をクリック。 「C++ファイル」を選択した状態でファイル名の拡張子を.cに変えて「追加」ボタンを押す。
821 名前:デフォルトの名無しさん [2017/10/17(火) 23:15:28.33 ID:Q3d5MYhb0.net] >>809 できた もしこれから新しくファイルを作る場合はこれを一からやるのか?
822 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 23:17:42.23 ID:nwT4mK5H0.net] そろそろ適切なスレに移動しようか
823 名前:デフォルトの名無しさん [2017/10/17(火) 23:18:59.07 ID:PpmRGT3a0.net] >>810 うん。 簡単なプログラムならVSでプロジェクト作るよりもスタートメニューのVSのフォルダの中にある開発者コマンドプロンプト使ってclコマンドでコンパイルした方が手軽だな
824 名前:デフォルトの名無しさん [2017/10/17(火) 23:21:25.70 ID:Q3d5MYhb0.net] >>812 ありがとう これ以上はスレチだからやめておこう
825 名前:デフォルトの名無しさん [2017/10/17(火) 23:46:56.11 ID:PpmRGT3a0.net] スレチかもしれないけどVS2017でANSI C(C99/98, ブロック先頭でしか宣言できないやつ)だけしかかけないようにできますか?
826 名前:デフォルトの名無しさん [2017/10/18(水) 18:18:50.69 ID:oOtBC3bP0.net] みなさんは関数名の後に続く中括弧の前に改行を入れますか?入れませんか? 例えば、 int main(void) { /* 処理 */ } のようにするか、 int main(void) { /* 処理 */ } のように書くのか、どちらが多いのか気になります。
827 名前:デフォルトの名無しさん [2017/10/18(水) 18:20:58.46 ID:M3PcmRrI6.net] 入れます
828 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 19:40:16.86 ID:3bYwz/rX0.net] if () { } ならいいけど for () { } だと整合性無いじゃん って話なら気にするな だな
829 名前:デフォルトの名無しさん [2017/10/18(水) 21:12:51.09 ID:QINtBhkfp.net] 各社のコーディング規約に合わせます。
830 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 21:18:46.08 ID:lHCL+31VM.net] >>815 >>604
831 名前:デフォルトの名無しさん [2017/10/18(水) 23:24:47.06 ID:bG8m3FQp0.net] >>815 改行入れるね。 なんでそうなったかというと、C言語は昔は引数の型をカッコ内に書けなかった。つまり int main(argc, argv) int argc; char *argv[]; { ・ ・ ・ return 0; } のようにしか書けなかった。その当時から覚え始めたというのと、K&R もそれで書いて あったのでそのまま何も考えず俺の中で改行入れるのが定着した。
832 名前:デフォルトの名無しさん [2017/10/19(木) 01:30:41.79 ID:gvKdwGxW0.net] for() { } こうしたときに一行増えるから嫌だだっていう人が多そうだな
833 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 07:54:32.06 ID:b5KBJ9M60.net] それは宗教問題なので決着は付きません。
834 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 09:08:44.46 ID:TosC+FXp0.net] 関数では改行して、制御構文では改行しない みたいなオレルールにしてる
835 名前:デフォルトの名無しさん [2017/10/19(木) 10:07:41.47 ID:+lKpulfRp.net] c#みたいにメソッドを直接鉤括弧内にベタ書き出来る言語でもなけりゃ先行改行一択なんだがなあ
836 名前:デフォルトの名無しさん [2017/10/19(木) 10:25:15.32 ID:r/pcyA6+0.net] 貴重な一行
837 名前:デフォルトの名無しさん [2017/10/19(木) 10:27:21.64 ID:SxBqlyg46.net] >>824 どういう意味?
838 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 11:44:04.67 ID:zAbDVwTYM.net] 今みたいに時間単価での清算が主流になる前は、 ステップ単価清算ってのもあって、K&R以外で書くと 増量しているって言われていたの。 cb とか indent なんてコマンドはその名残かな
839 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 12:07:16.71 ID:TosC+FXp0.net] >>826 無
840 名前:名関数が書けると最初の { 前の改行がおかしい気になるので 自動的に改行入れない派になるという話では? [] [ここ壊れてます]
841 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 12:17:59.77 ID:rxi99hG50.net] >>823 俺もそれで落ち着いた
842 名前:デフォルトの名無しさん [2017/10/19(木) 12:34:12.75 ID:LAmWAPnYM.net] >>815 統計取る方法がないから、確実な答えはわからないと思うよ。 で、戦争のたびに出る結論が「気にするな」「仕事環境に従え」なんだよねー。 で、俺はどうかと言うと、俺も不思議と>>823 に落ち着いた。
843 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 14:41:51.95 ID:cxE3kH8I0.net] https://ja.wikipedia.org/wiki/字下げスタイル 戦争だ
844 名前:デフォルトの名無しさん [2017/10/19(木) 15:33:33.89 ID:PsgLgPWo0.net] 9cguide.appspot.com/15-05.html これのモードの切り替えってところで判定結果違うんだが俺だけ? pがでたらめな数字になる コピペしても変わらなかったから多分タイプミスとかじゃないと思う
845 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 15:40:34.18 ID:cxE3kH8I0.net] 下の[実行結果] のように出力されるためには × printf("p = %d\n",p); ○ printf("*p = %d\n",*p); でないとな
846 名前:デフォルトの名無しさん [2017/10/19(木) 15:50:26.60 ID:PsgLgPWo0.net] できた ありがとう
847 名前:デフォルトの名無しさん [2017/10/19(木) 22:50:52.77 ID:4jVxr5CI0.net] 10 1 scanf("%d%d", a, b); こう読み込んだ時に空白を飛び越えて読み込んでくれるん? 10,1 この時はエラーになっちゃう?
848 名前:デフォルトの名無しさん [2017/10/19(木) 22:53:39.25 ID:Y4NllfOF0.net] 多分空白はできる ,を入れたかったら%d,%dすれば多分できる
849 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:25:36.20 ID:6TDKNKTM0.net] scanfのフォーマット指定は面倒だぞ 正直使いこなす気すらない
850 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:26:22.86 ID:6TDKNKTM0.net] if () { } else { } 無いわな
851 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:41:36.02 ID:c1L92+Tr0.net] if () { } else { } このフォーマットだと心が平和
852 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 23:52:20.12 ID:vx5pXf0B0.net] >>828 うん、さっぱり分からん そもそも鉤括弧って「」だし。
853 名前:デフォルトの名無しさん [2017/10/20(金) 00:41:34.11 ID:Wby94Fq80.net] >>837 入力が決められてなかったらscanfじゃあできないからわかるわー
854 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 01:19:37.06 ID:l11teSHI0.net] >>839 俺もそれ
855 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 04:37:42.47 ID:yDlUYSKqd.net] >>827 バージョン管理、コーティング規約対応用だろ 空白文字の使い方に無頓着なカスが存在する限り必須
856 名前:デフォルトの名無しさん [2017/10/20(金) 09:24:11.93 ID:NCAWbF0uE.net] 本買うお金がないのですが公式なドキュメントってどこで見れますかね?
857 名前:デフォルトの名無しさん [2017/10/20(金) 09:53:04.65 ID:VprmOZRL0.net] >>1 に書いてあるのではだめなん。
858 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 09:58:32.79 ID:rxHA3C970.net] 質問が漠然としすぎてる。
859 名前:デフォルトの名無しさん [2017/10/20(金) 10:55:02.73 ID:7oD3lqB2p.net] C言語の仕様は規格が決まってるから、調べれば幾らでもネットに落ちてるんだがなぁ〜
860 名前:デフォルトの名無しさん [2017/10/20(金) 10:56:41.44 ID:7oD3lqB2p.net] ランタイムライブラリやプラグマやデファインの事なら使ってるコンパイラにドキュメントがあるだろ?
861 名前:デフォルトの名無しさん [2017/10/20(金) 12:36:54.91 ID:XMzxe3/+0.net] ネスティングを気にするかどうかは各自のスタイルによる 気にならない書き方はいくらでもできるし ファイル分割がいやでべた書きする奴はネスティング気にするだろ
862 名前:デフォルトの名無しさん [2017/10/20(金) 12:40:39.31 ID:3KJGg1dF6.net] どう思う? #include <stdio.h> void test(a, b, c) int *a; int *b; int *c; { *c = *a + *b; } int main(void) { auto register int a; auto register int b; auto register int result; a = 10; b = 32; test(&a, &b, &result); printf("%d + %d = %d\n", a, b, result); return 0; }
863 名前:デフォルトの名無しさん [2017/10/20(金) 12:43:18.91 ID:XMzxe3/+0.net] ネスティングが浅い記述
864 名前:しか書かない奴にとってはどうでも良い案件なんですよ 技術計算を多用するコード例だとネスティングちゃんとしないと分けがわからなくなる [] [ここ壊れてます]
865 名前:デフォルトの名無しさん [2017/10/20(金) 17:02:28.07 ID:Hcn/q6HeM.net] なんで配列の要素数って省略してもいいのですか?
866 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 17:49:45.76 ID:vESwnO6R0.net] >>852 どの場面での話かな?
867 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 17:51:51.23 ID:w9jbL0YF0.net] >>852 コンパイラは要素数を数えられるから (要素数を数えられない場合は省略できない)
868 名前:デフォルトの名無しさん [2017/10/20(金) 17:57:17.39 ID:7oD3lqB2p.net] 配列は何次元でも扱える代わりに中身の管理は利用者に一任されたんだ。
869 名前:デフォルトの名無しさん [2017/10/20(金) 18:16:01.46 ID:Hcn/q6HeM.net] >>853 配列の宣言の時です。 省略してはいけないのはどういう場面ですか?
870 名前:デフォルトの名無しさん [2017/10/20(金) 18:42:47.35 ID:3KJGg1dF6.net] >>856 初期化無しの宣言とか?
871 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 20:01:48.14 ID:l11teSHI0.net] >>856 × int ary[]; ○ int ary[] = {1,2,3};
872 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 02:37:55.69 ID:xu+p9cdr0.net] >>850 どうも思わない。 ま、 register はコンパイラが無視するんだろうな。
873 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 07:38:47.06 ID:KIdTQfIK0.net] >>850 すごく… 古くさいです… それはともかく register 宣言した変数は アドレス取ろうとした時点でコンパイルエラーじゃなかったかな? あと俺の環境では auto と register の同時指定がダメと言われる。 古いコンパイラだとどっちも許されるんだっけ。
874 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 08:06:44.87 ID:Q5TWqxQz0.net] 実装は知らんが、言語仕様だと昔からstorage classの指定は1つだけ
875 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 08:49:05.01 ID:TZDyO3Kt0.net] registerは可能ならばレジスタに割り当てると言う意味なので、アドレス演算子を使えばレジスタに割り当てられない 利用可能なレジスタ数を超えてregisterが使われうる可能性を考えれば明らか autoとも併用できないし、半可通としか言いようがない
876 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 09:07:38.36 ID:1UmE9CdHM.net] >>862 それC++限定じゃね?
877 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 09:44:36.79 ID:TZDyO3Kt0.net] >>863 言いがかりをつけたいなら「規格書のxxにこう書いてある」と調べてからつけろ
878 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 09:55:57.60 ID:fkuXV6f/0.net] C++のautoは別の話
879 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 10:41:15.21 ID:1UmE9CdHM.net] >>862 の前半、register変数のアドレスを取ろうとすると gccもclangもエラーになるけど、これは規格違反と?
880 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 10:46:45.41 ID:KlHNvq3I0.net] 仕事で5年くらいMATLABやってたけど来月からC言語やらなあかん 難しそうで、もうイヤイヤ期よ C なんて10年くらい前に大学の講義でチョロチョロってやっただけ 応援メッセージ待ってます! (´;ω;`)
881 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 10:51:19.46 ID:sVexF7NP0.net] がんぱれ
882 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 11:33:55.75 ID:fkuXV6f/0.net] >>866 Visual Studioでもエラーになる まあ当然だわな
883 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 11:38:57.68 ID:Q5TWqxQz0.net] >>864 規格書の 6.5.3.2 Address and indirection operators に The operand of the unary & operator shall be either a function designator, the result of a [] or unary * operator, or an lvalue that designates an object that is not a bit-field and is not declared with the register storage-class specifier. こう書いてある
884 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 11:53:08.06 ID:Q5TWqxQz0.net] K&Rの1stでも the address-of operator & cannot be applied to them. って書いてあるよ
885 名前:デフォルトの名無しさん [2017/10/21(土) 12:04:46.13 ID:VJktQUPlp.net] 俺にはレジスタ変数に割り当てた変数を関数のアドレス渡し引数にする意図が想像できない。 そんなにオーバーヘッド気になるなら、グローバル変数でレジスタ変数宣言してしまえって思う。
886 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 12:12:52.67 ID:Q5TWqxQz0.net] >>872 外部宣言にregisterは使えないぞ
887 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 12:18:48.95 ID:Hb3Ud/Wn0.net] オーバーヘッド気にしてたらコンテキストスイッチングとかどうすんだ?
888 名前:デフォルトの名無しさん [2017/10/21(土) 12:43:51.25 ID:VJktQUPlp.net] じゃあそんなクリティカルな問題無い様に、関数化する事自体を諦めた方がいいのでは?
889 名前:デフォルトの名無しさん [2017/10/21(土) 12:46:37.26 ID:VJktQUPlp.net] ヘッダーファイルにインライン宣言した関数を記述してしまうって解決方法もあるよな?
890 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 12:55:25.34 ID:fkuXV6f/0.net] >>873 さすがにネタだろ
891 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 18:44:07.64 ID:KlHNvq3I0.net] >>868 ありがとう このスレに書いている単語が全然分からんw 何を話してるのかも分からんw みんな凄すぎやわ…
892 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 20:20:57.18 ID:fkuXV6f/0.net] >>878 register関係は爺の昔話だから無視していい
893 名前:デフォルトの名無しさん [2017/10/21(土) 20:38:07.37 ID:LO7dvffl0.net] グローバル変数をregister指定できたり楽しかったなあ
894 名前:デフォルトの名無しさん [2017/10/21(土) 20:48:45.74 ID:S+Fuo4jD0.net] いや、指定しても実際効果あるか無いかってだけだからなぁ
895 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 21:14:54.66 ID:sahtjmhqM.net] >>878 ネットのプログラミング自習動画見てみたら?
896 名前:デフォルトの名無しさん [2017/10/21(土) 23:00:30.68 ID:qfiVibk/0.net] 10年前にC言語覚えたなC#もないopenGL作る時も基礎が出来てない白紙から打ち込んでたから凄い大変だったのを思い出したわ
897 名前:デフォルトの名無しさん mailto:sage [2017/10/22(日) 05:28:16.50 ID:m20yJ7cw0.net] register宣言とアドレス演算子の話だけど、 Cではエラー、C++だとアドレスを取れる(register指定は無視される)、みたいね。 望洋さんのファックとWikipediaのC++に出てたわ。 …実は逆に覚えててね。 レジスタに割り当てた変数の変数のアドレスが欲しいってのは矛盾してるから、 C++は厳格にチェックするかと。
898 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 07:11:33.28 ID:dj2Vz85u0.net] >>884 俺もそう思う registerはprvalueであるべき
899 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 11:32:38.17 ID:r2h/pPG10.net] レジスタってメモリ番地をもってるのか? 持ってない番外地なんじゃねえの?
900 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 11:38:07.26 ID:rLWliBun0.net] >>886 そうだよ。そこは誰も疑問に思ってない。
901 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 12:31:48.51 ID:NaoIEEjs0.net] 世の中には、レジスタがメモリーの先頭と同じ位置にマッピングされてるCPUだってあるけどな。
902 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 13:39:13.59 ID:f5TzHp7R0.net] 質問です。ポインタ変数を用いてキーボードから入力された5つの整数を配列xに保存し、その要素の列挙と合計値を求めるプログラムを作ったのですが、 #include <stdio.h> #include <stdlib.h> int main (void){ int *p,x[4],sum=0,i,j; p=&x[0]; for(i=0;i<=4;i++){ printf("%dつ目の整数を入力してください ",i+1); scanf("%d",p); sum=sum+*p; } for(j=0;j<=4;j++){ printf("%d ",*(p+j));} /*配列の要素を列挙*/ printf("\n和=%d",sum); /*配列の要素の和*/ return 0;} で、結果が 1つ目の整数を入力してください 1 2つ目の整数を入力してください 2 3つ目の整数を入力してください 3 4つ目の整数を入力してください 4 5つ目の整数を入力してください 5 5 4200864 6422368 4200955 6422288 和=15 となり、要素の列挙がうまくいかないので対策を教えていただきたいです。
903 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 13:49:53.88 ID:rI45lLhS0.net] そりゃ最初に p に代入した同じ入れ物に入力値を保存してるからね。 ++p とかしてみたら?
904 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 13:55:57.90 ID:pqhboyRRp.net] 素直に配列使え。
905 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 14:15:34.40 ID:m20yJ7cw0.net] scanf() での値の格納先 (== sumに加える値の参照先) である p を 初期化時の &x[0] のまま進めてないから入力した値が上書きされるんだよ。 もちろん x[1], x[2], ... には値が入らない。 質問の趣旨と関係ない部分を指摘して混乱させるつもりはないんだけど、 配列 x[] の要素数が足りないのがオジさん気になるなぁ。
906 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 15:12:18.96 ID:2+N8xzsVa.net] >>889 既に>>890-892 が指摘済みだけど #include <stdio.h> #include <stdlib.h> int main (void){ int *p,x[5],sum=0,i,j; /* x[5] */ p = x; for(i = 0;i <= 4; i++, p++){ printf("%dつ目の整数を入力してください ",i+1); scanf("%d", p); sum += *p; } p = x; /* ポインタの参照位置を配列先頭へ */ for(j = 0; j <= 4; j++){ printf("x[%d]=%d, ", j, *(p+j) ); }/*配列の要素を列挙*/ printf("\n和=%d\n ",sum); /*配列の要素の和*/ return 0; }
907 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 15:20:05.53 ID:f5TzHp7R0.net] 大学で勉強し始めたばかりなので全然で… みなさんありがとうございました。
908 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 15:27:37.67 ID:NaoIEEjs0.net] まあ、なんでポインタに拘るのかわからんが、 つうか、書きと読みでアクセス方法は合わせた方がいいと思うが、 動きゃいいかw
909 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 15:34:28.08 ID:rLWliBun0.net] 学習をし始めた頃は敢えてポインタを使っていろんな書き方を試してみるのもいいと思う。 数をこなすうちに自然とよい書き方に気づくと思う。
910 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 16:41:26.75 ID:iiKpFSsu0.net] 起動の度に外部ファイルで変数の初期値を変えて起動したいんだけどどうすんの?
911 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 16:53:41.42 ID:utzmEkdP0.net] 外部ファイルを読んで変数に代入する
912 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 17:06:30.45 ID:iiKpFSsu0.net] 外部ファイルに変数名と初期値を書いておきたい
913 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 17:11:49.57 ID:Qdw/5tAf0.net] 環境依存だし基本的に無理 バッチなりシェルスクリプトに記述しといてコマンドライン引数で渡す方が建設的
914 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 18:05:00.75 ID:m20yJ7cw0.net] ソースに書いてない変数を実行時に導入したいってのとは違うんでないか? あらかじめ外部ファイルで値を設定できる変数は決まっていて、 要するにリソースファイルみたいな使い方をしたいのかも知れん。 fscanf(fp, "%s=%d\n", varname, &varval); if (strcmp(varname, "width") == 0) { width = varval; } else if (strcmp(varname, "height") == 0) { height = varval; } else { fprintf(stderr, "cannot use variable '%s'\n", varname); } みたいな感じ? この場で書いてるから洗練されてないし、動くか怪しいけど。
915 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 18:08:18.57 ID:NaoIEEjs0.net] 人が読み書きしない前提なら、構造体の領域をまるまんま読み書きしてしまえば楽だぜ。
916 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 18:09:51.31 ID:4HKeVMJe0.net] 動作時に殆ど変えない値ならファイルで良いかもしれないが 起動の都度値を変化させたいなら、コマンドラインの方が良いぞ
917 名前:901 mailto:sage [2017/10/22(日) 18:29:59.97 ID:m20yJ7cw0.net] >>901 で使った「リソースファイル」って言葉は曖昧だったね。 「設定ファイル」の方が通りがよかったかも。 皆さん文脈から分かってくれると思うけど、 VisualStudio なんかで別の意味で使う言葉だし。
918 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 18:44:14.78 ID:IdeA6XVs0.net] 「鶏を割くに焉んぞ牛刀を用いん」とも言えるけど json,yaml,toml
919 名前:なんかの読み込みライブラリ使うとか Lua,Pythonを組み込むとかも一応回答としてはありかもね [] [ここ壊れてます]
920 名前:デフォルトの名無しさん mailto:sage [2017/10/22(日) 20:27:33.99 ID:Cn2ZDyn4d.net] >>888 つーか全部レジスタの方面の話じゃね? 大分前の話だが、DSPでそういうのがあった
921 名前:デフォルトの名無しさん mailto:sage [2017/10/22(日) 20:32:16.01 ID:EROQgIiX0.net] >>906 ファミコンとかで使われていた6502のゼロページレジスタ がそうだよ MELPS7700とか名前を変えて長いこと使われた
922 名前:デフォルトの名無しさん [2017/10/22(日) 21:19:51.70 ID:bXoG3HvV0.net] メインフレームでDIAGNOSEを使うときなんか WCSのアドレスを指定とかね
923 名前:デフォルトの名無しさん [2017/10/23(月) 01:07:16.21 ID:mBA7Qm4F0.net] スタック変数いらねえな グローバル変数で性能追求しようぜ
924 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 01:22:42.10 ID:gdiUlDLR0.net] 6502のゼロページが全部レジスタだと思い込んでるような記述がたまにあるけど 普通にメモリだよ
925 名前:デフォルトの名無しさん [2017/10/23(月) 01:37:37.69 ID:mBA7Qm4F0.net] オペランドを8bitに限定してコード効率上げるってのがゼロページの発想でしょ メモリ素子が高価な時代の涙ぐましい仕組みのひとつ
926 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 01:46:50.56 ID:EhEnOqp90.net] CPUの一時キャッシュメモリをレジスタ変数に割り当てる方が速いんじゃないか?
927 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 05:14:49.57 ID:u4PJ0rqa0.net] >>911 アドレス値のフェッチが1byteだけで済むから 16bit(2byte)の絶対アドレスより速い、てメリットもあるしね。 >>912 これはアリかも。 CPUにデカいキャッシュが載る時代のゼロページ的な使い方だな。
928 名前:デフォルトの名無しさん [2017/10/23(月) 05:45:57.83 ID:iFI38Dlw0.net] %%%%1000%%%% 000-[HUM%58*73.1\%]/2I/3NM/61.3SNMK%?%3%51.22222222222221% 001-[[[%6/4$17.6135412α3]]]]+DOM+SIL+7% 002-UML7%[61.2[31.5[!%32∂LM17.36%!16.3!%<<<%!HSTOL7%!Q!S!=3m=<2TOL<3Q9A<2.1GHz%,DOK,HAOARA, 003-[[[HEMLOT47[<\41.2%Q,===>[MLS<DPNO<\2.3>#ESOLA!5%!3MLA!>LTOSA>7TONSA>%>%end
929 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 17:06:19.86 ID:WoZMAj8B0.net] ルネサスRXなんかもレジスタがメモリマップされてるな アクセス禁止領域だけど
930 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 19:08:39.57 ID:Ob3tZ8JSM.net] SFRと汎用レジスタの区別が出来ない奴
931 名前:デフォルトの名無しさん [2017/10/23(月) 19:25:26.97 ID:nagTo3YF0.net] >>915 そこって、デバッガがCPUレジスタ参照する為の窓だから、プログラムがその領域指すと、デバッグが困難になるから禁止してるんじゃね?
932 名前:デフォルトの名無しさん [2017/10/23(月) 19:29:22.87 ID:nagTo3YF0.net] デバッガー専用の作業メモリー領域もプログラムから使用禁止だったりするだろ?
933 名前:デフォルトの名無しさん [2017/10/23(月) 19:30:14.37 ID:HemzWECS0.net] レクサスRXに見えた
934 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 20:21:25.70 ID:WoZMAj8B0.net] >>917 その通りだと思うよ
935 名前:デフォルトの名無しさん mailto:sage [2017/10/23(月) 20:22:52.11 ID:WoZMAj8B0.net] >>916 sfrをアクセス禁止領域に置いてどーすんだよw
936 名前:デフォルトの名無しさん [2017/10/23(月) 20:30:23.77 ID:nagTo3YF0.net] >>921 アクセス禁止じゃねーよw 使用禁止だ。 デバッガー使わないなら好きに使えばいい。
937 名前:デフォルトの名無しさん [2017/10/23(月) 20:37:44.96 ID:nagTo3YF0.net] あ、レス間違えたわw
938 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 03:02:06.36 ID:75BFZUbG0.net] int i=1,n n=i/2*2 n=0になる理由教えてください
939 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 03:50:48.19 ID:senjN+vb0.net] int型は小数が扱えないので0方向に丸められる
940 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 05:57:30.66 ID:2rmlfNW20.net] >>924 https://ideone.com/HQ4Zos
941 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 06:48:50.75 ID:kt50Dt6N0.net] 負の除算の丸め方は処理系依存
942 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 07:33:37.46 ID:VjHIGh6G0.net] 左結合で i/2 の後に *2 が処理される 整数どおしの除算なので丸めが発生 丸めた値に 乗算が行われる
943 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 07:45:07.35 ID:75BFZUbG0.net] おおおお! なるほど!ありがとうございます!
944 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 12:07:36.73 ID:SPAXueit0.net] int func(int) は、引数が int 型で、int 型の値を返す関数 int func(void) は、引数が無しで、int 型の値を返す関数 というのは分かったのですが int func() のように () の中が空の場合は、どうゆう意味になりますか? int func(void) と同じ?
945 名前:デフォルトの名無しさん [2017/10/24(火) 12:12:42.21 ID:b8RDVE7X6.net] https://i.imgur.com/DWw6T08.png
946 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 12:24:20.33 ID:SPAXueit0.net] わかりました、ありがとうございます
947 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 12:51:09.78 ID:k+hUXLmG0.net] >>931 包茎手術じゃなくて脱毛で良かったな
948 名前:デフォルトの名無しさん [2017/10/24(火) 13:44:26.08 ID:/a/Ldfbw0.net] DMAでも使うならともかく レジスタをメモリ空間にマッピングする利点なんてないだろ
949 名前:デフォルトの名無しさん mailto:釣宣言 [2017/10/24(火) 13:58:10.44 ID:48RRVnNoM.net] PCI以降DMAでデータ転送なんてのは無い。 あるのはバースト転送モードだ。 当然、転送に必要なレジスタはメモリにマッピングされている。
950 名前:デフォルトの名無しさん [2017/10/24(火) 14:14:56.50 ID:gWGoT/ywp.net] >>934 むしろデメリットさえあるな。だからデバッガが使う以外は利用されてないだろ?
951 名前:デフォルトの名無しさん [2017/10/24(火) 14:24:36.56 ID:fybDUnFS0.net] ふふ、トヨ〇の要求。今は知らん。
952 名前:デフォルトの名無しさん [2017/10/24(火) 16:20:50.45 ID:b8RDVE7X6.net] まだやってたのかよレジスタ
953 名前:デフォルトの名無しさん [2017/10/24(火) 18:07:58.27 ID:gWGoT/ywp.net] 内部レジスタと外部レジスタは意味がまるっきり違うんだがなぁ
954 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 18:48:56.59 ID:ffssQfLj0.net] >>939 二重帳簿やっているように聞こえる
955 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 01:31:11.21 ID:a9TiLHl10.net] >>930 同じなんだけどコンパイル時の引数チェックをしなくなる。 int func(void) の関数に対して func(123) みたいにして呼ぶとコンパイルエラーだが int func() の関数に対して func(123) で呼び出す記述があってもエラーにならない。 なんでこうなっているのかというと、昔のCにはvoidがなくて引数なしの関数は int func() のように書くしか方法がなく、尚且つ昔のC言語は引数のチェックを していなかったため。つまり過去のC言語ソースをコンパイルできるようにする ためにこのような記述が残されている。今となっては余程の事がない限りこんな 書き方はしない方が良い。バグの元だ。
956 名前:デフォルトの名無しさん [2017/10/25(水) 15:47:29.67 ID:Ls3qnFv30.net] ヤフー知恵袋って色んな奴がC言語勉強してるやつがいるな、素人みたいな質問やら専門的な質問や大学の問題の質問やらのプログラミング質問が
957 名前:デフォルトの名無しさん [2017/10/25(水) 17:13:54.92 ID:3egWGIK90.net] >>941 へーへー
958 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 18:14:39.48 ID:2J1yyAIT0.net] https://ideone.com/0GCZnF がエラーになるのですが、 どうすればいいでしょうか?
959 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 18:15:57.84 ID:16XMr+7o0.net] DDOS攻撃してサイト毎潰す
960 名前:デフォルトの名無しさん [2017/10/25(水) 18:20:37.33 ID:Ls3qnFv30.net] >>944 まず何のプログラミングか言わなきゃダメでしょうみんなプロだから挙動で読めちゃう人いるけどさ
961 名前:デフォルトの名無しさん [2017/10/25(水) 18:28:36.51 ID:Ho4Id2OA0.net] >>944 printfでNULL->valueをしてるから
962 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 18:35:07.38 ID:2J1yyAIT0.net] >>946 >>947 hoge()でdata->valueに値をセットしたいです。 10を表示したいです。
963 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:06:17.58 ID:N2zX2Cru0.net] void hoge(data_t **data, int value) { *data = NULL; *data = malloc(sizeof(data_t)); if (data == NULL) return; (*data)->value = value; } 呼び出しを hoge(&data,10); これではどうか
964 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:07:10.40 ID:N2zX2Cru0.net] if (*data == NULL) return; ここ間違えた、訂正
965 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:12:01.89 ID:2J1yyAIT0.net] >>949 ありがとうございます。 できました!超天才!
966 名前:デフォルトの名無しさん [2017/10/25(水) 19:16:50.46 ID:Ho4Id2OA0.net] そういうことか 全然分からんかった 引数に受け渡されたポインタ変数のコピーに新しく確保したメモリのアドレス入れても呼び出し元のポインタ変数はなんも変化しないのか
967 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 19:21:03.77 ID:BohOgQqE0.net] 引数で int の変数を書き換えても 呼び出し元には伝わらない それの延長線 int を data_t* に読み替えれば同じ理屈よ
968 名前:デフォルトの名無しさん [2017/10/25(水) 20:39:40.86 ID:Ls3qnFv30.net] 俺の頭じゃあ理解できなかったわアロー関数は苦手だ、ここには天才がやっぱいるわ
969 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 22:59:11.01 ID:SHE9E59e0.net] この程度でプロとか天才とかw レベル低っ
970 名前:デフォルトの名無しさん mailto:sage [2017/10/25(水) 23:31:22.55 ID:A9sEwxck0.net] 追い詰められてる時って、ちょっとしたことを見落としたりしがちだし。 そういうときにちょっとしたつまらない問題点を指摘してくれる人が神様に思えることはある。 本当に何でこれに気づかない?って問題に延々と気づかないことあるから。
971 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 01:05:20.57 ID:WmOJzpQL0.net] 実務の世界だと、開発リーダーにとっては、この程度はさらさらと書いて欲しいと思うだろうな この辺の考え方が理解できてないと、構造体を使ったリスト構造、木構造が作れないと思う
972 名前:デフォルトの名無しさん [2017/10/26(木) 01:22:11.08 ID:FPgm8C1h0.net] 急に語り出したぞ、おい
973 名前:デフォルトの名無しさん [2017/10/26(木) 03:22:11.49 ID:kwyo2eDl0.net] リスト構造、木構造という言葉がわからなかったのかな?
974 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 03:35:02.17 ID:ByFyiJTd0.net] 分からなくてもググれば速攻定義出ますがな
975 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 06:24:41.35 ID:8UQnYlEC0.net] >>944 からの流れだとすると、実務で使う人とは感じなかったな。 専門外の学生さんが単位を取るために四苦ハック、 進級できたら思い出しもしない、という立場からの質問だろうと。
976 名前:デフォルトの名無しさん [2017/10/26(木) 10:26:24.17 ID:Z8IKw2VS6.net] リスト構造木構造とか理系大学の情報系科目で誰でもやるがな こんなところ見てる奴が知らんわけないだらアホ
977 名前:デフォルトの名無しさん [2017/10/26(木) 10:46:18.77 ID:DmfMCHFwp.net] リストもツリーも基本の構造は一緒だろ。 ただ、鎖ね繋がってる数が違うから、 扱いが違うだけでな。
978 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 12:26:11.84 ID:nuX2FTeTa.net] 文系経済学部ですわ
979 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 12:46:06.22 ID:oyaJ8gC3M.net] >>962 > こんなところ見てる奴が知らんわけないだらアホ >>952 みたいな奴もいるのに何を言ってるんだよ w
980 名前:デフォルトの名無しさん [2017/10/26(木) 12:51:34.13 ID:jbwuNtau6.net] >>965 リスト構造とか知ってるからってポインタ受け渡しのトリックに気付くとは限らんだろ
981 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 13:41:10.56 ID:VaLFaSbf0.net] 怪しくなったら戻り値で返せ
982 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 14:50:55.37 ID:ujDNQjK/M.net] そういうときに限って二つ返したくなる
983 名前:デフォルトの名無しさん [2017/10/26(木) 18:29:14.01 ID:l+WAoJAx
] [ここ壊れてます]
984 名前:0.net mailto: 自分の知ってる関数解ってる宣言の仕方ならわかるけどさ解らない奴使ってたらもう変数が動いてるかわからんだろう そうなったらもう謎でコードなんか読めないだろ? [] [ここ壊れてます]
985 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:40:00.02 ID:6866r+hk0.net] んなこたぁ、ない
986 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 18:44:09.81 ID:AI1MxGuX0.net] 引数の書き戻し系は 渡すときに値を必要としてるのかどうかは仕様次第なので 少し気を使う
987 名前:デフォルトの名無しさん [2017/10/26(木) 20:03:01.42 ID:DmfMCHFwp.net] それより、そのアドレスはアクセス権のある場所を指してるんだよな?
988 名前:デフォルトの名無しさん mailto:sage [2017/10/26(木) 21:41:04.91 ID:oyaJ8gC3M.net] >>966 レベルの問題 > リスト構造とか知ってるからってポインタ受け渡しのトリックに気付くとは限らんだろ そんな奴がいないとは言わないがそう言う奴はごろごろいるとは思えないだろ
989 名前:デフォルトの名無しさん [2017/10/26(木) 21:42:34.03 ID:Fjma9sq90.net] とりまリスト構造なんて誰でもしってること >>959 のレスはイミフ
990 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 03:11:40.50 ID:QY+Fa/Ak0.net] >>966 これはトリック、か?
991 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 06:49:46.56 ID:VPed4ksO0.net] 「関数の引数に値渡ししかないから、 ポインタを渡すことで呼出側の変数の内容を関数側で変更する」 というのが他の言語と比較した場合、C特有のトリックと呼べるかも。 もちろん、Cの村では当然かつ基本のことだけど。
992 名前:デフォルトの名無しさん [2017/10/27(金) 08:36:39.71 ID:JYNAFOfl0.net] たくさん値を返したいなら、 戻り値を型宣言した構造体にしたらいい。
993 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 09:39:08.11 ID:a5gmSSmH0.net] 残念だったな、トリックだよ
994 名前:デフォルトの名無しさん [2017/10/27(金) 09:42:57.69 ID:Q7q08ysx0.net] >>977 autoでもできるのですか?
995 名前:デフォルトの名無しさん [2017/10/27(金) 09:57:16.24 ID:CUGbjFhkp.net] ああ、昔はauto変数に取った構造体を戻り値にして割り込み系で散々な目に遭ったよな。 あれは言語仕様に沿って無いコンパイラが悪いんだがな。
996 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:00:31.70 ID:v/FEPkkV0.net] 古いコンパイラではNGだったけど 構造体の引数での値渡し、戻り値での値戻しは可能
997 名前:デフォルトの名無しさん [2017/10/27(金) 10:18:09.15 ID:CUGbjFhkp.net] 古くなくてもニッチな環境では要注意だ。 コンパイラの吐き出すコードが言語仕様に沿って無い場合がある。
998 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 10:27:32.22 ID:8fSPZcAJ0.net] >>976 トリックと言うか他の言語ではコンパイラがやってることをアセンブラやCでは明示的に書くと言うだけ
999 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 13:06:16.96 ID:v/FEPkkV0.net] >>982 なんてこったw ニッチな環境だとメンテもされてないことあるだろうしねー
1000 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 15:36:47.12 ID:dGyUnw2Y0.net] ホワイトスミスなんて、printfすら無いような処理系作って いた人がANSIの役員していて2度びっくり
1001 名前:デフォルトの名無しさん [2017/10/27(金) 18:41:59.37 ID:BvMxy0d+0.net] C言語のポインタで int *a; int b; a = 10; これは理解できるんだけど a = &b; *a = 10; これはどうなってるん?aにアドレス入ってるのにどうやって10を送ってるん?
1002 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 18:47:48.96 ID:/LUCvRWS0.net] > int *a; > a = 10; > これは理解できるんだけど 説明できるのなら その先も分かるはず
1003 名前:片山博文MZ mailto:sage [2017/10/27(金) 18:49:13.82 ID:xRxq9X9wd.net] >>986 > int *a; > int b; > a = 10; //エラー。ポインタに整数は代入できない。そもそも全角文字と半角文字を間違っている。 > a = &b; > *a = 10; アスタリスク(*)で実体の整数データを手繰り寄せているイメージね。
1004 名前:デフォルトの名無しさん [2017/10/27(金) 18:55:00.02 ID:BvMxy0d+0.net] >>988 *aで中にあるアドレスで探って送ってるイメージ?
1005 名前:片山博文MZ mailto:sage [2017/10/27(金) 18:57:22.58 ID:xRxq9X9wd.net] うん。アスタリスクを付ければ、アドレス先への代入になる。 ポインタにゼロ以外の整数は代入できないに訂正。
1006 名前:デフォルトの名無しさん [2017/10/27(金) 19:14:00.54 ID:CUGbjFhkp.net] 宣言とフィールドで意味の違う*が悪い。
1007 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 19:16:29.79 ID:t/XrhBpFM.net] アーキテクチャとアセンブリ言語勉強するのが早道な気がする
1008 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 19:19:35.75 ID:t/XrhBpFM.net] >>991 意味は同じだよ。*aがintだと宣言してるから整合してる。 初期化構文がちょいと怪しいが。
1009 名前:デフォルトの名無しさん [2017/10/27(金) 19:21:42.60 ID:CUGbjFhkp.net] >>993 宣言ではポインタである事を表すが、 フィールドでは、掛け算記号だったり、ポインタの内容だったりするだろ?
1010 名前:デフォルトの名無しさん [2017/10/27(金) 19:56:47.39 ID:BvMxy0d+0.net] char *c; int *a; この二つはポインタだけど使い方が違うのか?
1011 名前:片山博文MZ mailto:sage [2017/10/27(金) 20:00:41.33 ID:xRxq9X9wd.net] sizeof(*c) == sizeof(char)で、 sizeof(*a) == sizeof(int)だ。
1012 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 20:11:43.60 ID:HlvRN0vUF.net] Cの文法特にポインタ宣言周辺は、 頭が悪いと読めないよう定められてる。 ソフトウェア開発は馬鹿でも手伝わせる 必要があるくらい人手不足なのに、 なんでこんな文法にしたのか不思議。
1013 名前:デフォルトの名無しさん mailto:sage [2017/10/27(金) 20:21:32.42 ID:3Ly7XcHr0.net] えっ、Cの由来を知らないの?
1014 名前:片山博文MZ mailto:sage [2017/10/27(金) 20:26:24.89 ID:xRxq9X9wd.net] 次スレお願い
1015 名前:あぼーん mailto:あぼーん [2017/10/27(金) 21:22:14.66 ID:zFbk1AXy0.net] あぼーん
1016 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 78日 1時間 0分 51秒
1017 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています