1 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 20:20:06.25 ID:o3PNwIlC0.net] 次スレを立てる時は本文の1行目に以下を追加して下さい。 !extend:on:vvvvv:1000:512 C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。 前スレ C++相談室 part134 mevius.5ch.net/test/read.cgi/tech/1516406742/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.102【環境依存OK】 mevius.5ch.net/test/read.cgi/tech/1509780815/ ■長いソースを貼るときはここへ。■ codepad.org/ https://ideone.com/ [C++ FAQ] https://isocpp.org/wiki/faq/ www.bohyoh.com/CandCPP/FAQ/ (日本語) VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
369 名前:はちみつ餃子 mailto:sage [2018/04/26(木) 19:59:02.73 ID:P0bCzIha0.net] >>358 たくさん存在する。 インクルードする前後のマクロ定義によって挙動を切り替えて使うようなものもある。 基本としては宣言というか、別のコンパイル単位にある関数などのインターフェイスを取り込むために使うものなんだけど、 アクロバティックな使い方をしてるものはそれなりに多いよ。
370 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 20:06:45.74 ID:OZbR3XDf0.net] プリプロでループを実現するには再帰includeは欠かせないからな
371 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 20:08:29.05 ID:CbHb+b7U0.net] >>361 むしろそっちのほうに、 二重インクルード可能みたいな宣言を用意してほしいわ
372 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 20:24:45.91 ID:HtO+dzj70.net] >>360 マジで言ってるんなら死ね。 俺の意見は、 ・#pragma once は現行のインクルードガードと同じ方向に仕様化すべき であって、実際これで文句が出ることはないし、妥当だろ。 つかお前、>>340 を理解してるか?
373 名前:デフォルトの名無しさん [2018/04/26(木) 20:34:58.75 ID:JC9sZU4oa.net] int lengthOfLcs_r(const char x[], const char y[], int ix, int iy, int xsize, int ysize) { static int **lengthTable = new int*[xsize]; for (int i = 0; i < xsize; ++i) { lengthTable[i] = new int[ysize]; } if (ix == xsize || iy == ysize) { return 0; } if (x[ix] == y[iy]) { return lengthOfLcs_r(x, y, ix + 1, iy + 1, xsize, ysize) + 1; } return max(lengthOfLcs_r(x, y, ix, iy + 1, xsize, ysize), lengthOfLcs_r(x, y, ix + 1, iy, xsize, ysize)); }
374 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 20:36:08.64 ID:OZbR3XDf0.net] #include "/dev/tty" も知らない雑魚はもう黙ってろよ
375 名前:デフォルトの名無しさん [2018/04/26(木) 20:37:18.41 ID:JC9sZU4oa.net] >>365 の関数は、再帰的な関数です。 その再帰的な関数内で static な配列を利用したいのですが、動的に確保した 領域を解放するにはどうすればいいのでしょうか? 再帰的な関数なので単純に関数の最後で解放するというわけにはいかないので 困っています。
376 名前:デフォルトの名無しさん [2018/04/26(木) 20:39:18.48 ID:JC9sZU4oa.net] >>365 動的計画法で配列に計算結果を記録しておき利用したいんです。 なので static にしています。
377 名前: mailto:sage [2018/04/26(木) 20:39:31.36 ID:y22H8Uhx0.net] >>364 わけて考えてみますね インクルードガードはプリプロセッサ名前空間内の一つのプリプロ識別子を犠牲にして、機能させようとしているわけですよね #progma once が犠牲にする**べき**ものは何でしょうか?
378 名前:デフォルトの名無しさん [2018/04/26(木) 20:40:15.50 ID:JC9sZU4oa.net] >>365 の関数はまだ書きかけなので、計算結果を記録した配列の値はまだ利用し
379 名前:トいません。 [] [ここ壊れてます]
380 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 20:43:55.37 ID:OZbR3XDf0.net] >>>365 lengthTableのポインタ値をなんとかしてグローバル変数に持ち出してatexitに登録するか 最初からそのグローバル変数でnewするか どうせプログラム終了時にヒープ丸ごと消えるんだから放置するか 一から書き直すかの4択
381 名前:デフォルトの名無しさん [2018/04/26(木) 20:45:16.69 ID:JC9sZU4oa.net] >>365 あ、すみません。 なんかおかしなことを書いてしまいました。
382 名前:デフォルトの名無しさん [2018/04/26(木) 20:53:11.22 ID:JC9sZU4oa.net] >>371 ありがとうございました。 すみません。質問がちょっとおかしかったので、質問を代えさせていただきます。 ある特定の関数内でしか見えないグローバル変数のような変数というのはC++にありますか? 考えているのは、関数 func でそのグローバル変数のような変数 a を宣言する。 func 内で呼び出している再帰関数 rec_func 内でのみそのグローバル変数のような 変数 a を利用したい。グローバル変数のような変数なので、 rec_func の引数として a を渡す必要はない。
383 名前:デフォルトの名無しさん [2018/04/26(木) 20:57:03.80 ID:JC9sZU4oa.net] 何度も呼び出される再帰関数に引数として同じ変数を渡し続けるのはなんか 無駄なことをしているように思われたので質問しました。 本を読むとグローバル変数は使うなと書いてあるので質問しました。
384 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:01:32.17 ID:JC9sZU4oa.net] >>373 でいう変数 a の代わりに、クラスを作って、メンバ変数を利用すればいいですかね? rec_func はメンバ関数にすればいいですかね?
385 名前:デフォルトの名無しさん [2018/04/26(木) 21:03:04.18 ID:JC9sZU4oa.net] でも、そのためだけにクラスを作るというのもなんだかな―という感じがします。
386 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:06:11.37 ID:HtO+dzj70.net] >>360 一応添削しておくと、 > 今読み込んでいるヘッダファイルがかつて読んだファイルと同じ実体かどうか、を決める方法は**基本的にない** × 同じ実体かどうか、を決める方法は ○ 同じ実体かどうか、をパス等で決める方法は ただし俺はそもそも「中身」を見て確認すべきで、同じ実体だったら云々、という話はしてない。 cp A.h B.h の場合にインクルードガードでBを弾くとして、 当然Bは「ファイルとしては」「読み込まれ」、「コンパイル対象としては」「読み込まれない」だろ。 #pragma once はインクルードガードの自動版なんだから、インクルードガードと同じ仕様でいいんだよ。 そして逆に、実体が異なっていてもこの場合はインクルードガードは利くのだから、#pragma once も利くべきなんだよ。 ファイルパスでの識別ではこれは実現不可能だろ。 >>369 意味不明。何も犠牲にするべき物は無いと思うが。 というかな、規格化するなら方向は自明で、 ・#pragma once はインクルードガードの代わりに使われているのだから、 現行のインクルードガードを機械的に #pragma once に置き換えして問題ないように仕様化すべき でしかないだろ。これで誰も文句ないと思うが。
387 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:07:21.99 ID:OZbR3XDf0.net] >>374 の心配があるんだったらクラスにしたって裏でthis渡すようになるだけだから一緒よ ポインタ渡すコストが気になるならグローバル変数にするしかない >>365 のコードのままなら末尾再帰の最適化かかるだろうから問題にならんと思うけどな
388 名前:デフォルトの名無しさん [2018/04/26(木) 21:07:30.49 ID:JC9sZU4oa.net] クラスを作ってそのプライベートなメンバ変数を、 ある関数内でのみ利用できるグローバル変数の ような変数として使うというのは邪道でしょうか?
389 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:08:37.69 ID:JC9sZU4oa.net] >>378 ありがとうございました。
390 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:51:10.65 ID:HtO+dzj70.net] >>373 > ある特定の関数内でしか見えないグローバル変数のような変数というのはC++にありますか? 見た目だけの話ならラムダでキャプチャすればいい。(クロージャ) ただ、今気づいたが、C++のラムダって名前付けられないから再帰できないね。 変数の直接呼び出しも試してみたが、以下は通らない。 auto f = [](int x) {return x? x+f(x-1) : x;}; なんでこんな糞仕様にしたんだ? JavaScriptも当初はそうだったが、不便だったので名前が付けられるように変更した。 この変更を知ってて無視してるのなら頭おかしいし、 知らないのなら不勉強だし。(言語仕様に携わる奴は他言語の動向も見ておくべき) 名前を付けられて悪いことはないし、技術的に不可能って事も無いと思うが。
391 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:07:02.86 ID:IAeApo/t0.net] ID:4xU9Va0kM=ID:HtO+dzj70 #include "X:\sandbox\aho.h" #include "Y:\sandbox\aho.h" これでどうなるかをC++の規格に定めるべきだと言っているのはおまえだけ //X:\sandbox\some_app.cpp #include "aho.h" #include "some_lib.h" //Y:\sandbox\some_lib.h #include "aho.h" おまえq文字列の解釈をまさか知らんのか?
392 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:34:27.88 ID:4xU9Va0kM.net] >>353 反論されてぐうの音もでないのかよ 5チャンは初めてか? w
393 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:35:24.34 ID:IAeApo/t0.net] >>383 全文そのまま返すわ
394 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:41:09.16 ID:EM3O7qLA0.net] 同じファイル 同じ中身 大きく分けて2種類あり、 それぞれ、同じの定義の詳細は色々と考えられる
395 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:45:45.22 ID:4xU9Va0kM.net] >>382 > ID:4xU9Va0kM=ID:HtO+dzj70 勝手にアホな認定するんじゃねーよ そもそも俺はハードリンクとかのファイルシステム依存の話は処理系依存にした方がいいって思う
396 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:46:56.42 ID:4xU9Va0kM.net] >>384 人を嘘つき呼ばわりして謝ることもできない奴がなに言ってるんだよ w
397 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 23:09:17.34 ID:IAeApo/t0.net] 効いてる効いてるw 嘘つき呼ばわりじゃなく嘘つきという真実を指摘されてファビョーンかよ おまえは考察自体を放棄した この事実はどうにもならない
398 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 23:12:02.64 ID:HtO+dzj70.net] >>381 自己レス。 すいません出来ました。以下通ります。autoは無理のようです。 std::function<int (int)> f = [&f](int x) {return x? x+f(x-1) : x;}; >>373 見た目だけなら、上記のようにラムダで再帰すれば書ける。
399 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 23:58:27.23 ID:DklDUzVR0.net] またいつもの奴が暴れてるのか 相変わらず不毛な話してるな
400 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 23:59:44.22 ID:DklDUzVR0.net] それで結局#pragma onceが採用されてこなかった理由はなんなん?
401 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 00:09:03.41 ID:vLs/1v3E0.net] 所詮 pragma だから この部分は処理系依存が強く出るので
402 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 00:18:29.43 ID:nldsEJyI0.net] >>388 >>351 にまともな反論してから出直してこい w
403 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 00:25:32.85 ID:ledFfOHm0.net] https://stackoverflow.com/questions/23696115/is-pragma-once-part-of-the-c11-standard https://groups.google.com/a/isocpp.org/forum/#!topic/std-discussion/YG76sfDJ4f8 open-std.org/JTC1/SC22/WG21/docs/papers/2017/p0538r0.html #pragma onceについて語りたい奴は必ず先に目を通すように じゃないと上で騒いでる馬鹿みたいになっちゃうからな
404 名前:デフォルトの名無しさん [2018/04/27(金) 06:18:50.95 .net] MSアレルギー
405 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 06:26:34.10 ID:mlVlMuXl0.net] >>393 反論とは論に対して反駁することをいう おまえは論を示していない 結果に至る思考過程をすっ飛ばしている おまえこそ日本語を憶えてから出直して来い もう一度言う、反論とは論に反駁することだ
406 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 06:41:55.40 ID:O6TOHWbPM.net] まともに反論できないことはよくわかったよ w 事実を書いてあるだけで思考過程なんて関係ない
407 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 06:51:10.76 ID:fIiVOejaM.net] 天啓が下ったぞ!
408 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 07:38:07.75 ID:ledFfOHm0.net] 事実ってなんだよ 「アホは切り捨てろ!」とかいう標準規格として最低最悪の解決策を取れっていうのはお前のクソみたいな「意見」だろうが お前の意見は必ず自動的に実現して事実になるの?神なの?
409 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 08:05:14.16 ID:O6TOHWbPM.net] そういう意見を書いてあると言う「事実」な マジで理解力無さすぎ w
410 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 10:03:10.93 ID:mlVlMuXl0.net] >>397 それは違う 何からどう演繹した結果なのかを示さねば戯れ言に等しい 戯れ言でよければ過程は伏せたままでいいぜ どーせそんなもんバカにはねえだろうがな
411 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 10:58:06.07 ID:COWnkDW0d.net] >>400 じゃあ俺も、お前はここに二度と来ないでに全財産を福島と熊本に寄付した上で家族もろとも自殺するべきであると意見するわ こういう意見を書いてあるという事実に反論できなければお前の負けな
412 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 12:28:04.63 ID:O6TOHWbPM.net] >>401 お前が何を言っても>>339 に書いた「無視」と言う文言を理解できなかった>>346 がいたと言う事実は変わらない しかも誤魔化すために話そらそうと必死な>>353 がいた事実も変わらない >>402 別に意見を言うのはいいんじゃね? それに何の意味があるのか知らんけど w
413 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 12:30:27.46 ID:Mg+ERRyAd.net] いつまでやるの?
414 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 12:42:19.37 ID:COWnkDW0d.net] C/C++の規格はgets()とかいうアホな使い方しか出来ないアホ関数を30年も削除出来なかったくらいアホに気長に付き合う規格なんだよ 広く使われ続ける規格の宿命としてその方針は変えられない だからお前の言うようなアホを無視して切り捨てるという選択肢が採用されることはないという事でこの話終わりな
415 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 14:52:44.93 ID:mlVlMuXl0.net] >>403 もう一度言う 提示してねえだろ、おまえは無視つったんだよ 人をアホよばわりしようと焦るあまり 論議そのものを粗末に扱ったのが おまえの運の尽きだ そこでどんなに暴れようが おまえは何も論じていない よって論に反駁してもらえることもない ましてや事実に反駁というシュールなことをする者もいない
416 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 16:36:21.86 ID:j5Ya8YmN0.net] アホではないから残しているのでは
417 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 18:27:57.39 ID:O6TOHWbPM.net] >>405 マジで言ってるの? gets() なんてアホには使えない関数の典型だろ バッファーオーバーフローはプログラマーの責任 って言う言語だぞ w
418 名前:850 mailto:sage [2018/04/27(金) 18:31:51.94 ID:Q1GjkYeyr.net] >>376 言葉尻を捕まえて悪いが、クラスや関数を作ることをそう大仰に捕らえることはない。 単純な機能のクラスや関数など幾らでもある。
419 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 18:33:12.92 ID:O6TOHWbPM.net] >>406 >>351 を読み直せ 無視するのは誰で誰を無視するのかを答えてみ まあ恥ずかしすぎて答えられないだろうからまた明後日の話に逸らそうとするんだろうけど w
420 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 19:01:47.01 ID:mlVlMuXl0.net] >>410 読み直して欲しいのかよ お願いしろよ 読み直してやるかも知んねーからw
421 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 20:31:10.54 ID:nldsEJyI0.net] はい、基地害乙
422 名前:片山博文MZ mailto:sage [2018/04/27(金) 20:33:29.96 ID:HF3+Vuoyd.net] りかいできないならからんでくるなよダブリュー 「アホなりようしゃはあいてにしない(イコールむしする)」っていうしようを「ていじ」してるってはなしだ、ボケ
423 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 20:46:16.80 ID:mctUhDKod.net] よくわからんが、糞コテの自演てこと?
424 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 23:50:18.78 ID:mp1hh4hd0.net] C/C++は池沼お断りの言語なんだから、このスレも同じノリでいいと思うぞ。 指摘しても理解できないのは、日本語が出来ない=池沼だから。 慣れる慣れない以前の問題だ。
425 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 06:20:59.27 ID:BHnoJcFn0.net] ていうか#pragma once規格化不能論者が言い立てる不可能ケースは (1) #ifdef〜#endifインクル〜ドガ〜ドでも曖昧さが残り処理系依存になるケース (2) #pragma onceで自動的にガード条件を設定する際の困難(#ifdef 〜の記号をうまい具合に考え出すことに相当 (3) #ifdef〜#endifインクル〜ドガ〜ドにおける既存のアクロバティックな使い方への対応(>>361 (4) #pragma onceで想定されるアクロバティックな使い方の解釈(>>321 のn種類しかない (1)は#pragma once固有の問題ではないから、#pragma once規格化の障害とは言えない ハードリンクとかの件でここまで費やされた長い紙数はムダすぐる… (2)と(3)は、#pragma onceが力量不足ならそのケースだけいつでも#ifdef〜#endifインクル〜ドガ〜ドに戻ることができる プリプロセッサの基本特性まで変えようというのではないのだから… (4)はエラーにすればよい #pragma onceの解釈を単純な#ifdef〜#endifインクル〜ドガ〜ドの置き換えと限定するなら可能なはずや いままで20数年にわたって規格化委員会で話題に上りながら規格化されないのは、 この件の抜本的な技術である「モジュール」の規格化が控えていると全員が錯誤していること、これにつきるだろうJK [] [ここ壊れてます]
427 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 06:57:19.27 ID:ibkTuaSK0.net] >>416 とりあえず、 #pragma onceの仕様を文章にしてみて そんなに簡単じゃないから
428 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 07:52:46.94 ID:BHnoJcFn0.net] ■ #pragma onceの俺様仕様 (ヘッダファイルの集合の規定) 1. インクルードされるヘッダファイルを#pragma once付きとそれ以外とする。 ただし、次のいずれかに該当する場合はエラーとする(ヘッダファイルに含めない) (1) #pragma onceがコメントを除くファイル先頭に現れた場合 (2) #pragma onceがコメントを除くファイル先頭に現れ、かつ ファイル内の#if〜#endifの入れ子がファイル内で完結しない (ヘッダファイルの識別) 2. #pragma once付きのヘッダファイル同士は、ファイル名で識別する。(ディレクトリパスは無視) (ヘッダファイルの展開) 3. #pragma once付きのヘッダファイルのうち、上記2の規則により同一と判定されるファイルは 単一のコンパイルの中で、2回目以降の展開を無視する。 4. #pragma once付きでないヘッダファイルの展開は現行どおりとする。 いじょ
429 名前:デフォルトの名無しさん [2018/04/28(土) 07:55:01.29 .net] >>418 #pragma onceってファイル先頭に置くものだと思ってた ファイル末尾とかにおけばいいの?
430 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 07:56:19.92 ID:zm4OWgENM.net] ソフトウェアが巨大化してくると、サブモジュールが各々同一のSDKを抱えてるなんてことがある。 複数のサブモジュールを読み込んでるソースコードは間接的に同一ヘッダを読み込む可能性があるが、 cvs等が異なるidを埋め込んでいたり、それぞれ微妙にバージョンが異なっていたり、エンコーディングや改行コードが異なっていたりする場合、 Includeガードならビルドできるが、pragma onceだと同一ヘッダを異なるファイルと認識してしまい、エラーになってしまったので、サブモジュールを全て自前で修正する羽目になった。 なんてことがあるかもしれない。 結局ヒューリスティックな実装しかないんでないの?
431 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 07:57:50.65 ID:BHnoJcFn0.net] 訂正; 誤: (1) #pragma onceがコメントを除くファイル先頭に現れた場合 正: (1) #pragma onceがコメントを除くファイル先頭以外に現れた場合
432 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 07:58:55.91 ID:BHnoJcFn0.net] >>420 >>418 の仕様によるヘッダファイルの展開のどこにヒューリスティック要素があるのかkwsk、
433 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 08:04:07.12 ID:zm4OWgENM.net] >>418 >ファイル名で識別 過去遺産をすっぱり切り捨てる斬新な発想に目から鱗
434 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 08:05:18.62 ID:BHnoJcFn0.net] >>423 藻前は>>418 の仕様の項番4を理解していない 出直せ
435 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 08:15:15.14 ID:zm4OWgENM.net] 今後ヘッダファイル名にはドメイン名を頭につけなきゃいけないね。 メアドでもいいかな?
436 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 08:20:58.21 ID:amQJLuCm0.net] >>417 適当な処理系の言語リファレンス見ればいいだけ そんなに難しくはないぞ
437 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 08:24:01.11 ID:WRqkde3l0.net] >>422 420が提起した問題に答えろ kwskはそれからだ
438 名前:デフォルトの名無しさん [2018/04/28(土) 08:33:55.15 .net] >>427 是非は置いといて、ファイル名で識別するって書いてあるじゃん 文盲なの?
439 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:13:26.88 ID:clK1o5V+0.net] つまりfooSDK/interface.hとbarSDK/interface.hは同一として判定するんだな たいへんだー
440 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:22
] [ここ壊れてます]
441 名前::50.78 ID:WRqkde3l0.net mailto: 結論を急ぐあまり考察が浅くなりすぎだな [] [ここ壊れてます]
442 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:23:37.16 ID:ibkTuaSK0.net] #pragma onceの前に改行があったらエラーですかwww
443 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:27:57.75 ID:amQJLuCm0.net] >>420 それ単に管理がなってないだけだろ どのバージョンのヘッダーを読み込むかを管理できてないとか怖すぎる
444 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:34:33.18 ID:WRqkde3l0.net] >>432 どう管理しろと? 混用しているライブラリに偶然同じファイル名があって どちらもインクルードガードされているということを 「管理」で回避できるのか?
445 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:42:57.08 ID:zm4OWgENM.net] >>432 えー、cvs keywordはどうするのー? サブモジュールを格納してたリポジトリ毎に値が異なるよ? 自動的に改行コードを修正してくれるリポジトリの場合はー?
446 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:45:12.10 ID:ibkTuaSK0.net] まずは世の中のプリプロセッサのpragma onceの仕様がどうなっているかを調べるべきかと
447 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 09:54:13.99 ID:EXYGb8MJ0.net] 具体的な話になったら一気にレベル下がったなw
448 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:21:03.59 ID:amQJLuCm0.net] >>433 話の流れを理解せずに無駄に絡んでくるなよ... インクルードガードならとりあえずビルドできるって言う話だぞ >>434 同一のSDKなんだから同一のものを指すようにすればいいだけだろ
449 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:24:05.76 ID:ibkTuaSK0.net] 目的は インクルードのループを防ぎたいのと 同じ定義を複数回行うことでエラーになるのを防ぎたい ってことだよな これをインテリジェントに行ってくれるのが理想 インテリジェントな物を仕様にするのは難しいし、 時代が進めばインテリジェント具合も変わる >>418 みたいなあまりにショボい仕様だと 後々不満が出ることになる
450 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:28:01.67 ID:WRqkde3l0.net] >>437 答えになってないぞ 今 #pragma once について話しているよな インクルードガードを #pragma once でやっていたらどうなんだ
451 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:28:57.76 ID:BHnoJcFn0.net] >>429 >>434 現行のヘッダファイルでうまく行っているのならそのままでええ(>>418 項番4はそのためにある そうではなくて、もしも(例えば)マイクロソフトのVisual C++の#pragma onceを使って書かれた過去の遺産の尊重が大事なら そのときは>>418 の方の#pragma onceを#pragma once2とかに代えれば良いが そりゃー(例えば)マイクロソフトのVisual C++の#pragma onceが先行して規格になった後の話なので今は無視 >>435 >417からの流れと考え合わせるに、 「僕ちゃんの考えた理想の#pragma onceじゃないと嫌なの!!!>418のクソ単純な仕様は正しくとも認められん!!!」ってことですかそうですか… なお>>431 の指摘は評価する >>436 抽象的な言い回しで無意味に高尚な議論に見せかけている連中の方が多数派 空っぽなのに…
452 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:29:34.95 ID:ibkTuaSK0.net] 当然互換性の問題もある 今まで動いていたものが正しく動かなくなるのであれば支持されない だから>>435 も非常に重要
453 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:33:35.22 ID:BHnoJcFn0.net] >>441 時間差だったかもしれんが>>440 の最初のパラグラフ参照 存在しない規格との互換性の問題を喚かないでいただきたい、というのはあるが 回避策も示しているのだからオール無問題
454 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:33:47.48 ID:ibkTuaSK0.net] >>429 の例で 2重インクルードを防ぎたい場合とそれぞれ別にインクルードしたい場合があるってのは書かなくてもわかるよな 中身が全く同じであれば防ぎたいし 全く別の定義であればそれそれぞれをインクルードしたい
455 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:35:03.59 ID:ibkTuaSK0.net] >>442 #pragma onceの仕様はVisual C++しか実装してないと思ってる?
456 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:38:47.00 ID:BHnoJcFn0.net] >>443 >>444 >2重インクルードを防ぎたい場合とそれぞれ別にインクルードしたい場合があるってのは書かなくてもわかるよな ああ>>443 の脳内にはそういう要求もあるんですねわかります その場合は>>418 項番4でドゾー 藻前ら>>418 の単純さをバカにするが藻前らの論理展開のアレっぷりも相当なもんやぞ…
457 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:42:05.24 ID:ibkTuaSK0.net] いずれにしろ>>418 みたいなチープな仕様じゃ誰にも支持されない
458 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 10:45:00.58 ID:WRqkde3l0.net] ツッコミ殺到でボコボコなのに勝利宣言してやがるな つっこんだ人たち(ここのほぼ全員)にバレバレなのに滑稽な
459 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 11:10:27.31 ID:ueAKslGb0.net] >>418 ,421はミニマムの仕様を提示しただけで、つまり、 この仕様で問題ない場合は #pragma once で手抜きが出来て、 無理な場合は従来通りインクルードガード使えってことだろ。 俺はありだと思うぜ。仕様ってのはこういう割り切り方をしないと決まらない。 C++のラムダなんて後付で仕様を拡張して行っているし。(このやり方がいいとは思わないが) ただ、この仕様だと現行の #pragma once よりも割り切っているのがイマイチで、 「今」この仕様では却下されるだろう。 「#pragma once が全くない世界」なら、とりあえずここから出発するのもありだっただろう。 現行の #pragma once は常識的に考えて、 ・ファイル実体が同じ場合(ハードリンク/シンボリックリンク)は対応可能 ・コピーの場合(ローカルに xxx.h を tmp_xxx.h にしてデバッグ出力を改変したり)には対応不能 だろう。だから使用条件としては、 ・全ファイルがローカルファイルシステム上にあり、ヘッダファイルの改変は行わない であり、普通に個人レベルで開発する場合はこれで全く問題ないし、妥当だ。 会社で10-20人レベルで開発する場合、どのみちルールを子細に決めることになるし、 そういう場合は従来のインクルードガードでやれ、という割り切りも妥当だよ。
460 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 11:11:35.35 ID:ueAKslGb0.net] なお俺が推す仕様は、 ・#pragma once のファイル内では複数定義のエラーを無視する というものだ。従って、 ・現行の#pragma once とは違い、対象ファイルは必ず「ファイルとしては」「読み込まれる」 (これは現行のインクルードガードとも同じ) ・定義されている物のシグネチャが既に存在するものと全く同一だった場合、無視する。 ・シグネチャが異なっている場合、普通に読み込む(コンパイル対象とする) (勝手にデバッグ関数を追加されていた場合、その関数だけはコンパイルされる) ・#pragma once のファイルを全部パースし終わった際、「全部重複」「全部新規」ではなかった場合、警告を出す。 (正しく使えば「全部重複」「全部新規」のどちらかになる。 改変《追加》した場合は「一部新規」となり、警告にする。「一部欠落」は検知しない。) というものだ。 この場合、要するに「読み込んで同じだったら無視」なので、 #ifdef 内等、かなりアクロバティックに使われても、問題なく、使用者の直感通りに動作する。 改行の追加、コメント変更等は全く問題ない。 ただし常に全部のファイルを読み込み、初段階のパースは行うことになるので、 現行の #pragma once やインクルードガードよりは速度は劣る。 とはいえ、今更ここが問題になる時代ではないし、問題になるようならインクルードガードを使えと割り切る。 つまり、面倒なら #include を使わずに、全部 #pragma once にも出来る、というもので、 実際これで問題無いと思うんだがな。
461 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 11:15:31.75 ID:aIENMcPWd.net] もう書かなくて良いよ アホだってこはみんなわかったから
462 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 11:18:31.52 ID:aIENMcPWd.net] ヒント インクルードループ
463 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 11:22:35.75 ID:aIENMcPWd.net] インクルードのネストがn段 それぞれの段、m個のインクルードファイルからm個インクルードしてるとします 何パス必要でしょう
464 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:14:39.04 ID:wZlaoeXA0.net] >(ディレクトリパスは無視) 現行の#pragma onceでこんな実装になってる処理系あるかなぁ
465 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:22:28.92 ID:amQJLuCm0.net] >>439 日本語で桶
466 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:24:23.32 ID:amQJLuCm0.net] >>438 , >>446 > >>418 みたいなあまりにショボい仕様だと > 後々不満が出ることになる でも具体的には指摘できない ってか w
467 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:26:40.87 ID:aIENMcPWd.net] 具体的にたくさんあがってるのが見えないのかな
468 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:51:19.85 ID:NasUyYi90.net] プリプロセッサが諸悪の根源
469 名前:デフォルトの名無しさん mailto:sage [2018/04/28(土) 12:51:48.61 ID:NasUyYi90.net] #define多いと読む気しない