次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part134
http://mevius.5ch.net/test/read.cgi/tech/1516406742/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part135
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 5fcb-q1Nq)
2018/03/31(土) 20:20:06.25ID:o3PNwIlC0351デフォルトの名無しさん (ドコグロ MMa3-tYAq)
2018/04/26(木) 17:56:28.00ID:4xU9Va0kM352デフォルトの名無しさん (ワッチョイ 4150-LNFl)
2018/04/26(木) 18:15:04.17ID:EM3O7qLA0353デフォルトの名無しさん (ワッチョイ 1961-luqG)
2018/04/26(木) 18:20:39.64ID:IAeApo/t0354デフォルトの名無しさん (スップ Sdf3-LNFl)
2018/04/26(木) 19:18:47.48ID:bSbrcQnXd ガキの喧嘩は他でやれ
355デフォルトの名無しさん (ワッチョイ 419f-TsVf)
2018/04/26(木) 19:29:11.00ID:HtO+dzj70 俺は>>339が正しいと思うぜ。
というか>>341は明確に間違ってるだろ。色々と。
「ハードリンクガー」なんてのは論外。規格で定めるべき事項ではない。
規格で定めるべきなのは、
・全く同一の中身だが実体が異なる場合でも #pragma once は有効か?
(cp A.h B.h の場合にも B を読み込むか?)
だ。そしてこれは当然現行のインクルードガードと同じ方向に揃えるべきであり、
・読み込んではいけない
という仕様になるのも自明だ。
絶対パスやinodeやハードリンクというのは、
・通常のファイルシステムであれば、絶対パスが同一なら同じファイルを参照する
(=同じ中身であることが保証される)
・inodeでファイルシステムが実装されているのなら、
同じinodeを指すファイル(=ハードリンク)の場合には、同じ実体を参照する
(=同じ中身であることが保証される)
であって、これらは「全く同一の中身」であることを確認する手段でしかない。
これらが有効な環境では間引くのに用いればいいだけ。勿論ハッシュを使ってもいい。
これらが別物に見えるのなら、それは抽象思考が出来ない馬鹿だからだよ。
ファイルシステム毎にC++の規格をいちいち決め直す必要があるなんて、おかしいだろ。
今後新しいファイルシステムが考案される毎に、毎回C++の規格を刷新するつもりか?
例えばWindowsでは同一ドライブに複数のドライブレターを割り当てることが出来るが、
それでどうなるかをC++の規格に定めるべきだと?マジで馬鹿だろ。
というか>>341は明確に間違ってるだろ。色々と。
「ハードリンクガー」なんてのは論外。規格で定めるべき事項ではない。
規格で定めるべきなのは、
・全く同一の中身だが実体が異なる場合でも #pragma once は有効か?
(cp A.h B.h の場合にも B を読み込むか?)
だ。そしてこれは当然現行のインクルードガードと同じ方向に揃えるべきであり、
・読み込んではいけない
という仕様になるのも自明だ。
絶対パスやinodeやハードリンクというのは、
・通常のファイルシステムであれば、絶対パスが同一なら同じファイルを参照する
(=同じ中身であることが保証される)
・inodeでファイルシステムが実装されているのなら、
同じinodeを指すファイル(=ハードリンク)の場合には、同じ実体を参照する
(=同じ中身であることが保証される)
であって、これらは「全く同一の中身」であることを確認する手段でしかない。
これらが有効な環境では間引くのに用いればいいだけ。勿論ハッシュを使ってもいい。
これらが別物に見えるのなら、それは抽象思考が出来ない馬鹿だからだよ。
ファイルシステム毎にC++の規格をいちいち決め直す必要があるなんて、おかしいだろ。
今後新しいファイルシステムが考案される毎に、毎回C++の規格を刷新するつもりか?
例えばWindowsでは同一ドライブに複数のドライブレターを割り当てることが出来るが、
それでどうなるかをC++の規格に定めるべきだと?マジで馬鹿だろ。
356デフォルトの名無しさん (ワッチョイ 419f-TsVf)
2018/04/26(木) 19:29:59.32ID:HtO+dzj70 最終的に規格に定めるのはつまり、
・全く同一の中身の場合には #pragma once は有効
(=現行のincludeガードと同様)
であって、揉めるとしたら、
・意味的には同一だがバイナリ比較では異なる場合
(例:最終行に空白や改行が追加された場合や、コメントのみの変更の場合)
(=現行のincludeガードでは読み込まれないが、単純な方法では同一性の確認が難しい場合)
だが、これも方向としては現行のインクルードガードと合わせる方向、つまり、
・読み込んではいけない
とされるべきであり、これもまた自明だ。
(とはいえここは実装的に揉めるかもしれんが)
そもそも「同一性の確認」をファイルシステムに依存する考え方自体がおかしい。
もうじき #include 対象を url 指定するような時代にもなるだろうし。
(善し悪しはさておき、PHPではこれが出来る)
そうしたら、「同一かどうかは中身で判断する」という選択肢以外はなくなる。
こんな当たり前の話が分からないのは完全に老害化してる。
・全く同一の中身の場合には #pragma once は有効
(=現行のincludeガードと同様)
であって、揉めるとしたら、
・意味的には同一だがバイナリ比較では異なる場合
(例:最終行に空白や改行が追加された場合や、コメントのみの変更の場合)
(=現行のincludeガードでは読み込まれないが、単純な方法では同一性の確認が難しい場合)
だが、これも方向としては現行のインクルードガードと合わせる方向、つまり、
・読み込んではいけない
とされるべきであり、これもまた自明だ。
(とはいえここは実装的に揉めるかもしれんが)
そもそも「同一性の確認」をファイルシステムに依存する考え方自体がおかしい。
もうじき #include 対象を url 指定するような時代にもなるだろうし。
(善し悪しはさておき、PHPではこれが出来る)
そうしたら、「同一かどうかは中身で判断する」という選択肢以外はなくなる。
こんな当たり前の話が分からないのは完全に老害化してる。
357デフォルトの名無しさん (ワッチョイ 419f-TsVf)
2018/04/26(木) 19:30:31.24ID:HtO+dzj70 そしてやる気がないのは今更意味がないからだろ。ほぼ全ての環境で実装済みだ。
> Cray C and C++ 以外では全て実装済み
> https://en.wikipedia.org/wiki/Pragma_once
勿論糞長いパスとかにしたらはまることもあるが、これもよくある話でしかないし、ユーザ責任でいい。
規格に「パスは○○文字まで」と決めるわけにも行かんし。
> 途中でバッサリとパスが切られて、まったく同じシンボル名になって、
> 初めてincludeしたファイルなのにスキップされるという、
> なかなか原因解明が困難な不具合に襲われる……といったケースがあるかもしれません。
> ……はい、体験談です。
> http://cpp.aquariuscode.com/include_guard
> Cray C and C++ 以外では全て実装済み
> https://en.wikipedia.org/wiki/Pragma_once
勿論糞長いパスとかにしたらはまることもあるが、これもよくある話でしかないし、ユーザ責任でいい。
規格に「パスは○○文字まで」と決めるわけにも行かんし。
> 途中でバッサリとパスが切られて、まったく同じシンボル名になって、
> 初めてincludeしたファイルなのにスキップされるという、
> なかなか原因解明が困難な不具合に襲われる……といったケースがあるかもしれません。
> ……はい、体験談です。
> http://cpp.aquariuscode.com/include_guard
358デフォルトの名無しさん (ワッチョイ db9f-x1HS)
2018/04/26(木) 19:39:23.16ID:CbHb+b7U0 二重にインクルードすることを想定しているヘッダーファイルって、存在するものなの?
pragmaとか書かなくても、勝手にやってくれたら問題あるの?
pragmaとか書かなくても、勝手にやってくれたら問題あるの?
359片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-L0fA)
2018/04/26(木) 19:43:43.54ID:napFR+dZd >>355
要旨が混乱していますね
>例えばWindowsでは同一ドライブに複数のドライブレターを割り当てることが出来る
つまり、今読み込んでいるヘッダファイルがかつて読んだファイルと同じ実体かどうか、を決める方法は**基本的にない**と主張しているのですよね
そう主張するのなら、
>・読み込んではいけない
>という仕様になるのも自明だ。
「読み込んでいいかどうか」を決める方法がないのに「読み込んではいけない」と決めていいのですか?
条件を満たすかどうかチェックする手段がないのに、その条件を仕様とするのは無意味ではないですか?
要旨が混乱していますね
>例えばWindowsでは同一ドライブに複数のドライブレターを割り当てることが出来る
つまり、今読み込んでいるヘッダファイルがかつて読んだファイルと同じ実体かどうか、を決める方法は**基本的にない**と主張しているのですよね
そう主張するのなら、
>・読み込んではいけない
>という仕様になるのも自明だ。
「読み込んでいいかどうか」を決める方法がないのに「読み込んではいけない」と決めていいのですか?
条件を満たすかどうかチェックする手段がないのに、その条件を仕様とするのは無意味ではないですか?
361はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b6f-luqG)
2018/04/26(木) 19:59:02.73ID:P0bCzIha0 >>358
たくさん存在する。
インクルードする前後のマクロ定義によって挙動を切り替えて使うようなものもある。
基本としては宣言というか、別のコンパイル単位にある関数などのインターフェイスを取り込むために使うものなんだけど、
アクロバティックな使い方をしてるものはそれなりに多いよ。
たくさん存在する。
インクルードする前後のマクロ定義によって挙動を切り替えて使うようなものもある。
基本としては宣言というか、別のコンパイル単位にある関数などのインターフェイスを取り込むために使うものなんだけど、
アクロバティックな使い方をしてるものはそれなりに多いよ。
362デフォルトの名無しさん (ワッチョイ 5be7-3HeQ)
2018/04/26(木) 20:06:45.74ID:OZbR3XDf0 プリプロでループを実現するには再帰includeは欠かせないからな
363デフォルトの名無しさん (ワッチョイ db9f-Q5hi)
2018/04/26(木) 20:08:29.05ID:CbHb+b7U0364デフォルトの名無しさん (ワッチョイ 419f-TsVf)
2018/04/26(木) 20:24:45.91ID:HtO+dzj70365デフォルトの名無しさん (アウアウウー Sa45-luqG)
2018/04/26(木) 20:34:58.75ID:JC9sZU4oa 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));
}
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));
}
366デフォルトの名無しさん (ワッチョイ 5be7-3HeQ)
2018/04/26(木) 20:36:08.64ID:OZbR3XDf0 #include "/dev/tty" も知らない雑魚はもう黙ってろよ
367デフォルトの名無しさん (アウアウウー Sa45-luqG)
2018/04/26(木) 20:37:18.41ID:JC9sZU4oa >>365
の関数は、再帰的な関数です。
その再帰的な関数内で static な配列を利用したいのですが、動的に確保した
領域を解放するにはどうすればいいのでしょうか?
再帰的な関数なので単純に関数の最後で解放するというわけにはいかないので
困っています。
の関数は、再帰的な関数です。
その再帰的な関数内で static な配列を利用したいのですが、動的に確保した
領域を解放するにはどうすればいいのでしょうか?
再帰的な関数なので単純に関数の最後で解放するというわけにはいかないので
困っています。
368デフォルトの名無しさん (アウアウウー Sa45-luqG)
2018/04/26(木) 20:39:18.48ID:JC9sZU4oa >>364
わけて考えてみますね
インクルードガードはプリプロセッサ名前空間内の一つのプリプロ識別子を犠牲にして、機能させようとしているわけですよね
#progma once が犠牲にする**べき**ものは何でしょうか?
わけて考えてみますね
インクルードガードはプリプロセッサ名前空間内の一つのプリプロ識別子を犠牲にして、機能させようとしているわけですよね
#progma once が犠牲にする**べき**ものは何でしょうか?
370デフォルトの名無しさん (アウアウウー Sa45-luqG)
2018/04/26(木) 20:40:15.50ID:JC9sZU4oa371デフォルトの名無しさん (ワッチョイ 5be7-3HeQ)
2018/04/26(木) 20:43:55.37ID:OZbR3XDf0 >>>365
lengthTableのポインタ値をなんとかしてグローバル変数に持ち出してatexitに登録するか
最初からそのグローバル変数でnewするか
どうせプログラム終了時にヒープ丸ごと消えるんだから放置するか
一から書き直すかの4択
lengthTableのポインタ値をなんとかしてグローバル変数に持ち出してatexitに登録するか
最初からそのグローバル変数でnewするか
どうせプログラム終了時にヒープ丸ごと消えるんだから放置するか
一から書き直すかの4択
372デフォルトの名無しさん (アウアウウー Sa45-luqG)
2018/04/26(木) 20:45:16.69ID:JC9sZU4oa373デフォルトの名無しさん (アウアウウー Sa45-luqG)
2018/04/26(木) 20:53:11.22ID:JC9sZU4oa >>371
ありがとうございました。
すみません。質問がちょっとおかしかったので、質問を代えさせていただきます。
ある特定の関数内でしか見えないグローバル変数のような変数というのはC++にありますか?
考えているのは、関数 func でそのグローバル変数のような変数 a を宣言する。
func 内で呼び出している再帰関数 rec_func 内でのみそのグローバル変数のような
変数 a を利用したい。グローバル変数のような変数なので、 rec_func の引数として
a を渡す必要はない。
ありがとうございました。
すみません。質問がちょっとおかしかったので、質問を代えさせていただきます。
ある特定の関数内でしか見えないグローバル変数のような変数というのはC++にありますか?
考えているのは、関数 func でそのグローバル変数のような変数 a を宣言する。
func 内で呼び出している再帰関数 rec_func 内でのみそのグローバル変数のような
変数 a を利用したい。グローバル変数のような変数なので、 rec_func の引数として
a を渡す必要はない。
374デフォルトの名無しさん (アウアウウー Sa45-luqG)
2018/04/26(木) 20:57:03.80ID:JC9sZU4oa 何度も呼び出される再帰関数に引数として同じ変数を渡し続けるのはなんか
無駄なことをしているように思われたので質問しました。
本を読むとグローバル変数は使うなと書いてあるので質問しました。
無駄なことをしているように思われたので質問しました。
本を読むとグローバル変数は使うなと書いてあるので質問しました。
375デフォルトの名無しさん (アウアウウー Sa45-luqG)
2018/04/26(木) 21:01:32.17ID:JC9sZU4oa376デフォルトの名無しさん (アウアウウー Sa45-luqG)
2018/04/26(木) 21:03:04.18ID:JC9sZU4oa でも、そのためだけにクラスを作るというのもなんだかな―という感じがします。
377デフォルトの名無しさん (ワッチョイ 419f-TsVf)
2018/04/26(木) 21:06:11.37ID:HtO+dzj70 >>360
一応添削しておくと、
> 今読み込んでいるヘッダファイルがかつて読んだファイルと同じ実体かどうか、を決める方法は**基本的にない**
× 同じ実体かどうか、を決める方法は
○ 同じ実体かどうか、をパス等で決める方法は
ただし俺はそもそも「中身」を見て確認すべきで、同じ実体だったら云々、という話はしてない。
cp A.h B.h の場合にインクルードガードでBを弾くとして、
当然Bは「ファイルとしては」「読み込まれ」、「コンパイル対象としては」「読み込まれない」だろ。
#pragma once はインクルードガードの自動版なんだから、インクルードガードと同じ仕様でいいんだよ。
そして逆に、実体が異なっていてもこの場合はインクルードガードは利くのだから、#pragma once も利くべきなんだよ。
ファイルパスでの識別ではこれは実現不可能だろ。
>>369
意味不明。何も犠牲にするべき物は無いと思うが。
というかな、規格化するなら方向は自明で、
・#pragma once はインクルードガードの代わりに使われているのだから、
現行のインクルードガードを機械的に #pragma once に置き換えして問題ないように仕様化すべき
でしかないだろ。これで誰も文句ないと思うが。
一応添削しておくと、
> 今読み込んでいるヘッダファイルがかつて読んだファイルと同じ実体かどうか、を決める方法は**基本的にない**
× 同じ実体かどうか、を決める方法は
○ 同じ実体かどうか、をパス等で決める方法は
ただし俺はそもそも「中身」を見て確認すべきで、同じ実体だったら云々、という話はしてない。
cp A.h B.h の場合にインクルードガードでBを弾くとして、
当然Bは「ファイルとしては」「読み込まれ」、「コンパイル対象としては」「読み込まれない」だろ。
#pragma once はインクルードガードの自動版なんだから、インクルードガードと同じ仕様でいいんだよ。
そして逆に、実体が異なっていてもこの場合はインクルードガードは利くのだから、#pragma once も利くべきなんだよ。
ファイルパスでの識別ではこれは実現不可能だろ。
>>369
意味不明。何も犠牲にするべき物は無いと思うが。
というかな、規格化するなら方向は自明で、
・#pragma once はインクルードガードの代わりに使われているのだから、
現行のインクルードガードを機械的に #pragma once に置き換えして問題ないように仕様化すべき
でしかないだろ。これで誰も文句ないと思うが。
378デフォルトの名無しさん (ワッチョイ 5be7-3HeQ)
2018/04/26(木) 21:07:21.99ID:OZbR3XDf0379デフォルトの名無しさん (アウアウウー Sa45-luqG)
2018/04/26(木) 21:07:30.49ID:JC9sZU4oa クラスを作ってそのプライベートなメンバ変数を、
ある関数内でのみ利用できるグローバル変数の
ような変数として使うというのは邪道でしょうか?
ある関数内でのみ利用できるグローバル変数の
ような変数として使うというのは邪道でしょうか?
380デフォルトの名無しさん (アウアウウー Sa45-luqG)
2018/04/26(木) 21:08:37.69ID:JC9sZU4oa381デフォルトの名無しさん (ワッチョイ 419f-TsVf)
2018/04/26(木) 21:51:10.65ID:HtO+dzj70 >>373
> ある特定の関数内でしか見えないグローバル変数のような変数というのはC++にありますか?
見た目だけの話ならラムダでキャプチャすればいい。(クロージャ)
ただ、今気づいたが、C++のラムダって名前付けられないから再帰できないね。
変数の直接呼び出しも試してみたが、以下は通らない。
auto f = [](int x) {return x? x+f(x-1) : x;};
なんでこんな糞仕様にしたんだ?
JavaScriptも当初はそうだったが、不便だったので名前が付けられるように変更した。
この変更を知ってて無視してるのなら頭おかしいし、
知らないのなら不勉強だし。(言語仕様に携わる奴は他言語の動向も見ておくべき)
名前を付けられて悪いことはないし、技術的に不可能って事も無いと思うが。
> ある特定の関数内でしか見えないグローバル変数のような変数というのはC++にありますか?
見た目だけの話ならラムダでキャプチャすればいい。(クロージャ)
ただ、今気づいたが、C++のラムダって名前付けられないから再帰できないね。
変数の直接呼び出しも試してみたが、以下は通らない。
auto f = [](int x) {return x? x+f(x-1) : x;};
なんでこんな糞仕様にしたんだ?
JavaScriptも当初はそうだったが、不便だったので名前が付けられるように変更した。
この変更を知ってて無視してるのなら頭おかしいし、
知らないのなら不勉強だし。(言語仕様に携わる奴は他言語の動向も見ておくべき)
名前を付けられて悪いことはないし、技術的に不可能って事も無いと思うが。
382デフォルトの名無しさん (ワッチョイ 1961-luqG)
2018/04/26(木) 22:07:02.86ID:IAeApo/t0 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文字列の解釈をまさか知らんのか?
#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文字列の解釈をまさか知らんのか?
383デフォルトの名無しさん (ドコグロ MMa3-tYAq)
2018/04/26(木) 22:34:27.88ID:4xU9Va0kM384デフォルトの名無しさん (ワッチョイ 1961-luqG)
2018/04/26(木) 22:35:24.34ID:IAeApo/t0 >>383
全文そのまま返すわ
全文そのまま返すわ
385デフォルトの名無しさん (ワッチョイ 4150-LNFl)
2018/04/26(木) 22:41:09.16ID:EM3O7qLA0 同じファイル
同じ中身
大きく分けて2種類あり、
それぞれ、同じの定義の詳細は色々と考えられる
同じ中身
大きく分けて2種類あり、
それぞれ、同じの定義の詳細は色々と考えられる
386デフォルトの名無しさん (ドコグロ MMa3-tYAq)
2018/04/26(木) 22:45:45.22ID:4xU9Va0kM387デフォルトの名無しさん (ドコグロ MMa3-tYAq)
2018/04/26(木) 22:46:56.42ID:4xU9Va0kM >>384
人を嘘つき呼ばわりして謝ることもできない奴がなに言ってるんだよ w
人を嘘つき呼ばわりして謝ることもできない奴がなに言ってるんだよ w
388デフォルトの名無しさん (ワッチョイ 1961-luqG)
2018/04/26(木) 23:09:17.34ID:IAeApo/t0 効いてる効いてるw
嘘つき呼ばわりじゃなく嘘つきという真実を指摘されてファビョーンかよ
おまえは考察自体を放棄した
この事実はどうにもならない
嘘つき呼ばわりじゃなく嘘つきという真実を指摘されてファビョーンかよ
おまえは考察自体を放棄した
この事実はどうにもならない
389デフォルトの名無しさん (ワッチョイ 419f-TsVf)
2018/04/26(木) 23:12:02.64ID:HtO+dzj70390デフォルトの名無しさん (ワッチョイ 5b7f-jvcw)
2018/04/26(木) 23:58:27.23ID:DklDUzVR0 またいつもの奴が暴れてるのか
相変わらず不毛な話してるな
相変わらず不毛な話してるな
391デフォルトの名無しさん (ワッチョイ 5b7f-jvcw)
2018/04/26(木) 23:59:44.22ID:DklDUzVR0 それで結局#pragma onceが採用されてこなかった理由はなんなん?
392デフォルトの名無しさん (ワッチョイ 9334-WSc7)
2018/04/27(金) 00:09:03.41ID:vLs/1v3E0 所詮 pragma だから
この部分は処理系依存が強く出るので
この部分は処理系依存が強く出るので
393デフォルトの名無しさん (ワッチョイ 93b3-tYAq)
2018/04/27(金) 00:18:29.43ID:nldsEJyI0394デフォルトの名無しさん (ワッチョイ 5be7-3HeQ)
2018/04/27(金) 00:25:32.85ID:ledFfOHm0 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
http://open-std.org/JTC1/SC22/WG21/docs/papers/2017/p0538r0.html
#pragma onceについて語りたい奴は必ず先に目を通すように
じゃないと上で騒いでる馬鹿みたいになっちゃうからな
https://groups.google.com/a/isocpp.org/forum/#!topic/std-discussion/YG76sfDJ4f8
http://open-std.org/JTC1/SC22/WG21/docs/papers/2017/p0538r0.html
#pragma onceについて語りたい奴は必ず先に目を通すように
じゃないと上で騒いでる馬鹿みたいになっちゃうからな
395デフォルトの名無しさん
2018/04/27(金) 06:18:50.95 MSアレルギー
396デフォルトの名無しさん (ワッチョイ d3c3-luqG)
2018/04/27(金) 06:26:34.10ID:mlVlMuXl0397デフォルトの名無しさん (ドコグロ MMa3-tYAq)
2018/04/27(金) 06:41:55.40ID:O6TOHWbPM まともに反論できないことはよくわかったよ w
事実を書いてあるだけで思考過程なんて関係ない
事実を書いてあるだけで思考過程なんて関係ない
398デフォルトの名無しさん (ブーイモ MM85-MzrX)
2018/04/27(金) 06:51:10.76ID:fIiVOejaM 天啓が下ったぞ!
399デフォルトの名無しさん (ワッチョイ 5be7-3HeQ)
2018/04/27(金) 07:38:07.75ID:ledFfOHm0 事実ってなんだよ
「アホは切り捨てろ!」とかいう標準規格として最低最悪の解決策を取れっていうのはお前のクソみたいな「意見」だろうが
お前の意見は必ず自動的に実現して事実になるの?神なの?
「アホは切り捨てろ!」とかいう標準規格として最低最悪の解決策を取れっていうのはお前のクソみたいな「意見」だろうが
お前の意見は必ず自動的に実現して事実になるの?神なの?
400デフォルトの名無しさん (ドコグロ MMa3-tYAq)
2018/04/27(金) 08:05:14.16ID:O6TOHWbPM そういう意見を書いてあると言う「事実」な
マジで理解力無さすぎ w
マジで理解力無さすぎ w
401デフォルトの名無しさん (ワッチョイ d3c3-luqG)
2018/04/27(金) 10:03:10.93ID:mlVlMuXl0402デフォルトの名無しさん (スッップ Sdb3-UHm4)
2018/04/27(金) 10:58:06.07ID:COWnkDW0d403デフォルトの名無しさん (ドコグロ MMa3-tYAq)
2018/04/27(金) 12:28:04.63ID:O6TOHWbPM404デフォルトの名無しさん (スップ Sdb3-LNFl)
2018/04/27(金) 12:30:27.46ID:Mg+ERRyAd いつまでやるの?
405デフォルトの名無しさん (スッップ Sdb3-UHm4)
2018/04/27(金) 12:42:19.37ID:COWnkDW0d C/C++の規格はgets()とかいうアホな使い方しか出来ないアホ関数を30年も削除出来なかったくらいアホに気長に付き合う規格なんだよ
広く使われ続ける規格の宿命としてその方針は変えられない
だからお前の言うようなアホを無視して切り捨てるという選択肢が採用されることはないという事でこの話終わりな
広く使われ続ける規格の宿命としてその方針は変えられない
だからお前の言うようなアホを無視して切り捨てるという選択肢が採用されることはないという事でこの話終わりな
406デフォルトの名無しさん (ワッチョイ d3c3-luqG)
2018/04/27(金) 14:52:44.93ID:mlVlMuXl0 >>403
もう一度言う
提示してねえだろ、おまえは無視つったんだよ
人をアホよばわりしようと焦るあまり
論議そのものを粗末に扱ったのが
おまえの運の尽きだ
そこでどんなに暴れようが
おまえは何も論じていない
よって論に反駁してもらえることもない
ましてや事実に反駁というシュールなことをする者もいない
もう一度言う
提示してねえだろ、おまえは無視つったんだよ
人をアホよばわりしようと焦るあまり
論議そのものを粗末に扱ったのが
おまえの運の尽きだ
そこでどんなに暴れようが
おまえは何も論じていない
よって論に反駁してもらえることもない
ましてや事実に反駁というシュールなことをする者もいない
407デフォルトの名無しさん (ワッチョイ b37e-aD0S)
2018/04/27(金) 16:36:21.86ID:j5Ya8YmN0 アホではないから残しているのでは
408デフォルトの名無しさん (ドコグロ MMa3-tYAq)
2018/04/27(金) 18:27:57.39ID:O6TOHWbPM409850 (オッペケ Sr0d-OwZ7)
2018/04/27(金) 18:31:51.94ID:Q1GjkYeyr410デフォルトの名無しさん (ドコグロ MMa3-tYAq)
2018/04/27(金) 18:33:12.92ID:O6TOHWbPM411デフォルトの名無しさん (ワッチョイ d3c3-luqG)
2018/04/27(金) 19:01:47.01ID:mlVlMuXl0412デフォルトの名無しさん (ワッチョイ 93b3-tYAq)
2018/04/27(金) 20:31:10.54ID:nldsEJyI0 はい、基地害乙
413片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdb3-L0fA)
2018/04/27(金) 20:33:29.96ID:HF3+Vuoyd りかいできないならからんでくるなよダブリュー
「アホなりようしゃはあいてにしない(イコールむしする)」っていうしようを「ていじ」してるってはなしだ、ボケ
「アホなりようしゃはあいてにしない(イコールむしする)」っていうしようを「ていじ」してるってはなしだ、ボケ
414デフォルトの名無しさん (スップ Sdb3-LNFl)
2018/04/27(金) 20:46:16.80ID:mctUhDKod よくわからんが、糞コテの自演てこと?
415デフォルトの名無しさん (ワッチョイ 419f-TsVf)
2018/04/27(金) 23:50:18.78ID:mp1hh4hd0 C/C++は池沼お断りの言語なんだから、このスレも同じノリでいいと思うぞ。
指摘しても理解できないのは、日本語が出来ない=池沼だから。
慣れる慣れない以前の問題だ。
指摘しても理解できないのは、日本語が出来ない=池沼だから。
慣れる慣れない以前の問題だ。
416デフォルトの名無しさん (ワッチョイ 93bd-Mk12)
2018/04/28(土) 06:20:59.27ID:BHnoJcFn0 ていうか#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
(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
417デフォルトの名無しさん (ワッチョイ 4150-LNFl)
2018/04/28(土) 06:57:19.27ID:ibkTuaSK0418デフォルトの名無しさん (ワッチョイ 93bd-Mk12)
2018/04/28(土) 07:52:46.94ID:BHnoJcFn0 ■ #pragma onceの俺様仕様
(ヘッダファイルの集合の規定)
1. インクルードされるヘッダファイルを#pragma once付きとそれ以外とする。
ただし、次のいずれかに該当する場合はエラーとする(ヘッダファイルに含めない)
(1) #pragma onceがコメントを除くファイル先頭に現れた場合
(2) #pragma onceがコメントを除くファイル先頭に現れ、かつ
ファイル内の#if〜#endifの入れ子がファイル内で完結しない
(ヘッダファイルの識別)
2. #pragma once付きのヘッダファイル同士は、ファイル名で識別する。(ディレクトリパスは無視)
(ヘッダファイルの展開)
3. #pragma once付きのヘッダファイルのうち、上記2の規則により同一と判定されるファイルは
単一のコンパイルの中で、2回目以降の展開を無視する。
4. #pragma once付きでないヘッダファイルの展開は現行どおりとする。
いじょ
(ヘッダファイルの集合の規定)
1. インクルードされるヘッダファイルを#pragma once付きとそれ以外とする。
ただし、次のいずれかに該当する場合はエラーとする(ヘッダファイルに含めない)
(1) #pragma onceがコメントを除くファイル先頭に現れた場合
(2) #pragma onceがコメントを除くファイル先頭に現れ、かつ
ファイル内の#if〜#endifの入れ子がファイル内で完結しない
(ヘッダファイルの識別)
2. #pragma once付きのヘッダファイル同士は、ファイル名で識別する。(ディレクトリパスは無視)
(ヘッダファイルの展開)
3. #pragma once付きのヘッダファイルのうち、上記2の規則により同一と判定されるファイルは
単一のコンパイルの中で、2回目以降の展開を無視する。
4. #pragma once付きでないヘッダファイルの展開は現行どおりとする。
いじょ
419デフォルトの名無しさん
2018/04/28(土) 07:55:01.29420デフォルトの名無しさん (ブーイモ MMf5-EDrg)
2018/04/28(土) 07:56:19.92ID:zm4OWgENM ソフトウェアが巨大化してくると、サブモジュールが各々同一のSDKを抱えてるなんてことがある。
複数のサブモジュールを読み込んでるソースコードは間接的に同一ヘッダを読み込む可能性があるが、
cvs等が異なるidを埋め込んでいたり、それぞれ微妙にバージョンが異なっていたり、エンコーディングや改行コードが異なっていたりする場合、
Includeガードならビルドできるが、pragma onceだと同一ヘッダを異なるファイルと認識してしまい、エラーになってしまったので、サブモジュールを全て自前で修正する羽目になった。
なんてことがあるかもしれない。
結局ヒューリスティックな実装しかないんでないの?
複数のサブモジュールを読み込んでるソースコードは間接的に同一ヘッダを読み込む可能性があるが、
cvs等が異なるidを埋め込んでいたり、それぞれ微妙にバージョンが異なっていたり、エンコーディングや改行コードが異なっていたりする場合、
Includeガードならビルドできるが、pragma onceだと同一ヘッダを異なるファイルと認識してしまい、エラーになってしまったので、サブモジュールを全て自前で修正する羽目になった。
なんてことがあるかもしれない。
結局ヒューリスティックな実装しかないんでないの?
421デフォルトの名無しさん (ワッチョイ 93bd-Mk12)
2018/04/28(土) 07:57:50.65ID:BHnoJcFn0 訂正;
誤: (1) #pragma onceがコメントを除くファイル先頭に現れた場合
正: (1) #pragma onceがコメントを除くファイル先頭以外に現れた場合
誤: (1) #pragma onceがコメントを除くファイル先頭に現れた場合
正: (1) #pragma onceがコメントを除くファイル先頭以外に現れた場合
422デフォルトの名無しさん (ワッチョイ 93bd-Mk12)
2018/04/28(土) 07:58:55.91ID:BHnoJcFn0423デフォルトの名無しさん (ブーイモ MMf5-EDrg)
2018/04/28(土) 08:04:07.12ID:zm4OWgENM424デフォルトの名無しさん (ワッチョイ 93bd-Mk12)
2018/04/28(土) 08:05:18.62ID:BHnoJcFn0425デフォルトの名無しさん (ブーイモ MMf5-EDrg)
2018/04/28(土) 08:15:15.14ID:zm4OWgENM 今後ヘッダファイル名にはドメイン名を頭につけなきゃいけないね。
メアドでもいいかな?
メアドでもいいかな?
426デフォルトの名無しさん (ワッチョイ 93b3-tYAq)
2018/04/28(土) 08:20:58.21ID:amQJLuCm0427デフォルトの名無しさん (ワッチョイ d3c3-luqG)
2018/04/28(土) 08:24:01.11ID:WRqkde3l0428デフォルトの名無しさん
2018/04/28(土) 08:33:55.15429デフォルトの名無しさん (ワッチョイ 5be7-3HeQ)
2018/04/28(土) 09:13:26.88ID:clK1o5V+0 つまりfooSDK/interface.hとbarSDK/interface.hは同一として判定するんだな
たいへんだー
たいへんだー
430デフォルトの名無しさん (ワッチョイ d3c3-luqG)
2018/04/28(土) 09:22:50.78ID:WRqkde3l0 結論を急ぐあまり考察が浅くなりすぎだな
431デフォルトの名無しさん (ワッチョイ 4150-LNFl)
2018/04/28(土) 09:23:37.16ID:ibkTuaSK0 #pragma onceの前に改行があったらエラーですかwww
432デフォルトの名無しさん (ワッチョイ 93b3-tYAq)
2018/04/28(土) 09:27:57.75ID:amQJLuCm0433デフォルトの名無しさん (ワッチョイ d3c3-luqG)
2018/04/28(土) 09:34:33.18ID:WRqkde3l0434デフォルトの名無しさん (ブーイモ MMf5-EDrg)
2018/04/28(土) 09:42:57.08ID:zm4OWgENM435デフォルトの名無しさん (ワッチョイ 4150-LNFl)
2018/04/28(土) 09:45:12.10ID:ibkTuaSK0 まずは世の中のプリプロセッサのpragma onceの仕様がどうなっているかを調べるべきかと
436デフォルトの名無しさん (ワッチョイ 2be8-A9Qv)
2018/04/28(土) 09:54:13.99ID:EXYGb8MJ0 具体的な話になったら一気にレベル下がったなw
437デフォルトの名無しさん (ワッチョイ 93b3-tYAq)
2018/04/28(土) 10:21:03.59ID:amQJLuCm0438デフォルトの名無しさん (ワッチョイ 4150-LNFl)
2018/04/28(土) 10:24:05.76ID:ibkTuaSK0 目的は
インクルードのループを防ぎたいのと
同じ定義を複数回行うことでエラーになるのを防ぎたい
ってことだよな
これをインテリジェントに行ってくれるのが理想
インテリジェントな物を仕様にするのは難しいし、
時代が進めばインテリジェント具合も変わる
>>418みたいなあまりにショボい仕様だと
後々不満が出ることになる
インクルードのループを防ぎたいのと
同じ定義を複数回行うことでエラーになるのを防ぎたい
ってことだよな
これをインテリジェントに行ってくれるのが理想
インテリジェントな物を仕様にするのは難しいし、
時代が進めばインテリジェント具合も変わる
>>418みたいなあまりにショボい仕様だと
後々不満が出ることになる
439デフォルトの名無しさん (ワッチョイ d3c3-luqG)
2018/04/28(土) 10:28:01.67ID:WRqkde3l0440デフォルトの名無しさん (ワッチョイ 93bd-Mk12)
2018/04/28(土) 10:28:57.76ID:BHnoJcFn0 >>429
>>434
現行のヘッダファイルでうまく行っているのならそのままでええ(>>418項番4はそのためにある
そうではなくて、もしも(例えば)マイクロソフトのVisual C++の#pragma onceを使って書かれた過去の遺産の尊重が大事なら
そのときは>>418の方の#pragma onceを#pragma once2とかに代えれば良いが
そりゃー(例えば)マイクロソフトのVisual C++の#pragma onceが先行して規格になった後の話なので今は無視
>>435
>417からの流れと考え合わせるに、
「僕ちゃんの考えた理想の#pragma onceじゃないと嫌なの!!!>418のクソ単純な仕様は正しくとも認められん!!!」ってことですかそうですか…
なお>>431の指摘は評価する
>>436
抽象的な言い回しで無意味に高尚な議論に見せかけている連中の方が多数派
空っぽなのに…
>>434
現行のヘッダファイルでうまく行っているのならそのままでええ(>>418項番4はそのためにある
そうではなくて、もしも(例えば)マイクロソフトのVisual C++の#pragma onceを使って書かれた過去の遺産の尊重が大事なら
そのときは>>418の方の#pragma onceを#pragma once2とかに代えれば良いが
そりゃー(例えば)マイクロソフトのVisual C++の#pragma onceが先行して規格になった後の話なので今は無視
>>435
>417からの流れと考え合わせるに、
「僕ちゃんの考えた理想の#pragma onceじゃないと嫌なの!!!>418のクソ単純な仕様は正しくとも認められん!!!」ってことですかそうですか…
なお>>431の指摘は評価する
>>436
抽象的な言い回しで無意味に高尚な議論に見せかけている連中の方が多数派
空っぽなのに…
441デフォルトの名無しさん (ワッチョイ 4150-LNFl)
2018/04/28(土) 10:29:34.95ID:ibkTuaSK0442デフォルトの名無しさん (ワッチョイ 93bd-Mk12)
2018/04/28(土) 10:33:35.22ID:BHnoJcFn0443デフォルトの名無しさん (ワッチョイ 4150-LNFl)
2018/04/28(土) 10:33:47.48ID:ibkTuaSK0 >>429の例で
2重インクルードを防ぎたい場合とそれぞれ別にインクルードしたい場合があるってのは書かなくてもわかるよな
中身が全く同じであれば防ぎたいし
全く別の定義であればそれそれぞれをインクルードしたい
2重インクルードを防ぎたい場合とそれぞれ別にインクルードしたい場合があるってのは書かなくてもわかるよな
中身が全く同じであれば防ぎたいし
全く別の定義であればそれそれぞれをインクルードしたい
444デフォルトの名無しさん (ワッチョイ 4150-LNFl)
2018/04/28(土) 10:35:03.59ID:ibkTuaSK0 >>442
#pragma onceの仕様はVisual C++しか実装してないと思ってる?
#pragma onceの仕様はVisual C++しか実装してないと思ってる?
445デフォルトの名無しさん (ワッチョイ 93bd-Mk12)
2018/04/28(土) 10:38:47.00ID:BHnoJcFn0446デフォルトの名無しさん (ワッチョイ 4150-LNFl)
2018/04/28(土) 10:42:05.24ID:ibkTuaSK0 いずれにしろ>>418みたいなチープな仕様じゃ誰にも支持されない
447デフォルトの名無しさん (ワッチョイ d3c3-luqG)
2018/04/28(土) 10:45:00.58ID:WRqkde3l0 ツッコミ殺到でボコボコなのに勝利宣言してやがるな
つっこんだ人たち(ここのほぼ全員)にバレバレなのに滑稽な
つっこんだ人たち(ここのほぼ全員)にバレバレなのに滑稽な
448デフォルトの名無しさん (ワッチョイ 419f-TsVf)
2018/04/28(土) 11:10:27.31ID:ueAKslGb0 >>418,421はミニマムの仕様を提示しただけで、つまり、
この仕様で問題ない場合は #pragma once で手抜きが出来て、
無理な場合は従来通りインクルードガード使えってことだろ。
俺はありだと思うぜ。仕様ってのはこういう割り切り方をしないと決まらない。
C++のラムダなんて後付で仕様を拡張して行っているし。(このやり方がいいとは思わないが)
ただ、この仕様だと現行の #pragma once よりも割り切っているのがイマイチで、
「今」この仕様では却下されるだろう。
「#pragma once が全くない世界」なら、とりあえずここから出発するのもありだっただろう。
現行の #pragma once は常識的に考えて、
・ファイル実体が同じ場合(ハードリンク/シンボリックリンク)は対応可能
・コピーの場合(ローカルに xxx.h を tmp_xxx.h にしてデバッグ出力を改変したり)には対応不能
だろう。だから使用条件としては、
・全ファイルがローカルファイルシステム上にあり、ヘッダファイルの改変は行わない
であり、普通に個人レベルで開発する場合はこれで全く問題ないし、妥当だ。
会社で10-20人レベルで開発する場合、どのみちルールを子細に決めることになるし、
そういう場合は従来のインクルードガードでやれ、という割り切りも妥当だよ。
この仕様で問題ない場合は #pragma once で手抜きが出来て、
無理な場合は従来通りインクルードガード使えってことだろ。
俺はありだと思うぜ。仕様ってのはこういう割り切り方をしないと決まらない。
C++のラムダなんて後付で仕様を拡張して行っているし。(このやり方がいいとは思わないが)
ただ、この仕様だと現行の #pragma once よりも割り切っているのがイマイチで、
「今」この仕様では却下されるだろう。
「#pragma once が全くない世界」なら、とりあえずここから出発するのもありだっただろう。
現行の #pragma once は常識的に考えて、
・ファイル実体が同じ場合(ハードリンク/シンボリックリンク)は対応可能
・コピーの場合(ローカルに xxx.h を tmp_xxx.h にしてデバッグ出力を改変したり)には対応不能
だろう。だから使用条件としては、
・全ファイルがローカルファイルシステム上にあり、ヘッダファイルの改変は行わない
であり、普通に個人レベルで開発する場合はこれで全く問題ないし、妥当だ。
会社で10-20人レベルで開発する場合、どのみちルールを子細に決めることになるし、
そういう場合は従来のインクルードガードでやれ、という割り切りも妥当だよ。
449デフォルトの名無しさん (ワッチョイ 419f-TsVf)
2018/04/28(土) 11:11:35.35ID:ueAKslGb0 なお俺が推す仕様は、
・#pragma once のファイル内では複数定義のエラーを無視する
というものだ。従って、
・現行の#pragma once とは違い、対象ファイルは必ず「ファイルとしては」「読み込まれる」
(これは現行のインクルードガードとも同じ)
・定義されている物のシグネチャが既に存在するものと全く同一だった場合、無視する。
・シグネチャが異なっている場合、普通に読み込む(コンパイル対象とする)
(勝手にデバッグ関数を追加されていた場合、その関数だけはコンパイルされる)
・#pragma once のファイルを全部パースし終わった際、「全部重複」「全部新規」ではなかった場合、警告を出す。
(正しく使えば「全部重複」「全部新規」のどちらかになる。
改変《追加》した場合は「一部新規」となり、警告にする。「一部欠落」は検知しない。)
というものだ。
この場合、要するに「読み込んで同じだったら無視」なので、
#ifdef 内等、かなりアクロバティックに使われても、問題なく、使用者の直感通りに動作する。
改行の追加、コメント変更等は全く問題ない。
ただし常に全部のファイルを読み込み、初段階のパースは行うことになるので、
現行の #pragma once やインクルードガードよりは速度は劣る。
とはいえ、今更ここが問題になる時代ではないし、問題になるようならインクルードガードを使えと割り切る。
つまり、面倒なら #include を使わずに、全部 #pragma once にも出来る、というもので、
実際これで問題無いと思うんだがな。
・#pragma once のファイル内では複数定義のエラーを無視する
というものだ。従って、
・現行の#pragma once とは違い、対象ファイルは必ず「ファイルとしては」「読み込まれる」
(これは現行のインクルードガードとも同じ)
・定義されている物のシグネチャが既に存在するものと全く同一だった場合、無視する。
・シグネチャが異なっている場合、普通に読み込む(コンパイル対象とする)
(勝手にデバッグ関数を追加されていた場合、その関数だけはコンパイルされる)
・#pragma once のファイルを全部パースし終わった際、「全部重複」「全部新規」ではなかった場合、警告を出す。
(正しく使えば「全部重複」「全部新規」のどちらかになる。
改変《追加》した場合は「一部新規」となり、警告にする。「一部欠落」は検知しない。)
というものだ。
この場合、要するに「読み込んで同じだったら無視」なので、
#ifdef 内等、かなりアクロバティックに使われても、問題なく、使用者の直感通りに動作する。
改行の追加、コメント変更等は全く問題ない。
ただし常に全部のファイルを読み込み、初段階のパースは行うことになるので、
現行の #pragma once やインクルードガードよりは速度は劣る。
とはいえ、今更ここが問題になる時代ではないし、問題になるようならインクルードガードを使えと割り切る。
つまり、面倒なら #include を使わずに、全部 #pragma once にも出来る、というもので、
実際これで問題無いと思うんだがな。
450デフォルトの名無しさん (スップ Sdb3-LNFl)
2018/04/28(土) 11:15:31.75ID:aIENMcPWd もう書かなくて良いよ
アホだってこはみんなわかったから
アホだってこはみんなわかったから
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… ★4 [BFU★]
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性には共通点が [Hitzeschleier★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★5 [Hitzeschleier★]
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 「これいいじゃん!!!」 セブン-イレブンの1620円で買える“1人用クリスマスケーキ”🎂に注目殺到「天才すぎる」 [パンナ・コッタ★]
- 【高市速報】中国、最後通牒 [308389511]
- 【高市速報】中国、世界の敵になり始めるwwwwwwwwwwwwww [308389511]
- 最近のVIP人いなくね?
- おまえらHDDの廃棄ってどうしてるの?
- しね✋ーーーーー☀
- 【速報】テレビ朝日本社から20代〜30代の男性が飛び降り自殺して死亡 東京・六本木 [597533159]
