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
2 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 20:44:11.22 ID:aWUdy/dyM.net] だめ意見にはけなしたり煽るんじゃなくて具体的な反論ができるといいね
3 名前:C言語ますたー《ますたー軍団(常時募集)の長》 mailto:sage [2017/08/10(木) 21:39:10.50 ID:Wh1e+mJZM.net] 帰ったらお勉強だぜ!!
4 名前:デフォルトの名無しさん mailto:sage [2017/08/10(木) 21:51:00.72 ID:LT6YffV+0.net] >>1 乙です
5 名前:デフォルトの名無しさん mailto:sage [2017/08/11(金) 01:27:59.65 ID:DcjyhNkl0.net] 乙っ乙
6 名前:デフォルトの名無しさん [2017/08/11(金) 03:16:23.49 ID:suC9gTdR0.net] 乙
7 名前:デフォルトの名無しさん [2017/08/11(金) 08:28:05.03 ID:8TW1by1n0.net] >>2 煽りコントで笑いをとってたコメディアンのこと?
8 名前:デフォルトの名無しさん mailto:sage [2017/08/11(金) 11:41:11.10 ID:JIMcqw5z0.net] 最近はPythonやっとけみたいな意見が多いんですが、 今、Cをやるメリットは何かありますか?
9 名前:デフォルトの名無しさん mailto:sage [2017/08/11(金) 12:00:57.14 ID:Ca8C76qb0.net] 両方やればいい
10 名前:デフォルトの名無しさん [2017/08/11(金) 12:14:58.92 ID:8TW1by1n0.net] ハード・ソフト両利きになるには絶好の近道
11 名前:デフォルトの名無しさん mailto:sage [2017/08/12(土) 10:34:20.89 ID:mpXbTRP+d.net] IYHスレのかほりがするw
12 名前:デフォルトの名無しさん [2017/08/12(土) 16:57:37.18 ID:6AXlD0eu0.net] >>8 それはあなたが今後何をやりたいかによる。
13 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 15:57:24.74 ID:m4Rk+6os0.net] >>8 結局のところ C は基本中の基本で、避けて通れない、いずれやらないと仕方ない、という状況に追い込まれる
14 名前:デフォルトの名無しさん [2017/08/13(日) 16:07:14.55 ID:2GAXDCvV0.net] そういう意味では、あと英語な マニュアルや規格票といえばまず英語 日本語版はないか、あっても10年遅れとか そればかりか自分のコードのマニュアルやコメントも 英語で書けとだいたい言われる
15 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 17:01:50.43 ID:aXXBQeA80.net] え?そんな所あるの?外資系とか? まあ最初から英語できることを前提に雇っているならわかるけど、そうでない会社で それやったらネイティブが忍耐をもってしても解読困難な英語モドキの文書の山に なってしまうのではないか?
16 名前:デフォルトの名無しさん [2017/08/13(日) 17:33:10.24 ID:2GAXDCvV0.net] 解読困難な英語モドキすっげええ、うんざりするほどあるよ ずーずー弁しぇからしかこんだらず、なんて次元じゃねえ訛り方 ・・・まあ恥ずかしながら日本人の訛り方はトップグループなんだが
17 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 17:59:59.41 ID:aXXBQeA80.net] omg
18 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 18:13:02.46 ID:WSSr83j30.net] >>14 英語の鍛え方として王道はないものか‥ 今構文の教科書(昔の受験用,今の時代には難しすぎるかな‥)をさらっている.https://www.amazon.co.jp/dp/4828501134
19 名前:デフォルトの名無しさん [2017/08/13(日) 18:29:50.42 ID:2GAXDCvV0.net] 技術英語を憶えるのに一般英語は邪魔 技術英語独特のボキャ貧はマニュアルや論文でしか学べない
20 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 18:34:17.87 ID:8MgVlazH0.net] brother と sister は習っても、sibling を学校で習った覚えは無いな
21 名前:デフォルトの名無しさん mailto:sage [2017/08/13(日) 18:39:03.83 ID:o1ygPh5l0.net] >>18 自分がある程度詳しい分野のちゃんとした英語のドキュメントを読んでると、ここはこういう意味か、こんな時はこんな表現するのか、と言うのがある程度身についてくると思う。
22 名前:デフォルトの名無しさん [2017/08/13(日) 18:54:33.40 ID:2GAXDCvV0.net] >>20
23 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 00:49:40.57 ID:FXoIQaW20.net] RFC読んだ後は、プログラム関係の文書だけは、英語でも何となくわかるようになったなぁ 人の和訳みながらよんだだけだけど
24 名前:デフォルトの名無しさん mailto:sage [2017/08/14(月) 23:14:42.24 ID:G751meAI0.net] 苦手意識がなくなるだけでもかなりの前進かと
25 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 03:13:15.44 ID:J8ft/v5zd.net] C言語の勉強をするためのおすすめのIDEを教えてください
26 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 06:06:58.39 ID:g+tkU2cqd.net] Visual Studio
27 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 08:20:25.87 ID:0Vt0rye20.net] Vim Emacs
28 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 09:23:43.88 ID:zAUipZYH0.net] 猫こそ至高
29 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 10:15:56.42 ID:xWmu06fM0.net] VisualStudioに一票
30 名前:デフォルトの名無しさん [2017/08/16(水) 11:07:32.90 ID:J2krMHFz0.net] エディタで充分 IDEいらね
31 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 11:12:04.39 ID:79/XacN36.net] Cの文法だけ知りたいんならIDEで身につくと思うけど、CのUNIX的な使い方とかMakefileの作り方まで含むならやっぱりターミナルでVimかEmacsが一番身につくと思うな
32 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 11:17:42.10 ID:Xm1ENLXg0.net] ほんのさわりだけの話なら >>1 の https://paiza.io/ https://ideone.com/ codepad.org/ で
33 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 11:42:34.56 ID:CBEVrlMza.net] 覚えるだけとか編集するにはPlumaで良かった
34 名前:デフォルトの名無しさん [2017/08/16(水) 12:30:21.85 ID:J2krMHFz0.net] IDEであろうがなかろうが 複数の環境を使ったほうがいい 1つの環境だけ使っていると 間違った知識をたっぷり吹き込まれる その環境が悪いわけじゃなく Cには処理系定義だの未規定だのがたくさんあるからだ
35 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 12:58:54.66 ID:MtMWIb12M.net] 汎用機でトライグラフとワードアドレッシングな奴をやっておけば完璧だね
36 名前:デフォルトの名無しさん [2017/08/16(水) 17:14:38.09 ID:J2krMHFz0.net] 関数を呼び出すたびごとにいちいちGETMAINするのかと思ったら違った
37 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 18:42:31.13 ID:eXMOwWIc0.net] 実際のところトライグラフの環境ってあるのかね 汎用機のEBCDIC(英字)も記号は一通りあるよね
38 名前:デフォルトの名無しさん [2017/08/16(水) 21:24:11.17 ID:J2krMHFz0.net] カード穿孔機くらいかな トライグラフの必要性を感じたデバイスは
39 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 00:56:17.97 ID:ugZ0fkzt0.net] NEC MSコンピューターとかかな シリーズで言うと MS120,MS140,MS190
40 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 06:39:42.32 ID:3FDT79Ua0.net] ヨーロッパとかで英語以外の国で、C言語で使う記号のところに別の文字が割り当てられてるケースとか。文字コードまたはキーボードのキーとして。
41 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 06:59:39.42 ID:qA/UZuuOM.net] どうでもいいことばかりだな
42 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 07:30:42.82 ID:5FUl5JPE0.net] バックスラッシュがあるべき文字コードの場所が 現地の通貨記号に置き換わってる環境でトライグラフ使わね?
43 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 07:50:53.84 ID:wL10pSGX0.net] >>42 そもそもそんな環境で開発なんてしたことないし
44 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 08:03:54.42 ID:zzoRHhsR0.net] >>42 どこの国だよ 糞だなwww
45 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 08:26:01.37 ID:NamoDwZf0.net] ノーマークでトライグラフになっちまってたことは過去に何度か・・・ (s)printf 中の format 文字列で
46 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 09:31:58.57 ID:3IL/r6zdM.net] >>42 半角の¥は廃止すべき
47 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 10:45:25.58 ID:ugZ0fkzt0.net] >>45 MJD?
48 名前:デフォルトの名無しさん [2017/08/17(木) 10:55:11.53 ID:NamoDwZf0.net] >>47 最近のコンパイラはデフォでトライグラフを抑制してくれてるようだけど 古いコンパイラは、そんな気がきいてないから <
49 名前:br> 警告文 "warning??!" ってやって実際の出力が warning| で なんじゃこりゃ?と [] [ここ壊れてます]
50 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 10:59:46.51 ID:NamoDwZf0.net] それでも ??/ → \ で 次の文字をエスケープして大事故にというのは無かったかな
51 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 11:00:52.21 ID:OslnP8rdM.net] >>47 >>45 じゃないけど "不正な値です: ??(10)" ってやったら "不正な値です: [10)" ってなって はあ?ってなったことあるわ
52 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 12:36:35.61 ID:kQ6hfaFr0.net] CとC++は馬鹿には使えない 惨事が起きるから 使わせてはいけないと聞いた
53 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 13:57:01.69 ID:ylZytAyh0.net] いくつかのコンパイラはトライグラフがデフォルトで無効になっていたと思う
54 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 16:57:48.81 ID:ZvDESEOS0.net] clとclangとgccはデフォルトで無効だし、今じゃ有効な環境のほうが珍しいんじゃないの
55 名前:デフォルトの名無しさん [2017/08/17(木) 21:30:33.60 ID:2RZZpZadE.net] char s[3] = "abc"; printf("%s %lu", s, strlen(s)); これの出力がabc 3にならず abc 9abc 9とか abcea 9abcea 9みたいに毎回不定で文字列が出力されるんですけど何でですか?
56 名前:片山博文MZ mailto:sage [2017/08/17(木) 21:37:39.45 ID:XnqHf7Mqd.net] >>54 ヌル文字が足りない。 改行がない。
57 名前:片山博文MZ mailto:sage [2017/08/17(木) 21:39:34.19 ID:XnqHf7Mqd.net] s[4]か、サイズ未指定のs[]にする。 \nを追加する。
58 名前:片山博文MZ mailto:sage [2017/08/17(木) 21:40:55.02 ID:XnqHf7Mqd.net] strlenの返却値はsize_tだから、%luは間違い。
59 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 23:15:30.23 ID:zzoRHhsR0.net] >>57 正解は?
60 名前:片山博文MZ mailto:sage [2017/08/17(木) 23:27:33.59 ID:XnqHf7Mqd.net] >>58 qiita.com/7of9/items/ca5ebf9b7861acbcf656 %zuのようだな。
61 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 23:35:38.09 ID:zzoRHhsR0.net] 組み込みのショボいライブラリじゃ使えなかったりするから unsigned intにキャストして%u でいいや
62 名前:デフォルトの名無しさん [2017/08/18(金) 03:59:52.12 ID:URLOh4DLM.net] キャスト毛嫌いしてたんだけど、size_t や int*_t シリーズを printf 書式で使う時のベストプラクティスだと気付いてしまったよ。
63 名前:片山博文MZ mailto:sage [2017/08/18(金) 04:18:35.01 ID:sjvn+N2bd.net] サイズの変わる型キャストは、(通常無視できる程度の)少しだけコストがかかることに言及しておこう。
64 名前:片山博文MZ mailto:sage [2017/08/18(金) 04:20:02.39 ID:sjvn+N2bd.net] わずかに時間と計算量がかかるという意味のコストね。
65 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 07:04:19.91 ID:R7MrN97k0.net] printf使ってるときなら、無視できるレベルだな
66 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 07:10:44.43 ID:RGoxPD09M.net] 大抵の場合、暗黙でintに変換されるので%dで問題ない
67 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 07:50:44.76 ID:cQGhZEXD0.net] >>63 64ビットで渡すより32ビットで渡す方が普通は速い
68 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 07:51:44.71 ID:cQGhZEXD0.net] >>65 intより大きいサイズはintに変換されない
69 名前:デフォルトの名無しさん [2017/08/18(金) 09:48:31.67 ID:+zi/zXZ30.net] >>65 問題大ありだよ 64bit 環境では、sizeof sizeof 1 == 8 だぞ
70 名前:デフォルトの名無しさん [2017/08/18(金) 10:03:06.56 ID:+zi/zXZ30.net] 脇道に逸れるが整数のサイズってどいつもこいつもイマイチだね char 8 short 16 int 32 long 64 long long 128 と、せっかく5階級あるのを無駄なく使えるようになってない
71 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 11:07:14.63 ID:cQGhZEXD0.net] どこの環境だよ
72 名前:デフォルトの名無しさん [2017/08/18(金) 11:55:29.20 ID:+zi/zXZ30.net] いや、そういう環境があったらなあと
73 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 12:41:24.28 ID:8ZqVNhGud.net] そんなに細かく分ける意味あんのかね。 64bitだけでいいだろ。
74 名前:デフォルトの名無しさん [2017/08/18(金) 12:46:10.63 ID:K+PXWISB0.net] Makefileの書き方なんだけど makeが実行されているときに 今何を実行してるか表示されるけど 「なんでこれが実行されているんか」の理由も表示したい 依存関係の hoge: fuga を表示したい .c.o: @echo $@:$^ $(CC) $(CFLAGS) -c $< みたいに書いたりしてんだけど、全部に書くのもダサい気がするし 良い方法はないでしょうか
75 名前:デフォルトの名無しさん [2017/08/18(金) 15:25:50.71 ID:+zi/zXZ30.net] >>72 128が標準にあれば使い途いろいろあるぞ
76 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 15:40:25.23 ID:RRX5RBja0.net] >>73 GNU make なら -d (デバグ表示)とかは? ただ「なぜこれが実行される」って、ファイルの更新日時ぐらいしか ないと思うけど
77 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 16:57:07.47 ID:UodSk1FQ0.net] >>75 このコマンドを実行したのは○○より△△が古いから って言うのを知りたいんでしょ $^ の意味も知らないならROMってなよ >>73 make コマンド自体に手を入れた方が早いかも
78 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 18:57:47.45 ID:aoGOUUu+0.net] C関係ないんだから、別スレでやれよ
79 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 20:41:27.26 ID:2qfgYUHL0.net] すみません初歩的なことですが・・ 前置インクリメントa++ 後置インクリメント++a がありますが、a=a+1は後置になりますよね?
80 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 20:44:00.68 ID:m74Y+4jlM.net] b=a++ と b= a= a+1 は違う気がする。
81 名前:片山博文MZ mailto:sage [2017/08/18(金) 20:47:26.76 ID:sjvn+N2bd.net] どちらでもない。
82 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 20:49:13.42 ID:5LpMFucB0.net] 加算と代入
83 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 20:51:16.52 ID:2qfgYUHL0.net] 回答有難うございます 実験してみたのですが、a=a+1は前置(a++)にも後置(++a)にもなるのですね i.imgur.com/teLsUGY.jpg
84 名前:デフォルトの名無しさん [2017/08/18(金) 23:11:42.85 ID:+zi/zXZ30.net] 違う! 前置だ b = (a = a + 1);
85 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 23:21:22.94 ID:5LpMFucB0.net] a[i++] = i; は悪魔召還だけど インクリメント演算子なしのこれ a[i =i+1] = i; も鼻から悪魔になるのかな
86 名前:デフォルトの名無しさん mailto:sage [2017/08/18(金) 23:57:54.41 ID:nSj4GkNd0.net] >>78 >前置インクリメントa++ >後置インクリメント++a 考え方が逆 変数を基準に考えるのではなく演算子を基準に考える 前置インクリメント++a : 演算子を’前’置した場合、変数(式)の評価’前’に演算子が適用される 後置インクリメントa++ : 演算子を’後’置した場合、変数(式)の評価’後’に演算子が適用される
87 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 00:03:09.07 ID:0xgPi4RO0.net] >>84 なるでしょ iの変更と最後のiの評価の間に順序性がない事に変わりはない
88 名前:デフォルトの名無しさん [2017/08/19(土) 09:44:47.22 ID:CpINIl4e0.net] i = i + 1; の、iの変更と最後のiの評価の間の順序性は?
89 名前:C言語ますたー《ますたー軍団(常時募集)の長》 [2017/08/19(土) 09:54:20.36 ID:6ANTyB1VM.net] >>87 i+1のiは変更前のiでしょ
90 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 10:03:42.32 ID:cD3Bg7W9d.net] >>30 デバッグしないのか?
91 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 10:37:04.42 ID:opyN89fo0.net] デバッガはデバッガで起動すればいいし、printf があるし。
92 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 11:26:43.49 ID:0xgPi4RO0.net] >>87 6.5.16 Assignment operators 「The side effect of updating the stored value of the left operand is sequenced
93 名前:after the value computations of the left and right operands. The evaluations of the operands are unsequenced.」 左オペランドの変更は、左右オペランドの評価の後 [] [ここ壊れてます]
94 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 12:19:31.20 ID:9KU7ntuJ0.net] >>84 MISRA-C で、禁止されている a[式] この式に、副作用があったら、ダメ。 バグるから
95 名前:デフォルトの名無しさん [2017/08/19(土) 15:28:05.17 ID:CpINIl4e0.net] >>91 thx だよな、そこは断り書きが必要な箇所
96 名前:デフォルトの名無しさん mailto:sage [2017/08/19(土) 23:53:05.68 ID:HeBiuDVT0.net] >>92 バグが入りやすい書き方ってだけでバグるわけじゃない
97 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 00:16:58.16 ID:856Qy56L0.net] a[i++]= b; は問題ないしな。
98 名前:デフォルトの名無しさん [2017/08/20(日) 03:47:32.99 ID:+c5k6kJk0.net] 右辺の結果を出してから左辺の計算やってるようだな。 https://paiza.io/projects/G_durt7YVnR55npMvUcKwg
99 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 06:41:37.88 ID:6XW1JaY/0.net] i.imgur.com/BmPLoWb.png
100 名前:デフォルトの名無しさん [2017/08/20(日) 09:25:38.38 ID:sGdhnhOm0.net] 事実上どうなっているという話ではなく 理屈の上でどうなのかという話 ちゃんと断り書きがあったからめでたしだが そうでなかったら大変だった
101 名前:デフォルトの名無しさん mailto:sage [2017/08/20(日) 09:58:54.27 ID:SbUj3AhWM.net] >>76 ありがとう ちょっとmake読んでくる
102 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 11:22:32.57 ID:chgkyZKA0.net] defineした定数を文字列定数にいれるにはどうしたらいいの? #define EOL 0x0d const char version_message[] = "Version 1.0\x0d" ↑この文字列の改行コードに定数EOLを展開した値を入れたいです。
103 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 11:44:36.20 ID:xXPB4eWM0.net] >>100 https://ideone.com/LeNUGK
104 名前:デフォルトの名無しさん [2017/08/22(火) 11:47:40.32 ID:przmPyd7E.net] typedef struct hoge { int a; int b; } hoge; hoge h = {1, 2}; 構造体に含まれるメンバ名と値を全て出力する方法を教えてください 上の構造体なら a,1 b,2 と出力したいです
105 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 11:59:42.09 ID:GCxyf0Da0.net] >>100 小さな部品を繋いで大きなものを得るのはとても簡単にできるけど 部分を削って小さな部品を得るのはとても大変なのよ だから本来は改行文字は機能的にレイアウトなのでデータとは分離しておいて 表示なりなんなりするときに結合して使うのが望ましいもちろんVersionと数字もね その上で既存コードのメンテ等でどうしても必要なら>>101 がベスト
106 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 12:08:53.86 ID:R9ds2cCvH.net] >>100 #define EOLSTR "\x0d" const char version_message[] = "Version 1.0" EOLSTR;
107 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 12:11:18.37 ID:xXPB4eWM0.net] >>104 それは迷ったんだよねー 次点でその文字列をマクロで作ることも考えたけどあかんかったw
108 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 12:14:35.93 ID:GCxyf0Da0.net] >>102 変数名はあくまで人間が扱いやすいように何らかの領域(一般的にメモリアドレス)に付けるあだ名であって プログラム(コンピュータ)的にはメモリアドレスのほうが扱いやすいのであだ名は不要(アドレスのほうはプログラム的に出せる) なのであだ名のほうが欲しいなら以下のように直書きするしかない printf("%s,%d\n", "a", h.a);
109 名前:デフォルトの名無しさん [2017/08/22(火) 12:52:42.46 ID:przmPyd7E.net] >>106 そうなんですか・・・ 全部直書きするのキツイのであだ名がなくてもかまわないのでこの場合の方法ないでしょうか?
110 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 13:00:37.52 ID:u9fcDp43H.net] デバッグ目的ならデバッガで
111 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 13:20:20.96 ID:chgkyZKA0.net] >>101 ,104、ありがとうございます、 PCとUSBシリアルで通信する組み込み機器のドライバをメンテしていて 受信したテキストの終端検出にEOLはキャラクタで扱っているし 送信する固定テキストは改行含めてリテラルにしたく プリプロセッサの#か##で連結でなんとかできないか悩んでました。
112 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 13:21:07.96 ID:bF0tRsYk0.net] コンパイルしたらメンバー名と型の情報は消える
113 名前:C言語ますたー《ますたー軍団(常時募集)の長》 [2017/08/22(火) 15:44:32.04 ID:tfXVsICTM.net] メモリアドレスを出力させればいいんじゃない? %pで&aを表示できるはず
114 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 16:43:27.00 ID:xXPB4eWM0.net] 与えられた変数から、メンバ名とその値を再帰的に列挙して欲しいんだろうけど そんな都合の良い言語じゃないから自分で並べるしかない 必要に応じて毎回並べるか 並べて出力したものを関数化しといてそれを呼び出すか
115 名前:デフォルトの名無しさん [2017/08/22(火) 17:44:12.68 ID:NIldwpVs0.net] 再帰的に列挙は自動だととんでもない情報量になったりするからな そこから欲しい情報をどうやって抜き出すかが頭の使いどころ
116 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 22:53:39.27 ID:YwU2BQ/U0.net] >>100 #include <stdio.h> #define EOL x0a #define _STRING(s) # s #define STRING(s) _STRING(s) #define _VALUE(s) 0 ## s #define VALUE(s) _VALUE(s) char a[] = "Hello" STRING(\EOL); void main(void) { int n; n = VALUE(EOL); printf("%02x [%s] \n", n, a); }
117 名前:デフォルトの名無しさん [2017/08/22(火) 22:53:45.07 ID:hpqXPKX70.net] >>107 マクロでちょっと簡略化することはできる。ちょっとだけな。 https://paiza.io/projects/dRqn0XFnjDUUmr5_5AzF2A
118 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 22:56:32.37 ID:hpqXPKX70.net] あ。もうちょっとできたので今修正した。
119 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 23:26:16.15 ID:bF0tRsYk0.net] >>115 これってさ、メンバ名をconst char*にするんだよね?
120 名前:デフォルトの名無しさん mailto:sage [2017/08/22(火) 23:41:21.22 ID:D8nSL4rC0.net] >>115 でいいと思うけど、 そもそもこれがしたい場合にC言語を使うのが間違いでしょ。 動的言語かリクレクションがある言語を使えばいいだけ。 ちなみにVC++/CLIでよければリフレクションが使えるけどね。 質問者には無理だろうけど。 レベルからいって>>108 が当たりだろうね。
121 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 00:06:55.83 ID:b0JJUPNx0.net] >>117 #x の所? そうじゃないかな。gcc -E とかやって見てみるとわかると思うが、 h.a は単純に "h.a" になっている。 >>118 C使わなきゃいいってのはその通りだが、それを言っちゃあお終いよ。
122 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 00:14:59.00 ID:PJzK0CC4M.net] 構造体のメンバ名がほしいとかデバッグ以外に何があるの
123 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 00:22:23.00 ID:CuDbJhab0.net] >>120 有名どころはGUIのバインディング。 例えばWPFは自動的にリクレクションを使ってこれをやってくれる。詳細は以下参照。 www.atmarkit.co.jp/ait/articles/1010/08/news123.html ただ、Cのアプリでこれは要らんし、今時生CでGUIもないよな?
124 名前:デフォルトの名無しさん mailto:sage [2017/08/23(水) 06:05:17.73 ID:x0fRL5lg0.net] テキストベースで構造体の値のファイルへの保存と読み込みをしたいのかな
125 名前:デフォルトの名無しさん [2017/08/25(金) 05:26:20.30 ID:vC6ff47f0.net] マクロでどうにかできるかとも考えたが壊れる対処のし様がない #define pr(a,b) printf(pr_##a(b)) #define pr_test_t(b) "#b{i:%d,s:%s}", (b).i, (b).s typedef strct{int i; char *s;}test_t; pr((test_t){.i=999; .s="abc"});
126 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 05:30:42.91 ID:hNG5yKqv0.net] Cはウンコ言語なのでリフレクションはありませんの一言で終わる質問
127 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 08:26:26.12 ID:degYWVoy0.net] C言語はもう 気ままにリフレクション
128 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 08:28:37.56 ID:+VfvF6y6d.net] >>124 うんこじゃない言語もコンパイラはうんこ言語(お前に言わせるとC言語)でつくられてるけどな
129 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 08:31:15.05 ID:mWX/padLd.net] 本当にうんこならとっくの昔に消えてるよ
130 名前:デフォルトの名無しさん [2017/08/25(金) 15:42:32.73 ID:RGmsOxnq0.net] Cはうんことかほざくやつ まさかLinuxなんか使ってねえだろな
131 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 17:02:40.42 ID:mWX/padLd.net] linuxはうんこ
132 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 17:44:02.80 ID:GY4pXB3S0.net] Cがウンコとか言ってる奴に限ってRubyでしか書けないとかいうオチだったら笑えるんだけどな
133 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 21:36:12.81 ID:BZOsNf+t0.net] 高級アセンブラ最高じゃん
134 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 22:36:16.04 ID:+VfvF6y6d.net] >>131 ほんそれ
135 名前:デフォルトの名無しさん mailto:sage [2017/08/25(金) 22:45:39.22 ID:IHFV3+gX0.net] むしろ Ruby で自由にコードを書ける人を尊敬する今日この頃。 最近やってるんだけど、どうしても馴染めない。普通には組めるけど、違和感が残るというか抵抗があるというか。
136 名前:デフォルトの名無しさん mailto:sage [2017/08/26(土) 00:06:54.39 ID:F7j6CSPU0.net] リフレクションを使う気がなければリフレクション自体がウンコだよ。 ・ソースコードがだだ漏れ ・実行体が無駄に膨らむ(ソースコード情報を含むため) ・リクレクションが必要な用途なら、動的言語でついでに型無しの方が断然楽 GUIとかね。 ウンコと言われ続けたJavaScriptを誰も殺せず、 ついにはElectronとか言い出してデスクトップ側にも進出してきてるだろ。 やれば分かるがGUIに関しては動的型無しHTML(=JavaScript)は最強。 C言語はC言語が目指した範囲での仕様は美しいよ。 ただそこには今後ともリクレクションは必要ないね。 唯一引っかかるのは>>122 か。 >>133 どの辺が? 俺はRuby使いではないが、それよりも酷いとされるJavaScriptには馴染んでしまったから、 ある程度は答えられるかも。
137 名前:デフォルトの名無しさん [2017/08/26(土) 00:48:52.34 ID:acOQPPj10.net] lua等の組込み言語とやり取りする container生成用補助構文群が有ってもいい 関数では前方宣言とか scopeが邪魔して対処しきれないだろうから うまくすれば文字列操作表示も標準libraryから追い出せる
138 名前:デフォルトの名無しさん [2017/08/26(土) 00:52:27.30 ID:acOQPPj10.net] pr(test_t, (test_t){.i=999; .s="abc";});
139 名前:デフォルトの名無しさん mailto:sage [2017/08/26(土) 14:20:33.57 ID:rkE5GYva0.net] >>134 javaでアノテーションいじり始めるとリフレクションまじ便利で欲しくなるけど、c系にはなくてもいいかなというのも思う。 テバグ目的ならgdbでいいしな。
140 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 00:26:03.40 ID:+Y8D6iZy0.net] >>134 規模が大きい場合は型があって静的に検査できるほうが便利だねというのが世間の流れだと思うが TypeScriptとかFlowとか 速度を稼ぐ目的でwasmも今後主流になっていくだろう 巨大ストレージ、OSSが主流な時代にメタデータのサイズやソース隠蔽は気にしなくなったし
141 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 02:58:14.41 ID:Uz0lh6nE0.net] >>138 > 規模が大きい場合は型があって静的に検査できるほうが便利だねというのが世間の流れだと思うが 違うね。今の流れは「選べる」だ。つまり、 ・型無し言語に型情報を付加し、恩恵を受ける---TypeScript ・型あり言語に型推論やジェネリックを追加し、型情報を記述する煩わしさを回避---C#/C++/Java どっちも出来ることはほぼ同じ。ほぼ全ての言語がここを目指してるでしょ。(Cを除く) 要するにいいとこ取りを目指しているわけで、自然な流れだ。 型があった方が助かるのなら書け、煩わしいだけなら書かなくて済む、という方向に進化しつつある。 なお、GUIに関しては型無しでも大して苦労しない。バグっているかどうかは見れば分かるから。 > 速度を稼ぐ目的でwasmも今後主流になっていくだろう ならんと思うし、C使いにとってはなったとしてもああそうですか、でしかないと思うが。 > 巨大ストレージ、OSSが主流な時代にメタデータのサイズやソース隠蔽は気にしなくなったし OSSについては歪んでいて、本来は選べるべきだよ。 JavaScriptのようにソース曝露必須というのは問題ではある。 富豪どころか大富豪プログラミングを自由に出来る時代ではあるが、 何だかんだで速度=バッテリの持ち/快適さなので、実際は、「気にしなくていい環境も増えた」だよ。 とはいえCレベルでのチューニングが必要なこともそうないが。
142 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 07:49:01.20 ID:pPJ906sN0.net] >・型無し言語に型情報を付加し、恩恵を受ける---TypeScript >・型あり言語に型推論やジェネリックを追加し、型情報を記述する煩わしさを回避---C#/C++/Java 後者は型を明示的に書かなくてもいというだけで最初からすべて型検査してるぞ。 型検査について言えば、動的型付け言語に静的な型検査を導入する流れはあるが逆はない。
143 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 08:29:00.57 ID:E7mhir0G0.net] 動かす前にバグが見つかる仕掛けがちゃんとあるなら 動的型付けでも構わんよ
144 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 14:42:19.23 ID:/UmWkn6m0.net] 無理ゲーっぽくね?
145 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 14:47:49.09 ID:/UmWkn6m0.net] んなことはないみたいだぬ
146 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 18:55:09.32 ID:qEt/+AkhM.net] 100%は無理 そこそこなら行ける
147 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 20:04:11.09 ID://zGX0GI0.net] option explicit +中間言語コンパイル,なら使えそうだ
148 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 22:43:29.12 ID:Uz0lh6nE0.net] >>140 > 型検査について言えば、動的型付け言語に静的な型検査を導入する流れはあるが逆はない。 これは事実としてはその通りだが、理由はこれが型あり言語の正義だからであって、 現実は型検査がウザイだけの時も多いだろ。 C++のtemplateとか、varで書いたら勝手にtemplate化してくれ、という場合も多い。 込み入ったことをやるとコンパイルを通すだけの為に苦労したりするが、 あんなのは完全に時間と手間の無駄だ。 また、他でもよく言われているが、確かに関数ポインタを常用し始めた場合、 型あり『しか出来ない』言語は壮絶にウザイ。どうでもいい型が氾濫するだけだし。 言語として出来る/出来ないではなく、 ユーザーがやりたい時には出来る/やりたくない時には切れる、が正解なんだよ。 型無し言語はこれを認めていて、欠点を修正し始めてる。 型あり言語はこれを認められず、まだ自分たちの正義(型検査は必須)を押し売りしてるだけ。 C(と言うかC++)ではconstがこの状況に近いのではないかな? 通説ではconstは付けるべき、となっているが、俺は付けてない。理由は、 ・そもそも俺はconstで苦労したことがない(必要性を感じない) ・中途半端に付けてると余計に面倒になるだけ ・const_castとか、ただの馬鹿としか思えない なんだが、同様の意見の奴もある程度はいるだろ。 過剰な型検査ってのはあるんだよ。それが人によって異なるってだけで。 やればいいって物ではない。
149 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 22:56:30.74 ID:pPJ906sN0.net] なんだ
150 名前:H>>139 の「違うね」ってのは現状認識が違うって話じゃなくてあんたの理想と違うってことか? そりゃ正解はあんたにしかわからんわ。 [] [ここ壊れてます]
151 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 23:14:00.57 ID:Uz0lh6nE0.net] >>147 現状認識も間違っていると思うけど。 日本語が不自由ならさようなら。 そもそも「型検査」が欲しいわけではなくて、静的チェックが欲しいだけなんだよ。 君は最初からずれている。>>141 が正しい。
152 名前:デフォルトの名無しさん [2017/08/29(火) 23:17:01.52 ID:/SLQJmZn0.net] > コンパイルを通すだけの為に苦労したりするが、 > あんなのは完全に時間と手間の無駄だ。 そうだねえ 自分の考えがはっきりしてなくて筋が通らないのを コンパイラに突っ込まれ、そのたびに右往左往じゃ 下手の考え休むに似・・いや如かずってやつ
153 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 23:31:56.37 ID:pPJ906sN0.net] 「今の流れってこうだよね」 「俺の欲しいものは違う」 会話にならねぇ。
154 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 23:53:00.65 ID:Uz0lh6nE0.net] >>150 そうとしか取れないのは君が未熟だからだね。 「流れ」ってのは原因ではなく、大多数が希望した「結果」なんだよ。 君は初心者だから、毎日コード書いている連中が何を求めているのか分からない。 それだけだね。
155 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 23:57:29.58 ID:+Y8D6iZy0.net] >>139 ,146 >GUIに関しては型無しでも大して苦労しない。バグっているかどうかは見れば分かるから。 見てわかる程度の規模の場合は型無しでもよいだろうね >型検査がウザイだけの時も多いだろ どんな時?C#には動的に型解決するdynamicがあるけどほとんど使わないな COM除けばJSONやXMLの処理で楽するときぐらい?それでも本番用ならちゃんと書くなぁ >どうでもいい型が氾濫 ジェネリックで型指定するだけだから氾濫しなくね? あと、constはプログラマーがミスを防ぐためのものであると同時にコンパイラーへのヒントでもある const修飾されていれば大胆な最適化が可能な場合も多い
156 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 00:01:54.97 ID:3iEZIBUv0.net] >>151 俺も>>150 と同じように読めた。 自分の希望を大多数の希望だと決め付けるのは止めろよ。
157 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 00:53:26.35 ID:F1WQhw000.net] >>152 > >GUIに関しては型無しでも大して苦労しない。バグっているかどうかは見れば分かるから。 > 見てわかる程度の規模の場合は型無しでもよいだろうね 規模にかかわらず、見ずにチェックするGUIなんて無いだろ。 > どんな時?C#には動的に型解決するdynamicがあるけどほとんど使わないな おー、C#はやはり進んでいるというか、痒いところに手が届いているね。 要するに楽をさせてくれでしかないのだが、ぱっと思いつく遭遇したケースは、 ・callbackでdelegateの型チェックがウザイ。グダグダ言わずにcallbackしてこい。 ・リフレクション時がかなり最悪。(C#なら問題ないが、 VC++2008とかだと、MSDNで型を調べながら型を書くという本末転倒の事態になる) 以下にはJSONガーとか書いてあるけど、JSONをC++で受けたことはないので実感はない。 ufcpp.net/study/csharp/sp4_dynamic.html#what 後は型無しだとデタラメなパッチが可能だというのもあるし、俺は常用してるけど、 これ自体はあまり推奨されることではないね。 俺はJavaScriptで型をかかないことに慣れてしまったので、 再びVC++で型を書く時にウザくて仕方ない。 (ただしこれはVC++しかやってない時には全く感じなかった) 要するに型情報は具ではなく、ただのチェック用付加情報でしかないんだよ。 例えれば、当たり前に読める漢字にもいちいち全部ルビを付けている感じか?二度手間がウザイ。 ただし二重チェックをしたい部分もあるので、そういうところは書かせろ、とも思うが。 コンパイラにプログラマが合わせるのではなくて、プログラマにコンパイラが合わせるべき。 > ジェネリックで型指定するだけだから氾濫しなくね? C#は多分そうだね。C#では解決済みかも。 > const修飾されていれば大胆な最適化が可能な場合も多い この説はよく聞くが、具体的にどういうケースよ?
158 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 00:58:09.18 ID:ry+Kms2n0.net] >>141 こういうやつってユニットテストしらないのか? Cでも今時は書くだろ
159 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 01:17:46.58 ID:ry+Kms2n0.net] 型どうこうで考えるべきは依存関係なんだが 静的型言語はすぐに依存関係ができる そのためにやれ継承だのインタフェースだのデザパタだのとごちゃごちゃ考えなきゃならん しかもデザパタで実現できる疎結合は完全じゃないからね
160 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 01:56:29.11 ID:F1WQhw000.net] >>156 それは型ではなくてラムダの利点だと思うが。 ただ、ラムダを積極活用すると型が邪魔だってのはあるし、 結果的に関数型が型無しor型推論に突き進んだのはこれが理由だと思うが。 しかもデザパタって使い物にならんだろ。 というか元々Javaという関数ポインタもラムダもない言語で(キリッされても、 他の言語ならもっとマシに出来るんじゃね?ってのが多いというか、 なんで縛りプレイに付き合わないといけないの?っていうか、 だいたい説明自体もイミフなのが多いし。
161 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 02:00:40.60 ID:vF4qFgfn0.net] >>154 コンポーネントとかイベントの引数の型を間違えたり変更時に修正漏れが出たりはよくあるでしょ >callbackでdelegateの型チェックがウザイ async/awaitがある言語だとコールバックを使うことはあまりないしなぁ どういうのを望んでるのかよくわからんが、型安全と最適化を投げ捨ててまでやることには見えん コールバックの処理が適切なことはテストとかで保証するとか考えるとそっちが面倒そうに見えるが >リフレクション時がかなり最悪 VC++でリフレクションって、どの話だ >チェック用付加情報・二度手間がウザイ どうせドキュメントとかテストに書いてくんだから二度手間は避けられん 定義が面倒な分、静的型言語では戻り値の型やメンバーが即座に確実に補完されるので非常に快適 全参照を書き換えるリファクタとかもできるし 新しい言語はそこら辺かなり解決されてる
162 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 02:07:48.34 ID:ry+Kms2n0.net] >>157 酔ってんのか?Java?意味不明だ レス付けるなら何を話してんのか特定しろ
163 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 02:25:01.52 ID:vF4qFgfn0.net] >>154 constはどちらかというと、x + y = zみたいな変な呼び出しを禁じたいからつけてるから、最適化についてはパッとでは極端な例しか思いつかんな・・・ hoge(&a,&b); c = a + b でhogeの引数がconstなら処理を無視してa+bを静的に確定できるとか 根本的にC++は「型安全とバイナリの性能>>>楽をしたい」という発想の言語だから静的な型の確定を妨害するような機能は理念に反するでしょ javascriptにポインタが欲しいぐらいの不自然さ
164 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 06:22:36.60 ID:dAnuHQ8p0.net] 早く夏休み終わらないかな…
165 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 07:01:40.06 ID:AqkMSzAW0.net] いや終わらなくていいよ 電車混むし
166 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 08:10:07.81 ID:Li+Lo8rKd.net] 大学生のは未だ続くで
167 名前:デフォルトの名無しさん [2017/08/30(水) 13:51:14.27 ID:AB0hyKA3E.net] すいません Windowsでvirtualboxとかcygwinとかmsysみたいな名前のをインストールする予定はないんですが WindowsでCを書く場合はVC++を使うのが定番なのでしょうか? gccとclangを使うのはあんまりおすすめしないですか?
168 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 13:58:51.95 ID:1qHN72hha.net] GUIないならgccでも問題ない
169 名前:デフォルトの名無しさん [2017/08/30(水) 14:33:39.82 ID:BJd10UjW0.net] GUIあってもgcc使えるぞ gcc your_program.c -luser32 -mwindows -luser32ってのがインポートライブラリuser32.libを使う指定な 他に色々kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.libなんかがいるんで適宜追加しる
170 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 18:06:52.31 ID:S+MvNVsbM.net] Windows版のgccある?
171 名前:デフォルトの名無しさん [2017/08/30(水) 18:24:32.41 ID:BJd10UjW0.net] たとえばこんなのか? https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/
172 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 18:31:00.76 ID:S+MvNVsbM.net] mingw 入ってない環境だとバイナリ使えないよね。 コンパイルして実行したいだけなのに。
173 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 18:43:05.43 ID:LRl1+/WB0.net] 実行ファイルの配布の意図? mingwでコンパイルできれば、実行もできる環境が整ってるんじゃないの?
174 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 19:17:06.22 ID:58Rp2mqQ0.net] >>169 よくごっちゃにしてる人がいるけどそれはcygwinを使う場合 mingwはランタイムにmsvcrtを使うのでcygwin1.dllは不要
175 名前:デフォルトの名無しさん [2017/08/30(水) 19:17:51.85 ID:BJd10UjW0.net] あのなー・・・ cygwinがそういう批判を受けていたのを踏まえて 「本当のミニマリスト」を目指したのがmingwなんだよ それすらいやなら、あとはM$純正のbashくらいだぞ
176 名前:デフォルトの名無しさん [2017/08/30(水) 19:21:14.37 ID:qx/wlZ6S0.net] https://www.youtube.com/watch?v=VzylWELlUy4
177 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 20:36:36.61 ID:ViOUv0iA0.net] >>167 The Perl for MS Windowsって言うのがある。 これインストールすると、gccも入る 普通にコマンドラインで使える strawberryperl.com/
178 名前:デフォルトの名無しさん [2017/08/30(水) 20:41:41.90 ID:BJd10UjW0.net] >>168 だって本当に最小限のmingwが黙って入るから意識せずに使えるぞ で最小限じゃないmingwが欲しくなったらmsys2とか入れるんだよ
179 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 20:52:42.57 ID:t1uAI5x90.net] こういう枝葉でゴチャゴチャやるぐらいなら、さっさとVC入れたほうが良い windowsで開発するなら、VCさえあれば十分
180 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 21:46:54.45 ID:1xtdX2a20.net] コンソールアプリくらいならgccでコンパイルできても良さそうなもんだけどな。 関係ないけど .NET に JS コンパイラが入ってるの知らなかった。
181 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 22:05:25.61 ID:AIW55pOFM.net] >>168 >>171 知らなかったです。 いいですね、MinGW
182 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 23:02:07.68 ID:F1WQhw000.net] >>158 > 引数の型を間違えたり変更時に修正漏れが出たり ねえよ。正確に言うと、『これが型検査で都合よく引っかかるのは』ねえよ。 型があってコンパイル時に落とせるのは明確なtypoだけで、それ以外は期待出来ない。 xxxx2とxxxx3とかを間違えた場合、通常、型は同じでしょ。 ただそれ以前にJavaScriptだと修正漏れ自体がないっつうか、修正しなくていいというか。 型検査は基本的にソース全体で辻褄が合っているかを検査する。 だから例えば機能追加で関数の引数が増えた場合、コンパイラは修正漏れを全て検出し、修正を促してくる。 ところがJavaScriptにはそういう機能はないから、漏れてしまう、というのがそちらの意見だと思うが、 そもそも漏れても動作するように作られてるから問題ない、というのがJavaScriptの思想。 具体的には、 ・同じ関数が引数の数が違っても呼べるから、エラーにはならない。(引数の型/個数はシグニチャに入らない) ・足りてない引数は、undefind(falsy)になっているから、if (addedParameter) で簡単に対応出来る。 だから修正するパス(その機能が追加される動作パス)の部分だけ修正して、後は放置で問題ない。 もちろんこれだとソース内で引数の数の一致なんて無くなってしまう。 これでいいのか?とも思うが、俺が試した範囲では特に問題はなかった。 C#はIDEがいいから、全ソースをリファクタとかも簡単に出来るようだ。これはこれで一つの完成形だ。 そうではなく、手修正だと漏れる、だからコンパイラがそれを検出する、というのも一つの手だが、(C++) 漏れる漏れない以前に、関係ないところは修正の必要がそもそも無い、というのも一つの手だよ。(JavaScript) ちまちま全修正するのが面倒だし危険だから、 受け側で引数違い毎にラップ(オーバーロード)してたらなんだかなぁ(俺的C++)、 みたいなのとは発想が逆だった。
183 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 23:03:09.90 ID:F1WQhw000.net] async/awaitはJavaScriptにもあるが、あれはC#とかで必要なのであって、JavaScriptでは要らないね。 理由は、 ・外側関数(上位階層)の変数は全部クロージャになっていて読み出せる。 ・関数はどこにでも書ける。 から。C的に関数毎に変数が完全に分離している時にはasync/awaitでないと変数が共有出来ないけど、 JavaScriptの文法だとcallbackでも変数共有出来るから、要らん。具体的には、文法は適当だが、 function someTask { var x = xxx; var a = await funcA(x); var b = await funcB(a,x); } みたいなのを、 function someTask { var x = xxx; var a, b; // 共有変数は上位で宣言しておく。これでクロージャから捕捉出来る。; function funcA(){} funcA(funcB); // funcBはcallback、funcA内でxは使える、aにも書ける function funcB(){} // funcB内でa,xは使える、bにも書ける } だからawait毎にぶった切ってcallbackしても、上から順に実行するだけの単純ソースにしかならない。 JavaScriptなら、どっちでもいいや位でしかないんだよ。 C#ではこれができないから、async/awaitが必要だってだけで。 ただ俺もcallbackと言ったがこれは間違いだった。VC++では非同期のcallbackはやってないわ。 ウザイと思ったのは関数ポインタを差し込む時に型チェックがあることだった。 上記の通り、JavaScriptでは関数ポインタでさえあれば引数の型と個数は関係なく呼んでくるので、 関数ポインタを差し込む時にいちいち考える必要がないんだよ。 そして機能追加は追加パスだけの変更で済む。 C++の型チェックだと変更がソース全体に及ぶしこれを断れない。 引数の型とか個数を間違えた場合、普通は根本的に動かないなら、テストでは当てさえすれば検出出来る。 そんな簡単なエラーチェックの為にコンパイルを通すだけの為にいちいち型を合わせたり、 変更がソース全体に波及するのが危険でウザイって事。
184 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 23:04:03.99 ID:F1WQhw000.net] > コールバックの処理が適切なことはテストとかで保証するとか考えると どのみちテストはやらんと駄目でしょ。と言うか、逆に、 「コールバックの処理が適切なことは『型検査』で保証する」ってのは無理でしょ。 Haskellのキチガイ共はそういう思想らしいが。 「型安全」ってのはバグの一つの形「インタフェース(接続部)の間違い」を検出するだけであって、 処理の中身が間違っている場合は全く検出出来ない。つまりテストは省略出来ない。 それで「型安全」にするために払うコストと、それによって受ける恩恵を考えた場合、 俺にとっては「無いよりマシ」程度で、「投げ捨ててまで」って程の価値はないね。 とはいえtypoを検出する機能だけは欲しいんだが、逆に言えばそれだけで十分だ。 >>160 多分、constで最適化ガーってのはやっぱり無いんだよ。 想定されるケースはそちらの挙げたとおりで、 void someFunc(){ // (A) hoge(&a, &b); // (B) // (C) } で、(B)で変更されないことを保証されれば、 (A)時点の&a, &bのキャッシュ(というかローカル変数に取ったもの)が (C)でも有効です、ってだけだが、そもそもこのケースがないだろ。 自関数内で変更してるかどうかはコンパイラには明確に分かるんだから、 考えられるのはこのように他関数をまたいだケースなんだけど、 それなら最初から(A)(C)(B)の順に処理しろ、でしかないし。 ((B)で変更されるから(C)は(B)の後ろなのであって)
185 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 23:14:59.21 ID:58Rp2mqQ0.net] ただmsvcrtを使うということはvcがサポートするC規格に引きずられるのを留意しておくこと 最新のmsvcrtでもたしかC99止まりでinttypes.hをインクルードしてもPRId64とか使えない C11の機能が欲しければ素直にlinux+gcc|clangの環境をオススメする
186 名前:デフォルトの名無しさん mailto:sage [2017/08/30(水) 23:55:33.72 ID:FdjUx67gd.net] 最適化かけないと通るけど、最適化かけるとセグフォ プリントデバッグしたらプリント文置いたり減らしたりするだけで最後に表示されるものが変わる なんだこれ
187 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:01:55.43 ID:B2+zi4Baa.net] 最後に¥0を付けてないとか
188 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:06:31.32 ID:M/UQy7Jt0.net] >>183 malloc/free使ってる?
189 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:15:15.17 ID:AFctto/wd.net] >>185 一切使ってないっす…… 引数で配列の大きさ渡してるのがまずいのかもしれない
190 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:22:21.25 ID:Mr6ZzHeH0.net] 配列サイズを越えて代入しているとか
191 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:28:32.21 ID:K0ByhO+S0.net] つかソース晒せないの?
192 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:28:58.33 ID:AFctto/wd.net] 配列の代入とは関係ないところで死んでるっぽいこともあるんだけど、それでも配列の範囲外アクセスとかあるものかなあ……
193 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:31:52.88 ID:AFctto/wd.net] >>188 そこそこ依存ファイルあるし、一応研究室の研究で書いているので、失礼ながらソースは上げられないです
194 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:32:55.14 ID:AFctto/wd.net] よく考えたらそんな状態で相談することが間違いか やっぱり撤回します。スレ汚しすいませんでした
195 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 00:34:49.91 ID:M/UQy7Jt0.net] >>190 メモリリークをチェックしてみたら
196 名前:デフォルトの名無しさん [2017/08/31(木) 02:33:47.40 ID:KfXpPD/x0.net] 最適化の有無で変わった事と言うと、この前こんなことがあった。 (以下の A, B は typedef された構造体) A *p = NULL; B *q = NULL; if (...) { A x; /* x の初期化などをする。 */ p = &x; } if (...) { B y; /* y の初期化などをする。 */ q = &y; } この後で p が NULL でなければ p の指す先を使おうとして死亡。 まあ、ブロック(というかスコープ)から外れた所で使ってるんだから当然と言えば当然ではあるが、 最適化しない場合は x, y はその他のブロック外の自動変数と同じようにスタックに領域が取られ ていて変化する事がなかった。そのため内容は保たれた。 しかし最適化したら A の領域は A のあるブロックから外に出たら破棄されたと解釈され、そして B のあるブロックの B の領域として上の A の領域を使用するようになっていた。そのため x と y の指す先は union のように重なってしまっておかしくなったと。
197 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 03:22:36.47 ID:IR3nOS0l0.net] >>179 いや、もっと単純に、APIの仕様変更で取得できる情報や型が変化したけど、エラー処理とか偶然うまく見える場合とかは目視では見落としがあるよねということ テストを書く前に簡単に修正箇所がわかれば便利みたいな話だけど、まぁ、やり方やライブラリによって違うのかもね 少なくともAngularとかはTypeScript採用だし、型あったほうが便利派は少なからずいるよとだけ
198 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 03:58:43.17 ID:IR3nOS0l0.net] >>180 ,181 C#でも同じようにラムダ式やローカル関数で変数をキャプチャできるぞ というかC++でもできるはず コールバックは階層が増えたりエラーや例外処理、分岐などが生じるとどんどん複雑になって単純には行かなくなる それを解決するのがPromiseで、それを更に単純に記述するのがasync/await 新しいライブラリとかはPromiseで返すのが当たり前になって来てるし、今後の言語もasyncに舵をきるんじゃないかな >関数ポインタを差し込む時にいちいち考える必要がない C++でどうやって実現すんの? char *を受け取る関数ポインタにとconst char*で受ける関数ポインタを入れてエラーにしなかったらややこしくて危険なだけでしょ コンパイルエラーじゃなくてテストで保証するとになればなおさら変
199 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 04:15:22.77 ID:IR3nOS0l0.net] >>181 >最初から(A)(C)(B)の順に処理しろ 何言ってんだBとかCに副作用があるなら入れ替えちいかんだろ コードは適当だけど、 void test(a,b) { hoge(&a,&b); piyo(a+b); } test(1,2) みたいに静的に確定するなら、piyoの引数をコンパイル時に計算してpiyo(3)みたいなコードをはいてくれたりもする
200 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 05:12:55.38 ID:egwbmqN8M.net] スタックフレームの破壊は明白なんだから関数内で宣言してる配列全部の 範囲チェック入れてみな
201 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 11:26:29.57 ID:e5ym4hpC0.net] やりそうなこと □ 要素数 n=10 の配列 int array[10]; アクセス可能なのは array[0] 〜 array[n-1] まで なのに array[n] を利用してる □ 文字列による配列の初期化で 終端記号(\0)含んだ分の領域を用意してない × char text[3] = "123"; // 終端記号含めると 4要素の空間が必要なのに 3要素にしてる ○ char text[] = "123"; // コンパイラにおまかせで □ 要素数を求めるのに sizeof(a) / sizeof(a[0]) を使ってるけど そもそも論で a が配列ではなくポインタだった為 処理したい要素数が渡っていない
202 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 13:55:57.05 ID:wUqC2S3T0.net] >>183 研究室から出せない秘伝のソース、 なら特殊なハードウェアで、実はvolatileが欠かせない、とかじゃねえの ソースの向こうのハードウェアが実は核分裂制御装置でした!……とかでももう驚かねえよ
203 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:11:13.20 ID:aZ9Rj489d.net] 創業当時から継ぎ足した秘伝のソース
204 名前:デフォルトの名無しさん [2017/08/31(木) 16:17:00.98 ID:JYM1pg890.net] 半分使って、半分継ぎ足しを繰り返すと79回目あたりで アボガドロ定数の逆数くらいに薄まるよね
205 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:47:29.73 ID:aZ9Rj489d.net] 何か、酵母とか菌糸とか入ってて熟成されるんよ。ただ混ざるだけじゃないんよ。
206 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 22:53:34.07 ID:F9uWTtxD0.net] >>194 > 型あったほうが便利派 半分くらいはインテリセンス目当てだと思うぞ。 そして俺自身も型を否定はしないが、C++の型検査も過剰気味だと感じている。 だからconstは使ってないし、関数ポインタの型検査もウザイ。 つーか、型を間違えること自体がほぼ無いだろ? 引数の順番を間違えたりした場合に型検査で引っかかるってだけで。
207 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 22:54:02.64 ID:F9uWTtxD0.net] >>195 > ローカル関数で変数をキャプチャできるぞ ローカル変数しかできんだろ。しかも明示しなければならない。(全指定も出来るが) JavaScriptの場合は上位関数の変数をどこまでも辿れるので、(レキシカルスコープ) 入れ子になっていても破綻せずに分解して展開出来るんだよ。 C++方式の場合はawait内にawaitが入れ子になっていると、展開出来ないだろ。 > コールバックは階層が増えたりエラーや例外処理、分岐などが生じるとどんどん複雑になって単純には行かなくなる > それを解決するのがPromiseで、それを更に単純に記述するのがasync/await これは通説だが、俺はこれが嘘だと思ってるんだよね。 JavaScriptで言われているcallback地獄ってのは、非同期処理をその場で
208 名前:入れ子で書いている。 それよりawaitの方が見やすいってのは、上から順に読める形式だから。 でも>>180 に書いたとおり、JavaScriptの文法ではcallbackを常に展開して書けるので、 その気になればawaitと同じ順で処理を書けるんだよ。(非同期がネストしない) つまり、レキシカルスコープ+クロージャなら、awaitが無くてもawaitと同じ順で処理を書けるわけ。 C#やC++はレキシカルスコープがないからawaitが必要なだけ。 だからここら辺は実は文法との相性もあるんだよ。 C++はそんなのお構いなしに何でもかんでも入れてる感じだが。 (とはいえ、選択肢が増えること自体は悪いことではない) > char *を受け取る関数ポインタにとconst char*で受ける関数ポインタを入れてエラーにしなかったらややこしくて危険なだけでしょ そりゃconstの有無をテストで落とすのは無理だろうさ。 まあ、俺はconst自体が意味無い(無駄な手間が増えるだけ)という認識だが。 (ただし本当の意味でのconst(「定数」)の場合は使う。Cならマクロで与えていたケースとか) そもそも君はどこまでconstを使っているんだ? C++のconstは「定数」ではなく「再代入禁止」だ。 現実的には無駄に再代入することもないので、ローカル変数の大半にconstを付けられるはず。 これをやっているのか? やっていないのなら、君自身も「過剰な型検査」が存在することを認めていることになるが。 [] [ここ壊れてます]
209 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 22:54:22.15 ID:F9uWTtxD0.net] >>196 コードを流用するとね、 void test(a,b) { // (A) hoge(&a,&b); // (B) piyo(a+b); // (C) } で、(B)をconst指定にした時のみ(C)で大胆な最適化を行えるケースは、 ・(B)が(C)に影響する副作用を持っていないと「const指定した時のみ」分かる 場合だけだが、これはconst指定ではどうにもならんだろ。 これはプログラマが上位の仕様(test関数の仕様)として規定するものであって。 例えば構造体配列で、(B)は[i]への書き込み、(C)は[j]からの読み出しで、i!=jが上位で保証されているとか。 この場合は、プログラマが最初から(A)(C)(B)の順に書けるんだよ。 そうではなくて、(B)が(C)に対しての副作用を持つ可能性がある場合、つまりi!=jが保証されていない場合、 当然(B)(C)の順にする必要があるけど、 これをconst指定で最適化(=(B)が(C)に対しての副作用を持たないことを保証)することは出来ないでしょ。
210 名前:デフォルトの名無しさん [2017/09/01(金) 02:04:57.35 ID:2msaHTP30.net] >>204 ん、C++のconstは、Cのconstよりも「定数」だぞ int const a = 1; switch(1) [ case a: ; //valid in C++, invalid in C }
211 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 08:48:03.58 ID:5GGRc0nid.net] >>206 すまん、そのコードの意味がわからん
212 名前:デフォルトの名無しさん [2017/09/01(金) 09:06:42.83 ID:2msaHTP30.net] typoしとるな [は{
213 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 09:55:02.84 ID:kxCoop1y0.net] case ラベルに const な変数の変数名 C++ ならばリテラルと等価となりセーフ C は変数のままの扱いでアウト
214 名前:デフォルトの名無しさん [2017/09/01(金) 11:36:56.59 ID:IGPoCkp90.net] Cのconstは変更不可なオブジェクトだからな
215 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 13:20:08.84 ID:JSZHio/AM.net] C++は使える範囲を広くしただけでconstの意味はCといっしょ constによる最適化の話には関係しない
216 名前:デフォルトの名無しさん [2017/09/01(金) 15:37:25.51 ID:2msaHTP30.net] 違う constはもともとC++発祥のもので、 Cでパクるにあたり微妙に改変した constは最適化に関係するが 今この流れでは最適化とは全く無関係の話をしている
217 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 16:51:03.36 ID:dkwAUCjz0.net] volatileについてもkwsk
218 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 17:40:42.98 ID:XJwe5Q/Z0.net] ttps://regmedia.co.uk/2011/02/18/dennis-richie-and-brian-kernighan-pdp-11.jpg こういう時代の揮発性のメモリ 揮発しないメモリもあるんですよ
219 名前:デフォルトの名無しさん [2017/09/01(金) 18:43:10.50 ID:2msaHTP30.net] ビットフェードとvolatileは関係ないぞ
220 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 18:59:13.16 ID:dXFBhBz10.net] コード中の文意では変わってなくても、他の要因で変わる可能性あるような 割り込みやマルチスレッド等で共有してる変数とか
221 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 03:14:53.65 ID:GCfgdhr+0.net] > C++のconstは「定数」ではなく「再代入禁止」だ 代入と初期化を混同してませんか
222 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 08:56:24.33 ID:72Px+h1e0.net] staticについてもkwsk
223 名前:デフォルトの名無しさん [2017/09/03(日) 11:44:42.91 ID:jl0cf3RS0.net] 性的な
224 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 12:14:41.26 ID:9dM4T0NO0.net] 外からは見えないように、そして、なくさないようにするエロ本
225 名前:デフォルトの名無しさん [2017/09/03(日) 17:40:32.30 ID:jXGwZqzU0.net] 一口にstaticと言っても、そのキーワードは用法で意味が変わるからなあ
226 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 17:45:54.60 ID:5WRYI1ZX0.net] static に背負わせすぎな気がする 関数内変数の static 関数スコープ外の static C++ ならばクラスメソッドのstatic クラス変数の static もあったかな‥多すぎだ‥
227 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 18:29:43.87 ID:fyDk5FSQ0.net] 予約語を減らす涙ぐましい努力
228 名前:デフォルトの名無しさん [2017/09/03(日) 18:47:29.02 ID:jXGwZqzU0.net] C99以後、仮引数のstaticもあるしな
229 名前:デフォルトの名無しさん [2017/09/04(月) 00:43:28.93 ID:QxIkVb9z0.net] ポインタ関連で*と&の記号を使っているのも 初心者を遠ざけているよな 素直にpointerとかrefとかの予約語作ればよかったのに
230 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 01:05:35.63 ID:IeE+YITL0.net] >>225 もともと高級アセンブラとして生まれた経緯を考えたら、ポインタ関連の基本的な記述のためにはくどいキーワードではなく最もシンプルな演算子が割り当てられるのは自然なことだと思う。
231 名前: mailto:sage [2017/09/04(月) 01:17:41.88 ID:rnM3x3Xp0.net] >>225 C# の ref 宣言のように,宣言だけでなく呼び出し側でも ref が必要だという文法はあってもよかったかな
232 名前:デフォルトの名無しさん mailto:sage [2017/09/04(月) 02:45:48.86 ID:tVodzhFi0.net] >>224 え?そんなのあった?
233 名前:デフォルトの名無しさん [2017/09/04(月) 08:55:10.34 ID:pd3pCmCq0.net] >>228 ISO/IEC9899:1999 6.7.5.3 Function declarators (including prototypes) 21 EXAMPLE 5 void f(double a[restrict static 3][5]);
234 名前:デフォルトの名無しさん [2017/09/05(火) 00:59:51.51 ID:2RdPD3ce0.net] >>229 ああ。そういう使い方か。
235 名前:デフォルトの名無しさん mailto:sage [2017/09/07(木) 15:42:36.42 ID:zsD50ajta.net] 以下の三つの操作に違いはありますか NはMと比べて十分大きいとします char s[M]; wchar_t ws[N]; mbstate_t state = {0}; // 1 scanf("%s", s); wbsrtowcs(ws, &s, N, &state); // 2 scanf("%ls", ws); // 3 wscanf(L"%ls", ws);
236 名前:デフォルトの名無しさん [2017/09/08(金) 04:19:51.29 ID:LlnxN/9E0.net] >>231 1のscanf()はchar型で文字列を受け取ろうとするのでエンコードによっては複数バイト文字が全て読めない可能性がある。 例えば2バイトづつのUnicodeの0xff以下のコードがそのまま来た場合、ビッグエンディアンならすぐに0x00が1バイト目に来てしまう。
237 名前:デフォルトの名無しさん [2017/09/08(金) 22:13:19.23 ID:Hco6il2OE.net] 兄貴すいません アロー演算子の使い方を学びたいのですがどこを直せば動くのか教えてください #include <stdio.h> struct User { char name[5]; int age; }; int main() { struct User *u = { "hoge", 10 }; if (u->hoge != NULL) { printf("%d\n", 1); } else { printf("%d\n", 0); } return 0; }
238 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 22:41:39.10 ID:R6JsR04N0.net] >>233 *uじゃなくてsにてもしてuに&sを入れてhogeをnameに変えれば動くけど これnameが実体だから100% 1が出るよね
239 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 01:43:06.63 ID:DK1wXlQ90.net] struct User { char *name; int age; }; int main() { struct User st = { "hoge", 10 }; struct User *u = &st; if (u->name != NULL) { ......
240 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 12:01:06.79 ID:KEHxH6tI0.net] >>233 mallocして中身を詰める #include <stdio.h> #include <stdlib.h> typedef struct{ char name[5]; int age; }User; User* new_user(const char* const name, const int age){ User* u = (User*)malloc(sizeof(User)); strcpy(u->name, name); u->age = age; return u; } int main(){ User* u = new_user("hoge", 10); if (u->name != NULL) { printf("%d\n", 1); } else { printf("%d\n", 0); } return 0; }
241 名前:デフォルトの名無しさん mailto:sage [2017/09/09(土) 12:54:39.58 ID:Ii5yjdZLa.net] >>232 なるほど ありがとうございます fgets(s, M, stdin); const char *p = s; mbsrtowcs(ws, &p, N, &state); でも1と同様の問題が起こりますか >>231 は関数名と実引数の型を間違えてました
242 名前:デフォルトの名無しさん [2017/09/09(土) 16:17:54.34 ID:qJRB74Th0.net] >233 int main(){ return !printf("%d\n",strlen( (&(struct User){.[0]name=0, .age=10, .name={'h','o','g','e'}})->name) 1: 0), 0; } char[5] nameとNULLの比較じゃ意味ねーと思うんだわ
243 名前:デフォルトの名無しさん [2017/09/10(日) 04:20:42.87 ID:3lFSiHDa0.net] >>237 大丈夫だと思う。
244 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 09:19:13.64 ID:bduAIVLIa.net] >>238 なんか色々間違ってねーか?
245 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 10:12:13.09 ID:3KJHgwTr0.net] >>238 >>233 のような初学者にそんな解読しにくいコードを提示しても意味ねーと思うんだわ
246 名前:デフォルトの名無しさん [2017/09/10(日) 11:46:48.72 ID:uI7cAZFMa.net] 暇すぎたので昨日からC言語の勉強始めましたプログラミング初心者です。 これって趣味にできる?
247 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 11:52:24.67 ID:igLJE8zId.net] できる
248 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 13:39:43.37 ID:3lFSiHDa0.net] そして趣味が高じて仕事にw
249 名前:デフォルトの名無しさん [2017/09/10(日) 13:42:12.95 ID:uI7cAZFMa.net] 今本屋なんだけどどの本で学ぶのがいい? てかphytonとか他の言語の方が良かったりする?
250 名前:デフォルトの名無しさん [2017/09/10(日) 13:45:14.25 ID:uI7cAZFMa.net] ちなみに本職は監査法人の公認会計士で監査してるんだけど仕事に役立つならそれに越したことはない
251 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 13:50:00.90 ID:SyCSejr00.net] 幅広くエロエロやると上達早いで もしノイマン型コンピュータの基本知識が 無いのならどこかで学習する必要がある メモリ、アキュムレーター、インデックスレジスタ…etc
252 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 13:53:38.31 ID:rGvjr77j0.net] >>246 公認会計士の仕事にはなかなか結びつかないだろうけれども…ガンバレ C/C++ はどちらかというと原始的 python AI/機械学習で今はやり ゴルフでもなんでも最初は大変だから一定の覚悟が必要
253 名前:デフォルトの名無しさん [2017/09/10(日) 13:56:43.80 ID:uI7cAZFMa.net] あんま知識は無い。 じゃあC言語とphytonを並行して学ぼうかしら。
254 名前:デフォルトの名無しさん [2017/09/10(日) 14:35:30.74 ID:3lFSiHDa0.net] 会計ねえ。Excelとかの本のほうがいいかも知れんな。その方が仕事に結び付けられる事が多くて覚えは早いのではないかと思う。 マクロも一応プログラムだしな。Excelにくっついた形のものではあるが結構色々な事ができる。 で、それがある程度できるようになったらプログラムというものがだいたいどういうものかわかるようになってるだろうから次はVBのように似ているものをやる。 似ているのでこれの習得はかなり早いと思う。それから他の言語を色々やって幅を広げる。
255 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 14:52:01.58 ID:SyCSejr00.net] Excelマクロ… 組むと疲れる、悪い癖が付く等良い所が無い言語
256 名前:デフォルトの名無しさん [2017/09/10(日) 15:07:37.65 ID:uI7cAZFMa.net] まあ別に趣味だから仕事に役立たなくてもいいぞ
257 名前:デフォルトの名無しさん [2017/09/10(日) 15:12:20.15 ID:uI7cAZFMa.net] 苦しんで覚えるC言語っての買った
258 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 15:23:52.77 ID:GVNmgcdo6.net] 苦しめ
259 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 15:29:50.37 ID:7And7Hgf0.net] 俺なら楽しんで覚えるけどね
260 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 16:30:29.97 ID:TxU3QtzA0.net] 苦Cは買わなくてもネットで読めるのに・・・
261 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 16:52:57.48 ID:3KJHgwTr0.net] 見易さではいまだ紙媒体の方が上だと思うし、惜しむほどの額でもないだろう
262 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 17:48:30.86 ID:eDTlLPEV0.net] 神聖言語COBOL
263 名前:デフォルトの名無しさん [2017/09/10(日) 17:58:39.08 ID:Z8XrRGDBa.net] 受信したメールの中身を理解して必要なメールと不必要なメールを分け、必要なメールの情報を分かりやすい文章に要約して表示するプログラムC言語で作れる? ついでに簡単な返信なら自動でしてくれたらありがたいんだが。
264 名前:デフォルトの名無しさん [2017/09/10(日) 18:04:27.57 ID:Z8XrRGDBa.net] 返信が必要なメールと判断した場合は、返信メール本文の例を1万種類ぐらい自動で作成して、その中からより最適なものを3種類ぐらい提示してきてこっちはそれを選ぶだけで良いという機能も欲しいぞ
265 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 18:16:25.18 ID:/r+wfg1UM.net] レス乞食
266 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 18:24:18.77 ID:TxU3QtzA0.net] >>257 それがついこの間デザインがリニューアルされたんだよ 内容は同じだけどw 前よりは見やすくなったかな
267 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 18:26:26.80 ID:VNZjd7Zj0.net] りんなとやり取りするプログラム作って、りんなに判断してもらえ。返信内容も一緒に
268 名前:片山博文MZ mailto:sage [2017/09/10(日) 18:40:04.78 ID:m2l+DHFcd.net] SMTP, POP3などのメールプロトコルで、メールサーバとソケット通信。 メールを分類するなら、自然言語処理とベイズ推定が必要。
269 名前:片山博文MZ mailto:sage [2017/09/10(日) 18:57:20.96 ID:m2l+DHFcd.net] 単純な分類なら、振り分けルールが使えるメーラーを使えば簡単。
270 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 19:00:07.53 ID:Fa46oRS50.net] ヘッダーに書いてあるエンコードが嘘いってて中身は別コードを なんとか帳尻合わして可視化する部分が厄介 (nkf で大分楽にはなるらしいけど)
271 名前:デフォルトの名無しさん [2017/09/10(日) 19:00:48.08 ID:BxaTac1G0.net] >>259 「必要なメール」とそれ以外の境界を おまえさんが明確化できるか否かにかかっている 何言語を使おうが同じことだ Cは推論エンジンそのものを作れる言語で 通信アプリやドライバを作れる言語でもあるので 諦めねばならないアイディアはまずないはず
272 名前:デフォルトの名無しさん [2017/09/10(日) 19:38:42.01 ID:Z8XrRGDBa.net] >>267 「必要なメール」とそれ以外の境界線はこれまで私自身が行ってきたメールへの対応を見てプログラム自ら学習して欲しい。 また分類や要約は高度な文脈、ニュアンス判断も伴うレベルで行わせたい。 それも様々な小説や文献を通してコンピュータ自ら学習して欲しい。 ちなみにこれ外注したらいくらぐらい? 10万円ぐらいするかな?
273 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 19:44:06.14 ID:jwBfW/fF0.net] 10倍ぐらい出せば良いんじゃねーの
274 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 19:46:11.33 ID:+BHhCGE8a.net] linuxでpop/smtpサーバー立てればよくね スクリプトで特定のワードが見つかったら処理すればいいし 送信はmailコマンドがあるし
275 名前:片山博文MZ mailto:sage [2017/09/10(日) 19:47:08.66 ID:m2l+DHFcd.net] >>268 自ら学習するにしても、教師なしでは低品質になる。効率よく学習するためには、コンピュータとの対話(ダイアログ)が必要になる。
276 名前:片山博文MZ mailto:sage [2017/09/10(日) 19:52:13.40 ID:m2l+DHFcd.net] 深層学習させるにしても、タグ付けの作業が必要になる。
277 名前:デフォルトの名無しさん [2017/09/10(日) 20:10:47.20 ID:BxaTac1G0.net] >>268 267だが、Cは推論エンジンを作れると言ったはず おまえさん自身はそこから学習しなかったのか? 10万ねえ 支那の国家プロジェクトがどうなっているか知っているか? 支那からのSPAMに「天安門」と書いて返信すると我々にとって ありがたい動作をしてくれるというアレだ 国家ではないが大企業のAIが共産党は無能とか言い出して ひと騒ぎにもなったよなあ おまえさんの10万円のソフトはおまえさんを無能とか 言い出さないか?
278 名前:デフォルトの名無しさん [2017/09/10(日) 20:26:02.78 ID:Z8XrRGDBa.net] あとC言語でタイムマシン作れる? といっても未来のインターネット閲覧できる程度でいいんだが。 作れる人いたら10万円までなら出すぜ。
279 名前:片山博文MZ mailto:sage [2017/09/10(日) 20:32:37.81 ID:m2l+DHFcd.net] >>274 予測・予想が届く範囲でないと、予知はできない。できたとしても、競馬の予想や天気予報くらいだ。物理法則を超えることはできない。
280 名前:デフォルトの名無しさん mailto:sage [2017/09/10(日) 20:39:00.76 ID:rIACWFTk0.net] アホなことを書いてしまったと気付いて、ネタだったことにしてごまかそうとしている?
281 名前:デフォルトの名無しさん [2017/09/10(日) 20:42:41.68 ID:I7ZEh6pU0.net] 物理法則なんて人間が考えたものに過ぎないからどうせ間違いだらけでしょ?
282 名前:片山博文MZ mailto:sage [2017/09/10(日) 20:50:00.29 ID:m2l+DHFcd.net] 深層学習で美少女の画像を大量に生成するという技術はある。未来の人が書きそうな絵を生成することはできる。
283 名前:デフォルトの名無しさん [2017/09/10(日) 21:11:06.17 ID:n6o1Bnrv0.net] 物理は、むずかしい
284 名前:片山博文MZ mailto:sage [2017/09/10(日) 21:39:16.69 ID:m2l+DHFcd.net] へ へ の の も へ
285 名前:デフォルトの名無しさん mailto:sage [2017/09/11(月) 03:08:03.91 ID:byfRWwJtM.net] div B = 0 rot E = -(∂B/∂t) div D = ρ rot H = ∂D/∂t + j
286 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 18:24:02.20 ID:zVhRA/dD0.net] C言語覚えればCIAのパソコン ハッキングできたりするの?
287 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 19:21:49.41 ID:8ybhBsXfM.net] なんでこんなアホがプログラム板にいるんだ?
288 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 19:35:17.20 ID:8gurLWtqd.net] だって、コーダーって大概馬鹿じゃん
289 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 19:59:12.99 ID:C09YrKwT0.net] 夏休みはもう終わったぞ
290 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 20:22:37.24 ID:E3lbzyXMM.net] ずっと休みの奴が張り付いてるんじゃね?
291 名前:デフォルトの名無しさん mailto:sage [2017/09/12(火) 20:40:18.98 ID:oYtiliiD0.net] printf("Hello, work!");
292 名前:デフォルトの名無しさん [2017/09/12(火) 22:47:32.51 ID:CGKPtYms0.net] >>284 馬鹿つっても、少なくともおまえみたいな自宅警備員より1ペタくらいマシだよ コーダーでやってけてるやつナメてんだろ、おまえ ボケ!
293 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 00:05:26.05 ID:iyeBQ3Kc0.net] コーダーだから馬鹿だとは思わないが、>>288 みたいなレスをするのは馬鹿だなと思いました。
294 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 10:49:46.10 ID:gIW5dRYoa.net] >>239 ありがとうございました
295 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 10:57:10.59 ID:E2QlRAh70.net] >>287 puts("Hell 'o work?");
296 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 11:29:24.17 ID:tSE5B5Al0.net] printf("HALO world!");
297 名前:デフォルトの名無しさん [2017/09/13(水) 12:41:46.69 ID:cFJcbLHs0.net] >>289 いいこぶってろクズ 現業がいなきゃ自分じゃ何もできないやつが 現業をバカにするのを見ると虫酸が走るんだよ
298 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 13:17:09.64 ID:z6o40qKf0.net] >>293 安価に取り替えがきくので、低く見られるのはしょうがないと諦めろ
299 名前:デフォルトの名無しさん [2017/09/13(水) 13:33:05.82 ID:cFJcbLHs0.net] 人件費のダンピングは国が国民を保護する義務の対象だが 真面目にやってくれなくて我々はその被害を受けているのだ 本来、能力に応じた収入があるべきという感覚そのものを 捨てちまったブタはいいねえ悩みがなくて
300 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 14:36:38.24 ID:GgkwnlJN0.net] >>295 本来能力に応じた報酬を受け取るべきと考えて、それが受け取れない事に不満を持った連中はとっくに逃げ出してる 残ってるお前らは不満を持ちながら逃げ出す事さえ出来ないゴミ 下に見られてもしょうがない
301 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 14:42:45.38 ID:yshNp3B/a.net] 確かに馬鹿な奴もいるけどレベルの高い奴もいる。コーダーに限った話じゃないだろ。 日本に馬鹿が多いんだよ。たぶん。
302 名前:デフォルトの名無しさん [2017/09/13(水) 15:31:18.76 ID:cFJcbLHs0.net] >>296 俺より年収1桁少ないやつにだけは言われたくねえぜ なに、2桁? そりゃ失礼したw
303 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 15:43:10.20 ID:lgdTeqni0.net] 3桁ってことか
304 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 16:11:37.47 ID:PJsF5JPod.net] 時給だろ。
305 名前:デフォルトの名無しさん [2017/09/13(水) 16:18:46.88 ID:cFJcbLHs0.net] 妻子持ちがどのくら金いるか 童貞にはわからんようだな
306 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 16:31:08.86 ID:J/ZU3q6K0.net] 板違いが分からないよりマシ
307 名前:デフォルトの名無しさん [2017/09/13(水) 16:42:40.48 ID:cFJcbLHs0.net] 284にぬかせボケ
308 名前:デフォルトの名無しさん [2017/09/13(水) 17:15:26.17 ID:7kZqRPKj0.net] クソスレ過ぎ笑う
309 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 19:04:55.78 ID:FmzSjQYZ0.net] >>298 奴隷的労働しか選択肢が無いのに妻子持ち 妻子が哀れすぎる
310 名前:デフォルトの名無しさん [2017/09/13(水) 19:25:13.27 ID:cFJcbLHs0.net] >>305 奴隷? 俺は領主の立場だ おまえと一緒にするな無礼な
311 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 19:29:03.36 ID:E/jL69iKd.net] 複雑な立場だなww
312 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 19:36:56.55 ID:FmzSjQYZ0.net] >>306 僕のお父さんは奴隷のリーダーですってか?
313 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 20:24:58.56 ID:ruF3Cq7F0.net] 実際のところそれでも結構なもんだ
314 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 21:33:37.15 ID:qtzqYGs4M.net] 馬鹿な奴隷に指示、管理する者の気苦労が分からんのか
315 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 21:35:35.97 ID:PcFMQESFM.net] >>301 妻はまだ自分の食いぶちの一部でも稼がせばいいけど子の方はマジで金かかる 国は学資保険なんてものがあることをちょっと恥じるべき
316 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 21:50:53.77 ID:ruF3Cq7F0.net] 金持ちしか子供作らせないのは国策 やつらに恥などない 怒れ
317 名前:デフォルトの名無しさん [2017/09/13(水) 21:56:29.09 ID:dVC5ajCT0.net] マ板でやれ
318 名前:デフォルトの名無しさん [2017/09/13(水) 22:36:54.70 ID:cFJcbLHs0.net] >>312 俺は金持ちじゃねえ 単年度で8桁いっても次年以後で気を抜けばボコボコだ 一生遊んで暮らせる金があるやつにしか子供を作らせないなんて国策はねえ 童貞がイソップの葡萄こいてろ、こちとら稼いでみせると必死こいてんだ
319 名前:デフォルトの名無しさん mailto:sage [2017/09/13(水) 23:29:23.30 ID:ruF3Cq7F0.net] ポッキリと折れて周囲に生暖かい目で見られるところまで見えた
320 名前:デフォルトの名無しさん [2017/09/14(木) 17:55:25.19 ID:r9C1TnUx0.net] まんこ
321 名前:デフォルトの名無しさん [2017/09/14(木) 21:35:54.73 ID:Ng+6QcSm0.net] >>299 3桁って、10進数だと999円が限界だぞ
322 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 22:14:40.48 ID:vjSz//mI0.net] >>300
323 名前:デフォルトの名無しさん mailto:sage [2017/09/14(木) 23:45:34.67 ID:lhu0Z/PJ0.net] ジンバブエドルで3桁か?
324 名前:デフォルトの名無しさん mailto:sage [2017/09/15(金) 11:30:59.37 ID:EItFo4370.net] >>317 頭いいなおまえ
325 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 16:22:54.12 ID:SXimL5kTp.net] 昔"c言語をダイエットさせる本"みたいなタイトルの本読んだと思うんだが分かるやついる? 見つからなくて探してる
326 名前:デフォルトの名無しさん [2017/09/21(木) 20:42:10.28 ID:x8dEnzes0.net] for(;~scanf("%d",&a);)とかwhile(~scanf("%d", &a))とかで~がないだけで永遠に入力ループするんだけど ~ってなにを宣言してるんだ教えてくれ
327 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 20:48:43.32 ID:BDILGhdI0.net] ~はビット単位のNOT演算子じゃないの?
328 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 21:03:53.86 ID:N1EOCCyb0.net] ~なしでよくね?
329 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 21:23:35.16 ID:kYTPFpbC0.net] 本来なら 変数a に格納されるまでループしたい意図だろうけど・・・・・ scanf の戻り値は 代入操作できた変数の数で 0 だと入力のフォーマットに合致しなかったわけなんだが (ここまでは素直) 一旦 その状態になると、次に正しく入力しても拾ってくれない scanf 独特の挙動があって 正しく入力しようが 0 のままというkuso 件の場合 最初の入力で数値ではない o を与えると (%d で受けれないので失敗) 次のループの入力で 1 を与えても やはり変数に格納ざれずに失敗したまま これがあるので scanf は使うな、と良く言われてる所以
330 名前:デフォルトの名無しさん [2017/09/21(木) 21:54:22.20 ID:x8dEnzes0.net] 一行読み込みで同じ処理を数値なくなるまでしたいんだけどどう読み込んだ方がいい?
331 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 22:19:34.61 ID:kYTPFpbC0.net] fgets で行単位で読み込み その行バッファに対して sscanf で変数に拾い上げするなり、11文字ずずつ字句解析するなり char buf[512]; int a; while (fgets(buf, 512, stdin)) { /* 1行読んだよ */ if (sscanf(buf, "%d", &a) != 1) { /* 数値じゃないのが来たのは無視する */ continue; } /* a に値が格納されたよ */ : }
332 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 22:26:26.69 ID:kYTPFpbC0.net] 日本語でおけ × 11文字ずずつ字句解析するなり ○ 1文字づつ字句解析するなり
333 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 23:44:09.55 ID:Xpxn9Za50.net] >>327 strtolとかstrspn?系つかったほうがよくね?
334 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 00:16:23.70 ID:zbqUBjYs0.net] >>325 まじかよ.. scanf呼び出して戻ってきたあとも何かしらのscanf内部変数が残ってるってこと? だとしたらクソ過ぎるだろ
335 名前:デフォルトの名無しさん [2017/09/22(金) 01:03:58.95 ID:IvB4cJv30.net] こんなのどうかな https://paiza.io/projects/zRvzIskw3zMy3HVdD7NsHA
336 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 01:11:24.08 ID:exEqzPdX0.net] >>330 標準入力を勝手に読み捨てないってこと 数値以外が来たら"何もせずに"失敗で終わるから ループするとまた失敗以前の場所からそれを繰り返すだけ
337 名前:デフォルトの名無しさん [2017/09/22(金) 01:39:40.49 ID:BRiVyzo00.net] forの継続条件がどう動いてるのかわからないな読み込めた時はループして読み込めなかったときはループ抜けるってのがどう判定されてるのか見えないな
338 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 02:12:21.25 ID:exEqzPdX0.net] >>333 scanf("%d",&a); で、数値が来れば取り込みに成功した個
339 名前:数、つまり1を返し、失敗なら0を返す それを~でビットNOT、つまり各ビットを反転させるので 成功なら0x00000001を反転で0xFFFFFFFE、失敗なら0x00000000を反転で0xFFFFFFFF ようするにどうやってもループを抜けないので、結論としては「そもそもループ条件として間違ってる」 >>324 の言う通り~は不要 [] [ここ壊れてます]
340 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 02:35:57.85 ID:dUE2o1PV0.net] もっとシンプルに使える入力関数を 誰かが作ってくれれば良いのに
341 名前:デフォルトの名無しさん [2017/09/22(金) 03:10:18.60 ID:IvB4cJv30.net] >>335 簡単なので多分もう世界中に山ほどあると思うが、標準化されてないだけだろうな。
342 名前:デフォルトの名無しさん [2017/09/22(金) 05:10:39.06 ID:BRiVyzo00.net] while((a=Console.ReadLine())!=null)こうゆうので入力がなかったら終了するって簡単にできればC言語も楽なんだけどな
343 名前:デフォルトの名無しさん [2017/09/22(金) 14:57:26.19 ID:8MJCwgYc0.net] int *get_int(int *dst, jmp_buf err) { if (scanf("%d", dst) != 1) { if (err) longjmp(err, 1); else return NULL; } return dst; } こんなしょーもないのでいいのに標準化委員会は斜め上なことばかり・・・
344 名前:デフォルトの名無しさん [2017/09/22(金) 20:47:03.45 ID:dtN6vQMf0.net] >>334 でもscanfの前に~あるだけで入力なくっても無限ループしないで抜けるのはNOTと戻り値がNOTでtureだから抜けるの?
345 名前:デフォルトの名無しさん [2017/09/22(金) 22:06:16.56 ID:IvB4cJv30.net] チルダ付けたのは失敗した時に-1が返されると思ったからかな? てか、チルダ付けた場合はそれ以外で0にならんよな。 まあでもこれも整数値の内部表現の違う特殊な環境だったりしたらダメかも知れないが。
346 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 22:16:43.87 ID:JX9ZYj2p0.net] 組込み以外で~使ってんの初めて見た
347 名前:デフォルトの名無しさん mailto:sage [2017/09/22(金) 22:21:06.44 ID:FtjqsiSd0.net] 普通にビット処理だと使うよね ビット処理なんかしないって?
348 名前:334 mailto:sage [2017/09/22(金) 22:25:08.34 ID:exEqzPdX0.net] ごめんウソ書いたわ 一つも変換されないで入力エラーになったらscanf()は0ではなくEOFを返すらしい >>339 よって多くの環境ではEOF==-1(0xFFFFFFFF)だからその反転で0になってループ抜けるということだね
349 名前:片山博文MZ mailto:sage [2017/09/22(金) 23:25:37.12 ID:TihxA+yD0.net] >>338 ゼロオーバーヘッドは正義。
350 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 07:38:02.97 ID:9QRg4G5c0.net] >>343 入力ストリームが閉じてて変換できなかったら EOF 入力ストリームは開いてるけど変換できなかったら 0 でないのけ?
351 名前:デフォルトの名無しさん [2017/09/23(土) 11:43:39.39 ID:8bsZ0VcP0.net] >>345 どうやらそのようだな。Linuxのmanで見てみたらそんな風に書いてあった。 とすると入力が閉じないで変換失敗した場合は0が返されて無限ループになるな。
352 名前:デフォルトの名無しさん [2017/09/23(土) 14:50:28.05 ID:IblrvTVf0.net] Win32環境なのですが _beginthread関数で、thread1, thread2を回し グローバル変数g_nをthread1の中で変更しても thread2から正しい値が参照できません。参照できないというよりthread2が機能しなくなるように見えます。変数表示がカットされる。 VisualC++でプログラムしてるのですがデバッグモードだと普通に動いて リリースモードだと動かなくなります。グローバル変数にvolatileをつけてみてもダメでした。 何が原因でしょうか?
353 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 15:16:24.27 ID:PasvkTo90.net] 具体的なコードもなく原因を聞かれても、どうしようもないと思うぞ VCの拡張機能で相応の機能が追加されてたような気もするが 本来volatileにスレッド間での排他やメモリバリアの機能はないからな
354 名前:片山博文MZ mailto:sage [2017/09/23(土) 15:34:39.04 ID:oO/4QkxId.net] >>347 デバッガ側で例外をキャッチして、呼び出し履歴を調べると何かわかるかもしれない。おそらくゼロ除算かアクセス違反かスタックオーバーフロー。
355 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 16:05:08.45 ID:IblrvTVf0.net] >>348-349 thread2の中身を以下みたいにtry〜catchで囲むと何故か直りました… でもcatchの中は実行されてないです… 少しcatchの中身を書き足すとまたダメ… どういうことだろう… void thread2(void*) { try{ … } catch (...) { … } }
356 名前:片山博文MZ mailto:sage [2017/09/23(土) 16:06:48.32 ID:oO/4QkxId.net] スタックを破壊してる可能性
357 名前:片山博文MZ mailto:sage [2017/09/23(土) 16:07:30.45 ID:oO/4QkxId.net] 呼び出し規約が間違い
358 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 16:14:51.44 ID:IblrvTVf0.net] >>352 >呼び出し規約が間違い これはどういう事ですか? 宜しければご教示をm(__)m
359 名前:片山博文MZ mailto:sage [2017/09/23(土) 16:23:43.62 ID:oO/4QkxId.net] https://msdn.microsoft.com/ja-jp/library/kdzttdcb.aspx _beginthreadexの場合は、__stdcallを関数名の前につける。_beginthreadの場合は、__cdeclを。 __cdeclはデフォルトでは省略可能だから、間違ってはいない。 ということは、ポインターかなんかでスタック破壊している可能性が高い。
360 名前:片山博文MZ mailto:sage [2017/09/23(土) 16:28:26.72 ID:oO/4QkxId.net] 配列の添字がオーバーしてないか?
361 名前:片山博文MZ mailto:sage [2017/09/23(土) 16:50:48.86 ID:oO/4QkxId.net] ideone.com に貼れ
362 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 19:47:03.99 ID:IblrvTVf0.net] >>356 もう少し深く調べてみます!ありがとうございます!
363 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 21:54:35.77 ID:IblrvTVf0.net] >>356 たぶん原因が分かりました。 現在は標準関数をやめてWINAPIのCreateThreadを使ってますが標準関数と原因は同じです。 CreateThreadでThread1,Thread2を作成して監視してるとあるタイミングでThread2が消失してたのですが どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。 ようするに他のグローバル変数の書き換えが原因でした。 ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。 でもこの回避作で良いんでしょうか?CriticalSectionを使ったりして処理してもうまく他スレッドでグローバル変数が 参照出来なかったのでvolatileをつけてみたら完璧に動作するようにはなったんですが……
364 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:09:28.20 ID:9QRg4G5c0.net] 排他制御の問題ではなく 最適化の作業で、変数を不変値と判断し、変数参照を追い出した翻訳をしたパターン int a; // グローバル変数 void foo() { a = 1; while (a) { /* */ } } a は文意から不変の定数として扱えるので while (1) { /* */ } に翻訳しちゃえるわけさ
365 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:20:31.54 ID:IblrvTVf0.net] >>359 その変数達の最適化を無効にしたということですね。 ということはこの回避方法で大丈夫だということですか?
366 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:28:00.05 ID:9QRg4G5c0.net] volatile つけるのは1つの手ではあるが 100% 回避してくれるかは、コンパイラ次第 スレッドで共有するフラグ関係はOS側が用意してる機構を使うほうが良いんだけどねー
367 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:50:44.07 ID:IblrvTVf0.net] >>361 一旦コンパイルして普通に動作してるなら大丈夫ですか? 他の環境でいきなり動かなくなるとかもありますか?
368 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 22:58:35.90 ID:PasvkTo90.net] 何の変数を使ってるか知らんが、排他取ってねーんだから書き換え途中の変数を読み取ってバグることもあるだろ 最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしいから、古いVCでビルドしてもアウトだな まあ滅多に起らないからローカルでそれっぽく動けばいいのなら、十分じゃねーの
369 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:10:54.21 ID:Z1NsXN0c0.net] >>358 いや、359ではなくて、363の言うとおり、 > ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。 これが問題だと思うぞ。つか、ロックしろよ。 volatileの意味分かってるか? それ多分他スレッドから書き換えられたときに自スレッドのその値が更新されておらず、バグるのだと思うぞ。 ただしこの場合は、 > 最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしい (>>363 ) ←コマ? が正しいのならvolatileでも確かに治りそうな気はするが。で、これってマジなん? つかね、マルチスレッドでグローバル変数を使いまくること自体がだね、、、
370 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:20:05.48 ID:Z1NsXN0c0.net] >>363 調べてみたんだが、これか? > Microsoft 固有の仕様 → /volatile:ms の項目 > ・volatile オブジェクトへの書き込み (volatile 書き込み) は、解放セマンティクスを持っています。 > つまり、命令シーケンスで volatile オブジェクトへの書き込み前に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、 > コンパイルされたバイナリでの volatile 書き込みの前に発生します。 > ・volatile オブジェクトの読み取り (volatile 読み取り) は、取得セマンティクスを持っています。 > つまり、命令シーケンスで volatile メモリの読み取り後に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、 > コンパイルされたバイナリでの volatile 読み取りの後に発生します。 https://msdn.microsoft.com/ja-jp/library/12a04hfd.aspx これならロックではなくフェンスだね。volatileでは直らないはず。
371 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:22:23.90 ID:PasvkTo90.net] >>365 自分も見かけただけでちゃんと調べたわけじゃないけど、それだね フェンス+ロックが必要ってのは当然として、最近のVCならフェンスのほうが保証してくれてるってだけ
372 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:26:59.26 ID:IblrvTVf0.net] >>361-365 CriticalSectionつかってグローバル変数の書き込み時にはロックをするのも試してみたんですが やっぱりthread2が途中で死んで(内部のループで終了判定になってしまって)、ダメだったんですよね。 それがグローバルにvolatileをつけると普通に動作するようになってるんです……
373 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:29:48.18 ID:IblrvTVf0.net] こういう事ですか? CriticalSectionによるロックもやる必要がある。理由はロックしてない時固有の問題もあるから。 今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。 ロック処理もvolatileも両方やる必要がある。ということですか?
374 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:33:50.34 ID:9QRg4G5c0.net] 書き込み時だけロックして 読み込み側のほうはロックせずに読み込んでる 片手落ちのように受けとれる文章だけど・・・ 排他制御をちゃんとやってたうえでの話?
375 名前:デフォルトの名無しさん [2017/09/23(土) 23:49:15.83 ID:8bsZ0VcP0.net] volatileにしてロックして読み書きするのが普通では?
376 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:55:28.48 ID:IblrvTVf0.net] >>369-370 volatileにして読み書きロックして厳密にやります!
377 名前:デフォルトの名無しさん mailto:sage [2017/09/23(土) 23:57:26.40 ID:Z1NsXN0c0.net] >>368 × > 今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。 ○ コンパイラの不具合ではなく、君のコードの問題で、 volatileで動いているように見えるのはバグに当たる確率が低くなっただけで、直ってはいない。 ただ、366の通り、全部ロック+フェンスすれば直りそうな気はする。 つか、そもそもフェンスが大量に要るような使い方でマルチスレッドするのが問題なんだが。
378 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:00:33.14 ID:jg2xx4vD0.net] posixだとロックAPIにメモリ同期の効果があるから、普通はvolatileいらんけどな CriticalSectionも共有リソースへのアクセス制御用の関数なんだから、同じはずだと思うけども
379 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 00:22:34.33 ID:AOwUcJWDd.net] >>372 コードの不具合って意味だろ? やっぱり最適化が問題だったんじゃないか?
380 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 01:04:50.76 ID:R8lp94JX0.net] >>374 > どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。(>>358 ) この場合はvolatileをつけないと話にならない。(ただし本来の使い方ではない) コンパイラのバグではなく、多分デバッグビルド時には毎回読み出しだっただけ。(最適化なし、なおフェンスもなし) データ同期する気がなければフェンスは本来は要らない。 ロックはしないと書きかけの値を掴んだりしてバグる。 ここら辺分かってなくてグローバルで同期ってのはマルチスレッド初心者なのだろうけど、 バグったらsync入れまくってデバッグはセオリーではあるし、まあがんばれ、と。 ただ、おそらく同期の仕方を根本的に間違ってるから、知ってる人に見てもらったほうがいいとは思うが、 コード内のグローバルは常に「最新」を期待しているのであれば、ロック+volatile+フェンスで動くはずでもある。
381 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 05:58:29.08 ID:jg2xx4vD0.net] ロック中の読み出しが最適化で消えるなら、それはロックとコンパイラが腐ってる
382 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 08:32:31.64 ID:LX+6AD0qM.net] >>372 > ○ コンパイラの不具合ではなく 誰もコンパイラの不具合なんて言ってない 偉そうに頓珍漢な講釈たれる前に日本語勉強し直してこい
383 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 08:36:33.73 ID:LX+6AD0qM.net] >>373 メモリー同期と最適化は別の話 Posix は知らんけど CreateSection にはロック対象を知るすべはない
384 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 10:21:22.00 ID:jg2xx4vD0.net] はあ、そうですか 共有リソースの排他アクセスのためのAPIなのに、ロック対象がわからないからロック無視して最適化しますと それが真実ならWinAPIとVCが腐ってるんじゃないですか
385 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 10:22:36.14 ID:gFeQddMX0.net] バカには使えないだけ
386 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 11:32:55.30 ID:070pAcfa0.net] test
387 名前:デフォルトの名無しさん [2017/09/24(日) 13:57:54.86 ID:c233uqnI0.net] 腐っているのでしょう
388 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 14:40:58.49 ID:jg2xx4vD0.net] メモリバリアを跨いでオブジェクトへのアクセス命令を最適化するとか そんな頓珍漢なことを言う腐った奴がいるとは思わなかったわ volatileを何だと思ってんだか
389 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 15:53:44.93 ID:gFeQddMX0.net] CreateSection の使い方ぐらい調べてから書けばいいのに... まあ他人事だしどうでもいいけど w
390 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 16:31:41.65 ID:jg2xx4vD0.net] CriticalSectionの話のつもりだったんだけど、CreateSectionに変わったの? それならごめんだわ、>>378 で唐突に出てきて誤字だとばかり さすがにそんなアホな話題転換があるとは思わなかった
391 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 16:59:33.91 ID:gFeQddMX0.net] >>385 ああすまん、予測変換で間違えてたわ で、CriticalSection について調べたのかな?
392 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 17:30:54.77 ID:jg2xx4vD0.net] >The following synchronization functions use the appropriate barriers to ensure memory ordering: >Functions that enter or leave critical sections >Functions that signal synchronization objects >Wait functions >Interlocked functions https://msdn.microsoft.com/en-us/library/windows/desktop/ms686355(v=vs.85).aspx 調べたけどCriticalSectionだけで十分そうだよ Internallockedとかのほうが手軽そうだけどね
393 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 02:44:46.68 ID:glvYaQMb0.net] https://teratail.com/questions/39986 これの投稿 2016/07/04 10:48の例にあるように 最適化で変数の効果が消えてしまう場合でも volatileじゃなく変数書き込みや参照の部分に CriticalSectionでロックしておけば最適化で消える事はないということ?
394 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 03:09:32.37 ID:eX6e3GbIr.net] Cのコンパイラはクリティカルセクションなんて知らない。単なる構造体かなんかのtypedefとして実直にコンパイルするだけ。 スレッド関連の関数についても単に関数の一種として扱うだけ。 従ってスレッドやクリティカルセクションを扱っているかどうかが最適化の結果に影響することはない。 一方volatile指定はコンパイラが認識するキーワードで最適化に影響する。
395 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 04:54:33.75 ID:glvYaQMb0.net] ということは今回の事例だと排他制御しても不具合は解消できなかったという事かな? volatile付けて最適化を無効にすることが正しい解決策だったということになる?
396 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 06:45:40.93 ID:/OvZrhVRM.net] >>387 だからそれはメモリーバリアの話で最適化の話とは別だよ 繰り返しになるけど CriticalSection は排他制御するリソースを知ることはできないしコンパイラも CriticalSection のことを知らない
397 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 06:49:50.09 ID:/OvZrhVRM.net] >>390 どう言うことをやりたいのかよく見てないけど排他制御と最適化の話は別だから必要なら両方やらないとダメ
398 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 08:38:06.32 ID:5M6SeBxY0.net] eieio()
399 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 09:41:28.46 ID:Eov43usf0.net] >>389 それ、スレッドまわりが規格化されてなかった C99 までの話だよね?
400 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 09:53:00.17 ID:eS71dZMPM.net] 最近のは規格化されてんの?
401 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 09:58:09.00 ID:Tp6H3jwU0.net] 規格化されてるのはPOSIXでじゃね?
402 名前:394 mailto:sage [2017/09/25(月) 09:59:34.82 ID:Eov43usf0.net] こんな感じ。 www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf 5.1.2.4/5 "The library defines a number of atomic operations (7.17) and operations on mutexes (7.26.4) that are specially identified as synchronization operations. These operations play a special role in making assignments in one thread visible to another. ..."
403 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 12:40:04.95 ID:uoxmxxDAr.net] >>394 おおごめん、規格自体には詳しくない しかし… pthread関連の標準関数や定義を仮にコンパイラが特別扱いしたとすると、標準関数をラップしたり自作ライブラリで代替した場合に最適化の結果が変わるのかな? そんな風にコンパイラ作るものなんだろうか。
404 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 20:34:55.44 ID:6/+o0Gkh0.net] posix-thread 関係については C++11 で追加されたが, あくまでも言語処理系の中で定義された識別子(関数とかクラスとか)を使わないと,コンパイラには分かりえないよ. CreateThread() とか CriticalSection とかの W32API の用語を,無指定でコンパイラが理解できるわけがない.
405 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 20:47:31.93 ID:LPAVGpvK0.net] >>390 コンパイラは基本的に問答無用で最適化するけど、それだとマルチスレッドではプログラマの意図しない最適化が起こってしまう だから、メモリバリアを挟んだアクセス命令を入れ替えないことにしている 言い換えると、メモリバリア前に読み込んだ値をメモリバリア後も使うような最適化はしない よって、バリア+ロックで十分 共有リソースは全部volatile付けるなんてしてたら、kernelのソースとかvolatileまみれになるでしょ
406 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 21:45:53.20 ID:LPAVGpvK0.net] 当然、ローカル変数とか他から変更されないことが明らかなオブジェクトであれば最適化が起こる可能性は否定しない グローバル変数の場合は、最適化されない やってみればわかるけど、CriticalSecltionの有無でアセンブル結果が違う
407 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 21:46:58.74 ID:LPAVGpvK0.net] アホなこと書いた、コンパイル結果だな。。。
408 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 23:03:28.51 ID:LPAVGpvK0.net] CriticalSectionに限らず未知の関数が呼ばれたのであれば、その中でグローバル変数やらが変更される可能性を考慮しなければならない 他にも、ある関数の引数にローカル変数のアドレスを渡すと、以降の別関数内でそのアドレス経由でローカル変数を変更される可能性がある よって、場合によってはローカル変数であっても関数呼び出しを跨いで最適化できなくなることがある わからないからこそ、最適化してはならないんだよ
409 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 23:26:04.50 ID:3XblncDf0.net] >>390 ならない。君のソースコードだけの問題だ。同期機構の使い方が悪いだけ。 スレッドなんてここ20年間バリバリに使われてる。 VC等の小慣れているコンパイラなら、最適化ありで全く問題なく動く。 (マルチスレッド向けのデバッグは完了している) Debugでは動くがReleaseでは動かないケースに遭遇した初心者は、君のように 「最適化の問題であり今回はDebugを使うこと」を正当化したがるが、これは間違いだ。 ただしDebugビルドでもバイナリは出来るから、問題ないのならそれを使う手もある。
410 名前:デフォルトの名無しさん [2017/09/26(火) 00:33:15.50 ID:8E9hjYW60.net] ちゃんと排他処理が出来ていないことに気付かず、デバッグオプション付きとか 遅いマシンとかで正常動作してしまい、何年後かに速いマシンにリプレイスしたら 丁度良くバグが顕在化するようなタイミングになってしまった、 なんてことが以前本当に起きた。 サーバ用とかでソフトが長期間使われる場合は要注意だ。
411 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 00:35:55.65 ID:piJXswiP0.net] 歯痛制御のバグ 珍しくない 発見しづらく、再現性も乏しく、解析に手間がかかりがち レベルの低い開発者が混ざると大変
412 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 01:21:21.88 ID:mvSUAuA/0.net] マルチスレッドは、たまたま動いているだけで、 ちょっとしたタイミングで、バグる 初心者は、たいてい、コンパイラのバグのせいにする。 それか、リリースビルドの最適化がおかしいと言う プロは、Elixir などの関数型を使う
413 名前:デフォルトの名無しさん [2017/09/26(火) 02:12:13.37 ID:8E9hjYW60.net] いや、ちゃんとロックすりゃなんとかなるってw もちろん最初から考慮されてる言語は何も考える必要ないからうまく行って当然。
414 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 07:38:51.81 ID:hxYjIs4i0.net] >>406 痛そうだな。
415 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 10:15:02.85 ID:IHENDkWx0.net] >>406 つらそうなバグだ
416 名前:デフォルトの名無しさん mailto:sage [2017/09/26(火) 12:32:55.96 ID:Ue/ou9XsK.net] >>406 ウンコだなw
417 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 16:40:21.40 ID:zCHNwx740.net] 初心者です。エラーでまくりでコンパイルすら出来ません。アドバイスお願いします。 ■やりたいこと。 マウス入力にrawinputを用いるアプリのWndProcをフックし、rawinput(WM_INPUT)を強制オフにし、DirectInputを使用するように指定。 ↓ソース // FuckRawInput.c #include <windows.h> LRESULT CALLBACK WinProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch(Msg) { case WM_CREATE: { RAWINPUTDEVICE Rid[1]; Rid[0].usUsagePage = 0x01; Rid[0].usUsage = 0x02; Rid[0].dwFlags = RIDEV_NOLEGACY; Rid[0].hwndTarget = hWnd; RegisterRawInputDevices(Rid, 1, sizeof(Rid[0])) == FALSE) ; break; } ----- また、この方法が最適なのかも不明です。ほかの方法等もあったら教えてください
418 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 18:30:09.48 ID:Ep3hxvTm0.net] C言語の問題?
419 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 21:09:13.07 ID:kxaL/Pai0.net] 初心者とは
420 名前:412 mailto:sage [2017/09/27(水) 21:51:08.08 ID:zCHNwx740.net] >>414 そのままの意味でC言語初心者ですけど? rawinputを消し去りたいがためにプログラム未経験ながらC言語入門書を読み、 Visual studio2013でハローワールドのコンパイルに成功した所です。 他スレで聞いたら、 DLLインジェクションでAPI関数を置き換えといわれたんですが、 まぁ、それと同じような事をしようとして書いたソースが>>412 目的達成するためにどこが悪いのか教えてくださいよ
421 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 22:01:39.03 ID:htvdQyi40.net] 日頃の行い
422 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 22:08:30.48 ID:6Zcxzpoi0.net] エラーのせろハゲ!
423 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 22:35:55.70 ID:MZoqRzWL0.net] どうやってWndProcをフックするつもりなのか知らんが、初心者のやることじゃない
424 名前:デフォルトの名無しさん mailto:sage [2017/09/27(水) 22:46:41.34 ID:Ep3hxvTm0.net] スレチ
425 名前:デフォルトの名無しさん [2017/09/28(木) 00:13:55.27 ID:LEgoP/Tm0.net] >>412 本当にそれがソースの全てか?
426 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 06:54:14.40 ID:0QfR7+YkM.net] >>412 とりあえず文法エラーのないソースを出せよ
427 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 08:22:53.76 ID:veeq8lRB0.net] >>415 windowsプログラムでFuckファックは初心者がやるものではない 何故かと言うとFuckファックは非常に拙いからで、これはご存じの通りにFuckファックつまりはセクロスとかセックスを意味する FuckRawInputなどと書かれると非常に面食らうので、動作には全く関係ないがFuckファックの箇所をHookフックとする Fookという間違いならまだしもFuckが出てくるのは途轍もなく拙い windowsプログラムは入門書を一通り終えた後にようやく手を出せる程度に面倒くさい
428 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 12:17:20.62 ID:wLxR5weia.net] 最近勉強始めたんだがループ動作めんどくさ
429 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 16:28:25.85 ID:p7vLxmpX0.net] C++の標準でWindowsのCOMみたいなのはできるの? モジュールがあれば動的リンクできて、向こう側の関数の形式とエントリポイントがわかるような。
430 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 18:20:04.96 ID:klqlvKrNM.net] >>424 IUnknown::QueryInterfaceを実装するとかの話? https://msdn.microsoft.com/ja-jp/library/cc351695.aspx
431 名前:412 mailto:sage [2017/09/28(木) 19:27:04.11 ID:te0QQW2V0.net] >>418-422 WndProcフックでは目的の動作できなくて、APIフックしか手がないと分かりましたので、 MSのdetourとかいうの使ったAPIフックに変更されました。改めて、見てください。 @やりたいこと Rawinputマウス関数が呼び出させられる代わりDirectInputマウス関数を呼び出し、強制的にマウス操作をDirectInputにする ソース↓ // APIhook_RawInput.c #include <windows.h> #include "detours.h" hoge target = NULL; // ターゲットポインタ hoge tp = NULL; //トランポリンポインタ // 関数生成 BOOL WINAPI Direct_Input(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return tp(hWnd, Msg, wParam, lParam); } // user32インスタンス HINSTANCE xxxxx; case WM_CREATE: //user32.DLLをロード xxxxx = LoadLibrary("user32.dll"); //Raw Inputポインタ取得 target = (hoge) GetProcAddress(xxxxx, "WM_INPUT"); // WM_INPUTフック、"WM_INPUT"→"Direct_Input"置き換え tp = (hoge) DetourFunction((PBYTE) target, (PBYTE) Direct_Input); break; // 終了時の処理 case WM_DESTROY: // フック削除 DetourRemove((PBYTE) tp, (PBYTE) Direct_Input);
432 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 21:05:11.91 ID:9JTfqDLya.net] >>426 で、お前が聞きたいのは「C言語」に関するどんな質問なんだ?
433 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 22:00:23.65 ID:kmv+HSxh0.net] >>421 が悪い 責任もって相手しろ
434 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 22:01:12.32 ID:kmv+HSxh0.net] >>419 が正しい対応
435 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 23:13:22.30 ID:hENZyM/7a.net] 会話にすらなってないな。 こういうのホントにいるんだよなあ。、。
436 名前:デフォルトの名無しさん mailto:sage [2017/09/28(木) 23:59:03.21 ID:mJZoGNOM0.net] mevius.2ch.net/test/read.cgi/tech/1475897582/925
437 名前:デフォルトの名無しさん mailto:sage [2017/09/29(金) 01:12:28.71 ID:tjqo0EG60.net] >>415 > どこが悪いのか教えてくださいよ 頭と態度。 APIスレも見たけど、君には無理。
438 名前:デフォルトの名無しさん [2017/09/29(金) 01:17:32.92 ID:EHQhOpQV0.net] >>426 本当にそれがソースの全てなのか?
439 名前:デフォルトの名無しさん [2017/09/30(土) 05:35:50.31 ID:/O3sxKWS0.net] これ無理だろうWindowsプログラムの言語を理解してないと直せないっしょ
440 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 09:21:38.64 ID:SGi8KvwU0.net] 勘所がすぐつかめる人ならそうでもない 知らんOS知らん言語知らん環境でもデバッグできちゃうんだぜ あいつら宇宙人だろ
441 名前:デフォルトの名無しさん mailto:sage [2017/10/02(月) 13:06:27.14 ID:6IbuGwAs0.net] >16 :デフォルトの名無しさん:2006/03/10(金) 22:15:19 >>>10 >> こんな変数名があちこちに散らばっているのがPerl > >大学の研究室のボスは、特殊変数の表をふ〜んと2分ほど眺めて完全に暗記した。 > >そういうレベルの人たちのための言語なんだなと思って、トイレで血の涙を流した。
442 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 03:00:19.61 ID:TSZxzm0B0.net] お助けください。 自作コードにおいて、以下の部分でmemsetの際にsegmentation faultになってしまいます。 int n = 2; char charList[n+1][32]; // 32文字の文字列をn+1確保・・・@ func(charList); // charListに書き込む関数 for
443 名前:(int i = 0; i < n; ++i) memset(charList[i], ' ', 32); // 空白で埋めたい funcを省いたりmemsetの前に適当にcharListをプリントしたりすると何故か問題なく動きます。 この部分だけ切り出したテストコードでは全く再現しませんでした。 この手のエラーでよくあるのは未初期化領域へのアクセスだと思いますが、 @で領域の確保はできているからこれは原因ではないですよね? どこがエラーの原因でしょうか・・・? [] [ここ壊れてます]
444 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 06:29:26.41 ID:TvjHrbVD0.net] funcがnを壊してる とか
445 名前:デフォルトの名無しさん [2017/10/03(火) 06:57:44.74 ID:ZkSEHHAS0.net] うん、funcが怪しい
446 名前:デフォルトの名無しさん [2017/10/03(火) 08:24:29.85 ID:759fwjeu0.net] うん
447 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 11:40:15.04 ID:QFI8P6tG0.net] 配列サイズ 32要素で 32個 空白で生めてるが 文字列 という用語を使ってるあたり func は一般の文字列操作してそうだけど 終端記号 '\0' の分の考慮が落ちてるんでないの?
448 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 11:59:57.12 ID:QFI8P6tG0.net] 「文字列」で32文字を取り扱いたいのなら 33要素の器が必要ってことで 文字の配列なら問題ないけどねー
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 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています