C言語なら俺に聞け 142 [無断転載禁止]©2ch.net

1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8a6f-bDrV)2017/08/10(木) 20:21:23.44ID:hEocmkh50
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


http://mevius.2ch.net/test/read.cgi/tech/1500293207/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

だめ意見にはけなしたり煽るんじゃなくて具体的な反論ができるといいね

帰ったらお勉強だぜ!!

>>1 乙です

乙っ乙

6デフォルトの名無しさん (ワッチョイ 3323-hZ6b)2017/08/11(金) 03:16:23.49ID:suC9gTdR0

7デフォルトの名無しさん (ワッチョイ 0e1c-Jp9e)2017/08/11(金) 08:28:05.03ID:8TW1by1n0
>>2
煽りコントで笑いをとってたコメディアンのこと?

最近はPythonやっとけみたいな意見が多いんですが、
今、Cをやるメリットは何かありますか?

両方やればいい

10デフォルトの名無しさん (ワッチョイ 0e1c-Jp9e)2017/08/11(金) 12:14:58.92ID:8TW1by1n0
ハード・ソフト両利きになるには絶好の近道

11デフォルトの名無しさん (スップ Sdba-pnIq)2017/08/12(土) 10:34:20.89ID:mpXbTRP+d
IYHスレのかほりがするw

12デフォルトの名無しさん (ワッチョイ 3323-aEKd)2017/08/12(土) 16:57:37.18ID:6AXlD0eu0
>>8
それはあなたが今後何をやりたいかによる。

13デフォルトの名無しさん (ワッチョイ 336d-gaVt)2017/08/13(日) 15:57:24.74ID:m4Rk+6os0
>>8
結局のところ C は基本中の基本で、避けて通れない、いずれやらないと仕方ない、という状況に追い込まれる

14デフォルトの名無しさん (ワッチョイ 0e1c-Jp9e)2017/08/13(日) 16:07:14.55ID:2GAXDCvV0
そういう意味では、あと英語な
マニュアルや規格票といえばまず英語
日本語版はないか、あっても10年遅れとか
そればかりか自分のコードのマニュアルやコメントも
英語で書けとだいたい言われる

15デフォルトの名無しさん (ワッチョイ 3323-aEKd)2017/08/13(日) 17:01:50.43ID:aXXBQeA80
え?そんな所あるの?外資系とか?

まあ最初から英語できることを前提に雇っているならわかるけど、そうでない会社で
それやったらネイティブが忍耐をもってしても解読困難な英語モドキの文書の山に
なってしまうのではないか?

16デフォルトの名無しさん (ワッチョイ 0e1c-Jp9e)2017/08/13(日) 17:33:10.24ID:2GAXDCvV0
解読困難な英語モドキすっげええ、うんざりするほどあるよ
ずーずー弁しぇからしかこんだらず、なんて次元じゃねえ訛り方
・・・まあ恥ずかしながら日本人の訛り方はトップグループなんだが

17デフォルトの名無しさん (ワッチョイ 3323-aEKd)2017/08/13(日) 17:59:59.41ID:aXXBQeA80
omg

18デフォルトの名無しさん (ワッチョイ baef-9OS8)2017/08/13(日) 18:13:02.46ID:WSSr83j30
>>14
英語の鍛え方として王道はないものか‥
今構文の教科書(昔の受験用,今の時代には難しすぎるかな‥)をさらっている.https://www.amazon.co.jp/dp/4828501134

19デフォルトの名無しさん (ワッチョイ 0e1c-Jp9e)2017/08/13(日) 18:29:50.42ID:2GAXDCvV0
技術英語を憶えるのに一般英語は邪魔
技術英語独特のボキャ貧はマニュアルや論文でしか学べない

20デフォルトの名無しさん (ワッチョイ 336f-+HCT)2017/08/13(日) 18:34:17.87ID:8MgVlazH0
brother と sister は習っても、sibling を学校で習った覚えは無いな

21デフォルトの名無しさん (ワッチョイ ba89-MZKP)2017/08/13(日) 18:39:03.83ID:o1ygPh5l0
>>18
自分がある程度詳しい分野のちゃんとした英語のドキュメントを読んでると、ここはこういう意味か、こんな時はこんな表現するのか、と言うのがある程度身についてくると思う。

22デフォルトの名無しさん (ワッチョイ 0e1c-Jp9e)2017/08/13(日) 18:54:33.40ID:2GAXDCvV0

23デフォルトの名無しさん (ワッチョイ de32-BuCI)2017/08/14(月) 00:49:40.57ID:FXoIQaW20
RFC読んだ後は、プログラム関係の文書だけは、英語でも何となくわかるようになったなぁ
人の和訳みながらよんだだけだけど

24デフォルトの名無しさん (ワッチョイ dfdb-tL1o)2017/08/14(月) 23:14:42.24ID:G751meAI0
苦手意識がなくなるだけでもかなりの前進かと

25デフォルトの名無しさん (スッップ Sdba-RVSI)2017/08/16(水) 03:13:15.44ID:J8ft/v5zd
C言語の勉強をするためのおすすめのIDEを教えてください

26デフォルトの名無しさん (スプッッ Sdba-fB3e)2017/08/16(水) 06:06:58.39ID:g+tkU2cqd
Visual Studio

27デフォルトの名無しさん (ワッチョイ f34b-C9Js)2017/08/16(水) 08:20:25.87ID:0Vt0rye20
Vim Emacs

28デフォルトの名無しさん (ワッチョイ 336f-+HCT)2017/08/16(水) 09:23:43.88ID:zAUipZYH0
猫こそ至高

29デフォルトの名無しさん (ワッチョイ f66f-YnGe)2017/08/16(水) 10:15:56.42ID:xWmu06fM0
VisualStudioに一票

30デフォルトの名無しさん (ワッチョイ 0e1c-Jp9e)2017/08/16(水) 11:07:32.90ID:J2krMHFz0
エディタで充分
IDEいらね

31デフォルトの名無しさん (ガックシ 06b6-C9Js)2017/08/16(水) 11:12:04.39ID:79/XacN36
Cの文法だけ知りたいんならIDEで身につくと思うけど、CのUNIX的な使い方とかMakefileの作り方まで含むならやっぱりターミナルでVimかEmacsが一番身につくと思うな

32デフォルトの名無しさん (ワッチョイ 5b0d-KsLg)2017/08/16(水) 11:17:42.10ID:Xm1ENLXg0
ほんのさわりだけの話なら >>1
https://paiza.io/
https://ideone.com/
http://codepad.org/

覚えるだけとか編集するにはPlumaで良かった

34デフォルトの名無しさん (ワッチョイ 0e1c-Jp9e)2017/08/16(水) 12:30:21.85ID:J2krMHFz0
IDEであろうがなかろうが
複数の環境を使ったほうがいい
1つの環境だけ使っていると
間違った知識をたっぷり吹き込まれる
その環境が悪いわけじゃなく
Cには処理系定義だの未規定だのがたくさんあるからだ

汎用機でトライグラフとワードアドレッシングな奴をやっておけば完璧だね

36デフォルトの名無しさん (ワッチョイ 0e1c-Jp9e)2017/08/16(水) 17:14:38.09ID:J2krMHFz0
関数を呼び出すたびごとにいちいちGETMAINするのかと思ったら違った

37デフォルトの名無しさん (ワッチョイ a3b6-z+qv)2017/08/16(水) 18:42:31.13ID:eXMOwWIc0
実際のところトライグラフの環境ってあるのかね
汎用機のEBCDIC(英字)も記号は一通りあるよね

38デフォルトの名無しさん (ワッチョイ 0e1c-Jp9e)2017/08/16(水) 21:24:11.17ID:J2krMHFz0
カード穿孔機くらいかな
トライグラフの必要性を感じたデバイスは

39デフォルトの名無しさん (ワッチョイ 616f-dsaK)2017/08/17(木) 00:56:17.97ID:ugZ0fkzt0
NEC MSコンピューターとかかな
シリーズで言うと MS120,MS140,MS190

40デフォルトの名無しさん (ワッチョイ 5389-SBNh)2017/08/17(木) 06:39:42.32ID:3FDT79Ua0
ヨーロッパとかで英語以外の国で、C言語で使う記号のところに別の文字が割り当てられてるケースとか。文字コードまたはキーボードのキーとして。

41デフォルトの名無しさん (フリッテル MM6b-9CIE)2017/08/17(木) 06:59:39.42ID:qA/UZuuOM
どうでもいいことばかりだな

42デフォルトの名無しさん (ワッチョイ 810d-qqF0)2017/08/17(木) 07:30:42.82ID:5FUl5JPE0
バックスラッシュがあるべき文字コードの場所が
現地の通貨記号に置き換わってる環境でトライグラフ使わね?

43デフォルトの名無しさん (ワッチョイ 9311-x4Vn)2017/08/17(木) 07:50:53.84ID:wL10pSGX0
>>42
そもそもそんな環境で開発なんてしたことないし

44デフォルトの名無しさん (ワッチョイ 5100-kTqj)2017/08/17(木) 08:03:54.42ID:zzoRHhsR0
>>42
どこの国だよ
糞だなwww

45デフォルトの名無しさん (ワッチョイ 110d-JJVS)2017/08/17(木) 08:26:01.37ID:NamoDwZf0
ノーマークでトライグラフになっちまってたことは過去に何度か・・・
(s)printf 中の format 文字列で

>>42
半角の¥は廃止すべき

47デフォルトの名無しさん (ワッチョイ 616f-dsaK)2017/08/17(木) 10:45:25.58ID:ugZ0fkzt0
>>45
MJD?

48デフォルトの名無しさん (ワッチョイ 110d-JJVS)2017/08/17(木) 10:55:11.53ID:NamoDwZf0
>>47
最近のコンパイラはデフォでトライグラフを抑制してくれてるようだけど
古いコンパイラは、そんな気がきいてないから

警告文 "warning??!" ってやって実際の出力が warning| で なんじゃこりゃ?と

49デフォルトの名無しさん (ワッチョイ 110d-JJVS)2017/08/17(木) 10:59:46.51ID:NamoDwZf0
それでも ??/ → \ で
次の文字をエスケープして大事故にというのは無かったかな

>>47
>>45じゃないけど "不正な値です: ??(10)" ってやったら "不正な値です: [10)" ってなって
はあ?ってなったことあるわ

51デフォルトの名無しさん (ワッチョイ 6139-uL9b)2017/08/17(木) 12:36:35.61ID:kQ6hfaFr0
CとC++は馬鹿には使えない
惨事が起きるから
使わせてはいけないと聞いた

52デフォルトの名無しさん (ワッチョイ 936f-pVc9)2017/08/17(木) 13:57:01.69ID:ylZytAyh0
いくつかのコンパイラはトライグラフがデフォルトで無効になっていたと思う

53デフォルトの名無しさん (ワッチョイ f932-Jcyw)2017/08/17(木) 16:57:48.81ID:ZvDESEOS0
clとclangとgccはデフォルトで無効だし、今じゃ有効な環境のほうが珍しいんじゃないの

54デフォルトの名無しさん (エーイモ SEf3-Ufa9)2017/08/17(木) 21:30:33.60ID:2RZZpZadE
char s[3] = "abc";
printf("%s %lu", s, strlen(s));

これの出力がabc 3にならず
abc 9abc 9とか
abcea 9abcea 9みたいに毎回不定で文字列が出力されるんですけど何でですか?

55片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-hsX1)2017/08/17(木) 21:37:39.45ID:XnqHf7Mqd
>>54
ヌル文字が足りない。
改行がない。

56片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-hsX1)2017/08/17(木) 21:39:34.19ID:XnqHf7Mqd
s[4]か、サイズ未指定のs[]にする。
\nを追加する。

57片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-hsX1)2017/08/17(木) 21:40:55.02ID:XnqHf7Mqd
strlenの返却値はsize_tだから、%luは間違い。

58デフォルトの名無しさん (ワッチョイ 5100-kTqj)2017/08/17(木) 23:15:30.23ID:zzoRHhsR0
>>57
正解は?

59片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-hsX1)2017/08/17(木) 23:27:33.59ID:XnqHf7Mqd

60デフォルトの名無しさん (ワッチョイ 5100-kTqj)2017/08/17(木) 23:35:38.09ID:zzoRHhsR0
組み込みのショボいライブラリじゃ使えなかったりするから
unsigned intにキャストして%u
でいいや

61デフォルトの名無しさん (ブーイモ MMc5-gUFl)2017/08/18(金) 03:59:52.12ID:URLOh4DLM
キャスト毛嫌いしてたんだけど、size_t や int*_t シリーズを printf 書式で使う時のベストプラクティスだと気付いてしまったよ。

62片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-hsX1)2017/08/18(金) 04:18:35.01ID:sjvn+N2bd
サイズの変わる型キャストは、(通常無視できる程度の)少しだけコストがかかることに言及しておこう。

63片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-hsX1)2017/08/18(金) 04:20:02.39ID:sjvn+N2bd
わずかに時間と計算量がかかるという意味のコストね。

64デフォルトの名無しさん (ワッチョイ 5389-SBNh)2017/08/18(金) 07:04:19.91ID:R7MrN97k0
printf使ってるときなら、無視できるレベルだな

65デフォルトの名無しさん (フリッテル MM6b-MHwE)2017/08/18(金) 07:10:44.43ID:RGoxPD09M
大抵の場合、暗黙でintに変換されるので%dで問題ない

66デフォルトの名無しさん (ワッチョイ 5100-kTqj)2017/08/18(金) 07:50:44.76ID:cQGhZEXD0
>>63
64ビットで渡すより32ビットで渡す方が普通は速い

67デフォルトの名無しさん (ワッチョイ 5100-kTqj)2017/08/18(金) 07:51:44.71ID:cQGhZEXD0
>>65
intより大きいサイズはintに変換されない

68デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/18(金) 09:48:31.67ID:+zi/zXZ30
>>65
問題大ありだよ
64bit 環境では、sizeof sizeof 1 == 8 だぞ

69デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/18(金) 10:03:06.56ID:+zi/zXZ30
脇道に逸れるが整数のサイズってどいつもこいつもイマイチだね
char 8
short 16
int 32
long 64
long long 128
と、せっかく5階級あるのを無駄なく使えるようになってない

70デフォルトの名無しさん (ワッチョイ 5100-kTqj)2017/08/18(金) 11:07:14.63ID:cQGhZEXD0
どこの環境だよ

71デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/18(金) 11:55:29.20ID:+zi/zXZ30
いや、そういう環境があったらなあと

72デフォルトの名無しさん (スプッッ Sda3-VxEm)2017/08/18(金) 12:41:24.28ID:8ZqVNhGud
そんなに細かく分ける意味あんのかね。
64bitだけでいいだろ。

73デフォルトの名無しさん (ワッチョイ 4b6c-oL0b)2017/08/18(金) 12:46:10.63ID:K+PXWISB0
Makefileの書き方なんだけど

makeが実行されているときに 今何を実行してるか表示されるけど
「なんでこれが実行されているんか」の理由も表示したい
依存関係の hoge: fuga を表示したい


.c.o:
@echo $@:$^
$(CC) $(CFLAGS) -c $<
みたいに書いたりしてんだけど、全部に書くのもダサい気がするし
良い方法はないでしょうか

74デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/18(金) 15:25:50.71ID:+zi/zXZ30
>>72
128が標準にあれば使い途いろいろあるぞ

75デフォルトの名無しさん (ワッチョイ 81b6-Jcyw)2017/08/18(金) 15:40:25.23ID:RRX5RBja0
>>73
GNU make なら -d (デバグ表示)とかは?

ただ「なぜこれが実行される」って、ファイルの更新日時ぐらいしか
ないと思うけど

76デフォルトの名無しさん (ワッチョイ 9311-x4Vn)2017/08/18(金) 16:57:07.47ID:UodSk1FQ0
>>75
このコマンドを実行したのは○○より△△が古いから
って言うのを知りたいんでしょ
$^ の意味も知らないならROMってなよ

>>73
make コマンド自体に手を入れた方が早いかも

77デフォルトの名無しさん (ワッチョイ f932-Jcyw)2017/08/18(金) 18:57:47.45ID:aoGOUUu+0
C関係ないんだから、別スレでやれよ

78デフォルトの名無しさん (ワッチョイ 61b6-qPuT)2017/08/18(金) 20:41:27.26ID:2qfgYUHL0
すみません初歩的なことですが・・
前置インクリメントa++
後置インクリメント++a
がありますが、a=a+1は後置になりますよね?

b=a++ と b= a= a+1 は違う気がする。

80片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-hsX1)2017/08/18(金) 20:47:26.76ID:sjvn+N2bd
どちらでもない。

81デフォルトの名無しさん (ワッチョイ c111-JJVS)2017/08/18(金) 20:49:13.42ID:5LpMFucB0
加算と代入

82デフォルトの名無しさん (ワッチョイ 61b6-qPuT)2017/08/18(金) 20:51:16.52ID:2qfgYUHL0
回答有難うございます
実験してみたのですが、a=a+1は前置(a++)にも後置(++a)にもなるのですね
http://i.imgur.com/teLsUGY.jpg

83デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/18(金) 23:11:42.85ID:+zi/zXZ30
違う! 前置だ
b = (a = a + 1);

84デフォルトの名無しさん (ワッチョイ c111-JJVS)2017/08/18(金) 23:21:22.94ID:5LpMFucB0
a[i++] = i; は悪魔召還だけど
インクリメント演算子なしのこれ
 a[i =i+1] = i;
も鼻から悪魔になるのかな

85デフォルトの名無しさん (ワッチョイ db6f-2g+Y)2017/08/18(金) 23:57:54.41ID:nSj4GkNd0
>>78
>前置インクリメントa++
>後置インクリメント++a

考え方が逆
変数を基準に考えるのではなく演算子を基準に考える
前置インクリメント++a : 演算子を’前’置した場合、変数(式)の評価’前’に演算子が適用される
後置インクリメントa++ : 演算子を’後’置した場合、変数(式)の評価’後’に演算子が適用される

86デフォルトの名無しさん (ワッチョイ f932-Jcyw)2017/08/19(土) 00:03:09.07ID:0xgPi4RO0
>>84
なるでしょ
iの変更と最後のiの評価の間に順序性がない事に変わりはない

87デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/19(土) 09:44:47.22ID:CpINIl4e0
i = i + 1;
の、iの変更と最後のiの評価の間の順序性は?

88C言語ますたー《ますたー軍団(常時募集)の長》 ◆oa6k//3vOQ (ラクッペ MMed-UZV0)2017/08/19(土) 09:54:20.36ID:6ANTyB1VM
>>87
i+1のiは変更前のiでしょ

89デフォルトの名無しさん (スプッッ Sdf3-l88/)2017/08/19(土) 10:03:42.32ID:cD3Bg7W9d
>>30
デバッグしないのか?

90デフォルトの名無しさん (ワッチョイ 931e-VxEm)2017/08/19(土) 10:37:04.42ID:opyN89fo0
デバッガはデバッガで起動すればいいし、printf があるし。

91デフォルトの名無しさん (ワッチョイ f932-Jcyw)2017/08/19(土) 11:26:43.49ID:0xgPi4RO0
>>87
6.5.16 Assignment operators
「The side effect of updating the stored value of the left operand is sequenced after the value computations of the left and right operands. The evaluations of the operands are unsequenced.」
左オペランドの変更は、左右オペランドの評価の後

92デフォルトの名無しさん (ワッチョイ 2baa-PF2c)2017/08/19(土) 12:19:31.20ID:9KU7ntuJ0
>>84
MISRA-C で、禁止されている

a[式]
この式に、副作用があったら、ダメ。
バグるから

93デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/19(土) 15:28:05.17ID:CpINIl4e0
>>91
thx
だよな、そこは断り書きが必要な箇所

94デフォルトの名無しさん (ワッチョイ 81b6-Jcyw)2017/08/19(土) 23:53:05.68ID:HeBiuDVT0
>>92
バグが入りやすい書き方ってだけでバグるわけじゃない

95デフォルトの名無しさん (ワッチョイ 931e-VxEm)2017/08/20(日) 00:16:58.16ID:856Qy56L0
a[i++]= b; は問題ないしな。

96デフォルトの名無しさん (ワッチョイ 6123-WxsM)2017/08/20(日) 03:47:32.99ID:+c5k6kJk0
右辺の結果を出してから左辺の計算やってるようだな。
https://paiza.io/projects/G_durt7YVnR55npMvUcKwg

97デフォルトの名無しさん (ワッチョイ 936f-2g+Y)2017/08/20(日) 06:41:37.88ID:6XW1JaY/0

98デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/20(日) 09:25:38.38ID:sGdhnhOm0
事実上どうなっているという話ではなく
理屈の上でどうなのかという話
ちゃんと断り書きがあったからめでたしだが
そうでなかったら大変だった

99デフォルトの名無しさん (ラクッペ MMed-3Zg8)2017/08/20(日) 09:58:54.27ID:SbUj3AhWM
>>76
ありがとう
ちょっとmake読んでくる

100デフォルトの名無しさん (ワッチョイ 096f-jLVh)2017/08/22(火) 11:22:32.57ID:chgkyZKA0
defineした定数を文字列定数にいれるにはどうしたらいいの?

#define EOL 0x0d

const char version_message[] = "Version 1.0\x0d"

↑この文字列の改行コードに定数EOLを展開した値を入れたいです。

101デフォルトの名無しさん (ワッチョイ 110d-JJVS)2017/08/22(火) 11:44:36.20ID:xXPB4eWM0

102デフォルトの名無しさん (エーイモ SEf3-Ufa9)2017/08/22(火) 11:47:40.32ID:przmPyd7E
typedef struct hoge {
int a;
int b;
} hoge;

hoge h = {1, 2};

構造体に含まれるメンバ名と値を全て出力する方法を教えてください
上の構造体なら
a,1
b,2
と出力したいです

103デフォルトの名無しさん (ワッチョイ 596f-MAnB)2017/08/22(火) 11:59:42.09ID:GCxyf0Da0
>>100
小さな部品を繋いで大きなものを得るのはとても簡単にできるけど
部分を削って小さな部品を得るのはとても大変なのよ
だから本来は改行文字は機能的にレイアウトなのでデータとは分離しておいて
表示なりなんなりするときに結合して使うのが望ましいもちろんVersionと数字もね

その上で既存コードのメンテ等でどうしても必要なら>>101がベスト

104デフォルトの名無しさん (JP 0H5d-C/ZS)2017/08/22(火) 12:08:53.86ID:R9ds2cCvH
>>100
#define EOLSTR "\x0d"
const char version_message[] = "Version 1.0" EOLSTR;

105デフォルトの名無しさん (ワッチョイ 110d-JJVS)2017/08/22(火) 12:11:18.37ID:xXPB4eWM0
>>104
それは迷ったんだよねー
次点でその文字列をマクロで作ることも考えたけどあかんかったw

106デフォルトの名無しさん (ワッチョイ 596f-MAnB)2017/08/22(火) 12:14:35.93ID:GCxyf0Da0
>>102
変数名はあくまで人間が扱いやすいように何らかの領域(一般的にメモリアドレス)に付けるあだ名であって
プログラム(コンピュータ)的にはメモリアドレスのほうが扱いやすいのであだ名は不要(アドレスのほうはプログラム的に出せる)
なのであだ名のほうが欲しいなら以下のように直書きするしかない
printf("%s,%d\n", "a", h.a);

107デフォルトの名無しさん (エーイモ SEf3-Ufa9)2017/08/22(火) 12:52:42.46ID:przmPyd7E
>>106
そうなんですか・・・
全部直書きするのキツイのであだ名がなくてもかまわないのでこの場合の方法ないでしょうか?

108デフォルトの名無しさん (JP 0H5d-3KK3)2017/08/22(火) 13:00:37.52ID:u9fcDp43H
デバッグ目的ならデバッガで

109デフォルトの名無しさん (ワッチョイ 096f-jLVh)2017/08/22(火) 13:20:20.96ID:chgkyZKA0
>>101,104、ありがとうございます、

PCとUSBシリアルで通信する組み込み機器のドライバをメンテしていて
受信したテキストの終端検出にEOLはキャラクタで扱っているし
送信する固定テキストは改行含めてリテラルにしたく
プリプロセッサの#か##で連結でなんとかできないか悩んでました。

110デフォルトの名無しさん (ワッチョイ d3d7-vbeK)2017/08/22(火) 13:21:07.96ID:bF0tRsYk0
コンパイルしたらメンバー名と型の情報は消える

111C言語ますたー《ますたー軍団(常時募集)の長》 ◆Cmaster.sY (ラクッペ MMed-UZV0)2017/08/22(火) 15:44:32.04ID:tfXVsICTM
メモリアドレスを出力させればいいんじゃない?
%pで&aを表示できるはず

112デフォルトの名無しさん (ワッチョイ 110d-JJVS)2017/08/22(火) 16:43:27.00ID:xXPB4eWM0
与えられた変数から、メンバ名とその値を再帰的に列挙して欲しいんだろうけど
そんな都合の良い言語じゃないから自分で並べるしかない

必要に応じて毎回並べるか
並べて出力したものを関数化しといてそれを呼び出すか

113デフォルトの名無しさん (ワッチョイ ab1c-Pf/K)2017/08/22(火) 17:44:12.68ID:NIldwpVs0
再帰的に列挙は自動だととんでもない情報量になったりするからな
そこから欲しい情報をどうやって抜き出すかが頭の使いどころ

114デフォルトの名無しさん (ワッチョイ 936f-jLVh)2017/08/22(火) 22:53:39.27ID:YwU2BQ/U0
>>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);
}

115デフォルトの名無しさん (ワッチョイ 6123-oL0b)2017/08/22(火) 22:53:45.07ID:hpqXPKX70
>>107
マクロでちょっと簡略化することはできる。ちょっとだけな。
https://paiza.io/projects/dRqn0XFnjDUUmr5_5AzF2A

116デフォルトの名無しさん (ワッチョイ 6123-oL0b)2017/08/22(火) 22:56:32.37ID:hpqXPKX70
あ。もうちょっとできたので今修正した。

117デフォルトの名無しさん (ワッチョイ d3d7-vbeK)2017/08/22(火) 23:26:16.15ID:bF0tRsYk0
>>115
これってさ、メンバ名をconst char*にするんだよね?

118デフォルトの名無しさん (ワッチョイ 8123-jLVh)2017/08/22(火) 23:41:21.22ID:D8nSL4rC0
>>115でいいと思うけど、
そもそもこれがしたい場合にC言語を使うのが間違いでしょ。
動的言語かリクレクションがある言語を使えばいいだけ。

ちなみにVC++/CLIでよければリフレクションが使えるけどね。
質問者には無理だろうけど。
レベルからいって>>108が当たりだろうね。

119デフォルトの名無しさん (ワッチョイ 6123-oL0b)2017/08/23(水) 00:06:55.83ID:b0JJUPNx0
>>117
#x の所? そうじゃないかな。gcc -E とかやって見てみるとわかると思うが、 h.a は単純に "h.a" になっている。

>>118
C使わなきゃいいってのはその通りだが、それを言っちゃあお終いよ。

120デフォルトの名無しさん (ブーイモ MMb3-3KK3)2017/08/23(水) 00:14:59.00ID:PJzK0CC4M
構造体のメンバ名がほしいとかデバッグ以外に何があるの

121デフォルトの名無しさん (ワッチョイ 8123-jLVh)2017/08/23(水) 00:22:23.00ID:CuDbJhab0
>>120
有名どころはGUIのバインディング。
例えばWPFは自動的にリクレクションを使ってこれをやってくれる。詳細は以下参照。
http://www.atmarkit.co.jp/ait/articles/1010/08/news123.html

ただ、Cのアプリでこれは要らんし、今時生CでGUIもないよな?

122デフォルトの名無しさん (ワッチョイ c111-JJVS)2017/08/23(水) 06:05:17.73ID:x0fRL5lg0
テキストベースで構造体の値のファイルへの保存と読み込みをしたいのかな

123デフォルトの名無しさん (ワッチョイ 09e4-xjvb)2017/08/25(金) 05:26:20.30ID:vC6ff47f0
マクロでどうにかできるかとも考えたが壊れる対処のし様がない

#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"});

124デフォルトの名無しさん (ワッチョイ e96f-oKtA)2017/08/25(金) 05:30:42.91ID:hNG5yKqv0
Cはウンコ言語なのでリフレクションはありませんの一言で終わる質問

125デフォルトの名無しさん (ワッチョイ d623-0bAf)2017/08/25(金) 08:26:26.12ID:degYWVoy0
C言語はもう 気ままにリフレクション

126デフォルトの名無しさん (スップ Sdca-wqH8)2017/08/25(金) 08:28:37.56ID:+VfvF6y6d
>>124
うんこじゃない言語もコンパイラはうんこ言語(お前に言わせるとC言語)でつくられてるけどな

127デフォルトの名無しさん (スップ Sdca-vlGO)2017/08/25(金) 08:31:15.05ID:mWX/padLd
本当にうんこならとっくの昔に消えてるよ

128デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/25(金) 15:42:32.73ID:RGmsOxnq0
Cはうんことかほざくやつ
まさかLinuxなんか使ってねえだろな

129デフォルトの名無しさん (スップ Sdca-vlGO)2017/08/25(金) 17:02:40.42ID:mWX/padLd
linuxはうんこ

130デフォルトの名無しさん (ワッチョイ b500-2x4P)2017/08/25(金) 17:44:02.80ID:GY4pXB3S0
Cがウンコとか言ってる奴に限ってRubyでしか書けないとかいうオチだったら笑えるんだけどな

131デフォルトの名無しさん (ワッチョイ 41db-4xUk)2017/08/25(金) 21:36:12.81ID:BZOsNf+t0
高級アセンブラ最高じゃん

132デフォルトの名無しさん (スップ Sdca-wqH8)2017/08/25(金) 22:36:16.04ID:+VfvF6y6d
>>131
ほんそれ

133デフォルトの名無しさん (ワッチョイ caea-6Dzw)2017/08/25(金) 22:45:39.22ID:IHFV3+gX0
むしろ Ruby で自由にコードを書ける人を尊敬する今日この頃。
最近やってるんだけど、どうしても馴染めない。普通には組めるけど、違和感が残るというか抵抗があるというか。

134デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/26(土) 00:06:54.39ID:F7j6CSPU0
リフレクションを使う気がなければリフレクション自体がウンコだよ。
・ソースコードがだだ漏れ
・実行体が無駄に膨らむ(ソースコード情報を含むため)
・リクレクションが必要な用途なら、動的言語でついでに型無しの方が断然楽

GUIとかね。
ウンコと言われ続けたJavaScriptを誰も殺せず、
ついにはElectronとか言い出してデスクトップ側にも進出してきてるだろ。
やれば分かるがGUIに関しては動的型無しHTML(=JavaScript)は最強。

C言語はC言語が目指した範囲での仕様は美しいよ。
ただそこには今後ともリクレクションは必要ないね。
唯一引っかかるのは>>122か。

>>133
どの辺が?
俺はRuby使いではないが、それよりも酷いとされるJavaScriptには馴染んでしまったから、
ある程度は答えられるかも。

135デフォルトの名無しさん (ワッチョイ 09e4-xjvb)2017/08/26(土) 00:48:52.34ID:acOQPPj10
lua等の組込み言語とやり取りする container生成用補助構文群が有ってもいい
関数では前方宣言とか scopeが邪魔して対処しきれないだろうから
うまくすれば文字列操作表示も標準libraryから追い出せる

136デフォルトの名無しさん (ワッチョイ 09e4-xjvb)2017/08/26(土) 00:52:27.30ID:acOQPPj10
pr(test_t, (test_t){.i=999; .s="abc";});

137デフォルトの名無しさん (ワッチョイ b632-+Jgu)2017/08/26(土) 14:20:33.57ID:rkE5GYva0
>>134
javaでアノテーションいじり始めるとリフレクションまじ便利で欲しくなるけど、c系にはなくてもいいかなというのも思う。

テバグ目的ならgdbでいいしな。

138デフォルトの名無しさん (ワッチョイ 6aab-M74o)2017/08/29(火) 00:26:03.40ID:+Y8D6iZy0
>>134
規模が大きい場合は型があって静的に検査できるほうが便利だねというのが世間の流れだと思うが
TypeScriptとかFlowとか
速度を稼ぐ目的でwasmも今後主流になっていくだろう

巨大ストレージ、OSSが主流な時代にメタデータのサイズやソース隠蔽は気にしなくなったし

139デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/29(火) 02:58:14.41ID:Uz0lh6nE0
>>138
> 規模が大きい場合は型があって静的に検査できるほうが便利だねというのが世間の流れだと思うが
違うね。今の流れは「選べる」だ。つまり、
・型無し言語に型情報を付加し、恩恵を受ける---TypeScript
・型あり言語に型推論やジェネリックを追加し、型情報を記述する煩わしさを回避---C#/C++/Java
どっちも出来ることはほぼ同じ。ほぼ全ての言語がここを目指してるでしょ。(Cを除く)
要するにいいとこ取りを目指しているわけで、自然な流れだ。
型があった方が助かるのなら書け、煩わしいだけなら書かなくて済む、という方向に進化しつつある。
なお、GUIに関しては型無しでも大して苦労しない。バグっているかどうかは見れば分かるから。

> 速度を稼ぐ目的でwasmも今後主流になっていくだろう
ならんと思うし、C使いにとってはなったとしてもああそうですか、でしかないと思うが。

> 巨大ストレージ、OSSが主流な時代にメタデータのサイズやソース隠蔽は気にしなくなったし
OSSについては歪んでいて、本来は選べるべきだよ。
JavaScriptのようにソース曝露必須というのは問題ではある。

富豪どころか大富豪プログラミングを自由に出来る時代ではあるが、
何だかんだで速度=バッテリの持ち/快適さなので、実際は、「気にしなくていい環境も増えた」だよ。
とはいえCレベルでのチューニングが必要なこともそうないが。

140デフォルトの名無しさん (ワッチョイ ad7f-vgeI)2017/08/29(火) 07:49:01.20ID:pPJ906sN0
>・型無し言語に型情報を付加し、恩恵を受ける---TypeScript
>・型あり言語に型推論やジェネリックを追加し、型情報を記述する煩わしさを回避---C#/C++/Java

後者は型を明示的に書かなくてもいというだけで最初からすべて型検査してるぞ。
型検査について言えば、動的型付け言語に静的な型検査を導入する流れはあるが逆はない。

141デフォルトの名無しさん (ワッチョイ d623-0bAf)2017/08/29(火) 08:29:00.57ID:E7mhir0G0
動かす前にバグが見つかる仕掛けがちゃんとあるなら
動的型付けでも構わんよ

142デフォルトの名無しさん (ワッチョイ 41db-4xUk)2017/08/29(火) 14:42:19.23ID:/UmWkn6m0
無理ゲーっぽくね?

143デフォルトの名無しさん (ワッチョイ 41db-4xUk)2017/08/29(火) 14:47:49.09ID:/UmWkn6m0
んなことはないみたいだぬ

100%は無理
そこそこなら行ける

145デフォルトの名無しさん (ワッチョイ 2aef-vgeI)2017/08/29(火) 20:04:11.09ID://zGX0GI0
option explicit +中間言語コンパイル,なら使えそうだ

146デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/29(火) 22:43:29.12ID:Uz0lh6nE0
>>140
> 型検査について言えば、動的型付け言語に静的な型検査を導入する流れはあるが逆はない。
これは事実としてはその通りだが、理由はこれが型あり言語の正義だからであって、
現実は型検査がウザイだけの時も多いだろ。
C++のtemplateとか、varで書いたら勝手にtemplate化してくれ、という場合も多い。
込み入ったことをやるとコンパイルを通すだけの為に苦労したりするが、
あんなのは完全に時間と手間の無駄だ。
また、他でもよく言われているが、確かに関数ポインタを常用し始めた場合、
型あり『しか出来ない』言語は壮絶にウザイ。どうでもいい型が氾濫するだけだし。

言語として出来る/出来ないではなく、
ユーザーがやりたい時には出来る/やりたくない時には切れる、が正解なんだよ。
型無し言語はこれを認めていて、欠点を修正し始めてる。
型あり言語はこれを認められず、まだ自分たちの正義(型検査は必須)を押し売りしてるだけ。

C(と言うかC++)ではconstがこの状況に近いのではないかな?
通説ではconstは付けるべき、となっているが、俺は付けてない。理由は、
・そもそも俺はconstで苦労したことがない(必要性を感じない)
・中途半端に付けてると余計に面倒になるだけ
・const_castとか、ただの馬鹿としか思えない
なんだが、同様の意見の奴もある程度はいるだろ。
過剰な型検査ってのはあるんだよ。それが人によって異なるってだけで。
やればいいって物ではない。

147デフォルトの名無しさん (ワッチョイ ad7f-vgeI)2017/08/29(火) 22:56:30.74ID:pPJ906sN0
なんだ?>>139の「違うね」ってのは現状認識が違うって話じゃなくてあんたの理想と違うってことか?
そりゃ正解はあんたにしかわからんわ。

148デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/29(火) 23:14:00.57ID:Uz0lh6nE0
>>147
現状認識も間違っていると思うけど。
日本語が不自由ならさようなら。

そもそも「型検査」が欲しいわけではなくて、静的チェックが欲しいだけなんだよ。
君は最初からずれている。>>141が正しい。

149デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/29(火) 23:17:01.52ID:/SLQJmZn0
> コンパイルを通すだけの為に苦労したりするが、
> あんなのは完全に時間と手間の無駄だ。

そうだねえ
自分の考えがはっきりしてなくて筋が通らないのを
コンパイラに突っ込まれ、そのたびに右往左往じゃ
下手の考え休むに似・・いや如かずってやつ

150デフォルトの名無しさん (ワッチョイ ad7f-vgeI)2017/08/29(火) 23:31:56.37ID:pPJ906sN0
「今の流れってこうだよね」
「俺の欲しいものは違う」

会話にならねぇ。

151デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/29(火) 23:53:00.65ID:Uz0lh6nE0
>>150
そうとしか取れないのは君が未熟だからだね。

「流れ」ってのは原因ではなく、大多数が希望した「結果」なんだよ。
君は初心者だから、毎日コード書いている連中が何を求めているのか分からない。
それだけだね。

152デフォルトの名無しさん (ワッチョイ 6aab-M74o)2017/08/29(火) 23:57:29.58ID:+Y8D6iZy0
>>139,146
>GUIに関しては型無しでも大して苦労しない。バグっているかどうかは見れば分かるから。
見てわかる程度の規模の場合は型無しでもよいだろうね

>型検査がウザイだけの時も多いだろ
どんな時?C#には動的に型解決するdynamicがあるけどほとんど使わないな
COM除けばJSONやXMLの処理で楽するときぐらい?それでも本番用ならちゃんと書くなぁ

>どうでもいい型が氾濫
ジェネリックで型指定するだけだから氾濫しなくね?

あと、constはプログラマーがミスを防ぐためのものであると同時にコンパイラーへのヒントでもある
const修飾されていれば大胆な最適化が可能な場合も多い

153デフォルトの名無しさん (ワッチョイ 2a89-GW8T)2017/08/30(水) 00:01:54.97ID:3iEZIBUv0
>>151
俺も>>150と同じように読めた。
自分の希望を大多数の希望だと決め付けるのは止めろよ。

154デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/30(水) 00:53:26.35ID:F1WQhw000
>>152
> >GUIに関しては型無しでも大して苦労しない。バグっているかどうかは見れば分かるから。
> 見てわかる程度の規模の場合は型無しでもよいだろうね
規模にかかわらず、見ずにチェックするGUIなんて無いだろ。

> どんな時?C#には動的に型解決するdynamicがあるけどほとんど使わないな
おー、C#はやはり進んでいるというか、痒いところに手が届いているね。

要するに楽をさせてくれでしかないのだが、ぱっと思いつく遭遇したケースは、
・callbackでdelegateの型チェックがウザイ。グダグダ言わずにcallbackしてこい。
・リフレクション時がかなり最悪。(C#なら問題ないが、
VC++2008とかだと、MSDNで型を調べながら型を書くという本末転倒の事態になる)
以下にはJSONガーとか書いてあるけど、JSONをC++で受けたことはないので実感はない。
http://ufcpp.net/study/csharp/sp4_dynamic.html#what
後は型無しだとデタラメなパッチが可能だというのもあるし、俺は常用してるけど、
これ自体はあまり推奨されることではないね。

俺はJavaScriptで型をかかないことに慣れてしまったので、
再びVC++で型を書く時にウザくて仕方ない。
(ただしこれはVC++しかやってない時には全く感じなかった)
要するに型情報は具ではなく、ただのチェック用付加情報でしかないんだよ。
例えれば、当たり前に読める漢字にもいちいち全部ルビを付けている感じか?二度手間がウザイ。
ただし二重チェックをしたい部分もあるので、そういうところは書かせろ、とも思うが。
コンパイラにプログラマが合わせるのではなくて、プログラマにコンパイラが合わせるべき。

> ジェネリックで型指定するだけだから氾濫しなくね?
C#は多分そうだね。C#では解決済みかも。

> const修飾されていれば大胆な最適化が可能な場合も多い
この説はよく聞くが、具体的にどういうケースよ?

155デフォルトの名無しさん (ワッチョイ 5923-pgRk)2017/08/30(水) 00:58:09.18ID:ry+Kms2n0
>>141
こういうやつってユニットテストしらないのか?

Cでも今時は書くだろ

156デフォルトの名無しさん (ワッチョイ 5923-pgRk)2017/08/30(水) 01:17:46.58ID:ry+Kms2n0
型どうこうで考えるべきは依存関係なんだが

静的型言語はすぐに依存関係ができる
そのためにやれ継承だのインタフェースだのデザパタだのとごちゃごちゃ考えなきゃならん

しかもデザパタで実現できる疎結合は完全じゃないからね

157デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/30(水) 01:56:29.11ID:F1WQhw000
>>156
それは型ではなくてラムダの利点だと思うが。
ただ、ラムダを積極活用すると型が邪魔だってのはあるし、
結果的に関数型が型無しor型推論に突き進んだのはこれが理由だと思うが。

しかもデザパタって使い物にならんだろ。
というか元々Javaという関数ポインタもラムダもない言語で(キリッされても、
他の言語ならもっとマシに出来るんじゃね?ってのが多いというか、
なんで縛りプレイに付き合わないといけないの?っていうか、
だいたい説明自体もイミフなのが多いし。

158デフォルトの名無しさん (ワッチョイ 6aab-M74o)2017/08/30(水) 02:00:40.60ID:vF4qFgfn0
>>154
コンポーネントとかイベントの引数の型を間違えたり変更時に修正漏れが出たりはよくあるでしょ

>callbackでdelegateの型チェックがウザイ
async/awaitがある言語だとコールバックを使うことはあまりないしなぁ
どういうのを望んでるのかよくわからんが、型安全と最適化を投げ捨ててまでやることには見えん
コールバックの処理が適切なことはテストとかで保証するとか考えるとそっちが面倒そうに見えるが

>リフレクション時がかなり最悪
VC++でリフレクションって、どの話だ

>チェック用付加情報・二度手間がウザイ
どうせドキュメントとかテストに書いてくんだから二度手間は避けられん
定義が面倒な分、静的型言語では戻り値の型やメンバーが即座に確実に補完されるので非常に快適
全参照を書き換えるリファクタとかもできるし

新しい言語はそこら辺かなり解決されてる

159デフォルトの名無しさん (ワッチョイ 5923-pgRk)2017/08/30(水) 02:07:48.34ID:ry+Kms2n0
>>157
酔ってんのか?Java?意味不明だ

レス付けるなら何を話してんのか特定しろ

160デフォルトの名無しさん (ワッチョイ 6aab-M74o)2017/08/30(水) 02:25:01.52ID:vF4qFgfn0
>>154
constはどちらかというと、x + y = zみたいな変な呼び出しを禁じたいからつけてるから、最適化についてはパッとでは極端な例しか思いつかんな・・・
hoge(&a,&b);
c = a + b
でhogeの引数がconstなら処理を無視してa+bを静的に確定できるとか

根本的にC++は「型安全とバイナリの性能>>>楽をしたい」という発想の言語だから静的な型の確定を妨害するような機能は理念に反するでしょ
javascriptにポインタが欲しいぐらいの不自然さ

161デフォルトの名無しさん (ワッチョイ e96f-oKtA)2017/08/30(水) 06:22:36.60ID:dAnuHQ8p0
早く夏休み終わらないかな…

162デフォルトの名無しさん (ワッチョイ b500-2x4P)2017/08/30(水) 07:01:40.06ID:AqkMSzAW0
いや終わらなくていいよ
電車混むし

163デフォルトの名無しさん (スップ Sdca-CsPo)2017/08/30(水) 08:10:07.81ID:Li+Lo8rKd
大学生のは未だ続くで

164デフォルトの名無しさん (エーイモ SEb2-dmBu)2017/08/30(水) 13:51:14.27ID:AB0hyKA3E
すいません
Windowsでvirtualboxとかcygwinとかmsysみたいな名前のをインストールする予定はないんですが
WindowsでCを書く場合はVC++を使うのが定番なのでしょうか?
gccとclangを使うのはあんまりおすすめしないですか?

GUIないならgccでも問題ない

166デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/30(水) 14:33:39.82ID:BJd10UjW0
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なんかがいるんで適宜追加しる

Windows版のgccある?

168デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/30(水) 18:24:32.41ID:BJd10UjW0

mingw 入ってない環境だとバイナリ使えないよね。
コンパイルして実行したいだけなのに。

170デフォルトの名無しさん (ワッチョイ cd11-oKtA)2017/08/30(水) 18:43:05.43ID:LRl1+/WB0
実行ファイルの配布の意図?
mingwでコンパイルできれば、実行もできる環境が整ってるんじゃないの?

171デフォルトの名無しさん (ワッチョイ 096f-pmc4)2017/08/30(水) 19:17:06.22ID:58Rp2mqQ0
>>169
よくごっちゃにしてる人がいるけどそれはcygwinを使う場合
mingwはランタイムにmsvcrtを使うのでcygwin1.dllは不要

172デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/30(水) 19:17:51.85ID:BJd10UjW0
あのなー・・・
cygwinがそういう批判を受けていたのを踏まえて
「本当のミニマリスト」を目指したのがmingwなんだよ
それすらいやなら、あとはM$純正のbashくらいだぞ

173デフォルトの名無しさん (ワッチョイ 0951-TBjh)2017/08/30(水) 19:21:14.37ID:qx/wlZ6S0

174デフォルトの名無しさん (ワッチョイ 86e3-2x4P)2017/08/30(水) 20:36:36.61ID:ViOUv0iA0
>>167
The Perl for MS Windowsって言うのがある。
これインストールすると、gccも入る
普通にコマンドラインで使える

http://strawberryperl.com/

175デフォルトの名無しさん (ワッチョイ c61c-9BKz)2017/08/30(水) 20:41:41.90ID:BJd10UjW0
>>168だって本当に最小限のmingwが黙って入るから意識せずに使えるぞ
で最小限じゃないmingwが欲しくなったらmsys2とか入れるんだよ

176デフォルトの名無しさん (ワッチョイ 1932-RHs9)2017/08/30(水) 20:52:42.57ID:t1uAI5x90
こういう枝葉でゴチャゴチャやるぐらいなら、さっさとVC入れたほうが良い
windowsで開発するなら、VCさえあれば十分

177デフォルトの名無しさん (ワッチョイ ca1e-62g8)2017/08/30(水) 21:46:54.45ID:1xtdX2a20
コンソールアプリくらいならgccでコンパイルできても良さそうなもんだけどな。

関係ないけど .NET に JS コンパイラが入ってるの知らなかった。

>>168 >>171
知らなかったです。
いいですね、MinGW

179デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/30(水) 23:02:07.68ID:F1WQhw000
>>158
> 引数の型を間違えたり変更時に修正漏れが出たり
ねえよ。正確に言うと、『これが型検査で都合よく引っかかるのは』ねえよ。
型があってコンパイル時に落とせるのは明確なtypoだけで、それ以外は期待出来ない。
xxxx2とxxxx3とかを間違えた場合、通常、型は同じでしょ。

ただそれ以前にJavaScriptだと修正漏れ自体がないっつうか、修正しなくていいというか。
型検査は基本的にソース全体で辻褄が合っているかを検査する。
だから例えば機能追加で関数の引数が増えた場合、コンパイラは修正漏れを全て検出し、修正を促してくる。
ところがJavaScriptにはそういう機能はないから、漏れてしまう、というのがそちらの意見だと思うが、
そもそも漏れても動作するように作られてるから問題ない、というのがJavaScriptの思想。
具体的には、
・同じ関数が引数の数が違っても呼べるから、エラーにはならない。(引数の型/個数はシグニチャに入らない)
・足りてない引数は、undefind(falsy)になっているから、if (addedParameter) で簡単に対応出来る。
だから修正するパス(その機能が追加される動作パス)の部分だけ修正して、後は放置で問題ない。
もちろんこれだとソース内で引数の数の一致なんて無くなってしまう。
これでいいのか?とも思うが、俺が試した範囲では特に問題はなかった。

C#はIDEがいいから、全ソースをリファクタとかも簡単に出来るようだ。これはこれで一つの完成形だ。
そうではなく、手修正だと漏れる、だからコンパイラがそれを検出する、というのも一つの手だが、(C++)
漏れる漏れない以前に、関係ないところは修正の必要がそもそも無い、というのも一つの手だよ。(JavaScript)
ちまちま全修正するのが面倒だし危険だから、
受け側で引数違い毎にラップ(オーバーロード)してたらなんだかなぁ(俺的C++)、
みたいなのとは発想が逆だった。

180デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/30(水) 23:03:09.90ID:F1WQhw000
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++の型チェックだと変更がソース全体に及ぶしこれを断れない。
引数の型とか個数を間違えた場合、普通は根本的に動かないなら、テストでは当てさえすれば検出出来る。
そんな簡単なエラーチェックの為にコンパイルを通すだけの為にいちいち型を合わせたり、
変更がソース全体に波及するのが危険でウザイって事。

181デフォルトの名無しさん (ワッチョイ ad23-vgeI)2017/08/30(水) 23:04:03.99ID:F1WQhw000
> コールバックの処理が適切なことはテストとかで保証するとか考えると
どのみちテストはやらんと駄目でしょ。と言うか、逆に、
「コールバックの処理が適切なことは『型検査』で保証する」ってのは無理でしょ。
Haskellのキチガイ共はそういう思想らしいが。

「型安全」ってのはバグの一つの形「インタフェース(接続部)の間違い」を検出するだけであって、
処理の中身が間違っている場合は全く検出出来ない。つまりテストは省略出来ない。
それで「型安全」にするために払うコストと、それによって受ける恩恵を考えた場合、
俺にとっては「無いよりマシ」程度で、「投げ捨ててまで」って程の価値はないね。
とはいえtypoを検出する機能だけは欲しいんだが、逆に言えばそれだけで十分だ。

>>160
多分、constで最適化ガーってのはやっぱり無いんだよ。
想定されるケースはそちらの挙げたとおりで、
void someFunc(){
// (A)
hoge(&a, &b); // (B)
// (C)
}
で、(B)で変更されないことを保証されれば、
(A)時点の&a, &bのキャッシュ(というかローカル変数に取ったもの)が
(C)でも有効です、ってだけだが、そもそもこのケースがないだろ。

自関数内で変更してるかどうかはコンパイラには明確に分かるんだから、
考えられるのはこのように他関数をまたいだケースなんだけど、
それなら最初から(A)(C)(B)の順に処理しろ、でしかないし。
((B)で変更されるから(C)は(B)の後ろなのであって)

182デフォルトの名無しさん (ワッチョイ 096f-pmc4)2017/08/30(水) 23:14:59.21ID:58Rp2mqQ0
ただmsvcrtを使うということはvcがサポートするC規格に引きずられるのを留意しておくこと
最新のmsvcrtでもたしかC99止まりでinttypes.hをインクルードしてもPRId64とか使えない
C11の機能が欲しければ素直にlinux+gcc|clangの環境をオススメする

183デフォルトの名無しさん (スフッ Sdea-NYHg)2017/08/30(水) 23:55:33.72ID:FdjUx67gd
最適化かけないと通るけど、最適化かけるとセグフォ
プリントデバッグしたらプリント文置いたり減らしたりするだけで最後に表示されるものが変わる
なんだこれ

最後に¥0を付けてないとか

185デフォルトの名無しさん (ワッチョイ a34b-hEpb)2017/08/31(木) 00:06:31.32ID:M/UQy7Jt0
>>183
malloc/free使ってる?

186デフォルトの名無しさん (スフッ Sd1f-hbUo)2017/08/31(木) 00:15:15.17ID:AFctto/wd
>>185
一切使ってないっす……
引数で配列の大きさ渡してるのがまずいのかもしれない

187デフォルトの名無しさん (ワッチョイ cfe3-X0kF)2017/08/31(木) 00:22:21.25ID:Mr6ZzHeH0
配列サイズを越えて代入しているとか

188デフォルトの名無しさん (ワッチョイ b36f-r+mQ)2017/08/31(木) 00:28:32.21ID:K0ByhO+S0
つかソース晒せないの?

189デフォルトの名無しさん (スフッ Sd1f-hbUo)2017/08/31(木) 00:28:58.33ID:AFctto/wd
配列の代入とは関係ないところで死んでるっぽいこともあるんだけど、それでも配列の範囲外アクセスとかあるものかなあ……

190デフォルトの名無しさん (スフッ Sd1f-hbUo)2017/08/31(木) 00:31:52.88ID:AFctto/wd
>>188
そこそこ依存ファイルあるし、一応研究室の研究で書いているので、失礼ながらソースは上げられないです

191デフォルトの名無しさん (スフッ Sd1f-hbUo)2017/08/31(木) 00:32:55.14ID:AFctto/wd
よく考えたらそんな状態で相談することが間違いか
やっぱり撤回します。スレ汚しすいませんでした

192デフォルトの名無しさん (ワッチョイ a34b-hEpb)2017/08/31(木) 00:34:49.91ID:M/UQy7Jt0
>>190
メモリリークをチェックしてみたら

193デフォルトの名無しさん (ワッチョイ a323-X0kF)2017/08/31(木) 02:33:47.40ID:KfXpPD/x0
最適化の有無で変わった事と言うと、この前こんなことがあった。
(以下の 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 のように重なってしまっておかしくなったと。

194デフォルトの名無しさん (ワッチョイ 7f2b-gSHU)2017/08/31(木) 03:22:36.47ID:IR3nOS0l0
>>179
いや、もっと単純に、APIの仕様変更で取得できる情報や型が変化したけど、エラー処理とか偶然うまく見える場合とかは目視では見落としがあるよねということ
テストを書く前に簡単に修正箇所がわかれば便利みたいな話だけど、まぁ、やり方やライブラリによって違うのかもね
少なくともAngularとかはTypeScript採用だし、型あったほうが便利派は少なからずいるよとだけ

195デフォルトの名無しさん (ワッチョイ 7f2b-gSHU)2017/08/31(木) 03:58:43.17ID:IR3nOS0l0
>>180,181
C#でも同じようにラムダ式やローカル関数で変数をキャプチャできるぞ
というかC++でもできるはず

コールバックは階層が増えたりエラーや例外処理、分岐などが生じるとどんどん複雑になって単純には行かなくなる
それを解決するのがPromiseで、それを更に単純に記述するのがasync/await
新しいライブラリとかはPromiseで返すのが当たり前になって来てるし、今後の言語もasyncに舵をきるんじゃないかな

>関数ポインタを差し込む時にいちいち考える必要がない
C++でどうやって実現すんの?
char *を受け取る関数ポインタにとconst char*で受ける関数ポインタを入れてエラーにしなかったらややこしくて危険なだけでしょ

コンパイルエラーじゃなくてテストで保証するとになればなおさら変

196デフォルトの名無しさん (ワッチョイ 7f2b-gSHU)2017/08/31(木) 04:15:22.77ID:IR3nOS0l0
>>181
>最初から(A)(C)(B)の順に処理しろ
何言ってんだBとかCに副作用があるなら入れ替えちいかんだろ

コードは適当だけど、
void test(a,b)
{
hoge(&a,&b);
piyo(a+b);
}
test(1,2)
みたいに静的に確定するなら、piyoの引数をコンパイル時に計算してpiyo(3)みたいなコードをはいてくれたりもする

197デフォルトの名無しさん (ブーイモ MMa7-yL/R)2017/08/31(木) 05:12:55.38ID:egwbmqN8M
スタックフレームの破壊は明白なんだから関数内で宣言してる配列全部の
範囲チェック入れてみな

198デフォルトの名無しさん (ワッチョイ 430d-b8Mh)2017/08/31(木) 11:26:29.57ID:e5ym4hpC0
やりそうなこと

□ 要素数 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 が配列ではなくポインタだった為
処理したい要素数が渡っていない

199デフォルトの名無しさん (ワッチョイ fff0-6h2J)2017/08/31(木) 13:55:57.05ID:wUqC2S3T0
>>183
研究室から出せない秘伝のソース、
なら特殊なハードウェアで、実はvolatileが欠かせない、とかじゃねえの
ソースの向こうのハードウェアが実は核分裂制御装置でした!……とかでももう驚かねえよ

200デフォルトの名無しさん (スプッッ Sddf-b5LN)2017/08/31(木) 16:11:13.20ID:aZ9Rj489d
創業当時から継ぎ足した秘伝のソース

201デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/08/31(木) 16:17:00.98ID:JYM1pg890
半分使って、半分継ぎ足しを繰り返すと79回目あたりで
アボガドロ定数の逆数くらいに薄まるよね

202デフォルトの名無しさん (スプッッ Sddf-b5LN)2017/08/31(木) 16:47:29.73ID:aZ9Rj489d
何か、酵母とか菌糸とか入ってて熟成されるんよ。ただ混ざるだけじゃないんよ。

203デフォルトの名無しさん (ワッチョイ 6323-6h2J)2017/08/31(木) 22:53:34.07ID:F9uWTtxD0
>>194
> 型あったほうが便利派
半分くらいはインテリセンス目当てだと思うぞ。
そして俺自身も型を否定はしないが、C++の型検査も過剰気味だと感じている。
だからconstは使ってないし、関数ポインタの型検査もウザイ。
つーか、型を間違えること自体がほぼ無いだろ?
引数の順番を間違えたりした場合に型検査で引っかかるってだけで。

204デフォルトの名無しさん (ワッチョイ 6323-6h2J)2017/08/31(木) 22:54:02.64ID:F9uWTtxD0
>>195
> ローカル関数で変数をキャプチャできるぞ
ローカル変数しかできんだろ。しかも明示しなければならない。(全指定も出来るが)
JavaScriptの場合は上位関数の変数をどこまでも辿れるので、(レキシカルスコープ)
入れ子になっていても破綻せずに分解して展開出来るんだよ。
C++方式の場合はawait内にawaitが入れ子になっていると、展開出来ないだろ。

> コールバックは階層が増えたりエラーや例外処理、分岐などが生じるとどんどん複雑になって単純には行かなくなる
> それを解決するのがPromiseで、それを更に単純に記述するのがasync/await
これは通説だが、俺はこれが嘘だと思ってるんだよね。
JavaScriptで言われているcallback地獄ってのは、非同期処理をその場で入れ子で書いている。
それよりawaitの方が見やすいってのは、上から順に読める形式だから。
でも>>180に書いたとおり、JavaScriptの文法ではcallbackを常に展開して書けるので、
その気になればawaitと同じ順で処理を書けるんだよ。(非同期がネストしない)
つまり、レキシカルスコープ+クロージャなら、awaitが無くてもawaitと同じ順で処理を書けるわけ。
C#やC++はレキシカルスコープがないからawaitが必要なだけ。
だからここら辺は実は文法との相性もあるんだよ。
C++はそんなのお構いなしに何でもかんでも入れてる感じだが。
(とはいえ、選択肢が増えること自体は悪いことではない)

> char *を受け取る関数ポインタにとconst char*で受ける関数ポインタを入れてエラーにしなかったらややこしくて危険なだけでしょ
そりゃconstの有無をテストで落とすのは無理だろうさ。
まあ、俺はconst自体が意味無い(無駄な手間が増えるだけ)という認識だが。
(ただし本当の意味でのconst(「定数」)の場合は使う。Cならマクロで与えていたケースとか)

そもそも君はどこまでconstを使っているんだ?
C++のconstは「定数」ではなく「再代入禁止」だ。
現実的には無駄に再代入することもないので、ローカル変数の大半にconstを付けられるはず。
これをやっているのか?
やっていないのなら、君自身も「過剰な型検査」が存在することを認めていることになるが。

205デフォルトの名無しさん (ワッチョイ 6323-6h2J)2017/08/31(木) 22:54:22.15ID:F9uWTtxD0
>>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)に対しての副作用を持たないことを保証)することは出来ないでしょ。

206デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/01(金) 02:04:57.35ID:2msaHTP30
>>204
ん、C++のconstは、Cのconstよりも「定数」だぞ
int const a = 1;
switch(1) [
case a: ; //valid in C++, invalid in C
}

207デフォルトの名無しさん (スップ Sd1f-wHLy)2017/09/01(金) 08:48:03.58ID:5GGRc0nid
>>206
すまん、そのコードの意味がわからん

208デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/01(金) 09:06:42.83ID:2msaHTP30
typoしとるな
[は{

209デフォルトの名無しさん (ワッチョイ 430d-b8Mh)2017/09/01(金) 09:55:02.84ID:kxCoop1y0
case ラベルに const な変数の変数名

C++ ならばリテラルと等価となりセーフ
C は変数のままの扱いでアウト

210デフォルトの名無しさん (ワッチョイ 53db-aQR2)2017/09/01(金) 11:36:56.59ID:IGPoCkp90
Cのconstは変更不可なオブジェクトだからな

C++は使える範囲を広くしただけでconstの意味はCといっしょ
constによる最適化の話には関係しない

212デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/01(金) 15:37:25.51ID:2msaHTP30
違う
constはもともとC++発祥のもので、
Cでパクるにあたり微妙に改変した
constは最適化に関係するが
今この流れでは最適化とは全く無関係の話をしている

213デフォルトの名無しさん (ワッチョイ c300-X0kF)2017/09/01(金) 16:51:03.36ID:dkwAUCjz0
volatileについてもkwsk

214デフォルトの名無しさん (ワッチョイ fff0-6h2J)2017/09/01(金) 17:40:42.98ID:XJwe5Q/Z0
ttps://regmedia.co.uk/2011/02/18/dennis-richie-and-brian-kernighan-pdp-11.jpg
こういう時代の揮発性のメモリ
揮発しないメモリもあるんですよ

215デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/01(金) 18:43:10.50ID:2msaHTP30
ビットフェードとvolatileは関係ないぞ

216デフォルトの名無しさん (ワッチョイ e311-b8Mh)2017/09/01(金) 18:59:13.16ID:dXFBhBz10
コード中の文意では変わってなくても、他の要因で変わる可能性あるような
割り込みやマルチスレッド等で共有してる変数とか

217デフォルトの名無しさん (ワッチョイ cf23-Gmm8)2017/09/03(日) 03:14:53.65ID:GCfgdhr+0
> C++のconstは「定数」ではなく「再代入禁止」だ

代入と初期化を混同してませんか

218デフォルトの名無しさん (ワッチョイ c300-X0kF)2017/09/03(日) 08:56:24.33ID:72Px+h1e0
staticについてもkwsk

219デフォルトの名無しさん (ワッチョイ a323-wVzx)2017/09/03(日) 11:44:42.91ID:jl0cf3RS0
性的な

220デフォルトの名無しさん (ワッチョイ e311-b8Mh)2017/09/03(日) 12:14:41.26ID:9dM4T0NO0
外からは見えないように、そして、なくさないようにするエロ本

221デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/03(日) 17:40:32.30ID:jXGwZqzU0
一口にstaticと言っても、そのキーワードは用法で意味が変わるからなあ

222デフォルトの名無しさん (ワッチョイ 7fef-6h2J)2017/09/03(日) 17:45:54.60ID:5WRYI1ZX0
static に背負わせすぎな気がする
関数内変数の static
関数スコープ外の static
C++ ならばクラスメソッドのstatic
クラス変数の static もあったかな‥多すぎだ‥

223デフォルトの名無しさん (ワッチョイ a34b-hbUo)2017/09/03(日) 18:29:43.87ID:fyDk5FSQ0
予約語を減らす涙ぐましい努力

224デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/03(日) 18:47:29.02ID:jXGwZqzU0
C99以後、仮引数のstaticもあるしな

225デフォルトの名無しさん (ワッチョイ ffea-pNuo)2017/09/04(月) 00:43:28.93ID:QxIkVb9z0
ポインタ関連で*と&の記号を使っているのも
初心者を遠ざけているよな
素直にpointerとかrefとかの予約語作ればよかったのに

226デフォルトの名無しさん (ワッチョイ 7f89-eV1K)2017/09/04(月) 01:05:35.63ID:IeE+YITL0
>>225
もともと高級アセンブラとして生まれた経緯を考えたら、ポインタ関連の基本的な記述のためにはくどいキーワードではなく最もシンプルな演算子が割り当てられるのは自然なことだと思う。

227 ◆QZaw55cn4c (ワッチョイ 7fef-pwmx)2017/09/04(月) 01:17:41.88ID:rnM3x3Xp0
>>225
C# の ref 宣言のように,宣言だけでなく呼び出し側でも ref が必要だという文法はあってもよかったかな

228デフォルトの名無しさん (ワッチョイ a323-X0kF)2017/09/04(月) 02:45:48.86ID:tVodzhFi0
>>224
え?そんなのあった?

229デフォルトの名無しさん (ワッチョイ cf1c-PLFS)2017/09/04(月) 08:55:10.34ID:pd3pCmCq0
>>228
ISO/IEC9899:1999
6.7.5.3 Function declarators (including prototypes)
21 EXAMPLE 5
void f(double a[restrict static 3][5]);

230デフォルトの名無しさん (ワッチョイ a323-wVzx)2017/09/05(火) 00:59:51.51ID:2RdPD3ce0
>>229
ああ。そういう使い方か。

以下の三つの操作に違いはありますか
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);

232デフォルトの名無しさん (ワッチョイ b323-QlH+)2017/09/08(金) 04:19:51.29ID:LlnxN/9E0
>>231
1のscanf()はchar型で文字列を受け取ろうとするのでエンコードによっては複数バイト文字が全て読めない可能性がある。
例えば2バイトづつのUnicodeの0xff以下のコードがそのまま来た場合、ビッグエンディアンならすぐに0x00が1バイト目に来てしまう。

233デフォルトの名無しさん (エーイモ SE5a-w7pF)2017/09/08(金) 22:13:19.23ID:Hco6il2OE
兄貴すいません
アロー演算子の使い方を学びたいのですがどこを直せば動くのか教えてください

#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;
}

234デフォルトの名無しさん (ワッチョイ 3e6c-xkdj)2017/09/08(金) 22:41:39.10ID:R6JsR04N0
>>233
*uじゃなくてsにてもしてuに&sを入れてhogeをnameに変えれば動くけど
これnameが実体だから100% 1が出るよね

235デフォルトの名無しさん (ワッチョイ 8311-QyhX)2017/09/09(土) 01:43:06.63ID:DK1wXlQ90
struct User {
char *name;
int age;
};

int main()
{
struct User st = { "hoge", 10 };
struct User *u = &st;
if (u->name != NULL) {
 ......

236デフォルトの名無しさん (ワッチョイ 1af0-x/0H)2017/09/09(土) 12:01:06.79ID:KEHxH6tI0
>>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;
}

>>232
なるほど
ありがとうございます

fgets(s, M, stdin);
const char *p = s;
mbsrtowcs(ws, &p, N, &state);
でも1と同様の問題が起こりますか

>>231は関数名と実引数の型を間違えてました

238デフォルトの名無しさん (ワッチョイ b7e4-hwHx)2017/09/09(土) 16:17:54.34ID:qJRB74Th0
>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の比較じゃ意味ねーと思うんだわ

239デフォルトの名無しさん (ワッチョイ b323-xkdj)2017/09/10(日) 04:20:42.87ID:3lFSiHDa0
>>237
大丈夫だと思う。

>>238
なんか色々間違ってねーか?

241デフォルトの名無しさん (ワッチョイ ba89-l0Z7)2017/09/10(日) 10:12:13.09ID:3KJHgwTr0
>>238
>>233のような初学者にそんな解読しにくいコードを提示しても意味ねーと思うんだわ

242デフォルトの名無しさん (アウアウカー Sa43-+qdT)2017/09/10(日) 11:46:48.72ID:uI7cAZFMa
暇すぎたので昨日からC言語の勉強始めましたプログラミング初心者です。
これって趣味にできる?

243デフォルトの名無しさん (スププ Sdba-uTHE)2017/09/10(日) 11:52:24.67ID:igLJE8zId
できる

244デフォルトの名無しさん (ワッチョイ b323-xkdj)2017/09/10(日) 13:39:43.37ID:3lFSiHDa0
そして趣味が高じて仕事にw

245デフォルトの名無しさん (アウアウカー Sa43-+qdT)2017/09/10(日) 13:42:12.95ID:uI7cAZFMa
今本屋なんだけどどの本で学ぶのがいい?
てかphytonとか他の言語の方が良かったりする?

246デフォルトの名無しさん (アウアウカー Sa43-+qdT)2017/09/10(日) 13:45:14.25ID:uI7cAZFMa
ちなみに本職は監査法人の公認会計士で監査してるんだけど仕事に役立つならそれに越したことはない

247デフォルトの名無しさん (ワッチョイ b339-xWDE)2017/09/10(日) 13:50:00.90ID:SyCSejr00
幅広くエロエロやると上達早いで
もしノイマン型コンピュータの基本知識が
無いのならどこかで学習する必要がある
メモリ、アキュムレーター、インデックスレジスタ…etc

248デフォルトの名無しさん (ワッチョイ baef-/PUN)2017/09/10(日) 13:53:38.31ID:rGvjr77j0
>>246
公認会計士の仕事にはなかなか結びつかないだろうけれども…ガンバレ
C/C++ はどちらかというと原始的
python AI/機械学習で今はやり

ゴルフでもなんでも最初は大変だから一定の覚悟が必要

249デフォルトの名無しさん (アウアウカー Sa43-+qdT)2017/09/10(日) 13:56:43.80ID:uI7cAZFMa
あんま知識は無い。
じゃあC言語とphytonを並行して学ぼうかしら。

250デフォルトの名無しさん (ワッチョイ b323-QlH+)2017/09/10(日) 14:35:30.74ID:3lFSiHDa0
会計ねえ。Excelとかの本のほうがいいかも知れんな。その方が仕事に結び付けられる事が多くて覚えは早いのではないかと思う。
マクロも一応プログラムだしな。Excelにくっついた形のものではあるが結構色々な事ができる。
で、それがある程度できるようになったらプログラムというものがだいたいどういうものかわかるようになってるだろうから次はVBのように似ているものをやる。
似ているのでこれの習得はかなり早いと思う。それから他の言語を色々やって幅を広げる。

251デフォルトの名無しさん (ワッチョイ b339-xWDE)2017/09/10(日) 14:52:01.58ID:SyCSejr00
Excelマクロ…
組むと疲れる、悪い癖が付く等良い所が無い言語

252デフォルトの名無しさん (アウアウカー Sa43-+qdT)2017/09/10(日) 15:07:37.65ID:uI7cAZFMa
まあ別に趣味だから仕事に役立たなくてもいいぞ

253デフォルトの名無しさん (アウアウカー Sa43-+qdT)2017/09/10(日) 15:12:20.15ID:uI7cAZFMa
苦しんで覚えるC言語っての買った

254デフォルトの名無しさん (ガックシ 06b6-uTHE)2017/09/10(日) 15:23:52.77ID:GVNmgcdo6
苦しめ

255デフォルトの名無しさん (ワッチョイ 23b6-6X04)2017/09/10(日) 15:29:50.37ID:7And7Hgf0
俺なら楽しんで覚えるけどね

256デフォルトの名無しさん (ワッチョイ 3b00-xkdj)2017/09/10(日) 16:30:29.97ID:TxU3QtzA0
苦Cは買わなくてもネットで読めるのに・・・

257デフォルトの名無しさん (ワッチョイ ba89-l0Z7)2017/09/10(日) 16:52:57.48ID:3KJHgwTr0
見易さではいまだ紙媒体の方が上だと思うし、惜しむほどの額でもないだろう

258デフォルトの名無しさん (ワッチョイ 1af0-x/0H)2017/09/10(日) 17:48:30.86ID:eDTlLPEV0
神聖言語COBOL

259デフォルトの名無しさん (アウアウカー Sa43-+qdT)2017/09/10(日) 17:58:39.08ID:Z8XrRGDBa
受信したメールの中身を理解して必要なメールと不必要なメールを分け、必要なメールの情報を分かりやすい文章に要約して表示するプログラムC言語で作れる?
ついでに簡単な返信なら自動でしてくれたらありがたいんだが。

260デフォルトの名無しさん (アウアウカー Sa43-+qdT)2017/09/10(日) 18:04:27.57ID:Z8XrRGDBa
返信が必要なメールと判断した場合は、返信メール本文の例を1万種類ぐらい自動で作成して、その中からより最適なものを3種類ぐらい提示してきてこっちはそれを選ぶだけで良いという機能も欲しいぞ

261デフォルトの名無しさん (フリッテル MM06-Aa8k)2017/09/10(日) 18:16:25.18ID:/r+wfg1UM
レス乞食

262デフォルトの名無しさん (ワッチョイ 3b00-xkdj)2017/09/10(日) 18:24:18.77ID:TxU3QtzA0
>>257
それがついこの間デザインがリニューアルされたんだよ
内容は同じだけどw
前よりは見やすくなったかな

263デフォルトの名無しさん (ワッチョイ 4ee3-xkdj)2017/09/10(日) 18:26:26.80ID:VNZjd7Zj0
りんなとやり取りするプログラム作って、りんなに判断してもらえ。返信内容も一緒に

264片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-k5VX)2017/09/10(日) 18:40:04.78ID:m2l+DHFcd
SMTP, POP3などのメールプロトコルで、メールサーバとソケット通信。
メールを分類するなら、自然言語処理とベイズ推定が必要。

265片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-k5VX)2017/09/10(日) 18:57:20.96ID:m2l+DHFcd
単純な分類なら、振り分けルールが使えるメーラーを使えば簡単。

266デフォルトの名無しさん (ワッチョイ 8311-QyhX)2017/09/10(日) 19:00:07.53ID:Fa46oRS50
ヘッダーに書いてあるエンコードが嘘いってて中身は別コードを
なんとか帳尻合わして可視化する部分が厄介 (nkf で大分楽にはなるらしいけど)

267デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)2017/09/10(日) 19:00:48.08ID:BxaTac1G0
>>259
「必要なメール」とそれ以外の境界を
おまえさんが明確化できるか否かにかかっている
何言語を使おうが同じことだ
Cは推論エンジンそのものを作れる言語で
通信アプリやドライバを作れる言語でもあるので
諦めねばならないアイディアはまずないはず

268デフォルトの名無しさん (アウアウカー Sa43-+qdT)2017/09/10(日) 19:38:42.01ID:Z8XrRGDBa
>>267
「必要なメール」とそれ以外の境界線はこれまで私自身が行ってきたメールへの対応を見てプログラム自ら学習して欲しい。
また分類や要約は高度な文脈、ニュアンス判断も伴うレベルで行わせたい。
それも様々な小説や文献を通してコンピュータ自ら学習して欲しい。

ちなみにこれ外注したらいくらぐらい?
10万円ぐらいするかな?

269デフォルトの名無しさん (ワッチョイ e732-6X04)2017/09/10(日) 19:44:06.14ID:jwBfW/fF0
10倍ぐらい出せば良いんじゃねーの

linuxでpop/smtpサーバー立てればよくね
スクリプトで特定のワードが見つかったら処理すればいいし
送信はmailコマンドがあるし

271片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-k5VX)2017/09/10(日) 19:47:08.66ID:m2l+DHFcd
>>268
自ら学習するにしても、教師なしでは低品質になる。効率よく学習するためには、コンピュータとの対話(ダイアログ)が必要になる。

272片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-k5VX)2017/09/10(日) 19:52:13.40ID:m2l+DHFcd
深層学習させるにしても、タグ付けの作業が必要になる。

273デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)2017/09/10(日) 20:10:47.20ID:BxaTac1G0
>>268
267だが、Cは推論エンジンを作れると言ったはず
おまえさん自身はそこから学習しなかったのか?

10万ねえ
支那の国家プロジェクトがどうなっているか知っているか?
支那からのSPAMに「天安門」と書いて返信すると我々にとって
ありがたい動作をしてくれるというアレだ
国家ではないが大企業のAIが共産党は無能とか言い出して
ひと騒ぎにもなったよなあ
おまえさんの10万円のソフトはおまえさんを無能とか
言い出さないか?

274デフォルトの名無しさん (アウアウカー Sa43-+qdT)2017/09/10(日) 20:26:02.78ID:Z8XrRGDBa
あとC言語でタイムマシン作れる?
といっても未来のインターネット閲覧できる程度でいいんだが。
作れる人いたら10万円までなら出すぜ。

275片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-k5VX)2017/09/10(日) 20:32:37.81ID:m2l+DHFcd
>>274
予測・予想が届く範囲でないと、予知はできない。できたとしても、競馬の予想や天気予報くらいだ。物理法則を超えることはできない。

276デフォルトの名無しさん (ワッチョイ 237f-x/0H)2017/09/10(日) 20:39:00.76ID:rIACWFTk0
アホなことを書いてしまったと気付いて、ネタだったことにしてごまかそうとしている?

277デフォルトの名無しさん (ワッチョイ 576c-+qdT)2017/09/10(日) 20:42:41.68ID:I7ZEh6pU0
物理法則なんて人間が考えたものに過ぎないからどうせ間違いだらけでしょ?

278片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-k5VX)2017/09/10(日) 20:50:00.29ID:m2l+DHFcd
深層学習で美少女の画像を大量に生成するという技術はある。未来の人が書きそうな絵を生成することはできる。

279デフォルトの名無しさん (ワッチョイ 3b97-oRRO)2017/09/10(日) 21:11:06.17ID:n6o1Bnrv0
物理は、むずかしい

280片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdba-k5VX)2017/09/10(日) 21:39:16.69ID:m2l+DHFcd
へ へ
の の
 も
 へ

281デフォルトの名無しさん (フリッテル MM06-NkDA)2017/09/11(月) 03:08:03.91ID:byfRWwJtM
div B = 0
rot E = -(∂B/∂t)
div D = ρ
rot H = ∂D/∂t + j

282デフォルトの名無しさん (ワッチョイ 7af7-PSjD)2017/09/12(火) 18:24:02.20ID:zVhRA/dD0
C言語覚えればCIAのパソコン
ハッキングできたりするの?

283デフォルトの名無しさん (フリッテル MM06-iDwu)2017/09/12(火) 19:21:49.41ID:8ybhBsXfM
なんでこんなアホがプログラム板にいるんだ?

284デフォルトの名無しさん (スップ Sd5a-xWDE)2017/09/12(火) 19:35:17.20ID:8gurLWtqd
だって、コーダーって大概馬鹿じゃん

285デフォルトの名無しさん (ワッチョイ 3b00-xkdj)2017/09/12(火) 19:59:12.99ID:C09YrKwT0
夏休みはもう終わったぞ

ずっと休みの奴が張り付いてるんじゃね?

287デフォルトの名無しさん (ワッチョイ 4ee3-xkdj)2017/09/12(火) 20:40:18.98ID:oYtiliiD0
printf("Hello, work!");

288デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)2017/09/12(火) 22:47:32.51ID:CGKPtYms0
>>284
馬鹿つっても、少なくともおまえみたいな自宅警備員より1ペタくらいマシだよ
コーダーでやってけてるやつナメてんだろ、おまえ ボケ!

289デフォルトの名無しさん (ワッチョイ ba89-l0Z7)2017/09/13(水) 00:05:26.05ID:iyeBQ3Kc0
コーダーだから馬鹿だとは思わないが、>>288みたいなレスをするのは馬鹿だなと思いました。

>>239
ありがとうございました

291デフォルトの名無しさん (ワッチョイ db0d-QyhX)2017/09/13(水) 10:57:10.59ID:E2QlRAh70
>>287
puts("Hell 'o work?");

292デフォルトの名無しさん (ワッチョイ 1af4-QyhX)2017/09/13(水) 11:29:24.17ID:tSE5B5Al0
printf("HALO world!");

293デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)2017/09/13(水) 12:41:46.69ID:cFJcbLHs0
>>289
いいこぶってろクズ
現業がいなきゃ自分じゃ何もできないやつが
現業をバカにするのを見ると虫酸が走るんだよ

294デフォルトの名無しさん (ワッチョイ b3a3-v0Ju)2017/09/13(水) 13:17:09.64ID:z6o40qKf0
>>293
安価に取り替えがきくので、低く見られるのはしょうがないと諦めろ

295デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)2017/09/13(水) 13:33:05.82ID:cFJcbLHs0
人件費のダンピングは国が国民を保護する義務の対象だが
真面目にやってくれなくて我々はその被害を受けているのだ
本来、能力に応じた収入があるべきという感覚そのものを
捨てちまったブタはいいねえ悩みがなくて

296デフォルトの名無しさん (ワッチョイ b3be-v0Ju)2017/09/13(水) 14:36:38.24ID:GgkwnlJN0
>>295
本来能力に応じた報酬を受け取るべきと考えて、それが受け取れない事に不満を持った連中はとっくに逃げ出してる
残ってるお前らは不満を持ちながら逃げ出す事さえ出来ないゴミ
下に見られてもしょうがない

確かに馬鹿な奴もいるけどレベルの高い奴もいる。コーダーに限った話じゃないだろ。
日本に馬鹿が多いんだよ。たぶん。

298デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)2017/09/13(水) 15:31:18.76ID:cFJcbLHs0
>>296
俺より年収1桁少ないやつにだけは言われたくねえぜ
なに、2桁? そりゃ失礼したw

299デフォルトの名無しさん (ワッチョイ 47c2-x/0H)2017/09/13(水) 15:43:10.20ID:lgdTeqni0
3桁ってことか

300デフォルトの名無しさん (スフッ Sdba-ALM6)2017/09/13(水) 16:11:37.47ID:PJsF5JPod
時給だろ。

301デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)2017/09/13(水) 16:18:46.88ID:cFJcbLHs0
妻子持ちがどのくら金いるか
童貞にはわからんようだな

302デフォルトの名無しさん (ワッチョイ 1a1b-ajxu)2017/09/13(水) 16:31:08.86ID:J/ZU3q6K0
板違いが分からないよりマシ

303デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)2017/09/13(水) 16:42:40.48ID:cFJcbLHs0
284にぬかせボケ

304デフォルトの名無しさん (ワッチョイ 3b00-xkdj)2017/09/13(水) 17:15:26.17ID:7kZqRPKj0
クソスレ過ぎ笑う

305デフォルトの名無しさん (ワッチョイ 5f6f-v0Ju)2017/09/13(水) 19:04:55.78ID:FmzSjQYZ0
>>298
奴隷的労働しか選択肢が無いのに妻子持ち
妻子が哀れすぎる

306デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)2017/09/13(水) 19:25:13.27ID:cFJcbLHs0
>>305
奴隷? 俺は領主の立場だ
おまえと一緒にするな無礼な

307デフォルトの名無しさん (スププ Sdba-uTHE)2017/09/13(水) 19:29:03.36ID:E/jL69iKd
複雑な立場だなww

308デフォルトの名無しさん (ワッチョイ 5f6f-v0Ju)2017/09/13(水) 19:36:56.55ID:FmzSjQYZ0
>>306
僕のお父さんは奴隷のリーダーですってか?

309デフォルトの名無しさん (ワッチョイ 17e3-x/0H)2017/09/13(水) 20:24:58.56ID:ruF3Cq7F0
実際のところそれでも結構なもんだ

310デフォルトの名無しさん (フリッテル MM06-bZ49)2017/09/13(水) 21:33:37.15ID:qtzqYGs4M
馬鹿な奴隷に指示、管理する者の気苦労が分からんのか

>>301
妻はまだ自分の食いぶちの一部でも稼がせばいいけど子の方はマジで金かかる
国は学資保険なんてものがあることをちょっと恥じるべき

312デフォルトの名無しさん (ワッチョイ 17e3-x/0H)2017/09/13(水) 21:50:53.77ID:ruF3Cq7F0
金持ちしか子供作らせないのは国策

やつらに恥などない
怒れ

313デフォルトの名無しさん (ワッチョイ 9a6f-vOdE)2017/09/13(水) 21:56:29.09ID:dVC5ajCT0
マ板でやれ

314デフォルトの名無しさん (ワッチョイ 0e1c-HB/9)2017/09/13(水) 22:36:54.70ID:cFJcbLHs0
>>312
俺は金持ちじゃねえ
単年度で8桁いっても次年以後で気を抜けばボコボコだ
一生遊んで暮らせる金があるやつにしか子供を作らせないなんて国策はねえ
童貞がイソップの葡萄こいてろ、こちとら稼いでみせると必死こいてんだ

315デフォルトの名無しさん (ワッチョイ 17e3-x/0H)2017/09/13(水) 23:29:23.30ID:ruF3Cq7F0
ポッキリと折れて周囲に生暖かい目で見られるところまで見えた

316デフォルトの名無しさん (ワッチョイ d3f7-sU5l)2017/09/14(木) 17:55:25.19ID:r9C1TnUx0
まんこ

317デフォルトの名無しさん (ワッチョイ 6123-pAdv)2017/09/14(木) 21:35:54.73ID:Ng+6QcSm0
>>299
3桁って、10進数だと999円が限界だぞ

318デフォルトの名無しさん (ワッチョイ 5100-+ReX)2017/09/14(木) 22:14:40.48ID:vjSz//mI0

319デフォルトの名無しさん (ワッチョイ 016f-Yr6p)2017/09/14(木) 23:45:34.67ID:lhu0Z/PJ0
ジンバブエドルで3桁か?

320デフォルトの名無しさん (ワッチョイ 39c2-o7xi)2017/09/15(金) 11:30:59.37ID:EItFo4370
>>317
頭いいなおまえ

昔"c言語をダイエットさせる本"みたいなタイトルの本読んだと思うんだが分かるやついる?
見つからなくて探してる

322デフォルトの名無しさん (ワッチョイ 06aa-73Ld)2017/09/21(木) 20:42:10.28ID:x8dEnzes0
for(;~scanf("%d",&a);)とかwhile(~scanf("%d", &a))とかで~がないだけで永遠に入力ループするんだけど
~ってなにを宣言してるんだ教えてくれ

323デフォルトの名無しさん (ワッチョイ 8300-Dc1X)2017/09/21(木) 20:48:43.32ID:BDILGhdI0
~はビット単位のNOT演算子じゃないの?

324デフォルトの名無しさん (ワッチョイ 9f2c-9/67)2017/09/21(木) 21:03:53.86ID:N1EOCCyb0
~なしでよくね?

325デフォルトの名無しさん (ワッチョイ 8b11-hoCt)2017/09/21(木) 21:23:35.16ID:kYTPFpbC0
本来なら 変数a に格納されるまでループしたい意図だろうけど・・・・・

scanf の戻り値は 代入操作できた変数の数で
0 だと入力のフォーマットに合致しなかったわけなんだが (ここまでは素直)

一旦 その状態になると、次に正しく入力しても拾ってくれない scanf 独特の挙動があって
正しく入力しようが 0 のままというkuso

件の場合
 最初の入力で数値ではない o を与えると (%d で受けれないので失敗)
次のループの入力で 1 を与えても やはり変数に格納ざれずに失敗したまま

これがあるので scanf は使うな、と良く言われてる所以

326デフォルトの名無しさん (ワッチョイ 06aa-73Ld)2017/09/21(木) 21:54:22.20ID:x8dEnzes0
一行読み込みで同じ処理を数値なくなるまでしたいんだけどどう読み込んだ方がいい?

327デフォルトの名無しさん (ワッチョイ 8b11-hoCt)2017/09/21(木) 22:19:34.61ID:kYTPFpbC0
fgets で行単位で読み込み
その行バッファに対して sscanf で変数に拾い上げするなり、11文字ずずつ字句解析するなり

char buf[512];
int a;
while (fgets(buf, 512, stdin)) {
 /* 1行読んだよ */
 
if (sscanf(buf, "%d", &a) != 1) {
  /* 数値じゃないのが来たのは無視する */
continue;
 }
/* a に値が格納されたよ */
:

}

328デフォルトの名無しさん (ワッチョイ 8b11-hoCt)2017/09/21(木) 22:26:26.69ID:kYTPFpbC0
日本語でおけ
× 11文字ずずつ字句解析するなり
○ 1文字づつ字句解析するなり

329デフォルトの名無しさん (ワッチョイ 2e32-toYf)2017/09/21(木) 23:44:09.55ID:Xpxn9Za50
>>327
strtolとかstrspn?系つかったほうがよくね?

330デフォルトの名無しさん (ワッチョイ 9f2c-9/67)2017/09/22(金) 00:16:23.70ID:zbqUBjYs0
>>325
まじかよ..
scanf呼び出して戻ってきたあとも何かしらのscanf内部変数が残ってるってこと?
だとしたらクソ過ぎるだろ

331デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)2017/09/22(金) 01:03:58.95ID:IvB4cJv30

332デフォルトの名無しさん (ワッチョイ eb6f-9dtB)2017/09/22(金) 01:11:24.08ID:exEqzPdX0
>>330
標準入力を勝手に読み捨てないってこと
数値以外が来たら"何もせずに"失敗で終わるから
ループするとまた失敗以前の場所からそれを繰り返すだけ

333デフォルトの名無しさん (ワッチョイ 06aa-73Ld)2017/09/22(金) 01:39:40.49ID:BRiVyzo00
forの継続条件がどう動いてるのかわからないな読み込めた時はループして読み込めなかったときはループ抜けるってのがどう判定されてるのか見えないな

334デフォルトの名無しさん (ワッチョイ eb6f-9dtB)2017/09/22(金) 02:12:21.25ID:exEqzPdX0
>>333
scanf("%d",&a);
で、数値が来れば取り込みに成功した個数、つまり1を返し、失敗なら0を返す
それを~でビットNOT、つまり各ビットを反転させるので
成功なら0x00000001を反転で0xFFFFFFFE、失敗なら0x00000000を反転で0xFFFFFFFF

ようするにどうやってもループを抜けないので、結論としては「そもそもループ条件として間違ってる」
>>324の言う通り~は不要

335デフォルトの名無しさん (ワッチョイ 1ee3-Dc1X)2017/09/22(金) 02:35:57.85ID:dUE2o1PV0
もっとシンプルに使える入力関数を
誰かが作ってくれれば良いのに

336デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)2017/09/22(金) 03:10:18.60ID:IvB4cJv30
>>335
簡単なので多分もう世界中に山ほどあると思うが、標準化されてないだけだろうな。

337デフォルトの名無しさん (ワッチョイ 06aa-73Ld)2017/09/22(金) 05:10:39.06ID:BRiVyzo00
while((a=Console.ReadLine())!=null)こうゆうので入力がなかったら終了するって簡単にできればC言語も楽なんだけどな

338デフォルトの名無しさん (ワッチョイ de1c-iatd)2017/09/22(金) 14:57:26.19ID:8MJCwgYc0
int *get_int(int *dst, jmp_buf err)
{
if (scanf("%d", dst) != 1)
{
if (err) longjmp(err, 1);
else return NULL;
}
return dst;
}
こんなしょーもないのでいいのに標準化委員会は斜め上なことばかり・・・

339デフォルトの名無しさん (ワッチョイ 06aa-73Ld)2017/09/22(金) 20:47:03.45ID:dtN6vQMf0
>>334
でもscanfの前に~あるだけで入力なくっても無限ループしないで抜けるのはNOTと戻り値がNOTでtureだから抜けるの?

340デフォルトの名無しさん (ワッチョイ 3b23-Iax1)2017/09/22(金) 22:06:16.56ID:IvB4cJv30
チルダ付けたのは失敗した時に-1が返されると思ったからかな?
てか、チルダ付けた場合はそれ以外で0にならんよな。
まあでもこれも整数値の内部表現の違う特殊な環境だったりしたらダメかも知れないが。

341デフォルトの名無しさん (ワッチョイ 8300-Dc1X)2017/09/22(金) 22:16:43.87ID:JX9ZYj2p0
組込み以外で~使ってんの初めて見た

342デフォルトの名無しさん (ワッチョイ 8300-pgy8)2017/09/22(金) 22:21:06.44ID:FtjqsiSd0
普通にビット処理だと使うよね
ビット処理なんかしないって?

343334 (ワッチョイ eb6f-9dtB)2017/09/22(金) 22:25:08.34ID:exEqzPdX0
ごめんウソ書いたわ
一つも変換されないで入力エラーになったらscanf()は0ではなくEOFを返すらしい

>>339
よって多くの環境ではEOF==-1(0xFFFFFFFF)だからその反転で0になってループ抜けるということだね

344片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ d311-Ai2I)2017/09/22(金) 23:25:37.12ID:TihxA+yD0
>>338 ゼロオーバーヘッドは正義。

345デフォルトの名無しさん (ワッチョイ 8b11-hoCt)2017/09/23(土) 07:38:02.97ID:9QRg4G5c0
>>343
入力ストリームが閉じてて変換できなかったら EOF
入力ストリームは開いてるけど変換できなかったら 0
でないのけ?

346デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)2017/09/23(土) 11:43:39.39ID:8bsZ0VcP0
>>345
どうやらそのようだな。Linuxのmanで見てみたらそんな風に書いてあった。
とすると入力が閉じないで変換失敗した場合は0が返されて無限ループになるな。

347デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/23(土) 14:50:28.05ID:IblrvTVf0
Win32環境なのですが
_beginthread関数で、thread1, thread2を回し
グローバル変数g_nをthread1の中で変更しても
thread2から正しい値が参照できません。参照できないというよりthread2が機能しなくなるように見えます。変数表示がカットされる。
VisualC++でプログラムしてるのですがデバッグモードだと普通に動いて
リリースモードだと動かなくなります。グローバル変数にvolatileをつけてみてもダメでした。
何が原因でしょうか?

348デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/23(土) 15:16:24.27ID:PasvkTo90
具体的なコードもなく原因を聞かれても、どうしようもないと思うぞ

VCの拡張機能で相応の機能が追加されてたような気もするが
本来volatileにスレッド間での排他やメモリバリアの機能はないからな

349片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)2017/09/23(土) 15:34:39.04ID:oO/4QkxId
>>347
デバッガ側で例外をキャッチして、呼び出し履歴を調べると何かわかるかもしれない。おそらくゼロ除算かアクセス違反かスタックオーバーフロー。

350デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/23(土) 16:05:08.45ID:IblrvTVf0
>>348-349
thread2の中身を以下みたいにtry〜catchで囲むと何故か直りました…
でもcatchの中は実行されてないです… 少しcatchの中身を書き足すとまたダメ…
どういうことだろう…
void thread2(void*)
{
try{

} catch (...) {

}
}

351片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)2017/09/23(土) 16:06:48.32ID:oO/4QkxId
スタックを破壊してる可能性

352片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)2017/09/23(土) 16:07:30.45ID:oO/4QkxId
呼び出し規約が間違い

353デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/23(土) 16:14:51.44ID:IblrvTVf0
>>352
>呼び出し規約が間違い
これはどういう事ですか?
宜しければご教示をm(__)m

354片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)2017/09/23(土) 16:23:43.62ID:oO/4QkxId
https://msdn.microsoft.com/ja-jp/library/kdzttdcb.aspx
_beginthreadexの場合は、__stdcallを関数名の前につける。_beginthreadの場合は、__cdeclを。
__cdeclはデフォルトでは省略可能だから、間違ってはいない。
ということは、ポインターかなんかでスタック破壊している可能性が高い。

355片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)2017/09/23(土) 16:28:26.72ID:oO/4QkxId
配列の添字がオーバーしてないか?

356片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdaa-UlYp)2017/09/23(土) 16:50:48.86ID:oO/4QkxId
ideone.com に貼れ

357デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/23(土) 19:47:03.99ID:IblrvTVf0
>>356
もう少し深く調べてみます!ありがとうございます!

358デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/23(土) 21:54:35.77ID:IblrvTVf0
>>356
たぶん原因が分かりました。
現在は標準関数をやめてWINAPIのCreateThreadを使ってますが標準関数と原因は同じです。
CreateThreadでThread1,Thread2を作成して監視してるとあるタイミングでThread2が消失してたのですが
どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。
ようするに他のグローバル変数の書き換えが原因でした。
ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
でもこの回避作で良いんでしょうか?CriticalSectionを使ったりして処理してもうまく他スレッドでグローバル変数が
参照出来なかったのでvolatileをつけてみたら完璧に動作するようにはなったんですが……

359デフォルトの名無しさん (ワッチョイ 8b11-hoCt)2017/09/23(土) 22:09:28.20ID:9QRg4G5c0
排他制御の問題ではなく
最適化の作業で、変数を不変値と判断し、変数参照を追い出した翻訳をしたパターン

int a; // グローバル変数
void foo() { a = 1; while (a) { /* */ } }

a は文意から不変の定数として扱えるので
while (1) { /* */ }
に翻訳しちゃえるわけさ

360デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/23(土) 22:20:31.54ID:IblrvTVf0
>>359
その変数達の最適化を無効にしたということですね。
ということはこの回避方法で大丈夫だということですか?

361デフォルトの名無しさん (ワッチョイ 8b11-hoCt)2017/09/23(土) 22:28:00.05ID:9QRg4G5c0
volatile つけるのは1つの手ではあるが 100% 回避してくれるかは、コンパイラ次第
スレッドで共有するフラグ関係はOS側が用意してる機構を使うほうが良いんだけどねー

362デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/23(土) 22:50:44.07ID:IblrvTVf0
>>361
一旦コンパイルして普通に動作してるなら大丈夫ですか?
他の環境でいきなり動かなくなるとかもありますか?

363デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/23(土) 22:58:35.90ID:PasvkTo90
何の変数を使ってるか知らんが、排他取ってねーんだから書き換え途中の変数を読み取ってバグることもあるだろ
最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしいから、古いVCでビルドしてもアウトだな

まあ滅多に起らないからローカルでそれっぽく動けばいいのなら、十分じゃねーの

364デフォルトの名無しさん (ワッチョイ 2b23-PvnN)2017/09/23(土) 23:10:54.21ID:Z1NsXN0c0
>>358
いや、359ではなくて、363の言うとおり、
> ロック処理をしたりしたのですが上手く行かずグローバル変数すべてにvolatileをつけると上手く動いてるようです。
これが問題だと思うぞ。つか、ロックしろよ。
volatileの意味分かってるか?
それ多分他スレッドから書き換えられたときに自スレッドのその値が更新されておらず、バグるのだと思うぞ。
ただしこの場合は、
> 最近のVCはvolatileだけでマルチプロセッサ対応のメモリバリアになるらしい (>>363) ←コマ?
が正しいのならvolatileでも確かに治りそうな気はするが。で、これってマジなん?

つかね、マルチスレッドでグローバル変数を使いまくること自体がだね、、、

365デフォルトの名無しさん (ワッチョイ 2b23-PvnN)2017/09/23(土) 23:20:05.48ID:Z1NsXN0c0
>>363
調べてみたんだが、これか?
> Microsoft 固有の仕様 → /volatile:ms の項目
> ・volatile オブジェクトへの書き込み (volatile 書き込み) は、解放セマンティクスを持っています。
>  つまり、命令シーケンスで volatile オブジェクトへの書き込み前に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
>  コンパイルされたバイナリでの volatile 書き込みの前に発生します。
> ・volatile オブジェクトの読み取り (volatile 読み取り) は、取得セマンティクスを持っています。
>  つまり、命令シーケンスで volatile メモリの読み取り後に発生するグローバル オブジェクトまたは静的オブジェクトへの参照は、
>  コンパイルされたバイナリでの volatile 読み取りの後に発生します。
https://msdn.microsoft.com/ja-jp/library/12a04hfd.aspx
これならロックではなくフェンスだね。volatileでは直らないはず。

366デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/23(土) 23:22:23.90ID:PasvkTo90
>>365
自分も見かけただけでちゃんと調べたわけじゃないけど、それだね
フェンス+ロックが必要ってのは当然として、最近のVCならフェンスのほうが保証してくれてるってだけ

367デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/23(土) 23:26:59.26ID:IblrvTVf0
>>361-365
CriticalSectionつかってグローバル変数の書き込み時にはロックをするのも試してみたんですが
やっぱりthread2が途中で死んで(内部のループで終了判定になってしまって)、ダメだったんですよね。
それがグローバルにvolatileをつけると普通に動作するようになってるんです……

368デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/23(土) 23:29:48.18ID:IblrvTVf0
こういう事ですか?
CriticalSectionによるロックもやる必要がある。理由はロックしてない時固有の問題もあるから。
今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
ロック処理もvolatileも両方やる必要がある。ということですか?

369デフォルトの名無しさん (ワッチョイ 8b11-hoCt)2017/09/23(土) 23:33:50.34ID:9QRg4G5c0
書き込み時だけロックして 読み込み側のほうはロックせずに読み込んでる
片手落ちのように受けとれる文章だけど・・・ 排他制御をちゃんとやってたうえでの話?

370デフォルトの名無しさん (ワッチョイ 3b23-Iax1)2017/09/23(土) 23:49:15.83ID:8bsZ0VcP0
volatileにしてロックして読み書きするのが普通では?

371デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/23(土) 23:55:28.48ID:IblrvTVf0
>>369-370
volatileにして読み書きロックして厳密にやります!

372デフォルトの名無しさん (ワッチョイ 2b23-PvnN)2017/09/23(土) 23:57:26.40ID:Z1NsXN0c0
>>368
× > 今回の不具合はコンパイラの最適化が原因だったのでvolatileで回避できただけ。
○ コンパイラの不具合ではなく、君のコードの問題で、
 volatileで動いているように見えるのはバグに当たる確率が低くなっただけで、直ってはいない。

ただ、366の通り、全部ロック+フェンスすれば直りそうな気はする。
つか、そもそもフェンスが大量に要るような使い方でマルチスレッドするのが問題なんだが。

373デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/24(日) 00:00:33.14ID:jg2xx4vD0
posixだとロックAPIにメモリ同期の効果があるから、普通はvolatileいらんけどな
CriticalSectionも共有リソースへのアクセス制御用の関数なんだから、同じはずだと思うけども

374デフォルトの名無しさん (スププ Sdaa-iJNy)2017/09/24(日) 00:22:34.33ID:AOwUcJWDd
>>372
コードの不具合って意味だろ?
やっぱり最適化が問題だったんじゃないか?

375デフォルトの名無しさん (ワッチョイ 2b23-PvnN)2017/09/24(日) 01:04:50.76ID:R8lp94JX0
>>374
> どうやらThread1で変更があった他のグローバル変数の値がThread2で上手く読めずに終了判定されて消えてたようです。(>>358)
この場合はvolatileをつけないと話にならない。(ただし本来の使い方ではない)
コンパイラのバグではなく、多分デバッグビルド時には毎回読み出しだっただけ。(最適化なし、なおフェンスもなし)

データ同期する気がなければフェンスは本来は要らない。
ロックはしないと書きかけの値を掴んだりしてバグる。

ここら辺分かってなくてグローバルで同期ってのはマルチスレッド初心者なのだろうけど、
バグったらsync入れまくってデバッグはセオリーではあるし、まあがんばれ、と。
ただ、おそらく同期の仕方を根本的に間違ってるから、知ってる人に見てもらったほうがいいとは思うが、
コード内のグローバルは常に「最新」を期待しているのであれば、ロック+volatile+フェンスで動くはずでもある。

376デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/24(日) 05:58:29.08ID:jg2xx4vD0
ロック中の読み出しが最適化で消えるなら、それはロックとコンパイラが腐ってる

>>372
> ○ コンパイラの不具合ではなく
誰もコンパイラの不具合なんて言ってない
偉そうに頓珍漢な講釈たれる前に日本語勉強し直してこい

>>373
メモリー同期と最適化は別の話
Posix は知らんけど CreateSection にはロック対象を知るすべはない

379デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/24(日) 10:21:22.00ID:jg2xx4vD0
はあ、そうですか
共有リソースの排他アクセスのためのAPIなのに、ロック対象がわからないからロック無視して最適化しますと
それが真実ならWinAPIとVCが腐ってるんじゃないですか

380デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 10:22:36.14ID:gFeQddMX0
バカには使えないだけ

381デフォルトの名無しさん (ワッチョイ aaef-hoCt)2017/09/24(日) 11:32:55.30ID:070pAcfa0
test

382デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)2017/09/24(日) 13:57:54.86ID:c233uqnI0
腐っているのでしょう

383デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/24(日) 14:40:58.49ID:jg2xx4vD0
メモリバリアを跨いでオブジェクトへのアクセス命令を最適化するとか
そんな頓珍漢なことを言う腐った奴がいるとは思わなかったわ
volatileを何だと思ってんだか

384デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 15:53:44.93ID:gFeQddMX0
CreateSection の使い方ぐらい調べてから書けばいいのに...
まあ他人事だしどうでもいいけど w

385デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/24(日) 16:31:41.65ID:jg2xx4vD0
CriticalSectionの話のつもりだったんだけど、CreateSectionに変わったの?
それならごめんだわ、>>378で唐突に出てきて誤字だとばかり
さすがにそんなアホな話題転換があるとは思わなかった

386デフォルトの名無しさん (ワッチョイ 8a11-gXon)2017/09/24(日) 16:59:33.91ID:gFeQddMX0
>>385
ああすまん、予測変換で間違えてたわ
で、CriticalSection について調べたのかな?

387デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/24(日) 17:30:54.77ID:jg2xx4vD0
>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とかのほうが手軽そうだけどね

388デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/25(月) 02:44:46.68ID:glvYaQMb0
https://teratail.com/questions/39986
これの投稿 2016/07/04 10:48の例にあるように
最適化で変数の効果が消えてしまう場合でも
volatileじゃなく変数書き込みや参照の部分に
CriticalSectionでロックしておけば最適化で消える事はないということ?

389デフォルトの名無しさん (オッペケ Sra3-Brv+)2017/09/25(月) 03:09:32.37ID:eX6e3GbIr
Cのコンパイラはクリティカルセクションなんて知らない。単なる構造体かなんかのtypedefとして実直にコンパイルするだけ。
スレッド関連の関数についても単に関数の一種として扱うだけ。

従ってスレッドやクリティカルセクションを扱っているかどうかが最適化の結果に影響することはない。
一方volatile指定はコンパイラが認識するキーワードで最適化に影響する。

390デフォルトの名無しさん (ワッチョイ 0f23-7Jrl)2017/09/25(月) 04:54:33.75ID:glvYaQMb0
ということは今回の事例だと排他制御しても不具合は解消できなかったという事かな?
volatile付けて最適化を無効にすることが正しい解決策だったということになる?

>>387
だからそれはメモリーバリアの話で最適化の話とは別だよ
繰り返しになるけど CriticalSection は排他制御するリソースを知ることはできないしコンパイラも CriticalSection のことを知らない

>>390
どう言うことをやりたいのかよく見てないけど排他制御と最適化の話は別だから必要なら両方やらないとダメ

393デフォルトの名無しさん (ワッチョイ 07db-MkHK)2017/09/25(月) 08:38:06.32ID:5M6SeBxY0
eieio()

394デフォルトの名無しさん (ワッチョイ 8a4c-hoCt)2017/09/25(月) 09:41:28.46ID:Eov43usf0
>>389
それ、スレッドまわりが規格化されてなかった C99 までの話だよね?

395デフォルトの名無しさん (ラクッペ MMb3-IkPz)2017/09/25(月) 09:53:00.17ID:eS71dZMPM
最近のは規格化されてんの?

396デフォルトの名無しさん (ワッチョイ ded7-E1uO)2017/09/25(月) 09:58:09.00ID:Tp6H3jwU0
規格化されてるのはPOSIXでじゃね?

397394 (ワッチョイ 8a4c-hoCt)2017/09/25(月) 09:59:34.82ID:Eov43usf0
こんな感じ。

http://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. ..."

398デフォルトの名無しさん (オッペケ Sra3-Brv+)2017/09/25(月) 12:40:04.95ID:uoxmxxDAr
>>394
おおごめん、規格自体には詳しくない

しかし…
pthread関連の標準関数や定義を仮にコンパイラが特別扱いしたとすると、標準関数をラップしたり自作ライブラリで代替した場合に最適化の結果が変わるのかな?
そんな風にコンパイラ作るものなんだろうか。

399デフォルトの名無しさん (ワッチョイ aaef-PvnN)2017/09/25(月) 20:34:55.44ID:6/+o0Gkh0
posix-thread 関係については C++11 で追加されたが,
あくまでも言語処理系の中で定義された識別子(関数とかクラスとか)を使わないと,コンパイラには分かりえないよ.
CreateThread() とか CriticalSection とかの W32API の用語を,無指定でコンパイラが理解できるわけがない.

400デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/25(月) 20:47:31.93ID:LPAVGpvK0
>>390
コンパイラは基本的に問答無用で最適化するけど、それだとマルチスレッドではプログラマの意図しない最適化が起こってしまう
だから、メモリバリアを挟んだアクセス命令を入れ替えないことにしている
言い換えると、メモリバリア前に読み込んだ値をメモリバリア後も使うような最適化はしない
よって、バリア+ロックで十分

共有リソースは全部volatile付けるなんてしてたら、kernelのソースとかvolatileまみれになるでしょ

401デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/25(月) 21:45:53.20ID:LPAVGpvK0
当然、ローカル変数とか他から変更されないことが明らかなオブジェクトであれば最適化が起こる可能性は否定しない
グローバル変数の場合は、最適化されない

やってみればわかるけど、CriticalSecltionの有無でアセンブル結果が違う

402デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/25(月) 21:46:58.74ID:LPAVGpvK0
アホなこと書いた、コンパイル結果だな。。。

403デフォルトの名無しさん (ワッチョイ 4f32-Dc1X)2017/09/25(月) 23:03:28.51ID:LPAVGpvK0
CriticalSectionに限らず未知の関数が呼ばれたのであれば、その中でグローバル変数やらが変更される可能性を考慮しなければならない
他にも、ある関数の引数にローカル変数のアドレスを渡すと、以降の別関数内でそのアドレス経由でローカル変数を変更される可能性がある
よって、場合によってはローカル変数であっても関数呼び出しを跨いで最適化できなくなることがある

わからないからこそ、最適化してはならないんだよ

404デフォルトの名無しさん (ワッチョイ 2b23-PvnN)2017/09/25(月) 23:26:04.50ID:3XblncDf0
>>390
ならない。君のソースコードだけの問題だ。同期機構の使い方が悪いだけ。

スレッドなんてここ20年間バリバリに使われてる。
VC等の小慣れているコンパイラなら、最適化ありで全く問題なく動く。
(マルチスレッド向けのデバッグは完了している)
Debugでは動くがReleaseでは動かないケースに遭遇した初心者は、君のように
「最適化の問題であり今回はDebugを使うこと」を正当化したがるが、これは間違いだ。
ただしDebugビルドでもバイナリは出来るから、問題ないのならそれを使う手もある。

405デフォルトの名無しさん (ワッチョイ 3b23-Dc1X)2017/09/26(火) 00:33:15.50ID:8E9hjYW60
ちゃんと排他処理が出来ていないことに気付かず、デバッグオプション付きとか
遅いマシンとかで正常動作してしまい、何年後かに速いマシンにリプレイスしたら
丁度良くバグが顕在化するようなタイミングになってしまった、

なんてことが以前本当に起きた。

サーバ用とかでソフトが長期間使われる場合は要注意だ。

406デフォルトの名無しさん (ワッチョイ 8300-pgy8)2017/09/26(火) 00:35:55.65ID:piJXswiP0
歯痛制御のバグ
珍しくない

発見しづらく、再現性も乏しく、解析に手間がかかりがち

レベルの低い開発者が混ざると大変

407デフォルトの名無しさん (ワッチョイ 1eaa-ZPBl)2017/09/26(火) 01:21:21.88ID:mvSUAuA/0
マルチスレッドは、たまたま動いているだけで、
ちょっとしたタイミングで、バグる

初心者は、たいてい、コンパイラのバグのせいにする。
それか、リリースビルドの最適化がおかしいと言う

プロは、Elixir などの関数型を使う

408デフォルトの名無しさん (ワッチョイ 3b23-Iax1)2017/09/26(火) 02:12:13.37ID:8E9hjYW60
いや、ちゃんとロックすりゃなんとかなるってw
もちろん最初から考慮されてる言語は何も考える必要ないからうまく行って当然。

409デフォルトの名無しさん (ワッチョイ 8a1e-Yxyu)2017/09/26(火) 07:38:51.81ID:hxYjIs4i0
>>406
痛そうだな。

410デフォルトの名無しさん (ワッチョイ 8e6c-Dc1X)2017/09/26(火) 10:15:02.85ID:IHENDkWx0
>>406
つらそうなバグだ

>>406
ウンコだなw

412デフォルトの名無しさん (ワッチョイ 1396-Otw/)2017/09/27(水) 16:40:21.40ID:zCHNwx740
初心者です。エラーでまくりでコンパイルすら出来ません。アドバイスお願いします。

■やりたいこと。
マウス入力に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;
}

-----
また、この方法が最適なのかも不明です。ほかの方法等もあったら教えてください

413デフォルトの名無しさん (ワッチョイ 8300-pgy8)2017/09/27(水) 18:30:09.48ID:Ep3hxvTm0
C言語の問題?

414デフォルトの名無しさん (ワッチョイ 0af0-PvnN)2017/09/27(水) 21:09:13.07ID:kxaL/Pai0
初心者とは

415412 (ワッチョイ 1396-Otw/)2017/09/27(水) 21:51:08.08ID:zCHNwx740
>>414
そのままの意味でC言語初心者ですけど?
rawinputを消し去りたいがためにプログラム未経験ながらC言語入門書を読み、
Visual studio2013でハローワールドのコンパイルに成功した所です。

他スレで聞いたら、
DLLインジェクションでAPI関数を置き換えといわれたんですが、
まぁ、それと同じような事をしようとして書いたソースが>>412

目的達成するためにどこが悪いのか教えてくださいよ

416デフォルトの名無しさん (ワッチョイ 1edb-PvnN)2017/09/27(水) 22:01:39.03ID:htvdQyi40
日頃の行い

417デフォルトの名無しさん (ワッチョイ 0f23-Vg32)2017/09/27(水) 22:08:30.48ID:6Zcxzpoi0
エラーのせろハゲ!

418デフォルトの名無しさん (ワッチョイ 2bb6-lfob)2017/09/27(水) 22:35:55.70ID:MZoqRzWL0
どうやってWndProcをフックするつもりなのか知らんが、初心者のやることじゃない

419デフォルトの名無しさん (ワッチョイ 8300-pgy8)2017/09/27(水) 22:46:41.34ID:Ep3hxvTm0
スレチ

420デフォルトの名無しさん (ワッチョイ e523-d/1N)2017/09/28(木) 00:13:55.27ID:LEgoP/Tm0
>>412
本当にそれがソースの全てか?

>>412
とりあえず文法エラーのないソースを出せよ

422デフォルトの名無しさん (ワッチョイ 23f0-IQJU)2017/09/28(木) 08:22:53.76ID:veeq8lRB0
>>415
windowsプログラムでFuckファックは初心者がやるものではない
何故かと言うとFuckファックは非常に拙いからで、これはご存じの通りにFuckファックつまりはセクロスとかセックスを意味する
FuckRawInputなどと書かれると非常に面食らうので、動作には全く関係ないがFuckファックの箇所をHookフックとする
Fookという間違いならまだしもFuckが出てくるのは途轍もなく拙い

windowsプログラムは入門書を一通り終えた後にようやく手を出せる程度に面倒くさい

最近勉強始めたんだがループ動作めんどくさ

424デフォルトの名無しさん (ワッチョイ eb32-Txnz)2017/09/28(木) 16:28:25.85ID:p7vLxmpX0
C++の標準でWindowsのCOMみたいなのはできるの?
モジュールがあれば動的リンクできて、向こう側の関数の形式とエントリポイントがわかるような。

>>424
IUnknown::QueryInterfaceを実装するとかの話?
https://msdn.microsoft.com/ja-jp/library/cc351695.aspx

426412 (ワッチョイ 9596-5hSF)2017/09/28(木) 19:27:04.11ID:te0QQW2V0
>>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);

>>426
で、お前が聞きたいのは「C言語」に関するどんな質問なんだ?

428デフォルトの名無しさん (ワッチョイ 7500-vp8x)2017/09/28(木) 22:00:23.65ID:kmv+HSxh0
>>421が悪い
責任もって相手しろ

429デフォルトの名無しさん (ワッチョイ 7500-vp8x)2017/09/28(木) 22:01:12.32ID:kmv+HSxh0
>>419が正しい対応

会話にすらなってないな。
こういうのホントにいるんだよなあ。、。

431デフォルトの名無しさん (ワッチョイ 4b6f-TKIo)2017/09/28(木) 23:59:03.21ID:mJZoGNOM0

432デフォルトの名無しさん (ワッチョイ c523-IQJU)2017/09/29(金) 01:12:28.71ID:tjqo0EG60
>>415
> どこが悪いのか教えてくださいよ
頭と態度。
APIスレも見たけど、君には無理。

433デフォルトの名無しさん (ワッチョイ e523-d/1N)2017/09/29(金) 01:17:32.92ID:EHQhOpQV0
>>426
本当にそれがソースの全てなのか?

434デフォルトの名無しさん (ワッチョイ 9baa-iHa+)2017/09/30(土) 05:35:50.31ID:/O3sxKWS0
これ無理だろうWindowsプログラムの言語を理解してないと直せないっしょ

435デフォルトの名無しさん (ワッチョイ ab23-Txnz)2017/10/02(月) 09:21:38.64ID:SGi8KvwU0
勘所がすぐつかめる人ならそうでもない
知らんOS知らん言語知らん環境でもデバッグできちゃうんだぜ
あいつら宇宙人だろ

436デフォルトの名無しさん (ワッチョイ 2312-IQJU)2017/10/02(月) 13:06:27.14ID:6IbuGwAs0
>16 :デフォルトの名無しさん:2006/03/10(金) 22:15:19
>>>10
>> こんな変数名があちこちに散らばっているのがPerl
>
>大学の研究室のボスは、特殊変数の表をふ〜んと2分ほど眺めて完全に暗記した。
>
>そういうレベルの人たちのための言語なんだなと思って、トイレで血の涙を流した。

437デフォルトの名無しさん (ワッチョイ 2345-U38j)2017/10/03(火) 03:00:19.61ID:TSZxzm0B0
お助けください。
自作コードにおいて、以下の部分でmemsetの際にsegmentation faultになってしまいます。

int n = 2;
char charList[n+1][32]; // 32文字の文字列をn+1確保・・・@
func(charList); // charListに書き込む関数
for (int i = 0; i < n; ++i) memset(charList[i], ' ', 32); // 空白で埋めたい

funcを省いたりmemsetの前に適当にcharListをプリントしたりすると何故か問題なく動きます。
この部分だけ切り出したテストコードでは全く再現しませんでした。
この手のエラーでよくあるのは未初期化領域へのアクセスだと思いますが、
@で領域の確保はできているからこれは原因ではないですよね?
どこがエラーの原因でしょうか・・・?

438デフォルトの名無しさん (ワッチョイ 7576-vp8x)2017/10/03(火) 06:29:26.41ID:TvjHrbVD0
funcがnを壊してる
とか

439デフォルトの名無しさん (ワッチョイ 4b32-HyX/)2017/10/03(火) 06:57:44.74ID:ZkSEHHAS0
うん、funcが怪しい

440デフォルトの名無しさん (ワッチョイ e59f-Txnz)2017/10/03(火) 08:24:29.85ID:759fwjeu0
うん

441デフォルトの名無しさん (ワッチョイ b5ea-asy+)2017/10/03(火) 11:40:15.04ID:QFI8P6tG0
配列サイズ 32要素で 32個 空白で生めてるが
文字列 という用語を使ってるあたり func は一般の文字列操作してそうだけど
終端記号 '\0' の分の考慮が落ちてるんでないの?

442デフォルトの名無しさん (ワッチョイ b5ea-asy+)2017/10/03(火) 11:59:57.12ID:QFI8P6tG0
「文字列」で32文字を取り扱いたいのなら 33要素の器が必要ってことで
文字の配列なら問題ないけどねー

443デフォルトの名無しさん (スップ Sd43-/LS6)2017/10/03(火) 12:44:46.02ID:mP+8qDfMd
そもそも再現しないコードを提示されてもなあ

444デフォルトの名無しさん (ワッチョイ fda5-8YQg)2017/10/03(火) 14:52:11.00ID:YUFfLdQY0
>>437
処理系は何じゃらほい

445デフォルトの名無しさん (ワッチョイ 659e-cInq)2017/10/03(火) 15:25:21.73ID:rugh+s9w0
>>437
>char charList[10000][10000]; // 32文字の文字列をn+1確保・・・@
くらい確保して実行すれば動くだろ

446デフォルトの名無しさん (ワッチョイ 458a-gyUt)2017/10/03(火) 15:27:20.07ID:xmgx6pPY0
int n = 2;
char charList[n+1][32];

C言語的に、これってOKだっけ?

447デフォルトの名無しさん (ガックシ 06cb-huvM)2017/10/03(火) 15:39:40.20ID:2Eoq+Ro56
>>446
だめ

448デフォルトの名無しさん (ワッチョイ 9be7-a1BF)2017/10/03(火) 16:18:15.22ID:9r7sfmBO0
char charList[n+1,32]こうしないとダメだよね?なにかっこ二つ使ってんだよ読み込めねえよって昔2次元配列で怒られたな

449デフォルトの名無しさん (ワッチョイ ab23-Txnz)2017/10/03(火) 16:39:41.13ID:uTLw0mNj0
>>446
最近は大丈夫になった

450デフォルトの名無しさん (ワッチョイ 4b32-HyX/)2017/10/03(火) 16:45:08.36ID:ZkSEHHAS0
うん、今の1回生が生まれた頃から

451デフォルトの名無しさん (ワッチョイ 9be7-a1BF)2017/10/03(火) 18:25:07.16ID:9r7sfmBO0
>>449
なったのか少しは便利になったのか

452デフォルトの名無しさん (ワッチョイ 8d7f-Txnz)2017/10/03(火) 18:27:21.85ID:eHwxQvGT0
最近どころか、20年近く前からだし
>>448みたいな文法は存在しないんだけど、どこの世界のC言語なんだろ

453デフォルトの名無しさん (ガックシ 06cb-B85Q)2017/10/03(火) 18:32:06.89ID:HgW0fxVo6
>>448みたいな文法欲しかった

454デフォルトの名無しさん (ワッチョイ 4b8a-1j52)2017/10/03(火) 18:48:25.91ID:9KgPFlPY0
>>449
最近、ダメかもしれなくなったんだが

455デフォルトの名無しさん (ワッチョイ 9be7-a1BF)2017/10/03(火) 18:53:27.85ID:9r7sfmBO0
>>448
これダメだC#だった、エラーになるわ

456デフォルトの名無しさん (ワッチョイ fd81-IQJU)2017/10/03(火) 19:11:20.28ID:XytTuyvU0
LLVMの作者に物凄い勢いで嫌われたから…

457デフォルトの名無しさん (ササクッテロリ Spe1-3BEe)2017/10/03(火) 22:39:06.25ID:djTGgeKPp
iOS11にしたらまともに入力できない

このクソOS

458デフォルトの名無しさん (ササクッテロリ Spe1-3BEe)2017/10/03(火) 22:39:07.29ID:djTGgeKPp
iOS11にしたらまともに入力できない

このクソOS

459デフォルトの名無しさん (ササクッテロリ Spe1-3BEe)2017/10/03(火) 22:46:23.61ID:djTGgeKPp
このクソOS死ね

460デフォルトの名無しさん (ササクッテロリ Spe1-3BEe)2017/10/03(火) 22:46:56.99ID:djTGgeKPp
まともに入力できないって

461デフォルトの名無しさん (ワッチョイ e59f-d/1N)2017/10/04(水) 00:38:32.06ID:JPTWWYYO0

462437 (ワッチョイ 2345-IQJU)2017/10/04(水) 01:30:41.39ID:+TP/cS/R0
返事が遅れてすみません。レスありがとうございます。
再現性の乏しい質問で申し訳ないです。

>>438
nは変わらないです。

>>441
文字列操作ではあるんですが終端記号は書き込みません(全部文字だけ)

>>444
OSはCentOS 6.9、言語はc++、コンパイラはgcc7.1.0です。

さっぱり原因が想像できないのですが、考えられる可能性としては、funcの中でメモリがずたずたに壊れたものの
偶然エラーにならずに戻ってきてmemsetでやっと死んだ、というパターンでしょうか?

463デフォルトの名無しさん (ワッチョイ 4b32-HyX/)2017/10/04(水) 06:19:36.24ID:Sd/env2d0
>>452
存在するだろ
char charList[32]と等価になるぞ

464デフォルトの名無しさん (ワッチョイ 8d7f-Txnz)2017/10/04(水) 06:24:24.64ID:dCjKMF950
二次元配列の宣言についての話で合って
コンパイルが通るかどうかだけの話なんてしてねーぞ

465デフォルトの名無しさん (ブーイモ MMd9-5mw5)2017/10/04(水) 07:22:39.57ID:zhlDARQmM
>>462
func何やってんの?

*charList=0とかやってんじゃない?

ってか二次元配列と二重配列間違ってねーか?
それとfunc呼んでからmemsetしたらfunc呼ぶ意味あるの?
memsetもループさせるんじゃなく一回で全部fillした方がよくない?
とかとか。

468デフォルトの名無しさん (スップ Sd03-vp8x)2017/10/04(水) 11:24:36.83ID:hBVSLcAId
>>467
1行目 イミフ
2行目 意味があるから呼んでるんだろ
3行目 明確な利点があるならそれを書け

>>468
ポインタの配列と二次元配列を間違ってるのではないかってこと。
書き込んだあと空白で埋めたら意味なくないか?funcが何してるか知らんけど

470デフォルトの名無しさん (スップ Sd03-vp8x)2017/10/04(水) 13:49:31.85ID:hBVSLcAId
>>469
funcの中身を知らないのに「意味無い」とか「意味あるの?」とかっていう書き込み、意味あるの?
それを聞けば問題の解決になるの?

少なくとも空白を埋めてない部分があるし
問題が発生する範囲で簡略化したのかもしれないし
当然意味があるから呼んでるんだろうと思うのが普通

471デフォルトの名無しさん (ワッチョイ fda5-8YQg)2017/10/04(水) 14:20:16.63ID:Ot6iICCz0
C言語は俺に訊くなスレになってるな

472デフォルトの名無しさん (ワッチョイ 6d23-hiJG)2017/10/04(水) 14:30:40.85ID:eeE5kOTG0
最近オブジェクト指向が入り口で、C言語がわからんっていう子が多いからなあ

473デフォルトの名無しさん (ワッチョイ 85b3-asy+)2017/10/04(水) 14:50:53.16ID:38WTG0/g0
再現する最小限のコードに削ってるうちに問題点を自ら発見して終了

474デフォルトの名無しさん (ワッチョイ 458a-xF3V)2017/10/04(水) 14:54:54.68ID:PNa+p1hk0
つーかfunc()以外の部分で特に問題が見当たらないならfunc()のせいで確定という単純明快な話
自作コードならfunc()もうpできるっしょ

>>470
出されたソースのコメント見ると、配列の考え方が間違ってるように感じるけどね。それを示唆したかっただけだよ。

476デフォルトの名無しさん (ワッチョイ b581-Txnz)2017/10/04(水) 15:12:09.84ID:f7rOF4qk0
>>462
ふと疑問に思ったんだが、

>func(charList); // charListに書き込む関数

関数を呼び出す際に、nの値を教えなくて良いのか?

477デフォルトの名無しさん (スップ Sd03-vp8x)2017/10/04(水) 16:34:23.23ID:hBVSLcAId
>>475
例外とは関係ない
合コンじゃないんだから無駄に話を広げる必要はない
問題の解決が遅くなるだけ

478デフォルトの名無しさん (スップ Sd03-vp8x)2017/10/04(水) 16:35:46.39ID:hBVSLcAId
あとはfuncの中身を見ないとなんとも

組み込みのショボい環境だとスタックオーバーフローって可能性も無いことは無いが

479デフォルトの名無しさん (ワッチョイ 35d2-asy+)2017/10/04(水) 16:51:26.35ID:+admsRHQ0
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 }
} ;

480デフォルトの名無しさん (ワッチョイ 35d2-asy+)2017/10/04(水) 16:56:16.34ID:+admsRHQ0
↑構造体の初期化で
charを連続4byte設定するときの書き方
0x00000000はたぶん違いますよね?
どう書けば良いんですか?

初心者過ぎてすいません

481デフォルトの名無しさん (ワッチョイ 35d2-asy+)2017/10/04(水) 16:59:03.20ID:+admsRHQ0
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 }
} ;

482片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)2017/10/04(水) 17:01:20.64ID:HMkkIXOid
>>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} }
} ;

483デフォルトの名無しさん (ワッチョイ 35d2-asy+)2017/10/04(水) 17:04:07.51ID:+admsRHQ0
>>482

回答ありがとうございます!
ちなみにこれだったらどうかくんでしょうか?



struct I2C_MEM I2C_MEM[3] =     //構造体の初期化
{
{ 0x7C , 0x01 , 0x12345678 },
{ 0x7C , 0x02 , 0x12345678 },
{ 0x7C , 0x03 , 0x12345678 },
} ;

484片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)2017/10/04(水) 17:19:18.44ID:HMkkIXOid
>>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
} ;

485片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)2017/10/04(水) 17:21:40.35ID:HMkkIXOid
>>484
> char DATA[0x03] ;
おっと、これじゃあ4バイト入らないぜ。
char DATA[4];
にしないと。

486デフォルトの名無しさん (ワッチョイ 2312-IQJU)2017/10/04(水) 17:27:10.52ID:PA2rRcfg0
全くどうでもいいことだが最近の若いモンはスマホに合わせて上矢印なのな
一つ勉強になった

487デフォルトの名無しさん (ガックシ 06cb-huvM)2017/10/04(水) 17:28:20.90ID:VznoOWf36
PCでも上じゃね?

488片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)2017/10/04(水) 17:40:04.96ID:HMkkIXOid
>>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)} },
} ;

489デフォルトの名無しさん (ワッチョイ 7576-vp8x)2017/10/04(水) 18:04:30.94ID:9y3nqzOw0
構造体の中身から推測すると、
書く順番はエンディアンに依存しないと思う
単純に配列の頭から1バイトずつ送信するだけ

仮にエンディアンで順番が変わるとしても
どうせガッツリ環境依存なコードなんだから
依存しちゃえばいい
環境依存が無いコードを書くつもりなら、
charが1バイトかどうかにも依存しないようにしないとね

490デフォルトの名無しさん (ワッチョイ 7576-vp8x)2017/10/04(水) 18:10:15.78ID:9y3nqzOw0
>>488みたいなマクロは最悪
エンディアンていう言葉を覚えたばっかりの初心者が作る糞コード

491デフォルトの名無しさん (ガックシ 06cb-huvM)2017/10/04(水) 18:48:35.51ID:VznoOWf36
もちつけよw

492片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)2017/10/04(水) 19:22:55.76ID:HMkkIXOid
エンディアンについて解説が必要ですか?
はい/いいえ

493デフォルトの名無しさん (ワッチョイ 2df2-njQ9)2017/10/04(水) 20:07:04.96ID:V7FXDajl0
いいえ

494デフォルトの名無しさん (ワッチョイ 2df2-njQ9)2017/10/04(水) 20:09:03.80ID:V7FXDajl0
Definitely no.

495デフォルトの名無しさん (ワッチョイ 85b3-asy+)2017/10/04(水) 20:18:42.31ID:38WTG0/g0
struct I2C_MEM //構造体の型宣言
struct I2C_MEM I2C_MEM[3] =//構造体の型宣言

この手の文法で自明なことをコメントにする文化はなくならないのかな

496デフォルトの名無しさん (スップ Sd03-vp8x)2017/10/04(水) 20:46:10.64ID:hBVSLcAId
俺のコードはその対極
大きな流れしかコメントをかかない

497デフォルトの名無しさん (ワッチョイ 9b9e-Txnz)2017/10/04(水) 21:20:04.88ID:azmmV5/P0
I2Cか。データは8ビットで受けて、8ビットシフトしてビットORだな。
data = hi<<16 | mid<<8 | lo

498デフォルトの名無しさん (スップ Sd03-vp8x)2017/10/04(水) 21:27:53.34ID:hBVSLcAId
どう見ても送信

499デフォルトの名無しさん (スップ Sd03-vp8x)2017/10/04(水) 21:31:39.40ID:hBVSLcAId
>>492
お前の糞マクロ、どの辺が糞か解説が必要?

500デフォルトの名無しさん (スップ Sd03-vp8x)2017/10/04(水) 21:32:35.25ID:hBVSLcAId
ちなみに、ゆで玉子は輪切り派

501デフォルトの名無しさん (ワッチョイ 059f-XSap)2017/10/05(木) 01:23:13.38ID:ioWgBjMx0
>>483
やってみな。

502デフォルトの名無しさん (ワッチョイ 059f-XSap)2017/10/05(木) 01:24:28.79ID:ioWgBjMx0
やってみなじゃない。どう動くかじゃなくてどう書くかか。
どうなって欲しいのかが書かれてないから答えられないな。

503437 (ワッチョイ 5a45-wbjw)2017/10/05(木) 03:25:02.16ID:JVwY/YZa0
>>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をプリントしたりすると何故か問題なく動く」からそれで一時凌ぎする考えも
頭をよぎりましたが、思いとどまりました。

ひとまずこれで終えます。回答くださった方々、本当にありがとうございました。

504デフォルトの名無しさん (ワッチョイ 5a45-wbjw)2017/10/05(木) 03:26:43.92ID:JVwY/YZa0
>>503
×charListの値を呼んで
○charListの内容をstringに変換して(charListは不変)

505デフォルトの名無しさん (ワッチョイ 5a7c-EY9l)2017/10/05(木) 05:32:30.50ID:PdAAtG4s0
>>503
>char a[m][n]もchar a[m*n]も等価なのですよね

そうだっけ?

506デフォルトの名無しさん (フリッテル MM7e-p8Fh)2017/10/05(木) 05:39:44.88ID:+DJIpzmcM
char[m][n]はchar**、char[m*n]はchar*、データ型は違う

507デフォルトの名無しさん (ブーイモ MMde-Pirc)2017/10/05(木) 08:10:49.48ID:2SMjslBqM
funcに与える引数の条件がちゃんと理解できてないとか

508デフォルトの名無しさん (エムゾネ FFfa-8mMW)2017/10/05(木) 08:15:39.56ID:Nh1QNpvaF
char[m*n]って何?
結局ただの一次元配列でしょ?

509デフォルトの名無しさん (ワッチョイ b632-rzHd)2017/10/05(木) 10:10:50.98ID:6niZC7Nf0
>>506
堂々と嘘つくんじゃねえ
sizeof(char[m][n]) != sizeof(char**)

510デフォルトの名無しさん (ワッチョイ da33-qWqy)2017/10/05(木) 10:11:07.83ID:TrTYAooo0
>>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

511デフォルトの名無しさん (ワッチョイ b632-rzHd)2017/10/05(木) 12:14:43.27ID:6niZC7Nf0
そういう保証は紙っきれの条文より自分で確認・検証することが最重要だ
いくら「保証されている」ことでもコンパイラがバグったり中には確信的に違反するケースまである

空想論の域を出ないくだらんことのために
現実的なアイディアを諦めていては生産性が上がらない

512デフォルトの名無しさん (ワッチョイ bdd2-qWqy)2017/10/05(木) 12:51:26.83ID:TRdRMfhC0
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バイト一気に設定の書き方はどうすればいいんでしょうか?

513デフォルトの名無しさん (ワッチョイ 89a5-zYvd)2017/10/05(木) 12:51:30.07ID:/OlbfMDH0
コメント邪魔

514デフォルトの名無しさん (ワッチョイ 89a5-zYvd)2017/10/05(木) 12:52:03.70ID:/OlbfMDH0
誤爆m(_'_)m

515デフォルトの名無しさん (ワッチョイ 89a5-zYvd)2017/10/05(木) 12:59:34.91ID:/OlbfMDH0
>>512
一気に初期化する必要性がわからんが

糞コード
assert( 4 == sizeof ( unsigned long ) );

*( unsigned long* )I2C_MEM0.DATA = *( unsigned long* )"\x11\x12\x13\x14";

516デフォルトの名無しさん (スップ Sdfa-UWdl)2017/10/05(木) 13:01:44.78ID:gOaVCYiad
>>512
配列の複数の要素を一気に代入する記述はない
そういう風にひとつひとつ代入するか
memcpy使ったり構造体にして代入したりする

517デフォルトの名無しさん (ワッチョイ bdd2-qWqy)2017/10/05(木) 13:04:36.67ID:TRdRMfhC0
なるほどー ありがとうございました

518デフォルトの名無しさん (ワッチョイ 89a5-zYvd)2017/10/05(木) 13:06:18.55ID:/OlbfMDH0
ARMだと1バイトづつ初期化した方が小さくなるような気がする

519デフォルトの名無しさん (ガックシ 060e-5Ff0)2017/10/05(木) 13:13:39.58ID:/W/G46pt6
無名配列のリテラルは初期化時には使えるけど代入には使えないってこと?

520デフォルトの名無しさん (ガックシ 060e-5Ff0)2017/10/05(木) 13:16:53.65ID:/W/G46pt6
初期化時というか宣言時

521デフォルトの名無しさん (ワッチョイ 3a60-qWqy)2017/10/05(木) 19:51:18.71ID:72rIdNeW0
ビッグエンディアンの環境を教えてください

522片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 20:02:42.15ID:Xv32D2hUd
HP-UX、MOTOROLA、AIX、Solaris

523片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 20:09:22.11ID:Xv32D2hUd
Apple PowerPC Mac、Sun Blade、SGI O2

524片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 20:14:07.63ID:Xv32D2hUd
ビッグエンディアンの仮想環境はQEMU以外にないから、エミュレータを作れば有名になれるよ。

525片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 20:29:07.01ID:Xv32D2hUd
>>524
ごめん、PowerPCのエミュレータにPearPCがあった。

526デフォルトの名無しさん (ワッチョイ 9d76-hWC7)2017/10/05(木) 20:30:19.57ID:3IfCpLlr0
SH

527片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 20:32:46.00ID:Xv32D2hUd
SolarisエミュレータにCHARONがある(有料)。ビッグエンディアンの環境はお金がかかるよ。

528デフォルトの名無しさん (ワッチョイ 9d76-hWC7)2017/10/05(木) 20:34:21.70ID:3IfCpLlr0
整数の負の数に1の補数を用いる環境
整数の負の数に絶対値と符号ビットを用いる環境
整数にトラップ表現がある環境
charが8の倍数ビットでない環境

を教えてください

529デフォルトの名無しさん (ササクッテロレ Sp75-Zdu/)2017/10/05(木) 20:34:53.22ID:olaqz/S6p
ARMは選択出来たっけ?
まあ、みんなリトルで使ってるがな。
地味にMicroBlazeがビッグだな。

530デフォルトの名無しさん (ワッチョイ 9d76-hWC7)2017/10/05(木) 20:39:08.91ID:3IfCpLlr0
MIPSもバイ

ミドルエンディアンの環境を教えて下さい

531デフォルトの名無しさん (ワッチョイ 9d76-hWC7)2017/10/05(木) 20:41:19.68ID:3IfCpLlr0
おれはリトル
わざわざお尻から食べないよね普通

532片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 20:42:01.73ID:Xv32D2hUd
博物館に所蔵されてるようなコンピュータ調べて何の意味があるんだろう。。。

533デフォルトの名無しさん (ワッチョイ 9d76-hWC7)2017/10/05(木) 20:44:02.75ID:3IfCpLlr0
>>522 >>523 のこと?

534片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 20:46:00.84ID:Xv32D2hUd
>>528
絶滅したコンピュータアーキテクチャの話はしたくない。

535デフォルトの名無しさん (ササクッテロレ Sp75-Zdu/)2017/10/05(木) 20:46:52.00ID:olaqz/S6p
6502とか、地味に生きてるやん?
あ、あれはエミュレータか。

536片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 21:04:49.44ID:Xv32D2hUd
ほとんどの環境のcharが8ビットなのは、基本ASCIIが7ビットで表現できることと、7ビットより8ビットの方が切りが良くてパリティビットなどに使えて便利だったことによる。

537デフォルトの名無しさん (ワッチョイ 054b-5Ff0)2017/10/05(木) 21:09:26.31ID:PAHxl06e0
最近C言語ハマってる
言語がシンプルなのと直にコンピュータを操ってる感

538片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 21:16:28.12ID:Xv32D2hUd
charが7ビットだったら、パックトBCDもなかった。

539片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 21:25:12.02ID:Xv32D2hUd
7ビットだったら1バイトの16進表示で1ビット無駄になるところだった。

540片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 21:44:27.38ID:Xv32D2hUd
GCCかLLVMを使えば、適当なアーキテクチャのC言語コンパイラーを自由に作ることができるらしい。

541片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 21:54:15.38ID:Xv32D2hUd
まあ、例えばNintendo SwitchのアーキテクチャをGCCかLLVMで定義すれば、そのアーキテクチャのコンパイラーが作れる訳だ。

542デフォルトの名無しさん (ワッチョイ da8a-Zagc)2017/10/05(木) 22:04:36.58ID:dkgh60ez0
そういう用途なら「高位合成」でggrと幸せになれるぞ
LLVMは多分出番なしだ

スイッチはテグラじゃないの?

544片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/05(木) 23:34:31.98ID:Xv32D2hUd
うん、NVIDIA Tegra のカスタムだね。例えが悪かったか。

545デフォルトの名無しさん (ワッチョイ 9d76-hWC7)2017/10/05(木) 23:36:35.55ID:3IfCpLlr0
>>536
charが16bitなら最近使ったけど

546デフォルトの名無しさん (ワッチョイ 059f-XSap)2017/10/05(木) 23:58:01.04ID:ioWgBjMx0
>>512
strncpy(I2C_MEM0.DATA, "\x11\x12\x13\x14", 4);

547デフォルトの名無しさん (ワッチョイ 7575-5Ff0)2017/10/06(金) 00:05:52.06ID:L6h7mNkA0
実行時間の長い再帰関数(ハノイの塔)を実行しながら過程をglutというOpenGLライブラリで開いたウィンドウに描画させたいのですが方法ありませんか?
ステップ毎に再帰関数を最初から実行するしかないですか?

548デフォルトの名無しさん (ワッチョイ 7680-HC+h)2017/10/06(金) 01:40:53.41ID:tqIbkLAn0
再帰して、関数を無限に呼ばない。
答えをメモ化しろ

「メモ化」で検索!

549デフォルトの名無しさん (ワッチョイ 558d-wbjw)2017/10/06(金) 01:51:40.09ID:FhOeSxdK0
-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だけでは何だか違います

550デフォルトの名無しさん (ワッチョイ 059f-XSap)2017/10/06(金) 02:18:01.36ID:x0C9073k0
>>549
いやずばり %e だと思うが?

551デフォルトの名無しさん (ワッチョイ da8a-Zagc)2017/10/06(金) 03:03:00.77ID:RA0YJgv70
>>546
最近出来た関数かな?

552デフォルトの名無しさん (ワッチョイ 059f-TYR1)2017/10/06(金) 03:37:10.08ID:x0C9073k0
>>551
最近って・・・うーん。

553デフォルトの名無しさん (ワッチョイ 7a87-iGo5)2017/10/06(金) 03:40:43.51ID:aYA4G4wj0
>>547
ハノイの塔の実行スレッド(A)と描画スレッド(B)を別にする
Bは計算過程を変数Cに書き込む
Aは画面リフレッシュのタイミングでCを描画

554デフォルトの名無しさん (ワッチョイ 7a87-iGo5)2017/10/06(金) 03:41:39.90ID:aYA4G4wj0
逆だw
Aは計算過程を変数Cに逐次書き込む
Bは画面リフレッシュのタイミングでCを描画

555デフォルトの名無しさん (ワッチョイ da8a-Zagc)2017/10/06(金) 04:15:34.73ID:RA0YJgv70
>>552
memcpyとか、strcpyとか、strncpyは知っているし、_s付き
なんてのも知っているけど、これは初めてかな

556デフォルトの名無しさん (ワッチョイ 9d76-hWC7)2017/10/06(金) 06:22:04.70ID:RySAjNni0
スペルミスかと思ったけど合ってるよな
間違い探し難しい

どこが変?

557デフォルトの名無しさん (ワッチョイ 75b3-qWqy)2017/10/06(金) 07:43:06.02ID:p4va+yl10
検索でちゃんと 555 と 546 がヒットするし何か見間違えたんだろうか

558デフォルトの名無しさん (ワッチョイ da8a-jcSU)2017/10/06(金) 07:45:29.75ID:iQ5MtuBR0
目を細めて見るとstmcpyに… いや無理があるな

559デフォルトの名無しさん (ワッチョイ b68a-uDER)2017/10/06(金) 08:33:19.91ID:4Iec6HYc0
老眼がすすんで字が読めなくなったジジイだろ
>>546が本当にスペルミスだったとしても全然面白くないツッコミだし

老害は早く死ねば良いのに

560デフォルトの名無しさん (ワッチョイ da8a-tpYQ)2017/10/06(金) 09:47:31.52ID:RA0YJgv70
str[n]cpyが最後に0を書く条件は?
memcpyを使わない理由は?

561デフォルトの名無しさん (ガックシ 060e-5Ff0)2017/10/06(金) 10:38:12.40ID:EDz06gtM6
自分のミスはスルー

562デフォルトの名無しさん (ワッチョイ 4623-XSap)2017/10/06(金) 10:39:45.78ID:d6jfQR1X0
strncpyは0で終端される条件が毎回わからなくて敬遠していたんです。
でも、strlcpyを使うようになってから肌年齢が10歳若返りました!
今は毎日がとっても楽しいです。

563デフォルトの名無しさん (ワッチョイ 0502-5Ff0)2017/10/06(金) 10:54:46.60ID:U5/7Dlcy0
>>548
おお!センクス!

564デフォルトの名無しさん (ワッチョイ b632-rzHd)2017/10/06(金) 13:16:11.88ID:qH0Ei3hn0
>>559
おまえさんが言わなくても老いた者は死にゆくように自然はできている
それを妨げるなという主張なら医療業界に言え

565デフォルトの名無しさん (ササクッテロレ Sp75-Zdu/)2017/10/06(金) 14:05:32.93ID:UT/zOTNDp
何の為にサイズ指定があるか、考えりゃわかるじゃん?

566デフォルトの名無しさん (ワッチョイ b68a-uDER)2017/10/06(金) 14:53:14.89ID:4Iec6HYc0
>>564
「早く」の意味を調べてからほざきなさい

567デフォルトの名無しさん (ワッチョイ b632-rzHd)2017/10/06(金) 15:16:39.88ID:qH0Ei3hn0
>>566
形容詞には比較をつけろ
一年目でおぼえる初歩だろうがボケ

568デフォルトの名無しさん (ワッチョイ 0516-5Ff0)2017/10/06(金) 15:20:28.76ID:B4vVDMXU0
うんち!

569デフォルトの名無しさん (ワッチョイ b68a-uDER)2017/10/06(金) 17:45:14.09ID:4Iec6HYc0
>>567
朝鮮語ではそう言うルールがあるのか?
日本語にはないぞ

>>567
>>559のレスの中の「早く」の使い方は自然だと思うが…。
日本語学校の1年目に、どう教わったの?

571デフォルトの名無しさん (ワッチョイ b632-rzHd)2017/10/06(金) 20:42:56.05ID:qH0Ei3hn0
>>569
朝鮮語か日本語かには関係ない
電気屋のルールだ

572デフォルトの名無しさん (ワッチョイ 059f-huPf)2017/10/07(土) 14:47:24.49ID:f9dDdlSq0
>>555
>>546にはそのstrncpy()が書かれているが?

573デフォルトの名無しさん (エーイモ SEda-2JKf)2017/10/08(日) 10:02:50.14ID:iaWD4MFGE
PHPしかできないザコだったけどC言語が楽しい
Cのスタンダードなコーディングスタイルってないですか?
インデントにタブ使ってたりifに{}使ってなかったりするコードをよく見かけますけど

574デフォルトの名無しさん (ワッチョイ fdc6-XSap)2017/10/08(日) 10:09:18.29ID:+nfO/L5n0
戦争でも起こす気か?

575デフォルトの名無しさん (ワッチョイ dab3-Nz6W)2017/10/08(日) 11:30:23.33ID:HosRocIl0
>>573
C言語 コーディングスタイル
でググれ
あと結果の報告は要らん
と言うか報告するな
理由は>>574に書いてある

576デフォルトの名無しさん (スププ Sdfa-qDdi)2017/10/08(日) 11:56:53.58ID:SX/6L99bd
戦いの火蓋は切って落とされた

577デフォルトの名無しさん (ブーイモ MMa1-clNK)2017/10/08(日) 13:00:43.13ID:FR3ELF64M
インデントは空白4個だね

578デフォルトの名無しさん (ワッチョイ 0516-5Ff0)2017/10/08(日) 13:04:33.16ID:SXbZ1Yc30
>>573
ほんまC言語楽しいよな
俺もC#かWeb系スクリプト言語しか使ったことなかったんだが

579デフォルトの名無しさん (ワッチョイ 76e8-8BZG)2017/10/08(日) 13:04:53.34ID:e96mZsST0
>>577
2つで十分ですよ

580デフォルトの名無しさん (ワッチョイ 0516-5Ff0)2017/10/08(日) 13:05:13.53ID:SXbZ1Yc30
C++はゴミ

581デフォルトの名無しさん (ワッチョイ 059f-huPf)2017/10/08(日) 14:51:03.41ID:c+/m9riq0
>>579
いやタブ1つにして表示幅はスペース4つ分だ。

582デフォルトの名無しさん (ワッチョイ 059f-huPf)2017/10/08(日) 14:54:49.62ID:c+/m9riq0
>>576
ああ。もうこのスレはスペース開けるか開けないか改行するかしないか何文字にするか中括弧はどうするか行末にバックスラッシュ入れて次行に書くか書かないかgotoどうするか等の話で延々と10年ぐらい費やされるんだろうな。
もちろんエディタの話に飛び火してviがvimがemacsがとなる。

583デフォルトの名無しさん (ワッチョイ 7123-fbES)2017/10/08(日) 14:55:08.52ID:bhcsmcAx0
スペース一つで充分

584デフォルトの名無しさん (ワッチョイ 76a5-wbjw)2017/10/08(日) 15:03:04.04ID:Eg4i3QFB0
プログラム終了前にfree()が必要かどうかを忘れちゃいかん。

585デフォルトの名無しさん (ワッチョイ bdd2-qWqy)2017/10/08(日) 16:00:19.88ID:tULmhvm40
ちょっと教えてくださいとある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などという変数を使って間接的に宣言するのか? >>
<< うんちくきぼんぬ >>

586デフォルトの名無しさん (ワッチョイ 75b3-qWqy)2017/10/08(日) 16:03:19.22ID:dE95R3nJ0
struct Person の前に typedef がありそうな雰囲気

587デフォルトの名無しさん (ワッチョイ 558c-v8iM)2017/10/08(日) 16:13:28.90ID:yi/NbOiJ0
ここかな
https://qiita.com/nomunomu/items/1a72b0150ea0fcf442b0
typedef の書き漏れだろうね

588デフォルトの名無しさん (ワッチョイ dab3-Nz6W)2017/10/08(日) 16:38:19.39ID:HosRocIl0
>>584
exit() の前にだろ

589デフォルトの名無しさん (ワッチョイ b68a-YM+x)2017/10/08(日) 17:08:17.03ID:F9J/pQ0V0
C++ならtypedefなくても可
多分.cppでビルド通したんだろうね

590デフォルトの名無しさん (ワッチョイ 75b3-qWqy)2017/10/08(日) 17:13:11.77ID:dE95R3nJ0
>>589
後の句 person_s を型名として使ってるんで typedef は必須じゃない?
(strust 省略の Person で宣言してるのとは違う)

591デフォルトの名無しさん (ワッチョイ bdd2-qWqy)2017/10/08(日) 17:16:54.10ID:tULmhvm40
なるほどー ありがとうございました

592デフォルトの名無しさん (ワッチョイ b68a-YM+x)2017/10/08(日) 17:26:51.19ID:F9J/pQ0V0
>>590
C++ではtypedefは不要だよ(別にあっても構わないけど)
structとclassはメンバーのデフォルト設定がpublicかprivateかという違いを除けば構文的には全く同じように使える
structで継承することすら出来る

593デフォルトの名無しさん (ワッチョイ 75b3-qWqy)2017/10/08(日) 17:32:00.82ID:dE95R3nJ0
>>592
論点はそこじゃなくて
 struct Person { };
 Person p;
が C++ では文法として通るのは指摘の通り

質問元の記述では
 struct Person { } person_s;
 person_s p;

こうなってるから、これじゃ C++ の文法でも通らないでしょうよ ってことで

594デフォルトの名無しさん (ワッチョイ b68a-YM+x)2017/10/08(日) 17:37:28.39ID:F9J/pQ0V0
通るよ
class宣言ではいちいちtypedefなど使わないのと同じように構造体でもtypedefは省略するのが一般的
むしろ先頭の構造体テンプレート名を省略して最後の型名だけ宣言する場合も多い

595デフォルトの名無しさん (ワッチョイ 75b3-qWqy)2017/10/08(日) 17:42:06.58ID:dE95R3nJ0
https://ideone.com/e1pLf2
通ったっけ? って確認コード
インスタンスとtypedef の区別つく?

596デフォルトの名無しさん (ワッチョイ da8a-jcSU)2017/10/08(日) 18:04:45.47ID:PUMPETat0
structが省略可能になってtypedefしなくなったのを
typedefが省略可能と間違って覚えてるんじゃないだろうか

597 ◆QZaw55cn4c (ワッチョイ 3a60-1fsB)2017/10/08(日) 18:08:10.27ID:dlDwfjxk0
>>594
>>595 を見る限り通らないようだね

598デフォルトの名無しさん (フリッテル MM7e-ahfN)2017/10/08(日) 18:14:58.26ID:ALuk3l/eM
あれ?
通らないのかこれ?

599デフォルトの名無しさん (ワッチョイ 75b3-qWqy)2017/10/08(日) 18:20:47.85ID:dE95R3nJ0
型名のエイリアス宣言と  その型のインスタンスの生成
typedef を省略した場合には、全く同じ記述になるんだけど
後者のインスタンスの生成で翻訳してるぜ

600デフォルトの名無しさん (ワッチョイ dab3-Nz6W)2017/10/08(日) 18:29:26.73ID:HosRocIl0
通ると思う方がどうかしてるわ

601デフォルトの名無しさん (スププ Sdfa-qDdi)2017/10/08(日) 18:32:58.84ID:LFQQ2ZHvd
なぜ通ると思ったのか

602デフォルトの名無しさん (エーイモ SEda-2JKf)2017/10/08(日) 19:03:56.08ID:uO7C8UFXE
コーディングスタイルってたくさんあるんですね
とりあえず検索したらエリートの人達が使ってそうなものを集めてみました

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
http://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個で{}を省略しないルールだけにしたいと思います。

603デフォルトの名無しさん (エーイモ SEda-2JKf)2017/10/08(日) 19:04:57.70ID:uO7C8UFXE
空白8個なのはメモ帳で見た時にこのくらいだから合わせてるだけです

604デフォルトの名無しさん (ワッチョイ da8a-jcSU)2017/10/08(日) 19:18:41.81ID:PUMPETat0
また戦争がしたいのか、アンタは

605デフォルトの名無しさん (ワッチョイ fdc6-XSap)2017/10/08(日) 19:26:45.12ID:+nfO/L5n0
戦闘民族

606デフォルトの名無しさん (ワッチョイ dab3-Nz6W)2017/10/08(日) 19:30:12.30ID:HosRocIl0
書いてりゃわかると思うけど8は多すぎ
単に昔のシステムがそうだったと言うだけのことだから4とか2でいいと思う

607デフォルトの名無しさん (ワッチョイ fdc6-XSap)2017/10/08(日) 19:36:28.95ID:+nfO/L5n0
あーあ

608デフォルトの名無しさん (ワッチョイ 7123-fbES)2017/10/08(日) 21:11:10.70ID:bhcsmcAx0
>>573
会社や複数人作業ならそれにあわせる
一人で書く分には何でもいいだろ
なんなら、PHPで使ってたスタイルでいいだろ
ってか、PHPの時はどうしてたんだよ

609デフォルトの名無しさん (ワッチョイ 7575-5Ff0)2017/10/09(月) 01:05:37.72ID:6VRPxojV0
マンデルブロの描画がうまくいきません。ズームするとすぐに単調になってしまいます。

動画
https://youtu.be/Ompp_YwrLPw

ソースコード
http://codepad.org/mlm33eRT

610片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/09(月) 01:30:56.68ID:vdfcSFiBd
>>609
クリックしたら画面の中心を移動させる。

611片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/09(月) 01:32:01.57ID:vdfcSFiBd
ドラッグされたらずらす。

612デフォルトの名無しさん (ワッチョイ 7575-5Ff0)2017/10/09(月) 01:53:40.87ID:6VRPxojV0
>>610
一応クリックするとある境界線付近を拡大するようにプログラムに書いてるのですが...

613片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/09(月) 03:32:25.69ID:vdfcSFiBd
>>612
環境によって座標系が違うのかも知れない。ずらす値を変えてみては?

614デフォルトの名無しさん (ワッチョイ 558c-v8iM)2017/10/09(月) 03:39:59.55ID:69HXGpsc0
>>609
単調になるのは k のループ回数が少ないせいでは

615デフォルトの名無しさん (ワッチョイ da7c-yS8h)2017/10/09(月) 06:38:40.98ID:hRP3P7r40
そうだね k=1000くらいで

616デフォルトの名無しさん (ガックシ 060e-5Ff0)2017/10/09(月) 08:53:44.75ID:IXUwPWpS6
>>613
変えても同じでした
>>614
>>615
なるほど!家に帰ったらやって見ます!

>>594
変数宣言が全てtypedefになるなんて狂気な言語
実例を教えてくれ

618デフォルトの名無しさん (ワッチョイ 6955-clNK)2017/10/09(月) 09:51:45.98ID:UMVukllE0
俺はこの書き方
if (condition) {
}
else {
}

619デフォルトの名無しさん (ワッチョイ 459e-G6mq)2017/10/09(月) 09:55:27.10ID:pMEz2IHg0
コーディングスタイルにこだわる奴は素人。

620デフォルトの名無しさん (ガックシ 060e-5Ff0)2017/10/09(月) 12:12:59.35ID:9ioWbZDx6
Linuxのソースコードは?

621デフォルトの名無しさん (ワッチョイ 75b3-qWqy)2017/10/09(月) 13:24:11.42ID:N3YX2Zf80
ソース整形ツールの動作オプションの数で眩暈がするぜw

622デフォルトの名無しさん (ワッチョイ bdd2-qWqy)2017/10/09(月) 14:12:40.72ID:98rFBdXp0
■■たびたびお世話になります なにが悪いのかご指摘おねがいします■■

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 ;
}
}

623デフォルトの名無しさん (ワッチョイ bdd2-qWqy)2017/10/09(月) 14:22:20.38ID:98rFBdXp0
↑単純に関数内で構造体のデータにポインタ+インデックスでアクセスしたい

624デフォルトの名無しさん (ワッチョイ bdd2-qWqy)2017/10/09(月) 14:26:06.29ID:98rFBdXp0
間違い発見
p += 1 ; は aaa += 1 ; に置き換えてください

625片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/09(月) 14:39:31.76ID:vdfcSFiBd
>>622
何がしたいのかわからない。
代入の左辺は右辺と互換性のある型じゃないといけないし、配列まるごとの代入はできない。
まずは代入の型をそろえないと。

626片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)2017/10/09(月) 15:09:21.54ID:vdfcSFiBd
char型のデータを代入したいのなら、両辺の型をcharにしないといけないよ。

627デフォルトの名無しさん (ワッチョイ 5ae1-bBfX)2017/10/09(月) 15:26:29.02ID:G+wiEnLh0
>>622
> aaa -> DEV_ADR ;
> a[i] = *aaa ;

例えばこの部分は a[i] = aaa->DEV_ADR; という処理を意図してるのではないかと思う
ただし aaa->DATA のところは char* 型になるので char 型の c[i] に代入できない

>>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 の言う通りなにをしたいのかよくわからん
}
}

629デフォルトの名無しさん (ワッチョイ 5593-Xc0J)2017/10/09(月) 17:01:40.23ID:u+Z6y4O20
初心者相手に表記法を変えると理解しにくいかも。
本質から外れた部分が目についてしまうからね。

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 をまとめただけ、だけど。

630デフォルトの名無しさん (ワッチョイ 059f-huPf)2017/10/09(月) 17:19:35.64ID:tFlwnlNI0
>>629
c を char *c[2] で宣言しておけばなんとかなるね。

631デフォルトの名無しさん (ワッチョイ bdd2-qWqy)2017/10/09(月) 17:34:38.15ID:98rFBdXp0
皆様 どうもありがとうございます
とりあえず代入の書き方が知りたかっただけでありまして
ちなみにインデックスを使用した配列メンバーのアクセスなんだけど
c[i] = aaa -> DATA +0 ;
d[i] = aaa -> DATA +1 ;
e[i] = aaa -> DATA +2 ;
f[i] = aaa -> DATA +3 ;
こんな書き方ってできるの?

632デフォルトの名無しさん (ワッチョイ 75b3-qWqy)2017/10/09(月) 17:44:30.12ID:N3YX2Zf80
ポインタを返す場合はそういう書き方
aaa->DATA+3
ポインタの指してる先を求めたい場合は
aaa->DATA[3]

左辺が何を要求しているのか(どういうものを操作したいのか)を頭の中で整理せずに
記述法だけを即物的にトレースするのはとてもまずい

633デフォルトの名無しさん (ワッチョイ 958a-j1W8)2017/10/09(月) 18:00:40.01ID:tNKVEDsJ0
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の糖衣構文)、ドットとアローそれぞれの
左側の違いを理解しないと先には進めないよ

634デフォルトの名無しさん (ワッチョイ 9dc3-evb8)2017/10/09(月) 18:02:21.36ID:tda6mQVw0
>>631
意図が分からないからマトモに答えられない
実際に数字入れて教えてくれ
例えば>>622はI2C_MEM = {4, 8, {0, 1, 2, 3}} でa,b,cはどうなるの?

635デフォルトの名無しさん (ガックシ 06eb-HijE)2017/10/12(木) 10:23:33.14ID:jY+yK3vs6
過疎ってるな

636デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/12(木) 11:18:46.53ID:mQ4S5/8+0
ちょっと質問です
↓下記のような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] ;
}
}

637デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/12(木) 11:24:19.55ID:mQ4S5/8+0
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] ;
}
}

に修正します

638デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/12(木) 11:26:34.34ID:mQ4S5/8+0
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 ;
}
}

に修正します

639デフォルトの名無しさん (ワッチョイ 13e1-IVl6)2017/10/12(木) 11:50:40.24ID:z+R5CP9n0
>>636
先ず日本語をなんとかした方がいい
『whileの中身を複製する』とはどういうことか?
『実体化されない変数』とは何か?
『コンパイラ制御のための変数』とは何か?

640デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/12(木) 12:32:35.60ID:mQ4S5/8+0
こんな感じで構造体をインデックスで指定した転送命令にコンパイルする意図で書いています

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の意味が
希薄になるのでコンパイラに対する変数だよと明示(コンパイラ&設計者に)したいのだが
そんな書き方ある?ということでありまして

641デフォルトの名無しさん (ワッチョイ c9ea-89ZN)2017/10/12(木) 12:41:11.33ID:Z8zboj8V0
多少は意図した記述に沿って機械語出力するだろうけど、
保障されてるわけでもないし、最適化他でどうなるかもわからん

「機械語でこうなって欲しい」という目的を達成させるならその部分を機械語で書くか、
(環境によるだろうけど)その部分だけをインラインアセンブラにする

642デフォルトの名無しさん (ワッチョイ 13cf-HoIg)2017/10/12(木) 12:42:56.26ID:cscfLNVP0
memcpy使ったらいいんじゃないの?

643片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/12(木) 12:52:32.73ID:loBt1/dEd
volatile

644デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/12(木) 13:04:26.04ID:mQ4S5/8+0
うーーん・・・

volatileは最適化抑止(消すなー!)のための記述と認識しているんですが
volatileの逆の機能が欲しいんですよね 実体化するなー!ってやつです

645デフォルトの名無しさん (ワッチョイ 1312-B6a6)2017/10/12(木) 13:37:51.69ID:jX4dlPv10
volatile揮発性の当初の意図は
70年代コンピュータでの磁気コアメモリに置いておく、程度なんじゃあねえの

646デフォルトの名無しさん (ワッチョイ c9ea-89ZN)2017/10/12(木) 13:45:28.14ID:Z8zboj8V0
実体化するな=機械語としてコードにおくな
ということは、言語上での変数を一切使わずに繰り返し展開するような
テンプレートやマクロでメタプログラミングしたい って話になるが・・・

#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);

変数を使ってループできないから 繰り返し分リテラルを手で並べる必要あるしー
正直ほめられたやりかたじゃないと思うわ

647デフォルトの名無しさん (ササクッテロレ Sp45-NqOW)2017/10/12(木) 14:25:00.48ID:1sF6m3D2p
実体化させたく無いものを記述?
…スラ二本じゃダメなのか?

648デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/12(木) 14:30:09.97ID:9bJ1Vwh10
そういう話ではないでしょ
そもそもループによるコードのキャストは
記述を短縮化するのが目的なんだから

キャストのためのループであることをコンパイラに
推論させるための変数指定の仕組みがあるのかな?ってはなし

649デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/12(木) 14:32:07.54ID:9bJ1Vwh10
まあ 指定しなくても現状でコンパイラは推論してるけれどもねw
なんかキモチ悪いといえばキモチ悪いんで指定できればうれしいってだけです

650デフォルトの名無しさん (ガックシ 06eb-HijE)2017/10/12(木) 14:36:32.09ID:OhN0e73F6
死ねゴミ

651デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/12(木) 14:37:45.66ID:9bJ1Vwh10
なんかすぐ出てこないところをみると
そこらへんはコンパイラまかせなのね

652デフォルトの名無しさん (ガックシ 06eb-HijE)2017/10/12(木) 14:38:53.90ID:OhN0e73F6
クッサ

653デフォルトの名無しさん (ワッチョイ c9ea-89ZN)2017/10/12(木) 14:45:29.40ID:Z8zboj8V0
結局 >>639 だったのか・・・

654デフォルトの名無しさん (ワッチョイ 13e1-IVl6)2017/10/12(木) 14:46:41.92ID:z+R5CP9n0
返答が幾つもついてるのに出てこないとか言っちゃうのは見たいものしか見ない人の典型だね

655デフォルトの名無しさん (スップ Sd33-BnQ2)2017/10/12(木) 14:48:17.07ID:XqOCC09Fd
とりあえずお前には無理だ
諦めな

656デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/12(木) 15:03:43.28ID:9bJ1Vwh10
大体わかりました
ありがとうございました

657デフォルトの名無しさん (ガックシ 06eb-HijE)2017/10/12(木) 15:06:24.03ID:OhN0e73F6
一から10まで足し合わせるプログラムを教えてください。

658片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/12(木) 15:10:29.76ID:loBt1/dEd
>>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;
}

659デフォルトの名無しさん (ガックシ 06eb-HijE)2017/10/12(木) 15:18:14.51ID:OhN0e73F6
>>658
ありがとうございます!

660デフォルトの名無しさん (ワッチョイ 59b3-89ZN)2017/10/12(木) 18:50:09.63ID:7bIAw6590
人に思いを正しく伝えられない奴がうまくプログラミングできるとは思えないけど大丈夫なんだろう

661デフォルトの名無しさん (ササクッテロレ Sp45-NqOW)2017/10/12(木) 20:36:00.66ID:1sF6m3D2p
俺は逆だと思っている。
人に上手く思いを伝えられないからこそ、
表現手段を駆使して伝えようと努力するんだよな。
絵とか音楽とか、クリエイターってそんな生き物。

662デフォルトの名無しさん (ワッチョイ 13b3-itUa)2017/10/12(木) 21:49:52.42ID:wn8w1zGC0
>>661
> 絵とか音楽とか、クリエイターってそんな生き物。
全然違う
あいつらは自分の思いを伝えられるのは自分の表現法方だけだと思ってる
絵を描く奴で説明文を書いて思いを伝えるやつなんていないだろ

663デフォルトの名無しさん (ワッチョイ 799f-BSx0)2017/10/12(木) 23:57:59.88ID:5ILt7KpA0
>>645
メモリマップドI/Oに使える。特定のアドレスを読むとキーボードで入力した文字が読めるとか、そういうやつ。
読んだ直後に内容が変わる可能性があるので volatile でないとまずい。

664デフォルトの名無しさん (ワッチョイ 799f-BSx0)2017/10/13(金) 00:30:38.46ID:neFZx4WS0
共有メモリとか mmap() して複数のプロセスまたはスレッドがアクセスする領域も同じか。
あれ? こんなのちょっと前に話題にならなかったか?

DMAとかもあるわな

666デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/13(金) 12:09:21.29ID:UePpwGnn0
ちょっとお尋ねします

char *a ;  と記述すると
 ↓
char a ; 実体化
int (&a) ; 非実体化(コンパイラが使用する変数)

が生成される
*の概念が無いと

char a ;    実体化
int a_point ; 実体化(アドレス長=intとする)
a_point = &a ; 実体化

例えばこう書くことになる


ポインタは関数内で宣言できる
その場合そのポインタの寿命は関数内に限定される


こんな感じの認識であってますか?

667デフォルトの名無しさん (アウーイモ MM1d-1+gY)2017/10/13(金) 12:21:34.93ID:ZC5rLpvkM
ポインタの寿命はプログラム内じゃないん?

668デフォルトの名無しさん (ワッチョイ c9ea-89ZN)2017/10/13(金) 12:24:24.54ID:y6HLA65k0
実体化とか 非実体化とかの オレオレ用語は何を意図してるのかわからん

669デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/13(金) 12:29:00.47ID:UePpwGnn0
>>667
ということはプログラム内でユニークな名前をつけなければならないということですね?

670デフォルトの名無しさん (ワッチョイ 5387-6M7B)2017/10/13(金) 12:29:33.87ID:x6piWjtI0
>>666
言ってる意味がわからない
何の言語やってたの?

671 ◆QZaw55cn4c (ワッチョイ d360-cyyB)2017/10/13(金) 12:30:40.15ID:KnON5zi30
>>666
>char a ; 実体化
>int (&a) ; 非実体化(コンパイラが使用する変数)
ポインタを定義したからといって,即応して実体が生成されることはない
ポインタがさす実体は自分で生成しないといけない

672デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/13(金) 12:31:44.24ID:UePpwGnn0
C言語です
実体/非実体とは機械語に変換されるかどうかということです

673デフォルトの名無しさん (ワッチョイ 8be8-B6a6)2017/10/13(金) 12:33:52.57ID:piAojqU/0
実体化とか非実体化とか、オブジェクト指向の概念でしょ。
Cではリテラルに対応するエリアがあって、それをデータの入れ物にするか、アドレスの入れ物にするか、だけでしょ。
いずれにしろ変数の寿命はグローバルスコープに定義するか、静的(static)に定義しないかぎり、
使われる関数のスコープ内に限られるでしょ。

674デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)2017/10/13(金) 12:33:53.32ID:/fw1jTt60
>>666
> char a; 実体化
というのを除き、だいたい合ってる
char *a;ではcharの実体は作られずに
int(&a);だけが作られる

Cの前身のBでは、*3 = 1;で
メモリの3番地に1を書き込むようになっていた

アドレス演算子もあって
auto a, b; /* 型の概念がないので記憶クラスだけ */
a = &b; /* bとして使っているメモリのアドレスを取得 */
*a = 1; /* bに1を代入 */

つまり、おまえさんの言うように整数変数を
そのままアドレスの表現に使っていた

675デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/13(金) 12:42:43.01ID:UePpwGnn0
なるほど ありがとうございました

>>672
そんなものはコンパイラ次第で変わる
定数でアドレス取ってなきゃ実体を生成しないとか普通にあるし

677デフォルトの名無しさん (ワッチョイ c9ea-89ZN)2017/10/13(金) 12:48:21.81ID:y6HLA65k0
機械語に翻訳されるかどうかは
それまでの文意や環境(特に最適化)次第だもんな

678デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/13(金) 12:49:08.21ID:UePpwGnn0
ちょっとお尋ねします
ベテランとお見受けする方は

/*    */ 
↑コメントにこれつかいますけど

//
↑何故これつかわないんですか?
なにかしらトラブルの元になったりするんですか?

679デフォルトの名無しさん (ワッチョイ 79be-HijE)2017/10/13(金) 12:49:26.38ID:Xi3f71oh0
すげえややこしいな
コンパイラ作りたくなってきた

>>678
C99準拠を仮定できないなら前者を使わざるをえない
複数行をコメントする場合や文の途中をコメントする場合は基本的に前者を使う
行の後半にコメントを書く場合は両方使う

681デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/13(金) 13:09:27.27ID:UePpwGnn0
おおおおおお
ありがとうございます
なるほどねー
そういうことですか

682デフォルトの名無しさん (ササクッテロロ Sp45-NqOW)2017/10/13(金) 14:53:58.16ID:yVfJQeWEp
//は、文字コード特有のバグがあってだな。

683デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)2017/10/13(金) 15:14:34.29ID:/fw1jTt60
>>678
1行コメントならもちろん//を使うが
コメントが2行以上になる可能性が否定できない場合、
毎行いちいち//が必要なのは面倒なので
/*
*/
と折り返す恰好にする

それと1行コメントは内容的に馬鹿っぽくなりやすい
なんて気持ちもちょっとある

684デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/13(金) 16:31:54.32ID:UePpwGnn0
C99非準拠の環境って工場のメンテとかそんな感じっすかね

685デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/13(金) 16:50:15.81ID:UePpwGnn0
>>682
も気になるな

アスキーコード "2F2F"って何かあるんですか?

686デフォルトの名無しさん (ワッチョイ e961-z1uI)2017/10/13(金) 17:10:14.68ID:51NkmwHu0
emacsだとコメントリージョンは/*になるからだろうな。

687デフォルトの名無しさん (ワッチョイ 1993-grZD)2017/10/13(金) 17:23:15.84ID:kwktlkZb0
>>682 の話は行の最後に \ があると次の行に継続するってやつかな。
その言語仕様と Shift-JIS の特定文字との組み合わせで問題が起きる。
「表」や「能」は文末に来る可能性が高い字でしょ。

688デフォルトの名無しさん (ワッチョイ d360-89ZN)2017/10/13(金) 17:26:39.84ID:KnON5zi30
いまどき shift jis ですか?

689デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/13(金) 17:37:27.25ID:nzA1z5Pk0
苦Cで勉強してるけど文字列がよくわからん
あれいる?

690デフォルトの名無しさん (ワッチョイ d360-89ZN)2017/10/13(金) 17:43:15.33ID:KnON5zi30
>>689
どれだ?

691デフォルトの名無しさん (ワッチョイ fb8a-0Pb6)2017/10/13(金) 17:43:35.67ID:z3X0WVAY0
ただの\0終端の文字型の配列を便宜的に文字列と呼んでいるだけ

692デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/13(金) 17:52:09.39ID:nzA1z5Pk0
文字列処理関数
わざわざ配列に文字列入れる意味あるのか?

693デフォルトの名無しさん (ワッチョイ d360-89ZN)2017/10/13(金) 17:56:53.82ID:KnON5zi30
>>692
https://9cguide.appspot.com/14-03.html
か?
入力に scanf() 系を薦めているのは古い(fgets() を使うべき)とか問題はあるが、
内容は基本的で絶対に必要なものだ
C には「文字列型」はなく文字型の配列で扱うのは基本的な了解事項だ

694デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/13(金) 18:02:19.89ID:nzA1z5Pk0
>>693
それ
結構重要なんだな
atoi型とかもよくわからんが

695デフォルトの名無しさん (ブーイモ MMcb-13gS)2017/10/13(金) 18:05:48.92ID:1QR3MvqoM
>>692
入れないと文字処理何もできないよ

696デフォルトの名無しさん (ワッチョイ d360-cyyB)2017/10/13(金) 18:06:49.21ID:KnON5zi30
>>694
atoi() は文字列の表現からint型に収まる表現に変換するもの
C では "123" と 123 を厳密に区別する

697デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/13(金) 18:07:38.35ID:nzA1z5Pk0
わざわざ配列でやるのってprintfじゃ上書きできないから?

698デフォルトの名無しさん (ワッチョイ d360-cyyB)2017/10/13(金) 18:09:43.61ID:KnON5zi30
sprintf() というものはある

699デフォルトの名無しさん (ワッチョイ 59b3-89ZN)2017/10/13(金) 18:26:23.09ID:D1RCmTnA0
atoi は 文字列から数値へ変換する方向
(s)printf は 数値から文字列に変換する方向

700デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/13(金) 18:46:00.32ID:nzA1z5Pk0
すまんよくわからん
まぁ配列の重要性はわかったけどさ

701デフォルトの名無しさん (ワッチョイ 9123-gv9Q)2017/10/13(金) 19:47:45.81ID:9FeTZoAH0
入力して下さい ?
? の二倍は---
っての作りたい

702デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)2017/10/13(金) 19:53:08.82ID:/fw1jTt60
またfgets厨が湧いたか
Cスレには付きものだが
誰が吹き込んでるんだかしつこさが異常なんだよな
まったく

703デフォルトの名無しさん (ガックシ 06eb-HijE)2017/10/13(金) 20:16:18.00ID:qDJA92iZ6
>>701
/* -*- C -*- */

#include <stdio.h>

int main()
{
int input;
scanf("入力して下さい:%d", &input);
printf("%dの二倍は%d\n", input, input * 2);
return 0;
}

704デフォルトの名無しさん (ワッチョイ d360-cyyB)2017/10/13(金) 20:21:21.47ID:KnON5zi30
>>702
fgets() の方が総合的にすぐれていると思うのだが

705デフォルトの名無しさん (ワッチョイ 0b3f-MWTH)2017/10/13(金) 21:08:48.11ID:/fw1jTt60
何がどのように何に対して優れているんだ?
腐っても工学者たるもの客観的で再検証可能な主張をしてみな

706デフォルトの名無しさん (ワッチョイ 59b3-89ZN)2017/10/13(金) 21:11:50.63ID:D1RCmTnA0
>>703
scanf はメッセージを出力したうえで値を受け取る関数じゃないんだ 残念ながら

707デフォルトの名無しさん (ササクッテロロ Sp45-NqOW)2017/10/13(金) 21:17:30.86ID:yVfJQeWEp
え?scanfは、この通り打ち込まないと認識しないよって事だろ?

708デフォルトの名無しさん (ワッチョイ 59b3-89ZN)2017/10/13(金) 21:20:10.60ID:D1RCmTnA0
>>701 のは 入力して下さい も含めて入力を要求してたのか
こりゃ失礼

709デフォルトの名無しさん (ワッチョイ 5975-HijE)2017/10/13(金) 21:31:55.79ID:DZqiVJRN0
>>706
dクス

710片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/13(金) 21:37:13.63ID:aO55acrud
>>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;
}

711デフォルトの名無しさん (ワッチョイ d360-cyyB)2017/10/13(金) 21:39:30.87ID:KnON5zi30
>>705
scanf() はバッファオーバーランの温床
scanf("%s"); と何気なく書いてしまうとアウト
最初からバッファサイズを意識しなければならない fgets() の方が教育的

712デフォルトの名無しさん (ワッチョイ eb7f-MV6u)2017/10/13(金) 22:15:45.85ID:xDZ8VANT0
それ都市伝説だから、単に使い方間違えてるだけだから!
フィールド幅をちゃんと指定すればscanf系でも安全だよ?

まぁ、エラーメッセージの都合上fgets使うかもだけど。。。

713デフォルトの名無しさん (ワッチョイ 13cf-HoIg)2017/10/13(金) 22:16:23.56ID:HDAg9FRW0
gets_s()やscanf_s()を使えば済む話に思えるが

714デフォルトの名無しさん (ブーイモ MM0d-edxA)2017/10/13(金) 22:20:11.49ID:vlU7OwXLM
言いたいことは分かるなぁ
printfだって使い方間違えればフォーマットストリングで死ぬしな

715デフォルトの名無しさん (ワッチョイ d360-cyyB)2017/10/13(金) 22:28:05.05ID:KnON5zi30
>>712
そのフィールド幅の設定にマクロを使って指定できない,ハードコーディングの形になってしまう
これでは確保側との連携が取れない

716デフォルトの名無しさん (ワッチョイ 1387-NqOW)2017/10/13(金) 22:31:22.01ID:KDt3KwS+0
C言語はアセンブラのラッパー言語だから、そう言うもんは各自が気を付ければいいのであって、へんな関数量産すんな。

717デフォルトの名無しさん (ワッチョイ 799f-BSx0)2017/10/14(土) 04:50:34.97ID:rkGKts9o0
scanf() は POSIX.1-2008 で m という修飾子が規定されてだな・・・
https://paiza.io/projects/que1l9qus5fMStBgkGgF9w

718デフォルトの名無しさん (ワッチョイ 1993-grZD)2017/10/14(土) 05:25:15.07ID:G4fIdpwa0
m修飾子はscanf()の中でバッファの確保とポインタ代入をしてくれる、か。
使用者側がバッファを用意して容量はこれだけ、と言明するのとはちと違うね。

実用だと書式文字列をsnprintf()か何かで生成する手かなぁ。

719デフォルトの名無しさん (ワッチョイ f17f-BSx0)2017/10/14(土) 06:38:32.00ID:qjmLCkqj0
実用なら動的確保で問題ねーだろ

720デフォルトの名無しさん (ワッチョイ 799f-vMUl)2017/10/14(土) 06:44:41.93ID:YpZiBRe40
>>718
文字数制限したい場合は %3mc のように c を使うとできる。メモリ確保は相変わらず scanf() 側でやるので後で free() が必要であることには変わりがないが。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/scanf.3.html

721デフォルトの名無しさん (ワッチョイ 0bf0-MWTH)2017/10/14(土) 07:16:53.80ID:F19RwFTi0
>>711
くだらんなあ
%sのためにわざわざscanfなんぞ使う珍獣の話しかできんのかおまえは

722デフォルトの名無しさん (ワッチョイ d360-B6a6)2017/10/14(土) 09:37:54.97ID:wj7CJkun0
>>721
この話の発端のとあるC教育サイト
https://9cguide.appspot.com/14-03.html
では
scanf("%s");
を使っちまっている
珍獣というほどのものではないのでは?
禁じ手をやってしまう scanf() は悪

723デフォルトの名無しさん (ワッチョイ d360-qUyi)2017/10/14(土) 12:38:59.99ID:wj7CJkun0
>>720
所有権をうんぬんするようなところ、たとえば malloc() したところで free() する、という教義のもとでは使うのに抵抗があるかもしれない、
win32api などはそんなかんじ

724デフォルトの名無しさん (スッップ Sd33-sa4k)2017/10/14(土) 12:40:09.00ID:kY4tNrcHd
>>723
教義という表現に込められたいやらしさ

725デフォルトの名無しさん (ワッチョイ f17f-BSx0)2017/10/14(土) 12:41:35.66ID:qjmLCkqj0
>>723
windowsならscanf_s使え、posixならm修飾使えで解決ってことだな

726デフォルトの名無しさん (ワッチョイ 799f-vMUl)2017/10/14(土) 13:41:17.27ID:YpZiBRe40
windowsの方でもscanf()のmあるのでは?

727デフォルトの名無しさん (ワッチョイ f17f-BSx0)2017/10/14(土) 14:15:25.78ID:qjmLCkqj0
なんでposix拡張があると思うの?

728デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/14(土) 14:56:12.00ID:VRAn8B+V0
配列って[]だったら自力でEOS入れなきゃいけないけど[]の中に数字入れると自動で入るの?

729デフォルトの名無しさん (ワッチョイ d360-qUyi)2017/10/14(土) 15:53:03.38ID:wj7CJkun0
>>728
逆だ
数字いれると自分で \0 を入れないといけない
数字がない場合は、\0 を自力で書かなくとも良い

[迷信] scanf ではバッファオーバーランを防げない
http://www.kijineko.co.jp/tech/superstitions/buffer-overrun-of-scanf.html
[迷信] scanf でキーボードから入力
http://www.kijineko.co.jp/tech/superstitions/input-from-keyboard-by-scanf.html

731デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/14(土) 15:59:02.19ID:bKRFV+pB0
はい ちょっとお邪魔しますよ
ISR() signal() の違いについて
どちらを使うべきなのか うんちくきぼんぬですよ

732デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/14(土) 16:17:48.14ID:bKRFV+pB0
↑割り込みハンドラで使う関数についての質問です

733デフォルトの名無しさん (ワッチョイ 1387-NqOW)2017/10/14(土) 16:24:17.93ID:J5VLsuMb0
組み込み系だとmallocなんか初期化関数ん中でしか使わない。

734デフォルトの名無しさん (ワッチョイ f17f-BSx0)2017/10/14(土) 16:32:11.89ID:qjmLCkqj0
>>731
AVR libc独自か、規格で定められているかの違い
環境が限定されるならISRで良い

735デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/14(土) 16:42:09.10ID:bKRFV+pB0
なるほど! ありがとうございました


737デフォルトの名無しさん (ワッチョイ 69d2-89ZN)2017/10/14(土) 17:13:04.55ID:bKRFV+pB0
割り込みにまさかの独自ライブラリがあるとは思わなかった
>>736の参照先見ると色々なアトリビュートが設定できるようになっとるわw
その内容をみると自前で割り込み関係のレジスタ叩けば実現可能な機能ばかり
##pop/push/reti自動付加禁止だけはsignal()では実現不能?
signalでよさそうな気が。。。

738デフォルトの名無しさん (ワッチョイ f17f-BSx0)2017/10/14(土) 17:25:11.34ID:qjmLCkqj0
ANSI Cのsignalじゃなくて、AVR拡張のSIGNALのこと言ってたの?
なら、manualでSIGNALじゃなくてISR使えってなってるよ
違いも、属性指定できるかどうかだけ

http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html#ga67cd0dea412157775c2f2a3ffe9fb8ff

739デフォルトの名無しさん (ワッチョイ 0bf0-MWTH)2017/10/14(土) 19:42:35.98ID:F19RwFTi0
>>722
他には?
珍獣でないと主張するにはnが小さすぎるぜ
その小さすぎるnでどうたら言っちゃうおまえ
自らへの死刑宣告を読み上げている自覚はあるのか?

740デフォルトの名無しさん (ワッチョイ 79b3-dPak)2017/10/14(土) 19:59:48.25ID:4XKuJznc0
クッサ

741デフォルトの名無しさん (ワッチョイ d360-qUyi)2017/10/15(日) 02:10:37.75ID:12RNBD+40
>>739
https://qiita.com/Tsutajiro/items/a5620b17ac530cc96e87
https://ja.wikipedia.org/wiki/Scanf
http://www9.plala.or.jp/sgwr-t/c/sec05.html
http://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() だので処理するのが定石

742デフォルトの名無しさん (ワッチョイ 799f-vMUl)2017/10/15(日) 04:40:36.84ID:aLoOQk2A0
>>727
てか、C言語のライブラリの問題なのであるともないとも言えるよな。
POSIX準拠でないCコンパイラでも同じ動きをするライブラリをリンク時または実行時にリンクするならそう動くわけだし。
WindowsでもGCCでコンパイルするならそうなるわけだし。Cygwinの中ならなおのことそうだ。

743デフォルトの名無しさん (ワッチョイ 799f-BSx0)2017/10/15(日) 05:29:35.87ID:ZgJv24or0
そう言えば fgets() も1行の長さが指定した長さ以上になった場合に入力に残るよな。
で、だいたいは妙に長いバッファ用意して誤魔化す(またはそういう仕様にするw)わけだが、
そういうのが通用しない場合はそれを上回る入力をされた時にエラーにするかまたは入力に
残った不要な文字列を捨てる処理はあった方が良い。そうでないなら GCC の getline() を
使うかまたは自作するかだ。

744 ◆QZaw55cn4c (ワッチョイ d360-cyyB)2017/10/15(日) 06:22:39.79ID:12RNBD+40
>>743
昔宿題スレで作ったけれども忘れてしまった,まあ誰しも一回はつくるものじゃないかな

745デフォルトの名無しさん (ワッチョイ 13b3-itUa)2017/10/15(日) 07:05:24.20ID:KCBqed/H0
>>743
> そう言えば fgets() も1行の長さが指定した長さ以上になった場合に入力に残るよな。
当たり前だろ
より長い入力が想定されるなら普通に改行がでてくるまで続けて読めばいいだけだし
妙に長いバッファとかアホすぎる w

746名無し@キムチ (ワッチョイ 09b3-Qarq)2017/10/15(日) 08:51:39.88ID:kjrLb6gv0
フィギュアスケートアニメーション作成ソフト「振付王」公開!!

ダウンロード↓
http://www.vector.co.jp/soft/winnt/game/se516681.html
デモ動画↓
http://youtu.be/j8KjRXr7zGs

747デフォルトの名無しさん (ワッチョイ 0102-MWTH)2017/10/15(日) 09:47:59.48ID:J//jr+AC0
はははは、やっとn=6か
で、%sさえ使わなきゃscanfは安全なのか?

748デフォルトの名無しさん (ワッチョイ 0102-MWTH)2017/10/15(日) 09:48:32.63ID:J//jr+AC0

749デフォルトの名無しさん (ワッチョイ d360-cyyB)2017/10/15(日) 10:01:56.35ID:12RNBD+40
>>747
>はははは、やっとn=6か
いくらでも増やせますが

>で、%sさえ使わなきゃscanfは安全なのか?
fgets() 推しの俺にきかれても,そんなことはわからない‥(困惑)

750デフォルトの名無しさん (ワッチョイ f17f-BSx0)2017/10/15(日) 10:17:19.28ID:2VM8B8DT0
%sの危険性を長々と説明しているwikipediaを挙げてるんだからギャグのつもりだろ
stackoverflowも%sではなく%*sだし、scanf使ったことないのかな?

751デフォルトの名無しさん (ワッチョイ d1c7-MWTH)2017/10/15(日) 13:38:38.59ID:R4tP3Q0h0
>>749
わからないだと?
おまえシッタカこいてただけか

まあそうだろうな、%s以外に言及できないようだから

752デフォルトの名無しさん (ワッチョイ d360-qUyi)2017/10/15(日) 14:19:43.64ID:12RNBD+40
>>751
fgets()でとりあえず読み込むのは有力な方針だからね、まあsscanf() を後段で使うことはあるね
scanf() のチマチマした書式は必要時に追いかければいい、今調べる必要はないと思うね

>シッタカ
大局観といってほしいね

753デフォルトの名無しさん (ワッチョイ 794b-dPak)2017/10/15(日) 17:10:16.88ID:/ln1Xcyy0
scanf vs fgets
もう終わり?

754デフォルトの名無しさん (ワッチョイ e9c6-BSx0)2017/10/15(日) 17:14:39.09ID:Yk/ODCzd0
くだらん戦いだ

755デフォルトの名無しさん (ワッチョイ d360-qUyi)2017/10/15(日) 17:27:36.97ID:12RNBD+40
あおりネタがなくてごめん…

756デフォルトの名無しさん (ワッチョイ d108-MWTH)2017/10/15(日) 19:51:17.65ID:DZC0OlhV0
>>753
終わりつーか始まってない
そもそもscanfを把握してない御仁とでは話にならなくて

757デフォルトの名無しさん (ワッチョイ d360-qUyi)2017/10/15(日) 20:51:34.80ID:12RNBD+40
scanf() の詳細仕様を把握しないと判断できない、というのはどうかな?
scanf() が初期のころから建て増し建て増しでどんどん増えていったあの方向性は、正しくない複雑化のしかただと思うよ
scanf() を書く側にたってみると、おぞましい

758デフォルトの名無しさん (ワッチョイ e9c6-BSx0)2017/10/15(日) 21:09:03.11ID:Yk/ODCzd0
scanf()
scanf()
scanf()
scanf()
scanf()

759デフォルトの名無しさん (ワッチョイ 530f-GDEj)2017/10/15(日) 21:13:13.74ID:Y+x8OcED0
超ド級初心者なんだけどおすすめの開発環境とかある?

760片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/15(日) 21:14:17.56ID:3VVV/TO4d
>>759
Visual Studio 2017。デバッグが簡単で分かりやすい。

761デフォルトの名無しさん (ワッチョイ 530f-GDEj)2017/10/15(日) 21:17:59.72ID:Y+x8OcED0
vs2017コンパイルの仕方がわからなかった(´・ω:;.:...

762片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/15(日) 21:20:39.95ID:3VVV/TO4d
>>761
プロジェクトにソースファイルを追加して、デバッグメニューからビルドを選ぶだけだぜ。

763デフォルトの名無しさん (ワッチョイ 530f-GDEj)2017/10/15(日) 21:22:30.69ID:Y+x8OcED0
ビルド押したんだけど反応がなかったんだ・・・
もっかい調べなおしてみる
ありがとう

764デフォルトの名無しさん (ワッチョイ d108-MWTH)2017/10/15(日) 21:51:37.18ID:DZC0OlhV0
>>757
建て増しする前の単純な仕様のscanfでさえ
%sしか攻撃できない空っぽ脳みそと
どうやってコミュしろというのか教えてくれ

765デフォルトの名無しさん (ワッチョイ 5975-dPak)2017/10/15(日) 21:56:59.72ID:kn6M0KEM0
>>763
プロジェクト作成しないとビルドできない

766デフォルトの名無しさん (ワッチョイ 13d2-jnAP)2017/10/15(日) 22:38:21.05ID:kUtdNYE20
開発環境はvim+gccだろ?

767デフォルトの名無しさん (ワッチョイ fbe7-ceAT)2017/10/16(月) 05:28:44.80ID:6Nh3McCV0
C言語知ってたらC++簡単に扱える?

768デフォルトの名無しさん (ワッチョイ 198c-g9Ug)2017/10/16(月) 05:48:39.32ID:imM7X4iq0
基本的に別の言語

769デフォルトの名無しさん (スップ Sd33-BnQ2)2017/10/16(月) 06:10:08.45ID:00rzJKO2d
vs2017ならフォルダを開くで
勝手にプロジェクトが作られるんじゃなかったかな

770デフォルトの名無しさん (ワッチョイ 1993-grZD)2017/10/16(月) 06:35:40.79ID:IzFutT5/0
開発環境はvim+gcc、そしてmakeだな。

人に勧めようとは思わないけどね。

771デフォルトの名無しさん (ワッチョイ fbe7-ceAT)2017/10/16(月) 06:42:19.28ID:6Nh3McCV0
まあ入出力でCとC++で違うのは解ってたけど本読んで書いてあったのはC++で書いて動かなかったら
最悪Cで書けば動かせるということは書いてあったな

772デフォルトの名無しさん (ササクッテロロ Sp45-NqOW)2017/10/16(月) 11:15:45.26ID:tZR41NVXp
つか、コマンドラインアプリで文字列受け取るのは、実行時引数だけで充分だろ。

773デフォルトの名無しさん (ワッチョイ c9ea-89ZN)2017/10/16(月) 13:10:18.09ID:IgMp2p2X0
パイプやリダイレクト

774デフォルトの名無しさん (ワッチョイ 09b3-NqOW)2017/10/16(月) 14:21:36.48ID:JrEYnkdn0
対話型ツールなら、きちんと入力解析エンジン載せれや。
なんだよscanfってw

775デフォルトの名無しさん (ワッチョイ fb8a-z1uI)2017/10/16(月) 14:22:15.72ID:QsDGIdoW0
gccのワーニングで、「declared inside parameter list」これを無視したいです。
-Wではじまるオプションはなにを指定すればよろしいですか?

#pragma GCC diagnostic ignored "-W???

776片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/16(月) 14:30:52.70ID:XYyvKIYbd
>>775
[enabled by default]と書いてあるだろ? この警告はフラグで消せない。アホなコードを直すしかない。

777デフォルトの名無しさん (ワッチョイ fb8a-z1uI)2017/10/16(月) 14:47:20.37ID:QsDGIdoW0
>>776
フラグ以外での除去方法もないのでしょうか?
大量にでるために困っています

778片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/16(月) 14:50:42.52ID:XYyvKIYbd
>>777
警告は、引数リストの外側で必要なものを宣言すべきという意味だ。

779デフォルトの名無しさん (ワッチョイ c9ea-89ZN)2017/10/16(月) 14:55:55.53ID:IgMp2p2X0
https://ideone.com/91sohX
へぇ 構造体のポインタだし通しそうだけど警告出す仕様なのか
(3行目 実体は不明だけど構造体のポインタを受け取るぞ宣言で警告)

780デフォルトの名無しさん (ワッチョイ 13e1-IVl6)2017/10/16(月) 14:58:01.40ID:rvbv2fod0
>>775
gcc -w

781片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/16(月) 14:58:20.84ID:XYyvKIYbd
関数の前にstruct aho;とでも書いておけ。

782デフォルトの名無しさん (ワッチョイ fb8a-z1uI)2017/10/16(月) 15:04:51.05ID:QsDGIdoW0
>>778
原因はわかっています。
構造体宣言を別のヘッダーで行っているにもかかわらず、
プロトタイプ宣言しているヘッダーより上に定義がないのが原因です

>>780
gcc -w ?
#pragma GCC diagnostic ignored "-w" でしょうか?

783デフォルトの名無しさん (ワッチョイ c9ea-89ZN)2017/10/16(月) 15:09:07.34ID:IgMp2p2X0
本当の定義じゃなくて 仮定義を前に置くだけで消えるのな
struct foo;
void func(struct foo* arg);

784sage (ワッチョイ fb8a-z1uI)2017/10/16(月) 15:25:30.24ID:QsDGIdoW0
>>783
やはりそのように潰していくしかないのでしょうね。

785デフォルトの名無しさん (ワッチョイ 13e1-IVl6)2017/10/16(月) 15:43:34.17ID:rvbv2fod0
>>782
-Wで始まるオプション名は無いので無視するにはコマンドラインで-wを指定するしかない

786デフォルトの名無しさん (ワッチョイ 799f-vMUl)2017/10/16(月) 22:46:04.81ID:snZUUJVe0
>>784
いや、てか、そのヘッダ書き換えられないのか?

787デフォルトの名無しさん (ササクッテロロ Sp45-NqOW)2017/10/16(月) 22:49:48.00ID:tZR41NVXp
自身のポインタを構造体に宣言するのと同じ様に書けよ。

788デフォルトの名無しさん (ワッチョイ 41a5-Yjam)2017/10/16(月) 23:21:23.22ID:7Byc8Q4r0
>>767
C 高級アセンブラ
++ ハナモゲラ

789デフォルトの名無しさん (ワッチョイ 09b3-XdBn)2017/10/17(火) 20:18:22.83ID:Q3d5MYhb0
とりあえず勉強の成果として作ってみたら失敗した
なんでだ

#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;

}

790デフォルトの名無しさん (ガックシ 06eb-dPak)2017/10/17(火) 20:29:18.04ID:FJCAd6676
>>789
scanfのところの\nって要らなくね

791デフォルトの名無しさん (ササクッテロロ Sp45-NqOW)2017/10/17(火) 20:54:03.89ID:Usq7nzejp
こんなすぐに桁溢れしちまう様なサンプル作ったら、何を試したいのかわからんだろ。

792デフォルトの名無しさん (ワッチョイ 1312-B6a6)2017/10/17(火) 21:06:51.02ID:BSHBGdow0
しかしてfor文の中身を見るに全くの素人じゃあないな

793デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/17(火) 21:08:48.81ID:Q3d5MYhb0
>>790
消したら動いた
ありがとう

794デフォルトの名無しさん (ワッチョイ f99e-0oEc)2017/10/17(火) 21:24:15.93ID:0jVjcAN80
>>792
どのあたりが?

795デフォルトの名無しさん (ササクッテロロ Sp45-NqOW)2017/10/17(火) 21:33:12.55ID:Usq7nzejp
初期化をあんなとこに書いたらコーディング規約で叩かれるしなぁ〜

>>794
forのカッコ内には同じ変数しか書いちゃダメって思ってる初心者はいるかも
個人的には変数名からCOBOLer疑惑の方が強い気がする

797デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/17(火) 21:57:54.65ID:Q3d5MYhb0
VS2017でやってるんだがさっき作ったプログラムを保存して別のファイルで勉強を再開しようとして新しくファイルを作ったんだ
そしてテストも兼ねてさっきのプログラムコピペしたら
プリコンパイルヘッダーを検索中に不明なEOFが見つかりました。
'#include"stdafx.h"をソースに追加しましたか?
と出た
さっきは何もなかったのに

798デフォルトの名無しさん (ワッチョイ 5975-dPak)2017/10/17(火) 22:19:31.03ID:PpmRGT3a0
>>797
それな
よく分からんけど空のプロジェクトってやつでプロジェクト作って自分でソースファイル作成すれば出てこない
まあ詳しい人が教えてくれるかも

799片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/17(火) 22:26:24.33ID:/2LkUivAd
>>797
プリコンパイルヘッダーというのは、プロジェクト内のヘッダーを事前にまとめてコンパイルしてビルドを早くする仕組みのことだ。
通常、stdafx.hというヘッダーにプロジェクトで使うヘッダーをまとめる。
一つ一つのソースファイルごとのプロパティでプリコンパイルヘッダーを作成するか、使用するかを設定できる。

800デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/17(火) 22:30:05.39ID:Q3d5MYhb0
>>799
つまり…どういうことだってばよ

801デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/17(火) 22:35:56.33ID:Q3d5MYhb0
ソースコード関係の知識は苦Cやらで積めるけどソフトやらの知識はどこで積むんだ

802片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/17(火) 22:36:28.37ID:/2LkUivAd
プリコンパイルヘッダーを使用するのであれば、プロジェクト内のどこかのソースファイル(例えばstdafx.cpp)を使って、プリコンパイルヘッダーを作成しないといけない。
あるソースファイルにおいてプリコンパイルヘッダーを使用するのであれば、プリコンパイル対象のヘッダーを#includeして、そのソースファイルがプリコンパイルヘッダーを使用することを設定する。
プリコンパイルヘッダーを使用しないなら、すべてのソースのプロパティでプリコンパイルヘッダーを使用しないように設定する(空のプロジェクトの規定値)。

803片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/17(火) 22:39:12.15ID:/2LkUivAd
ソースファイルが二、三個なら、とくにプリコンパイルヘッダーは、必要ない。

804デフォルトの名無しさん (ワッチョイ 13b3-itUa)2017/10/17(火) 22:43:34.43ID:kMB04QqG0
>>800
おとなしく>>798の言う通りにしろってこと

805片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd33-WP5G)2017/10/17(火) 22:44:21.68ID:/2LkUivAd
ソースファイルのプロパティは、IDE内のソースファイルのアイコンを右クリックして「プロパティ」を選ぶと設定できる。

806デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/17(火) 22:59:14.26ID:Q3d5MYhb0
>>804
とりあえず空のファイルは作れたけどソースが書けん

807デフォルトの名無しさん (ワッチョイ 5975-dPak)2017/10/17(火) 23:01:36.30ID:PpmRGT3a0
新しいプロジェクト

空のプロジェクトを作成

空のソースコードファイルを追加

>>789をコピペ

実行

808デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/17(火) 23:02:26.49ID:Q3d5MYhb0
>>807
空のソースコードファイルどうやって作るんだ

809デフォルトの名無しさん (ワッチョイ 5975-dPak)2017/10/17(火) 23:08:36.86ID:PpmRGT3a0
>>808
プロジェクト開いたときの右にあるソリューションエクスプローラの中のソースファイルというフォルダを右クリックして「追加」から「新しい項目」をクリック。
「C++ファイル」を選択した状態でファイル名の拡張子を.cに変えて「追加」ボタンを押す。

810デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/17(火) 23:15:28.33ID:Q3d5MYhb0
>>809
できた
もしこれから新しくファイルを作る場合はこれを一からやるのか?

811デフォルトの名無しさん (ワッチョイ d3f9-QUVh)2017/10/17(火) 23:17:42.23ID:nwT4mK5H0
そろそろ適切なスレに移動しようか

812デフォルトの名無しさん (ワッチョイ 5975-dPak)2017/10/17(火) 23:18:59.07ID:PpmRGT3a0
>>810
うん。
簡単なプログラムならVSでプロジェクト作るよりもスタートメニューのVSのフォルダの中にある開発者コマンドプロンプト使ってclコマンドでコンパイルした方が手軽だな

813デフォルトの名無しさん (ワッチョイ 09b3-FNzi)2017/10/17(火) 23:21:25.70ID:Q3d5MYhb0
>>812
ありがとう
これ以上はスレチだからやめておこう

814デフォルトの名無しさん (ワッチョイ 5975-dPak)2017/10/17(火) 23:46:56.11ID:PpmRGT3a0
スレチかもしれないけどVS2017でANSI C(C99/98, ブロック先頭でしか宣言できないやつ)だけしかかけないようにできますか?

815デフォルトの名無しさん (ワッチョイ 7985-BSx0)2017/10/18(水) 18:18:50.69ID:oOtBC3bP0
みなさんは関数名の後に続く中括弧の前に改行を入れますか?入れませんか?

例えば、
int main(void) {
  /* 処理 */
}
のようにするか、

int main(void)
{
  /* 処理 */
}
のように書くのか、どちらが多いのか気になります。

816デフォルトの名無しさん (ガックシ 06eb-dPak)2017/10/18(水) 18:20:58.46ID:M3PcmRrI6
入れます

817デフォルトの名無しさん (ワッチョイ 41a5-PxAS)2017/10/18(水) 19:40:16.86ID:3bYwz/rX0
if ()
{
}
ならいいけど
for () {
}
だと整合性無いじゃん
って話なら気にするな
だな

818デフォルトの名無しさん (ササクッテロラ Sp45-NqOW)2017/10/18(水) 21:12:51.09ID:QINtBhkfp
各社のコーディング規約に合わせます。


820デフォルトの名無しさん (ワッチョイ 799f-BSx0)2017/10/18(水) 23:24:47.06ID:bG8m3FQp0
>>815
改行入れるね。

なんでそうなったかというと、C言語は昔は引数の型をカッコ内に書けなかった。つまり

int main(argc, argv)
int argc;
char *argv[];
{
 ・
 ・
 ・

 return 0;
}

のようにしか書けなかった。その当時から覚え始めたというのと、K&R もそれで書いて
あったのでそのまま何も考えず俺の中で改行入れるのが定着した。

821デフォルトの名無しさん (ワッチョイ cee7-gNqP)2017/10/19(木) 01:30:41.79ID:gvKdwGxW0
for()
{

}
こうしたときに一行増えるから嫌だだっていう人が多そうだな

822デフォルトの名無しさん (ワッチョイ c161-U5aN)2017/10/19(木) 07:54:32.06ID:b5KBJ9M60
それは宗教問題なので決着は付きません。

823デフォルトの名無しさん (ワッチョイ a623-0GSP)2017/10/19(木) 09:08:44.46ID:TosC+FXp0
関数では改行して、制御構文では改行しない
みたいなオレルールにしてる

824デフォルトの名無しさん (ササクッテロラ Sp85-DwBb)2017/10/19(木) 10:07:41.47ID:+lKpulfRp
c#みたいにメソッドを直接鉤括弧内にベタ書き出来る言語でもなけりゃ先行改行一択なんだがなあ

825デフォルトの名無しさん (ワッチョイ cee7-h3yZ)2017/10/19(木) 10:25:15.32ID:r/pcyA6+0
貴重な一行

826デフォルトの名無しさん (ガックシ 06ee-G561)2017/10/19(木) 10:27:21.64ID:SxBqlyg46
>>824
どういう意味?

827デフォルトの名無しさん (ブーイモ MM71-WXi2)2017/10/19(木) 11:44:04.67ID:zAbDVwTYM
今みたいに時間単価での清算が主流になる前は、
ステップ単価清算ってのもあって、K&R以外で書くと
増量しているって言われていたの。

cb とか indent なんてコマンドはその名残かな

828デフォルトの名無しさん (ワッチョイ a623-0GSP)2017/10/19(木) 12:07:16.71ID:TosC+FXp0
>>826
無名関数が書けると最初の { 前の改行がおかしい気になるので
自動的に改行入れない派になるという話では?

829デフォルトの名無しさん (ワッチョイ 1a87-dU7J)2017/10/19(木) 12:17:59.77ID:rxi99hG50
>>823
俺もそれで落ち着いた

830デフォルトの名無しさん (ブーイモ MM71-v1IO)2017/10/19(木) 12:34:12.75ID:LAmWAPnYM
>>815
統計取る方法がないから、確実な答えはわからないと思うよ。
で、戦争のたびに出る結論が「気にするな」「仕事環境に従え」なんだよねー。

で、俺はどうかと言うと、俺も不思議と>>823に落ち着いた。

831デフォルトの名無しさん (ワッチョイ 3dea-U5aN)2017/10/19(木) 14:41:51.95ID:cxE3kH8I0
https://ja.wikipedia.org/wiki/字下げスタイル
戦争だ

832デフォルトの名無しさん (ワッチョイ ddb3-q7ul)2017/10/19(木) 15:33:33.89ID:PsgLgPWo0
http://9cguide.appspot.com/15-05.html
これのモードの切り替えってところで判定結果違うんだが俺だけ?
pがでたらめな数字になる
コピペしても変わらなかったから多分タイプミスとかじゃないと思う

833デフォルトの名無しさん (ワッチョイ 3dea-U5aN)2017/10/19(木) 15:40:34.18ID:cxE3kH8I0
下の[実行結果] のように出力されるためには

× printf("p = %d\n",p);
○ printf("*p = %d\n",*p);

でないとな

834デフォルトの名無しさん (ワッチョイ ddb3-q7ul)2017/10/19(木) 15:50:26.60ID:PsgLgPWo0
できた
ありがとう

835デフォルトの名無しさん (ワッチョイ cee7-gNqP)2017/10/19(木) 22:50:52.77ID:4jVxr5CI0
10 1
scanf("%d%d", a, b);
こう読み込んだ時に空白を飛び越えて読み込んでくれるん?
10,1
この時はエラーになっちゃう?

836デフォルトの名無しさん (ワッチョイ c575-G561)2017/10/19(木) 22:53:39.25ID:Y4NllfOF0
多分空白はできる
,を入れたかったら%d,%dすれば多分できる

837デフォルトの名無しさん (ワッチョイ 19a5-FNU/)2017/10/19(木) 23:25:36.20ID:6TDKNKTM0
scanfのフォーマット指定は面倒だぞ
正直使いこなす気すらない

838デフォルトの名無しさん (ワッチョイ 19a5-FNU/)2017/10/19(木) 23:26:22.86ID:6TDKNKTM0
if ()
{
}
else
{
}
無いわな

839デフォルトの名無しさん (ワッチョイ 1981-bcII)2017/10/19(木) 23:41:36.02ID:c1L92+Tr0
if () {

}
else {

}

このフォーマットだと心が平和

840デフォルトの名無しさん (ワッチョイ a568-OJdz)2017/10/19(木) 23:52:20.12ID:vx5pXf0B0
>>828
うん、さっぱり分からん
そもそも鉤括弧って「」だし。

841デフォルトの名無しさん (ワッチョイ cee7-gNqP)2017/10/20(金) 00:41:34.11ID:Wby94Fq80
>>837
入力が決められてなかったらscanfじゃあできないからわかるわー

842デフォルトの名無しさん (ワッチョイ 1a87-dU7J)2017/10/20(金) 01:19:37.06ID:l11teSHI0
>>839
俺もそれ

843デフォルトの名無しさん (スッップ Sd9a-+59V)2017/10/20(金) 04:37:42.47ID:yDlUYSKqd
>>827
バージョン管理、コーティング規約対応用だろ

空白文字の使い方に無頓着なカスが存在する限り必須

844デフォルトの名無しさん (エーイモ SE7a-5x7G)2017/10/20(金) 09:24:11.93ID:NCAWbF0uE
本買うお金がないのですが公式なドキュメントってどこで見れますかね?

845デフォルトの名無しさん (ワッチョイ ddb3-0MKJ)2017/10/20(金) 09:53:04.65ID:VprmOZRL0
>>1に書いてあるのではだめなん。

846デフォルトの名無しさん (ワッチョイ d6e8-bcII)2017/10/20(金) 09:58:32.79ID:rxHA3C970
質問が漠然としすぎてる。

847デフォルトの名無しさん (ササクッテロラ Sp85-DwBb)2017/10/20(金) 10:55:02.73ID:7oD3lqB2p
C言語の仕様は規格が決まってるから、調べれば幾らでもネットに落ちてるんだがなぁ〜

848デフォルトの名無しさん (ササクッテロラ Sp85-DwBb)2017/10/20(金) 10:56:41.44ID:7oD3lqB2p
ランタイムライブラリやプラグマやデファインの事なら使ってるコンパイラにドキュメントがあるだろ?

849デフォルトの名無しさん (ワッチョイ 8dd2-U5aN)2017/10/20(金) 12:36:54.91ID:XMzxe3/+0
ネスティングを気にするかどうかは各自のスタイルによる
気にならない書き方はいくらでもできるし
ファイル分割がいやでべた書きする奴はネスティング気にするだろ

850デフォルトの名無しさん (ガックシ 06ee-G561)2017/10/20(金) 12:40:39.31ID:3KJGg1dF6
どう思う?


#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;
}

851デフォルトの名無しさん (ワッチョイ 8dd2-U5aN)2017/10/20(金) 12:43:18.91ID:XMzxe3/+0
ネスティングが浅い記述しか書かない奴にとってはどうでも良い案件なんですよ
技術計算を多用するコード例だとネスティングちゃんとしないと分けがわからなくなる

新着レスの表示
レスを投稿する