1 名前:デフォルトの名無しさん mailto:sage [2015/08/18(火) 07:10:18.03 ID:47QFVOwL.net] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用) 前スレ 【初心者歓迎】C/C++室 Ver.96【環境依存OK】 peace.2ch.net/test/read.cgi/tech/1433514467/
337 名前:プログラム初めてやってます mailto:sage [2016/01/27(水) 19:48:26.87 ID:GcWX3DUV.net] 2ちゃんねる初めてなので、書き方間違ってたらごめんなさい。 負の値の整数値をscanfで読み込んで、 絶対値を求めるプログラムを書きたいのですが 今の所わかってる知識としてはprintfでの簡単な計算と、簡単なif文のみです 課題としては、printf、putsとif文 今までに習った関数を用いてやれと言う事だと思うんですが どう考えてもわからなかったため、どうか質問させてください
338 名前:デフォルトの名無しさん [2016/01/27(水) 19:58:02.06 ID:0xRCKJUw.net] scanfなんて危険で難しい関数を何故初心者に使わせたがるのか
339 名前:デフォルトの名無しさん [2016/01/27(水) 20:04:03.17 ID:Fmvz75rf.net] Cは危険な関数から入る傾向あるよね
340 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 20:10:22.92 ID:j65DqSaH.net] >>338 それ以上に簡単な入力手段がないからだろ
341 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 20:12:44.23 ID:1VQKsEBj.net] fgetc() じゃきっついか
342 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 20:24:33.23 ID:ghSXEhkj.net] >>337 https://ideone.com/Kn3dfH
343 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 20:43:01.06 ID:H/VHXeqj.net] 危険な関数と言えば printf() もかなり危険だよね。 printf("hello, world\n"); なら大丈夫だけど、 printf("all 50%discount today\n"); だともう怪しい。 >>339 の言う通りだわ。
344 名前:デフォルトの名無しさん [2016/01/27(水) 21:34:21.69 ID:tY0EzgE5.net] Cは低レベルを担当する言語なので扱いは高レベルな者が担当する。なので危険で良い。効率こそ正義 問題はそんなものを初学者に学ばせること。初学者がそんな重要な部分の開発をするわけがないのだから
345 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:06:55.48 ID:eULyfEEH.net] Cより覚えることが少なくてシンプルで他の言語の基礎になっていて 学んだことの応用が効いて実用性のある言語が他にあるか? 初心者が学ぶのに妥当だと思うが
346 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:09:52.37 ID:3jiwec3B.net] むしろCこそ初心者に無駄が大杉
347 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:23:38.65 ID:13Hm1XjY.net] C言語を覚えるのはCPUを覚えるのと大差無いから基本であるが難しい。 一人では全く何もできないコンピュータに1から仕事を教える物でもある。 だが、ラクしてjavaやperlに走る人とは付き合いにくい。
348 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:29:27.89 ID:4Ckw423u.net] 覚えることの多寡はやりたい目標で決まるから何とも言えん 電卓として使う程度ならどの言語だって大して変わらんし
349 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:37:38.39 ID:1VQKsEBj.net] 入出力がちょっと気を使うけど、 学習の重点となっているところが、入力後から出力前に集約できてれば良いんだが…
350 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:38:02.86 ID:LZEmbO/H.net] 派手なGUIゲームを作るならCは遠回りだろうけど 大学の講座とかで教えるならCを超える言語あるかな? Javaとか?
351 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:44:41.36 ID:4Ckw423u.net] それも講義の内容次第としか 工学系で高級なアセンブリとして使うならC
352 名前:デフォルトの名無しさん mailto:sage [2016/01/27(水) 23:50:57.65 ID:eULyfEEH.net] 実際問題JAVAとかC#は最初に教えるにしては覚えることが膨大すぎると思うよ ボクシングとかアンボクシングとかどうやって教えればよいのか頭が痛いだろう C++なんかもってのほかだしさ >CPUを覚えるのと大差無いから基本であるが難しい CPUに詳しくなって悪いことは無いよね、どんな言語にも応用が利くし Cはいろんな言語のベースになっているからCを覚えると他の言語に展開しやすい 言語仕様も必要最小限でかつ、ぎりぎり実用可能なレベルで玩具というわけでもない これがRubyとかなら、matzの実装について詳しくなる必要があるわけだが こんなものを学んだところで有り難くない
353 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 05:14:25.23 ID:a6m1UVUK.net] CPUというか、アセンブリ言語を少し知ってると ポインタの理解あたりが容易になるのは間違いないね。 ただし、特定のCPUに詳しくなりすぎると 慣用表現から外れた独特な書き方を始める弊害もあったり。 ・C慣用 for (i = 0; i < 10; i++) ・C++慣用 for (i = 0; i != 10; ++i) ・あるCPUのアセンブラ経験者 for (i = 10; i != 0; --i) どのループも10回の繰り返しのはずだが、 今となっては3番目は本当に10回か自信がないわ。
354 名前:デフォルトの名無しさん [2016/01/28(木) 05:52:39.11 ID:OteWNMPZ.net] ・C++慣用 for (i {0}; i < 10; ++i)
355 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 06:04:06.09 ID:xn/xn1Lr.net] >>354 出直してこい
356 名前:デフォルトの名無しさん [2016/01/28(木) 06:35:33.04 ID:OteWNMPZ.net] ひぇっ!
357 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 06:51:25.56 ID:87VXcHuk.net] >>352 > ボクシングとかアンボクシングとかどうやって教えればよいのか頭が痛いだろう そんな特殊な機能は必要になった時に教えればいいだけだろ バカなのか?
358 名前:プログラム初めてやってます mailto:sage [2016/01/28(木) 07:10:42.59 ID:v1B3KP04.net] 342>> 342さんありがとうございました! 書き込んでから自分でも考えてみていて、 こんな感じになってました #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> /* 読み込んだ整数値の符号を判定 */ int main(void){ int a; printf("整数を入力してください:"); scanf("%d", &a); if (a < 0) a = -a; printf("絶対値は%dです"); return 0; } 342さんのコーディングすごいですね! 参考になりました ありがとうございました!
359 名前:プログラム初めてやってます mailto:sage [2016/01/28(木) 07:11:49.38 ID:v1B3KP04.net] 余計なコメントはいってました・・・ 無視でお願いします・・・;
360 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 12:31:44.00 ID:a9w0Gglx.net] そもそもプログラミングの基礎は人に習う物じゃない 参考書なりネットなりで一人で勉強するもんだ 基礎から教えて貰わなきゃ理解出来ない時点でプログラマーに向いてない
361 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 12:36:59.20 ID:mW8CPdak.net] そうか?別に教わってもいいと思うが でも応用効かないのは向いてないと思う
362 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 12:43:58.60 ID:U7RHxiIq.net] 生涯でただ一つの言語しか覚えられないという宗教的理由があるならC一択 そうでないならCからとか論外
363 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 12:51:39.77 ID:a9w0Gglx.net] 書き方が悪かった 一人で考えても分からない所を聞くのは別にいいと思うが、 授業とかで教えて貰うまで参考書があるのに手も付けない奴は向いてないと言いたかった
364 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 13:04:08.57 ID:mW8CPdak.net] あまり勤勉なやつも向いてない気がするが 仕事にするんじゃなきゃ関係ないか
365 名前:デフォルトの名無しさん [2016/01/28(木) 15:21:07.00 ID:hWNVXd5g.net] 数学やプログラミングはいかに楽してそれを済ませるかがテーマな所ありますよね 面倒くさがりでズボラな人が怠惰を求めて勤勉に行き着く過程が王道では だから教育としてはいかにそれが面倒くさいか、いかにそれをやらずに済ませるかを強調していく
366 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 16:30:44.07 ID:CWsUf0Ic.net] 初心者歓迎なんでね。
367 名前:デフォルトの名無しさん mailto:sage [2016/01/28(木) 22:38:32.61 ID:to2yFDLL.net] Cから教えるのが論外とか言っている人は 他のどの言語から教えたほうが良いと思っているのか書くべきだよね
368 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 03:01:29.22 ID:bzmjGvNe.net] >>363 向いていないというか興味が無いんだと思う 必須授業とかで無理やりやらされてる感じ >>365 一度作ってしまえば後は利用して効率が上がるからなw ずっと面倒か作る間だけ面倒で後楽かを選ぶだけで >>367 ただ批判するだけじゃ誰でもできるからな
369 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 09:02:47.15 ID:x/sxD8ME.net] (Lispの)Schemeを頭のいい人に教えるのには10分と掛からないってジョエルは言ってる。 Cは頭が良くても10分じゃ覚えきらん。仕様書からしてSchemeの10倍近く分厚いからな。2時間は掛かるんじゃねぇか?
370 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 09:49:39.15 ID:qombZsi/.net] >>369 仕様書の厚さに比例するっていう観点は公平だと思うよ
371 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 10:14:08.59 ID:x/sxD8ME.net] ふむ。 仕様書が分厚いからCを教えるのが論外だとするのなら、 手続き型系の言語で教えるのに適した言語はPASCALかLuaあたりになると思う。 Lua良いよLua。PASCALもね。
372 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 13:26:54.55 ID:cTI0Jdzp.net] Cは概念だと思うけどね。ポインタと構造体を脳内でイメージできるようになったらおkかと。 後はリファレンスさえあれば、一生忘れる事はないと思うけどなぁ。 C++はもう底なしでw でもそれが楽しいのですが。
373 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 15:52:03.82 ID:9SCZR58b.net] 目的に最も近いと思われる言語を教えるのが初学者への配慮であって 入門に最も適した言語なんてのは幻想だと思う
374 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 17:58:02.16 ID:cTI0Jdzp.net] 今は専門学校ではjavaなのかな
375 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 18:08:01.54 ID:BAJfHtoc.net] うちの専門学校では1年目はC、2年目にJavaだったよ
376 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 18:47:15.34 ID:i41mJkcJ.net] うちは1年目はPASCAL、2年目にCをやり、3年目にSchemeとPrologを触り、4年目はCで研究したよ。 専門じゃなくて国立だけど。
377 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 19:53:42.72 ID:XYL4UGBK.net] 俺も一年目はPascalだったが Pascal教えられていたときは激しくモチベが下がった 2年目にCになって無茶苦茶うれしかったよ だって、Pascalは現場で使われてない言語だったから 何処でも使われてない言語を覚える苦痛と言ったらね breakが有るくせにreturnが無いあたりも最悪だった returnが無いから、どうにもこうにも関数の最後までいかないと 関数を抜けれないんだよ! 当然フラグだらけになるし、マジ鬼畜言語だと思った その点Cは未だに世界中で使われている言語なわけで だったら覚えてみようってなるし、モチベが上がるってものよ
378 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 20:07:57.52 ID:cTI0Jdzp.net] ふむふむ Pascalはセミコロンの位置で頭が禿げるw Delphiとか評判良かったんだけどねぇ。
379 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 20:57:35.02 ID:6a9kiPQ9.net] >>378 式文とdo-while文にセミコロンを含むか、 各文の間は必ずセミコロンで区切るかの差であって、 どちらも一貫してるよ
380 名前:デフォルトの名無しさん [2016/01/29(金) 21:36:27.47 ID:KHfAKsC3.net] ここは血迷ってAWKから入門させよう。ついでに正規表現も学ばせよう
381 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 21:56:42.92 ID:XYL4UGBK.net] 一貫してても使いにくかったら意味ねーんだわ
382 名前:デフォルトの名無しさん mailto:sage [2016/01/29(金) 22:13:16.22 ID:V57FZVNV.net] じゃあ苦情の上がっていないJavaScript最強ってことだな
383 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 03:16:59.92 ID:d4C/IYFO.net] マルチコアが当たり前になってGPGPUの手段が広がって低レベルが回帰の予感
384 名前:デフォルトの名無しさん mailto:sage [2016/01/30(土) 12:04:09.34 ID:qiIX3neU.net] そこでllvm-irですよ
385 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2016/01/31(日) 18:52:32.63 ID:KGvneECt.net] Cの文字列はヌル文字があるとそこで終わりだけど、 C++のstd::stringは長さを記録しているから、ヌル文字が 途中に来ても大丈夫! ということはstd::stringはバイナリデータも扱えるんだ! 大発見だね!
386 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 18:56:36.30 ID:umKDphm1.net] どうした急に
387 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 21:04:07.72 ID:kn/5LVuq.net] 今更すぎるな 単にC++11以前は連続した領域に確保されることが保証されてなかったからバイナリデータ置き場として使われてなかっただけ
388 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 21:13:17.94 ID:JH58iwLT.net] >>385 の知識が残念なのは言うまでもないとして 話を理解できない>>387 はもっと哀れ
389 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 23:23:19.06 ID:0VTupv6x.net] 自分の知識を総動員してドヤ顔してるんだからそっとしておいてやれ
390 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 00:16:08.05 ID:Jc+yiccs.net] そう指摘されても何を理解できてないのか理解できてないからもっと哀れだわ ハハッ
391 名前:デフォルトの名無しさん [2016/02/01(月) 01:45:26.45 ID:k88EDqNX.net] ここは初心者にフレンドリーでハートウォーミングなインターネットですね
392 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 04:58:19.06 ID:wHu9vKIt.net] >>390 >>386
393 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 17:08:19.81 ID:Ev74Df4F.net] >>392 のように日本語の文脈も読みとれない知能障害も 生きてて辛いだろうな
394 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 19:06:25.95 ID:aUqGS129.net] アホが文脈読めとか笑える スゲーいいこと書いたつもりなんだろうなぁ w
395 名前:デフォルトの名無しさん mailto:sage [2016/02/01(月) 21:07:47.33 ID:cp5cboQs.net] 最近の2chは過疎も納得の糞さだな。
396 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 11:36:29.11 ID:NTv/QStd.net] >>387 まじ? 連続性保証されてると思ってたわ。 vectorは03で規格化されてたよね? stringはされてなかったのか。 ま、いっか。
397 名前:デフォルトの名無しさん [2016/02/02(火) 22:25:20.39 ID:+WV++cRd.net] 助けてください 実数を2つ入力させて大小比較させるプログラム codepad.org/JYV0bpuL
398 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 22:29:57.47 ID:7f7wf/mW.net] elseの後にifが無いな
399 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 22:34:55.10 ID:7f7wf/mW.net] あれ? 同じ環境で、同じ入力文字列から読み取った二つの浮動小数点数型数が厳密に一致するって仕様で決まってたっけ? つまり、入力として 0.1 0.1 って入れた時に、scanf("%lf%lf", &a, &b);なりなんなりした後のa == bの値って処理系依存だっけ?
400 名前:デフォルトの名無しさん [2016/02/02(火) 22:58:44.04 ID:+WV++cRd.net] >>398 通りました。ありがとうございます。 けど、最後のはifがなくてはならないのでしょうか。 ストラウストラップ自身のテキストに、最後はelseとなっているのですが。
401 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 23:00:44.47 ID:7f7wf/mW.net] >>400 ストラなんちゃらってのは知らんけど (a == b)が付くなら文法上ifが必要。 ifを省くなら括弧も省け。
402 名前:デフォルトの名無しさん [2016/02/02(火) 23:05:17.62 ID:+WV++cRd.net] >>399 実際のところ、 「2つの数字の差が1.0/10000000未満である場合に、どちらが大きくてどちらが小さいかを 書き出した後、the numbers are almost equalと書き出すようにプログラムを変更する」 という問題で、これより前にint型をdoubleに変更しろという問題もあって、 a == b はここでは必要ないかもしれないです。
403 名前:デフォルトの名無しさん [2016/02/02(火) 23:07:14.24 ID:+WV++cRd.net] >>401 あ。たしかに最後は条件式書いてないです。ありがとうございます! >>ストラ C++の設計者です。
404 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 23:11:00.17 ID:7f7wf/mW.net] >>403 誰かと思ったらB. Stroustrupさんか。 カタカナって難しい
405 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 23:13:08.88 ID:RveVHAYz.net] ハゲはa<bでもa>bでもなければa==bと考えてしまうほどモウロクしたんだろうか 最近の老衰っぷりを見るとかなり頭がヤバそうだが
406 名前:デフォルトの名無しさん [2016/02/02(火) 23:18:37.12 ID:+WV++cRd.net] >>405 細かいエラーは最後の「小数が入力されてない」で一括りなんです。 入門書なんで。
407 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 23:20:19.55 ID:7f7wf/mW.net] >>406 多分そういうことじゃないと思う。
408 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 08:53:05.13 ID:6UPbxu8z.net] >>399 その入力の結果 memcmp(&a, &b, sizeof a) で 0 は保障して欲しいところだな 処理系依存だとなんかキモイ
409 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:15:51.45 ID:JXLYa8UB.net] うーむ 0.1 == 0.1 atod("0.1") == atod("0.1") atod("0.1") == 0.1 ぜんぶ成立してほしい 誰か規格を解読して
410 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:19:42.77 ID:lWEagrs5.net] 前回は皆さん色々ご検討くださってありがとうございました。 皆さんにお礼も言わずに去ってしまったなと思っていたのですが、 その後、高度な(に私は見えました)話題が続いていたので水を差してはいけないと思って どうしてもわからない事が出てきてしまって、また来てしまいました。 【二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の 全整数を加えた値を表示するプログラムを作りなさい 】 という課題なのですが インクリメント記述、全整数表示まではうまくいったのですが、 この後の合計値がどうしても出せません ご助力お願い致します。 ここまでできたのですが… https://ideone.com/THBj7S 多分恥ずかしいコーディングだと思います…
411 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:21:57.21 ID:lWEagrs5.net] 記述し忘れたので追記 2つの整数を入力し a以上b以下の全整数の和を求めなさいとの事でした
412 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:23:18.63 ID:Gb259GwX.net] >>410 for (i = min; i <= max; i++) {sum += i;}
413 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:24:14.98 ID:lWEagrs5.net] ありがとうございます! でも、for文はまだ出てきてなくて、for文を使わずにと言う事でした
414 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:36:23.49 ID:JzoFZA2F.net] またqの炎上学習法か?
415 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:37:46.94 ID:JXLYa8UB.net] >>413 たとえば、1から1000の合計の計算式知ってれば、それを使う
416 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:40:20.13 ID:lWEagrs5.net] ?? 何かの本ですか? 一応ある本の課題を見ています 今までに習ったのは簡単なprintfでの計算とif文do文なのですが
417 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:46:44.73 ID:XI3wSbIf.net] >>409 atodと言うものが何物かは知らんが保証は無いんじゃね ISO/IEC 9899:2011 5.2.4.2.4p6 The accuracy of the floating-point operations (+, -, *, /) and of the library functions in <math.h> and <complex.h> that return floating-point results is implementationdefined, as is the accuracy of the conversion between floating-point internal representations and string representations performed by the library functions in <stdio.h>, <stdlib.h>, and <wchar.h>.
418 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:48:09.46 ID:XI3wSbIf.net] 誤 5.2.4.2.4 正 5.2.4.2.2 Characteristics of floating types
419 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:51:30.15 ID:O/9tVwNc.net] >>416 min = 5, max = 10, sum = 45て事なら sum = ((min + max) * (max - min + 1)) / 2; じゃあかんの?
420 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 10:53:19.38 ID:Gb259GwX.net] >>416 forはwhileやdoを使って書き直せる。 for (A; B; C) D; A; while (B) {D; C;} A; do {if (B) {D; C;}} while (B);
421 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:55:10.44 ID:lWEagrs5.net] >>416 416さんありがとうございます!できました! 皆さんもいろいろありがとうございました!
422 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:56:18.48 ID:lWEagrs5.net] >>419さんでした; >>416さんもありがとうございました!
423 名前:プログラム初めてやってます mailto:sage [2016/02/03(水) 10:58:29.06 ID:lWEagrs5.net] >>420 420さんでした… ほんとにありがとうございました!
424 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 11:02:27.43 ID:JXLYa8UB.net] >>417 正確性については実装依存だけど、毎回の同一性まではここでは触れてないね
425 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 12:55:54.71 ID:R1lQnZw2.net] #include <cstdio> int main() { printf("hello, world\n"); return 0; } g++ (GCC) 4.8.2 を使っているんだが、上のソースがエラーなくコンパイルできる。 しかし printf() は std::printf() と書くべきじゃないかと思うんだ。 あるいは using で省略表記を明示するか。 この書き方でエラーにならないのはC++の規格通りなのか、 あるいはGCC独特の動作なのか教えてほしい。 またGCC独自だとしたら、コンパイル時にエラーとするオプションを知りたい。 (以前は -fhonor-std というオプションが使えたらしいが廃止されたみたい)
426 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 14:52:41.84 ID:1RubKd28.net] なーる
427 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 14:54:41.83 ID:XI3wSbIf.net] いつから>>425 は規格通りとGCC独特の動作が アンビバレンツなものであると錯覚していた?
428 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 15:53:30.47 ID:hvk9CpKQ.net] なんでCは外部リンゲージでexternをつけるのにC++はつけないんですか?
429 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 16:41:54.73 ID:uEOUJl1K.net] C++のコードからCを呼ぶ時に呼び出し規約の違いを明示する CのコードからC++を呼ぶことはない それに C/C++どちらも呼び出し規約が1種類ではないから 一部の関数はそういう指定がある
430 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 16:47:26.68 ID:XI3wSbIf.net] >>428-429 >Cは外部リンゲージでexternをつけるのにC++はつけない >CのコードからC++を呼ぶことはない お前等の個人的なスタイルがさも普遍的であるかのように語られても
431 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 16:54:04.33 ID:1RubKd28.net] そもそもデフォで外部リンケージを持つから extern はつけなくてもいんじゃねの? 外の変数を使う時はexternが必要ってことで。
432 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 16:56:12.19 ID:I+U+ZaiG.net] >>425 C++の規格通りっぽい cstdioとかはシンボルをグローバルにしてもいいししなくてもいいらしい
433 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:00:58.37 ID:XI3wSbIf.net] >>432 へー、規格のどこにそんなことが
434 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:06:35.02 ID:I+U+ZaiG.net] ちゃんとしたのに当った訳じゃないけど stackoverflow.com/questions/10460250/cstdio-stdio-h-namespace ここで引用されてた Annex D (normative) Compatibility features [depr] states:
435 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:13:24.24 ID:j8SYABEm.net] VS2015でも同じ結果でした
436 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:19:43.24 ID:XI3wSbIf.net] >>434 そこに書いてあるのは「グローバル名前空間にも提供するかも知れない」なのだが 「cstdioとかはシンボルをグローバルにしてもいい」というのはどこから来たのか
437 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:22:04.36 ID:I+U+ZaiG.net] どう違うのか分からない 間違ってたかな
438 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:31:35.42 ID:2Q1iapWx.net] >>436 太字のここでしょ? Every C header, each of which has a name of the form name.h, behaves as if each name placed in the standard library namespace by the corresponding cname header is placed within the global namespace scope. どこに「かも知れない」とかあるの? behavesって断定してるんじゃない?
439 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:33:45.85 ID:6UPbxu8z.net] RFC の MUST MAY SHULD みたいに整理してほしいわ
440 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:35:11.06 ID:XI3wSbIf.net] >>437 std::でアクセスできることが義務づけられているかどうかが違う >>438 それは>>425 とは関係ないstdio.hの記述 その下の It may also provide ではないのか
441 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:41:25.46 ID:1RubKd28.net] *.h → global空間で定義 c* → global空間とstd空間で定義 って事ですかい。
442 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 17:52:45.70 ID:R1lQnZw2.net] >>434 情報ありがとう。 確かに cstdio は シンボルをstd名前空間に入れて グローバル名前空間にも入れる「かもしれない」、と読めるね。 #include <cstdio> でstd修飾なしの printf() が使えるのは 規格通りでもあり、GCCがその挙動を選んだ、ということか。 しかしながら、グローバル名前空間に入れない環境もありうるし、 それで >>425 のコードがエラーになっても、これまた規格通りか。 うっかり std:: を書き忘れる癖があるので、 コンパイラがチェックしてくれると助かると思ったのだけれど。 >> ID:XI3wSbIf の人 有用が情報がなく挑発的なだけの投稿ばかりだね。 だからどうこうってわけじゃないよ。単なる感想として。
443 名前:425 == 442 mailto:sage [2016/02/03(水) 20:13:16.38 ID:R1lQnZw2.net] >>441 Including cstdio imports the symbol names in std namespace and possibly in Global namespace. Including stdio.h imports the symbol names in Global namespace and possibly in std namespace. cstdio をインクルードするとシンボルはstd名前空間に入る(必ず)。 グローバル名前空間にも入るかもしれない(入らないかもしれない)。 stdio.h をインクルードするとシンボルはグローバル名前空間に入る(必ず)。 std名前空間にも入るかもしれない(入らないかもしれない)。 だと思われる。
444 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 20:19:16.88 ID:pejUVpHJ.net] どちらを使うにしろ std名前空間を強要することはできないということになるのかな
445 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 21:13:49.98 ID:1RubKd28.net] >>443 Cシンボルは鬼っ子で色々議論したけどこうなった。 って事なんだろな [Stroustrup2013] に書いてあるかな? 簡単な事だけど、かなり根が深いのかも。 実際は c関数を使う場合は 衝突回避のため、独自の名前空間の中で使用する事になるだろうから 問題ないのかも namespace MyUtil{ auto aaa=strlen("wahaha"); } みたいな。
446 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 22:55:02.36 ID:XI3wSbIf.net] そうだな G++が::absのバグを十数年間放置したぐらいには根が深いだろう
447 名前:445 mailto:sage [2016/02/04(木) 01:51:05.67 ID:ZGjCmtZ8.net] 何をアホな事を書いてるのだろうと反省。失礼しました。
448 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 19:27:08.85 ID:6dQTBxjx.net] 今日はQの自演による炎上学習法ナシ?
449 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 20:07:26.52 ID:ZGjCmtZ8.net] 自演だったのかorz
450 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 20:15:30.56 ID:M5WeNgYc.net] namespace org::gnu::gcc {}が書けるようになるのはC++14からだっけ? むしろ今までなんでこれが書けなかったのか、設計者に問い詰めたい。
451 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 20:51:10.15 ID:cr9CcGXP.net] いえ、C++14では書けません
452 名前:プログラム初めてやってます mailto:sage [2016/02/05(金) 08:05:08.38 ID:0uefFKkY.net] ええっ…! それ私に向けられてるんです? なんで??そうなるんです??? Qとかって人じゃないですし… 毎日ここ見てられませんよ; 自力で勉強しないと失礼だって思ったのになんでそんな事言う人いるんです? もう来ない方がいいのでしょうか Qさんが誰かわかりませんが…
453 名前:デフォルトの名無しさん [2016/02/05(金) 08:05:39.03 ID:0uefFKkY.net] 勿論そのQさんとか言う人の自演じゃありません
454 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 09:12:32.23 ID:40iMBEwg.net] >>452-453 ID:0ue... が Que のパチモン臭く見えるのが素敵。
455 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 19:48:30.40 ID:7eaUpuXV.net] >もう来ない方がいいのでしょうか その通りだ 去れ
456 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 17:04:42.31 ID:nNZFJpww.net] CのコードをC++に移植しながら開発を続けようと思ってるのだが、 C++のラムダとCのブロックどちらを使うべきだろうか。
457 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 17:17:22.70 ID:9hAEzh2Z.net] ラムダ?
458 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 18:22:47.43 ID:VRPmATP2.net] このレベルだとC++を使うことを避けるのが望ましい ラムダとブロックは対比するものではないし CからC++への移行の手段でもない
459 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 23:43:46.75 ID:EbqYVSkn.net] エスパーしました。恐らく彼は初期化の話をしているのでしょう。初期化する際に何らかのリソースの確保を行う場合、初期化が済んだら即解放したいと思うことがあります。 ブロック内でリソースを確保しておけば、ブロックを抜けるときに自動的に解放されるのでこの意図を達成できます。 int i; { なにかリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める; i = 求めた値; }//用済みなった変数はここで即解放される C++ではこのアナロジーとしてλ式を当てはめられます。 const auto i { [&...]() ->int{ 何かのリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める return 求めた値; }() } これで定数を初期化でき、且つ、初期化時に用いた一時記憶域は即解放できることになります。
460 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 23:57:21.06 ID:+sMp0qjD.net] 327さん、おはようございます
461 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 23:59:35.45 ID:lc1dGjcs.net] Q「(しまった)」
462 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 00:50:30.55 ID:ECJX98k8.net] すまぬ。ここで言うブロック(Blocks)っていうのはClangの拡張の方のことだ。 C言語でクロージャーを実現するための機能なんだが、そういえばまだ標準になってなかったな。
463 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 03:25:55.80 ID:vUnRYzap.net] くっ・・・
464 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 12:22:58.36 ID:qM+VfxEi.net] 難しいわ
465 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 13:15:50.37 ID:5TnQ2D6C.net] >>459 後半使う時どうするん
466 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 15:26:10.43 ID:Ijn2TjOB.net] >>465 何を? 初期化に使用した資源? 後で使うならそれは使用済みではないということなので解放しちゃダメだから、ブロックの外のスコープで宣言するしかないのでは?
467 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 15:26:52.10 ID:Ijn2TjOB.net] ×使用済み ○用済み
468 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 15:34:20.94 ID:5TnQ2D6C.net] >>466 returnが仮に10なら const auto i { [&...]() ->int{ 何かのリソースを確保したり、いっぱい一時変数を使ってこれからiの値を決める return 求めた値; }() } int a; a = i;でaに10が入る?
469 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 17:44:59.48 ID:R5nKPKgb.net] そもそも論だけど const auto &&i = [&]()->int{ return 10; }(); と書かないのは何故?
470 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 18:03:43.29 ID:rWlIZ3EB.net] X x{init()};よりX x = init();という個人のスタイルがさも普遍的であるかのように話をされても
471 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 18:16:52.89 ID:R5nKPKgb.net] {}の数が減ってインデントが少なくて済むじゃん const auto &&i = []()->int { return 0; }(); 好みの問題であるけどね
472 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 18:28:52.25 ID:9LpCQunf.net] >>468 何故入らないと思うのか >>469 C++11から初期化は{}で囲むことがお行儀良いとされる。良い癖をつけよう。= {初期化値}も可。
473 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 20:04:31.18 ID:9LpCQunf.net] =を使わずに{}で囲むのみにしておけば、視認性抜群。一目でこれは代入でなく初期化なのだと判り脳の負担も軽くなる int i = 10; これからは int i {10}, j {1}, k {0}; の時代だ。jやkの位置が改行されたりタブで距離を取っていてもこれなら一目瞭然だ
474 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 20:45:28.76 ID:rWlIZ3EB.net] >>472 へー、ではなぜC++14のmake_uniqueには{}の初期化が使われていないのですか
475 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 22:38:27.35 ID:h5Y5qyZF.net] 推奨であって法律ではないからです
476 名前:デフォルトの名無しさん mailto:sage [2016/02/11(木) 23:39:53.97 ID:rWlIZ3EB.net] へー、そうなのですか スコットメイヤーの本に別の理由が書かれていたのですが騙されていたのですね
477 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 00:00:23.89 ID:VRvtWrj2.net] すいません、全部適当言いました。許してください、何でもしますから
478 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 08:24:28.26 ID:pW7dPptS.net] >>472 アスペか
479 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 13:18:35.65 ID:3nWopzdP.net] アスペじゃありません、サイコパスです
480 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 14:18:31.86 ID:tZNW1Sh6.net] 北川景子?
481 名前:デフォルトの名無しさん mailto:sage [2016/02/15(月) 19:28:14.77 ID:qDxZgP2m.net] 悪夢ちゃん 良作ドラマやったな
482 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 01:32:33.39 ID:iqNNo75Y.net] ideone.com/ONsNMR これがMSVC2015だとエラーになるのなんでなん? 回避方法知ってる人いる?
483 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 07:15:41.19 ID:wJ7D3Nu/.net] true_typeのスペルミス 俺の環境では通った
484 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 08:11:34.25 ID:nCCZDf8c.net] すぺるミスは見当たらない
485 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 14:37:40.64 ID:WNE9IDAH.net] すべってます
486 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 17:38:29.31 ID:nE46Ot5u.net] ラッパー関数を作成する場合、値渡しと参照渡し、どちらの方法が一般的なのでしょうか? void append(T o) { vector.push_back(o); } void append(const T& o) { vector.push_back(o); } boostのコードで値渡しの方法を見かけたのですが、 (www.boost.org/doc/libs/1_60_0/boost/assign/std/vector.hpp ) push_back内で行われるコピーを考えると二重のコピーになってしまう気がします。 参照を使わない方法にはなにか意図的な物があるのでしょうか。 またはC++では値渡しが基本ということなのでしょうか。
487 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 17:43:40.27 ID:3V9H/1fh.net] テンプレートで、しかもinlineだから値渡しにしても良いという判断なんなんじゃないかな
488 名前:デフォルトの名無しさん mailto:sage [2016/02/16(火) 22:16:20.17 ID:eGMzofhZ.net] >>482 type_traitsヘッダを明示的にincludeしなきゃだめとかじゃないのか
489 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 00:02:13.91 ID:BJJMKH5P.net] >>488 実際のコードではincludeしてたしそうでもないなー webcompiler.cloudapp.net/ ここでコンパイルすると通るけど 新規プロジェクトでWin32コンソールアプリケーション選んで同じコードコピペしてもエラーになるわ・・ 俺のVisual Studio 2015 Communityがおかしいのか・・・?
490 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 00:47:09.77 ID:BJJMKH5P.net] まさかと思いUpdate 1当てたら通るようになりました。 どうもありがとうございました。
491 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 01:24:40.77 ID:1H9n+Lj4.net] >>486 オブジェクト変更しないならconst参照でいいと思うけどなぁ
492 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 01:37:30.39 ID:N1klTUFY.net] そのboostのやつは要素が基本形であることしか考えてないんだろ だから安易に値渡しになってる
493 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 03:30:55.57 ID:1UNcQaMi.net] せやろか Boostに採択されるような手練れがそんな甘い設計をするのだろうか?
494 名前:デフォルトの名無しさん mailto:sage [2016/02/17(水) 07:43:08.25 ID:MVw4Ur3f.net] boost.assignの使いみち考えれば基本型しかなくても不思議はないな まぁでも、call_traitsみたいなやつくらいかましてくれても良いような気がするね forkして直すか、issueあげれば?
495 名前:デフォルトの名無しさん mailto:sage [2016/02/18(木) 12:57:49.40 ID:cxWjsl/x.net] 目的による ビットフィールドを切り捨てていいならforwarding-reference一択 そうでなければ値