[過去ログ]
C++相談室 part165 (1002レス)
C++相談室 part165 http://mevius.5ch.net/test/read.cgi/tech/1698705458/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
747: デフォルトの名無しさん (スフッ Sd9a-JU6R) [sage] 2025/03/15(土) 17:45:50.20 ID:UQwxamXid [](){}(); http://mevius.5ch.net/test/read.cgi/tech/1698705458/747
748: デフォルトの名無しさん (ワッチョイ 1963-BNp6) [sage] 2025/03/15(土) 22:57:27.79 ID:nPJTLBuF0 停止性問題を一般のケースについて解く機械的手続きで有限時間で必ずおわるもの(アルゴリズム)は存在しないが 人間は納期までにプログラムえおデバッグできる……できる……たぶん…… http://mevius.5ch.net/test/read.cgi/tech/1698705458/748
749: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI) [sage] 2025/03/16(日) 09:48:31.74 ID:B4wnHsDg0 出来なかったら誰かがどういう形かで責任を取る。 それが社会ってもんだ。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/749
750: デフォルトの名無しさん (ワッチョイ d963-lHAu) [sage] 2025/03/16(日) 11:01:20.74 ID:N4spayNe0 有限時間内に終わる機械的計算手続きとして存在するかという観点で考えたとき デバックの不可能なプログラムは存在しないという例の命題は偽な可能性、 もっともこの正確な引用は「バグのないプログラムは存在しないがデバックの不可能なプログラムもまた存在しない」であって全体として矛盾した主張であることは前から指摘されてあるが http://mevius.5ch.net/test/read.cgi/tech/1698705458/750
751: デフォルトの名無しさん (ワッチョイ d963-lHAu) [sage] 2025/03/16(日) 11:04:22.68 ID:N4spayNe0 訂正orz、 誤: 有限時間内に終わる機械的計算手続きとして存在するかという観点で考えたとき 正: 任意のプログラムのデバッグと言う手続きが有限時間内に終わる機械的計算手続きとして存在するかという観点で考えたとき http://mevius.5ch.net/test/read.cgi/tech/1698705458/751
752: デフォルトの名無しさん (ワッチョイ 1302-BOwI) [!donguri] 2025/03/17(月) 06:41:01.39 ID:/+A5sOUu0 ラムダ式に+の話は始めて知った 勉強になった http://mevius.5ch.net/test/read.cgi/tech/1698705458/752
753: デフォルトの名無しさん (オッペケ Sr9d-exlI) [sage] 2025/03/17(月) 09:17:27.77 ID:3/T8wXeSr >>746 それちょっとだけ解説きぼん ぶっちゃけなんとなくで使ってて気持ち悪かった http://mevius.5ch.net/test/read.cgi/tech/1698705458/753
754: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI) [sage] 2025/03/17(月) 09:55:35.41 ID:xz+hBXXy0 オーバーロード解決のルールは大雑把には ・候補の中で実引数と完璧に型が一致するものがあればそれが選ばれる。 ・完璧な一致がないが暗黙の型変換を適用したら一致するという候補があればそれが選ばれる。 ということになってる。 実際には変換の中にも優先順位がごちゃごちゃあってかなり複雑なんだけど……。 で、組み込みの単項 + が受け取りうる型は何かというと算術型、スコープなし列挙型、またはポインタ型の三つ。 https://timsong-cpp.github.io/cppwp/n3337/expr.unary#op-7 キャプチャなしのクロージャ型は関数ポインタへの変換関数を持っている。 つまり暗黙の型変換が可能。 https://timsong-cpp.github.io/cppwp/n3337/expr.prim.lambda#6 クロージャからポインタへ暗黙の型変換をすれば単項 + に一致するからそれが選ばれる。 そういうメカニズムだと私は理解してるんだけど間違いがあったら誰か指摘してね。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/754
755: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI) [sage] 2025/03/17(月) 09:58:44.63 ID:xz+hBXXy0 単項 + の話題がウケたみたいなのでオマケで * の話もしようかな。 単項 * にクロージャを渡した場合は関数の参照になる。 つまり *[](){} としたら型は void(&)() ってことね。 式中に参照が現れたら参照が指す先の型に変換されて、関数指示子が現れたら関数ポインタに変換されるので多くの状況では最終的に関数ポインタになっちゃうんだけど。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/755
756: デフォルトの名無しさん (ササクッテロル Sp9d-H5Hv) [sage] 2025/03/17(月) 10:46:49.46 ID:qCQLpZeYp 要するに副作用って事か 環境によってとかオプティマイズ如何で違った動きになる事は無いのかなぁ http://mevius.5ch.net/test/read.cgi/tech/1698705458/756
757: デフォルトの名無しさん (ブーイモ MM33-EPiB) [sage] 2025/03/17(月) 11:12:41.81 ID:ly7jZf+WM ならんだろw http://mevius.5ch.net/test/read.cgi/tech/1698705458/757
758: デフォルトの名無しさん (ササクッテロル Sp9d-H5Hv) [sage] 2025/03/17(月) 11:24:02.10 ID:F8F0vPkQp 昔、ARM系の環境で配列とポインタがまるっきり違う扱いになって困ったって事があったんだよなぁ http://mevius.5ch.net/test/read.cgi/tech/1698705458/758
759: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI) [sage] 2025/03/17(月) 11:44:46.70 ID:xz+hBXXy0 >>756 これは言語仕様の話なので言語仕様に沿わないことがあるなら単にコンパイラのバグってだけだ。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/759
760: デフォルトの名無しさん (スップ Sd33-pKjK) [sage] 2025/03/17(月) 13:02:56.94 ID:kJ3GyyA+d 「関数の配列」なんてものが存在しないC++で、関数ポインタに合法的な加減算することなんてないはずなのに、その仲間である単項+が効いちゃうのは気持ち悪くはある http://mevius.5ch.net/test/read.cgi/tech/1698705458/760
761: デフォルトの名無しさん (ワッチョイ 711b-yxlS) [] 2025/03/17(月) 13:42:24.96 ID:EbB+xfjB0 関数ポインタをインクリメントしたら次の関数になるとかだったら便利よね http://mevius.5ch.net/test/read.cgi/tech/1698705458/761
762: デフォルトの名無しさん (ブーイモ MM33-EPiB) [sage] 2025/03/17(月) 13:56:11.11 ID:ly7jZf+WM 次ってどこだよ http://mevius.5ch.net/test/read.cgi/tech/1698705458/762
763: デフォルトの名無しさん (ワッチョイ 711b-yxlS) [] 2025/03/17(月) 14:43:44.88 ID:EbB+xfjB0 関数のアドレス順とか http://mevius.5ch.net/test/read.cgi/tech/1698705458/763
764: デフォルトの名無しさん (ササクッテロル Sp9d-H5Hv) [sage] 2025/03/17(月) 15:28:39.42 ID:nF5lR4//p コード書いた順だろw http://mevius.5ch.net/test/read.cgi/tech/1698705458/764
765: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 217f-a7BF) [sage] 2025/03/17(月) 16:50:25.99 ID:qL9fWs880 >>760 私もそう思う。 いつからこうなのか探ってみたら1984年のリファレンスマニュアルではそもそも単項 + は存在せず、 https://web.archive.org/web/20171002220954/http://www.eah-jena.de/~kleine/history/languages/Stroustrup-CplusplusReferenceManual.pdf 1989年には単項 + が現れていてポインタも受け取れるようになってる。 https://www.softwarepreservation.org/projects/c_plus_plus/cfront/release_2.0/doc/ProductReferenceManual.pdf この間にどんな議論があったのかよくわからん。 C の規格では今でも単項 + は算術型しか許してないし、それが自然だよな。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/765
766: デフォルトの名無しさん (アウアウエー Sa23-D2PX) [] 2025/03/18(火) 18:06:10.72 ID:2EW8BzNca >>760-762 各要素のサイズが一定じゃないから無理なんやろな http://mevius.5ch.net/test/read.cgi/tech/1698705458/766
767: デフォルトの名無しさん (ワッチョイ 1302-BOwI) [!donguri] 2025/03/21(金) 19:45:52.92 ID:zuSmXANM0 >>755 またまた勉強になったお! ありがとうございます!! http://mevius.5ch.net/test/read.cgi/tech/1698705458/767
768: デフォルトの名無しさん (ワッチョイ 1302-BOwI) [!donguri] 2025/03/21(金) 19:49:46.16 ID:zuSmXANM0 関数のアドレスなら呼び出して スタックに無理矢理アク(以下略) http://mevius.5ch.net/test/read.cgi/tech/1698705458/768
769: デフォルトの名無しさん (ワッチョイ 0107-exlI) [sage] 2025/03/21(金) 22:32:50.41 ID:pLF+KLC30 そういうむちゃくちゃが簡単にできるのがC/C++ そんなことしながら、チップを覚えるんだよなあ 自分、次はMIPS覚えないと http://mevius.5ch.net/test/read.cgi/tech/1698705458/769
770: デフォルトの名無しさん (アウアウエー Sa23-D2PX) [sage] 2025/03/22(土) 14:21:53.59 ID:U6/Lg1xxa どっかのタイミングでbpがスタックギリギリ飛ばすんじゃなくて コンパイラが128bytesくらい飛ばす仕様になった気がするんだけど あれは0埋めで(ホントはバグがあるのに)奇跡的にバグ回避するテクニックなのか 他に理由あるんか http://mevius.5ch.net/test/read.cgi/tech/1698705458/770
771: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-a7BF) [sage] 2025/03/22(土) 18:01:17.10 ID:nNEN9uWE0 >>770 128 ビット (16 バイト) じゃない? SIMD とかの都合で 16 バイトアラインが必要な環境が出てきたからという事情だと聞いたことある。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/771
772: デフォルトの名無しさん (ワッチョイ d963-lHAu) [sage] 2025/03/22(土) 20:51:53.87 ID:kbZO019Z0 質問なのですがstd::unique_ptr<T>とかstd::shared_ptr<T>みたいなSTLで定義済みの テンプレートクラスをfriendにすることは合法? 用途はシングルトンパティーンのオブジェクトのプログラム終了時の自動解放 http://mevius.5ch.net/test/read.cgi/tech/1698705458/772
773: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI) [sage] 2025/03/22(土) 21:29:46.22 ID:nNEN9uWE0 >>772 T のデストラクタが private なのを std::unique_ptr<T> からのアクセスは許すってこと? 特に問題ないよ。 ところでテンプレートクラスじゃなくてクラステンプレートな! http://mevius.5ch.net/test/read.cgi/tech/1698705458/773
774: デフォルトの名無しさん (ワッチョイ d963-lHAu) [sage] 2025/03/22(土) 22:33:09.97 ID:kbZO019Z0 >>773 ㌧クス、 >T のデストラクタが private なのを std::unique_ptr<T> からのアクセスは許すってこと? >特に問題ないよ。 それがTのコンストラクタがprivateなパティーンなのです! friendにしないとビルドが通らないかった(VS2022、VS2015)。 多分moveとかの最にstd::unique_ptr<T>がTのコンストラクタにアクセスするのだと思う。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/774
775: デフォルトの名無しさん (ワッチョイ d963-lHAu) [sage] 2025/03/22(土) 22:39:33.53 ID:kbZO019Z0 >ところでテンプレートクラスじゃなくてクラステンプレートな! なるほど……orz コード例: class Foo { friend std::unique_ptr<Foo>; static std::unique_ptr<Foo> m_pObj; private: static Foo* createInstance() { if (m_pObj == NULL) { m_pObj = std::unique_ptr<Foo>(new Foo()); } return m_pObj.get()j; // ↑ std::make_unique<Foo>()したらビルドエラー(使うには多分std::make_unique<Foo>()もfriendが要る // スレッドセーフ化は省略 } // ... }; http://mevius.5ch.net/test/read.cgi/tech/1698705458/775
776: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e932-exlI) [sage] 2025/03/22(土) 23:40:24.86 ID:nNEN9uWE0 >>775 new Foo() を Foo のメンバ関数の中でやる分には自分自身の中でやることなので friend 宣言は不要。 std::make_unique<Foo>() をすると std::make_unique の中で Foo のコンストラクタを呼ぼうとするから std::make_unique<Foo> をフレンド宣言する必要がある。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/776
777: デフォルトの名無しさん (ワッチョイ d963-lHAu) [sage] 2025/03/22(土) 23:48:30.44 ID:kbZO019Z0 >>776 >new Foo() を Foo のメンバ関数の中でやる分には自分自身の中でやることなので friend 宣言は不要。 と思うじゃん? ↓現実 >friendにしないとビルドが通らないかった(VS2022、VS2015)。(>>774 エラーメッセージは熟読していませんぬが、 多分クラステンプレートの実体化がクラスのメソッド全部についてまとめて行われる的なことが起きて、 Tのコンストラクタにアクセスするstd::unique_ptr<T>のメンバ関数(moveコンストラクタとか)が引っかかるのだと予想 http://mevius.5ch.net/test/read.cgi/tech/1698705458/777
778: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-PAPZ) [sage] 2025/03/23(日) 00:18:05.56 ID:Ft35v0Bz0 >>777 私は Visual Stuio 2022 (MSVC 17) にコンパイルさせてエラーが出ないことを確認した上で書いてる。 手元に Visual Studio を入れていないのでオンラインコンパイラだけど。 コードを呼び出す側なども補うとたぶんこんなのだよね? 私が問題の理解を間違えている箇所はある? #include <memory> class Foo { private: static std::unique_ptr<Foo> m_pObj; Foo(void) = default; // デフォルトコンストラクタはプライベート public: static Foo* createInstance() { if (m_pObj == NULL) { m_pObj = std::unique_ptr<Foo>(new Foo); } return m_pObj.get(); } }; std::unique_ptr<Foo> Foo::m_pObj; int main(void) { auto bar = Foo::createInstance(); } http://mevius.5ch.net/test/read.cgi/tech/1698705458/778
779: デフォルトの名無しさん (ワッチョイ ed7c-etgo) [sage] 2025/03/23(日) 00:19:16.26 ID:YXTjT4M+0 通ったが? https://godbolt.org/z/xzTbKaM5f http://mevius.5ch.net/test/read.cgi/tech/1698705458/779
780: デフォルトの名無しさん (ワッチョイ ed7c-etgo) [sage] 2025/03/23(日) 00:20:25.80 ID:YXTjT4M+0 あ、被った 内容は一緒 http://mevius.5ch.net/test/read.cgi/tech/1698705458/780
781: デフォルトの名無しさん (ワッチョイ 9901-Awih) [sage] 2025/03/23(日) 00:21:43.38 ID:/EbbY7QB0 >>777 エラーメッセージは読まんといかんよ 分からんときは今ならLLMに読ませると良い http://mevius.5ch.net/test/read.cgi/tech/1698705458/781
782: デフォルトの名無しさん (ワッチョイ e563-0why) [sage] 2025/03/23(日) 01:58:28.60 ID:IgihfQRv0 >>778>>779 お騒がせしましたサーセン;;;orz ビルドが通らないというのは私めの勘違いだった模様。 コードはそれで良いです。 そのコード(最小サンプル)、および最小サンプルにする前のコード×VS2015でもfriend宣言部分をコメントアウトしてビルドが通った 。n_ フレンド宣言friend std::unique_ptr<Foo>; を付けるに至った履歴が無いので推測ですだが デストラクタがprivateのままだったタイミングがあったのかも…… (m_pObjが生ポインタのタイプのSingletonはデストラクタがprivateでもビルドが通る(デストラクタを呼ぶ人が居ないため) →この状態でm_pObjをstd::unique_ptr<Foo>に変更してビルドエラー、アクセス許可が無いとコンパイラに言われて慌ててfriend追加、だった可能性、 http://mevius.5ch.net/test/read.cgi/tech/1698705458/782
783: デフォルトの名無しさん (ワッチョイ 622d-hk3H) [sage] 2025/03/23(日) 09:31:51.75 ID:CXYOr+7B0 繰り返しになるが熟読した方がいいぞ 無視していいメッセージかそうでないかも区別できるようになるから http://mevius.5ch.net/test/read.cgi/tech/1698705458/783
784: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-PAPZ) [sage] 2025/03/23(日) 09:32:31.18 ID:Ft35v0Bz0 元の話題からはずれる余談だけれど、静的記憶域期間を持つブロックスコープの変数は最初に通過したときに初期化されるルールがある。 (条件によるので常にではない。) https://timsong-cpp.github.io/cppwp/n3337/stmt.dcl#4 なのでシングルトンパターンはこう単純化して書くことも出来る。 #include <memory> class Foo { Foo() = default; public: static Foo* createInstance() { static std::unique_ptr<Foo> m_pObj = std::unique_ptr<Foo>(new Foo); return m_pObj.get(); } }; int main(void) { auto bar = Foo::createInstance(); } http://mevius.5ch.net/test/read.cgi/tech/1698705458/784
785: デフォルトの名無しさん (ブーイモ MM19-xG3a) [sage] 2025/03/23(日) 10:12:01.75 ID:i5B9IukZM それunique_ptrにする意味ある? shared_ptrなら意味わかるけど http://mevius.5ch.net/test/read.cgi/tech/1698705458/785
786: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-PAPZ) [sage] 2025/03/23(日) 10:45:14.55 ID:Ft35v0Bz0 >>785 意味ないな。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/786
787: デフォルトの名無しさん (ワッチョイ e563-0why) [sage] 2025/03/23(日) 10:56:08.84 ID:IgihfQRv0 >>784 サンプルコードでは省略したけんども、Double-checked lockingの実験をしたかったノデス! ■ Double-Checked Locking is Fixed In C++11 https://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/ つなみに関数内staticオブジェクト初期化(初回実行時)のスレッド安全性がどうーなっているのかは よく知りま栓(よって採用には消極的 >>785 Singletonなので誰からもshareされないし…… この場合むしろshared_ptrの方が牛刀な可能性もあるし…… なぜなら、std::shared_ptrの参照カウンタはその利用特性上 異なるスレッドから非同期にインクリメント/デクリメントされることを想定せざるおえず、 スレッド安全性担保がそこそこ重い同期オブジェクトで一方unique_ptrの所有権移動は非同期に行われることはなさげ http://mevius.5ch.net/test/read.cgi/tech/1698705458/787
788: デフォルトの名無しさん (ワッチョイ e563-0why) [sage] 2025/03/23(日) 10:57:59.97 ID:IgihfQRv0 すまんこTeamsのノリで途中送信すたorz 誤: スレッド安全性担保がそこそこ重い同期オブジェクトで一方unique_ptrの所有権移動は非同期に行われることはなさげ 正: スレッド安全性担保がそこそこ重い同期オブジェクトで行われている危険性がある。一方unique_ptrの所有権移動は非同期に行われることはなさげなので多分軽量 http://mevius.5ch.net/test/read.cgi/tech/1698705458/788
789: デフォルトの名無しさん (ワッチョイ e563-0why) [sage] 2025/03/23(日) 11:03:44.18 ID:IgihfQRv0 だいたいstd::unique_ptrとstd::shard_ptrでは前者が1個のポインタと同じサイズなのに後者は2個分ある(ヒープにとられた参照カウンタへのポインタを持つため sizeof(shared_ptr)=16 sizeof(unique_ptr)=8 というのもあり、std::unique_ptr<T>で済むところをstd::shared_ptr<T>推しするのはいかがなものか…… http://mevius.5ch.net/test/read.cgi/tech/1698705458/789
790: デフォルトの名無しさん (ワッチョイ 0653-xG3a) [sage] 2025/03/23(日) 21:04:30.15 ID:k0m2+uGk0 >>789 shared_ptrを使えと言ってるのでなくunique_ptrの意味が特にないと言ってる 別に使ってもいいけどお前それをわかってんの?ってこと? ついでに言っておけばshared_ptrを使う場合ってのは参照カウントがゼロになったらシングルトンを破棄するみたいな凝った実装する場合に使う http://mevius.5ch.net/test/read.cgi/tech/1698705458/790
791: デフォルトの名無しさん (ワッチョイ ed7c-etgo) [sage] 2025/03/24(月) 00:16:57.44 ID:zeyD/Mo00 unique_ptrじゃなくてナマポ使えって言ってんの?どこでdeleteする気なの? http://mevius.5ch.net/test/read.cgi/tech/1698705458/791
792: デフォルトの名無しさん (ワッチョイ 0653-xG3a) [sage] 2025/03/24(月) 00:22:30.84 ID:wvKmLjta0 >>791 static Fooでいいだろってことだよ 自分で気づけなかったな http://mevius.5ch.net/test/read.cgi/tech/1698705458/792
793: デフォルトの名無しさん (ワッチョイ ed7c-etgo) [sage] 2025/03/24(月) 07:56:52.11 ID:zeyD/Mo00 えぇ・・・? http://mevius.5ch.net/test/read.cgi/tech/1698705458/793
794: デフォルトの名無しさん (ワッチョイ 65e7-aE+1) [sage] 2025/03/24(月) 08:43:05.04 ID:s0JFvm8m0 >>792 マルチスレッドで問題あるんじゃなかったっけ? 資料どこにあるか忘れたけど。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/794
795: デフォルトの名無しさん (ワッチョイ 65e7-aE+1) [sage] 2025/03/24(月) 08:50:28.31 ID:s0JFvm8m0 >>794 ずいぶん前に問題無くなっているのね。 https://cpprefjp.github.io/lang/cpp11/static_initialization_thread_safely.html http://mevius.5ch.net/test/read.cgi/tech/1698705458/795
796: デフォルトの名無しさん (ブーイモ MM62-xG3a) [sage] 2025/03/24(月) 09:19:49.44 ID:8nOZWVbeM >>795 もし解決されてないならunique_ptrでも問題出るでしょ http://mevius.5ch.net/test/read.cgi/tech/1698705458/796
797: デフォルトの名無しさん (ワッチョイ 4602-BGJw) [sage] 2025/03/24(月) 23:17:27.23 ID:C5SHS/Z30 Makefileについて教えてください。 ベースディレクトリにMakefileがあり、サブディレクトリは以下の構造としたいです ・src\内にhello.c func1.c func2.cが、include\内にfuncs.hがある ・*.oはobj\内に作る ・最終成果物は.\sample.exeとして作る ソースファイル、ヘッダファイルの増減時にSRCS、INCSを修正すれば済むようにと、 以下のようなMakefileを作っているのですが、makeすると *** No rule to make target 'obj/hello.o', needed by 'c_sample.exe'. Stop. となってしまいます ソースはsrc、オブジェクトはobjディレクトリとしている場合のサフィックスルールが正しくないので src/hello.cからobj/hello.oを作るルールを表現できていない、と個人的に思っているのですが、 どのようにすれば動作するか教えてください SRCDIR = ./src OBJDIR = ./obj INCDIR = ./include SRCS = hello.c funcs1.c funcs2.c OBJS = $(SRCS:%.c=%.o) INCS = funcs.h PROGRAM = c_sample.exe CC = gcc CFLAGS+= -g -Wall -I$(INCDIR) .SUFFIXES: .c .o all: $(PROGRAM) $(PROGRAM): $(OBJDIR)/$(OBJS) $(INCDIR)/$(INCS) $(CC) $(CFLAGS) -o $(PROGRAM) $^ .c.o: $(CC) $(CFLAGS) -c $(SRCDIR)/$< http://mevius.5ch.net/test/read.cgi/tech/1698705458/797
798: 797 (ワッチョイ 4602-BGJw) [sage] 2025/03/24(月) 23:24:39.28 ID:C5SHS/Z30 すいません、タブが崩れました 下の方ですが、全角スペースで記載してますが $(PROGRAM): $(OBJDIR)/$(OBJS) $(INCDIR)/$(INCS) $(CC) $(CFLAGS) -o $(PROGRAM) $^ .c.o: $(CC) $(CFLAGS) -c $(SRCDIR)/$< こうです 申し訳ありませんでした http://mevius.5ch.net/test/read.cgi/tech/1698705458/798
799: Fish (ワッチョイ 652f-MaZR) [] 2025/03/25(火) 02:35:59.65 ID:3npSY7mr0 OpenCVについての質問です。VS2022を使用し、includeやopencv_world4100d.libの設定が終わり、検証のためにMatを宣言してimread、imshowのみを書いて検証しようとしたのですが、dllの設定がうまくいってなかったのかコンソールにdllのloadがfailedと大量に出力されます。OpenCVの入れ方を教えてほしいです…まだC++初心者で5チャンの投稿も初心者なので何か変だったらすみません… http://mevius.5ch.net/test/read.cgi/tech/1698705458/799
800: デフォルトの名無しさん (アウアウウー Saa5-WcQO) [] 2025/03/25(火) 04:37:37.58 ID:ztarSHRBa >>798 .o: $(CC) $(CFLAGS) -c $(SRCDIR)/$< >>799 環境変数 http://mevius.5ch.net/test/read.cgi/tech/1698705458/800
801: デフォルトの名無しさん (ワッチョイ 9901-Awih) [sage] 2025/03/25(火) 12:24:02.95 ID:sbXkgTme0 >>799 exeと同じディレクトリにloadがfailedと言われるdll置いてみたら? http://mevius.5ch.net/test/read.cgi/tech/1698705458/801
802: デフォルトの名無しさん (ワッチョイ 6e6c-JaxA) [] 2025/03/26(水) 11:17:13.88 ID:ZFGsgZnF0 Makefileを作る時の$<と$?と$^の使い分けを教えて下さい 特に$<が何のためにあるのか分かりません。これだと2番目以降の材料が無視されてしまって動かない場合があるんじゃないかと心配になります。あと、makeは常に新しい材料のみコンパイルするという事は、すべてのケースで$?で良いのではと思ってしまいます。超初歩的な質問だと思いますがよろしくお願いします http://mevius.5ch.net/test/read.cgi/tech/1698705458/802
803: デフォルトの名無しさん (ワッチョイ 6518-hacg) [sage] 2025/03/26(水) 13:48:44.59 ID:GrIMF1MA0 C言語だとオブジェクトファイルの依存ファイルは,cファイルとそのcファイルが使うhファイルだけどコンパイルするのはあくまでcファイルだけ だから依存関係の1つ目にcファイルを,2個目以降にhファイルを書いておけば$<でコンパイルできる とかかな http://mevius.5ch.net/test/read.cgi/tech/1698705458/803
804: デフォルトの名無しさん (アウアウウー Saa5-WcQO) [sage] 2025/03/26(水) 15:00:53.93 ID:NpEBbPpga >>802 っ https://tex2e.github.io/blog/makefile/automatic-variables http://mevius.5ch.net/test/read.cgi/tech/1698705458/804
805: デフォルトの名無しさん (ワッチョイ 6232-bZOK) [] 2025/03/26(水) 15:48:44.68 ID:OM1iPrvu0 >>797 基本的にサフィックスルールは何十年も前からobsolete扱いなのでやめた方が良い http://mevius.5ch.net/test/read.cgi/tech/1698705458/805
806: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 09fa-p0tU) [sage] 2025/03/26(水) 20:50:04.73 ID:cSMtN3B/0 ところでこの場合の makefile の話は GNU Make を前提にするということでええんか? http://mevius.5ch.net/test/read.cgi/tech/1698705458/806
807: 797 (ワッチョイ 4602-BGJw) [sage] 2025/03/26(水) 22:53:57.57 ID:dm/+cX2j0 皆さんいろいろと情報をどうもです 結局、以下のようなものと落ち着いてます ちなみに使ってる環境のmakeはGNU Make 4.4で、GNU Makeの機能を多用してます 「$(OBJDIR)%.o: $(SRCDIR)%.c」と書ける理由は、pattern rulesという機能なのですかね ここをforeachとかで書こうとしてましたが、これでいけると聞き、書いてみたら動いたのでもうそのままです 以外に汎用性が出そうだと感じてますが、改良点があればまたご意見ほしいです PROGRAM = c_sample.exe SRCDIR = ./src/ OBJDIR = ./obj/ INCDIR = ./include/ SRCS = $(wildcard ${SRCDIR}*.c) OBJS = $(addprefix $(OBJDIR), $(notdir $(patsubst %.c, %.o, ${SRCS}))) INCS = $(wildcard ${INCDIR}*.h) CC = gcc CFLAGS += -g -Wall -I$(INCDIR) all: $(PROGRAM) $(PROGRAM): $(OBJS) $(CC) $(CFLAGS) -o $(PROGRAM) $^ $(OBJDIR)%.o: $(SRCDIR)%.c $(INCS) Makefile $(CC) $(CFLAGS) -c $< -o $(patsubst $(SRCDIR)%, $(OBJDIR)%, $@) http://mevius.5ch.net/test/read.cgi/tech/1698705458/807
808: デフォルトの名無しさん (MX 0H1d-JaxA) [] 2025/03/26(水) 23:25:47.70 ID:Z/+2BBNHH >>803 >>804 ありがとうございます 助かりました http://mevius.5ch.net/test/read.cgi/tech/1698705458/808
809: デフォルトの名無しさん (ワッチョイ 9901-Awih) [sage] 2025/03/27(木) 00:00:17.61 ID:KC9fXGxH0 汎用するのならautotoolsを使った方が良いのでは? http://mevius.5ch.net/test/read.cgi/tech/1698705458/809
810: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-p0tU) [sage] 2025/03/27(木) 01:07:35.19 ID:gbE/Uiq80 拡張子に exe がついてるということはウィンドウズを想定してるんじゃないの? cygwin とか msys2 とかだと autotools を入れるのは簡単だけどそうじゃないならめんどいかも。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/810
811: デフォルトの名無しさん (ワッチョイ 06b2-xG3a) [sage] 2025/03/27(木) 02:03:57.32 ID:eJjdVc1D0 普通cmakeでしょ 好きじゃないけど http://mevius.5ch.net/test/read.cgi/tech/1698705458/811
812: デフォルトの名無しさん (ワッチョイ 6262-bZOK) [] 2025/03/27(木) 08:24:51.71 ID:8EB6UmzB0 >>807 分かったからもう消えろ ここはCのスレではないしmakeのスレでもない http://mevius.5ch.net/test/read.cgi/tech/1698705458/812
813: デフォルトの名無しさん (ワッチョイ 9901-Awih) [sage] 2025/03/27(木) 09:16:55.35 ID:KC9fXGxH0 makeスレなくなったね http://mevius.5ch.net/test/read.cgi/tech/1698705458/813
814: デフォルトの名無しさん (ワッチョイ 9901-Awih) [sage] 2025/03/27(木) 10:58:28.75 ID:KC9fXGxH0 ないと思ったらUNIX板だったようだ http://mevius.5ch.net/test/read.cgi/tech/1698705458/814
815: デフォルトの名無しさん (ワッチョイ 4202-rYal) [!donguri] 2025/03/27(木) 14:55:01.12 ID:OeqyroTj0 >>812 過疎ってきてるし C++とmakeは連動すること多いから 話題はあってもいいんじゃねーかと 書き込んでみるテスト http://mevius.5ch.net/test/read.cgi/tech/1698705458/815
816: デフォルトの名無しさん (ワッチョイ 4279-Br5P) [sage] 2025/03/27(木) 18:38:06.75 ID:bm95RmrL0 ノーマルスーツを着ろシャア http://mevius.5ch.net/test/read.cgi/tech/1698705458/816
817: デフォルトの名無しさん (アウアウウー Saa5-WcQO) [sage] 2025/03/28(金) 12:58:29.90 ID:VPiwRdmLa >>815 あってもいいけどコンパイラの使い方までかな makeは誘導した方が良いと思う http://mevius.5ch.net/test/read.cgi/tech/1698705458/817
818: デフォルトの名無しさん (ワッチョイ 6ea1-pnyl) [sage] 2025/04/06(日) 00:01:49.29 ID:xzDebXnC0 質問なのですが基底クラスでpublicとした仮想関数の可視性を派生クラスでprivateに狭めることができるのですが なんでこんな仕様なの? これは逆に言うと派生クラスでprivateとした一般メソッドに対し、 たまたま同じシグネチャの仮想関数を基底クラスで定義されたら基底クラス経由でprivateとしたメソッドを外部から呼び出せ てしまいカプセル化の危機……! そういう仕様になっているメリットとは一体…… http://mevius.5ch.net/test/read.cgi/tech/1698705458/818
819: デフォルトの名無しさん (ワッチョイ 4587-wZYf) [sage] 2025/04/06(日) 07:42:00.02 ID:xouJqKec0 前者は仮想関数を派生クラス経由で呼べないように出来る というか派生のコンストラクタをprivateにして、friend指定したcreatorクラス経由でしか生成出来ないようにするとかそういうのに便利 あと後者は、試してないけど派生の同シグネチャの関数は基底経由で呼べないと思うよ、vtblに登録されてないから http://mevius.5ch.net/test/read.cgi/tech/1698705458/819
820: デフォルトの名無しさん (ワッチョイ 45f5-pnlG) [sage] 2025/04/06(日) 08:51:38.89 ID:2WEREMbe0 継承に関しては早すぎる最適化の問題もあるから、そのまま使うんじゃなくてアダプタに切り離した方がいいと思う。 Boostあたりにアダプタ用のライブラリないかしらん。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/820
821: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-nY3F) [sage] 2025/04/06(日) 09:09:40.72 ID:CSMreA7R0 >>818 コードで言えばこういう状況かな? https://wandbox.org/permlink/gEndnLHWa7qEvNRP 基底にある仮想関数と同じシグネチャならオーバーライドするという規則は単純に言語設計の失敗。 だからこそ override 指定子が導入された。 override 指定子ではオーバーライドのつもりでオーバーライドになっていないときを検出できても オーバーライドではないつもりでオーバーライドになってしまうことは検出できないのだが…… 互換性を壊す変更を入れるわけにもいかずそのままズルズルと今まで失敗を引きずってきたという歴史的経緯。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/821
822: デフォルトの名無しさん (ワッチョイ 45ba-wZYf) [sage] 2025/04/06(日) 09:14:57.63 ID:U2fAIE9I0 ああそっか、シグネチャ同じなら強制的にオーバーライドになるんだっけスマン http://mevius.5ch.net/test/read.cgi/tech/1698705458/822
823: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-nY3F) [sage] 2025/04/06(日) 09:27:02.17 ID:CSMreA7R0 意図せずオーバーライドになってしまうことがあるのは失敗だが、 意図して private でオーバーライドする分には「そういうインターフェイス」なのだからカプセル化の破綻ではないよ。 http://mevius.5ch.net/test/read.cgi/tech/1698705458/823
824: デフォルトの名無しさん (ワッチョイ cd7c-a/1F) [sage] 2025/04/06(日) 10:21:41.86 ID:gleSakN+0 リスコフの置換原則を破るからあんまり良くはないと思うけどな 基底クラスとして振る舞わせる気がないならprivate継承すべきだ http://mevius.5ch.net/test/read.cgi/tech/1698705458/824
825: デフォルトの名無しさん (ワッチョイ 6ea1-pnyl) [sa] 2025/04/06(日) 10:25:35.73 ID:xzDebXnC0 >>821 なるほど…… virtualが省略可能なのが諸悪の根源かとオモタがそっちか…… >>823 通常はBaseクラス→派生クラス、の順で設計するから「そういうインターフェイス」と考えてだいたい良いのかもしれませんけども 派生クラスまで設計した後にBaseクラスにメソッドを追加して、それがたまたま派生クラス独自に定義したprivateメソッドと 同じシグネチャになってしまった場合、Baseクラス経由で派生クラスのprivateメソッドを意図せず呼べてしまうという 現象が再燃する…… http://mevius.5ch.net/test/read.cgi/tech/1698705458/825
826: デフォルトの名無しさん (ワッチョイ 6ea1-pnyl) [sage] 2025/04/06(日) 10:32:27.61 ID:xzDebXnC0 んまーBaseクラスにメソッドを追加しようとする時点で変更の影響範囲を派生クラスまで広げて調査すべき というのは正論やがコンパイラで検出可能な不都合のチェックのを人にやらせるのはイマイチ…… http://mevius.5ch.net/test/read.cgi/tech/1698705458/826
827: デフォルトの名無しさん (ワッチョイ 457b-wZYf) [sage] 2025/04/06(日) 11:31:20.83 ID:xouJqKec0 大抵のコンパイラで普通警告出るやろ? http://mevius.5ch.net/test/read.cgi/tech/1698705458/827
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 175 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.020s