[過去ログ] 【初心者歓迎】C/C++室 Ver.106【環境依存OK】 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
554
(3): 2021/02/14(日)18:37 ID:RmY9fsVU(1) AAS
getline や fgets 入力ストリームの最終行が改行を含まずのに閉じられてる場合
バッファの末端に \nが居ないだけで最終行は取り込まれるよね?
555: 2021/02/15(月)16:32 ID:g92MWppk(1) AAS
外部リンク:stackoverflow.com
556: 2021/02/15(月)19:30 ID:BmI3IhrJ(1) AAS
そういえば他人のコード変更をレビューするとたまに最終行に改行が追加されているのがあって、
「あーこの人が勝手に改行を追加したのかな、まプログラム的には同じだしいっか」とか思って
無視し続けていたが、あれはその人が使っているエディターによって自動的に変更されてた
のかな?
例えば最初にコードを書いた人のエディターは最終文字が改行でなくても構わなかったが
2番目に直した人のは改行を要求するとか...
clang-format あたりでそこら辺は統一できるのかな?
557: 2021/02/15(月)22:19 ID:aLBeV9m+(1) AAS
最近まで、Ruby の1-liner に、バグがあった

末尾の改行コードを削除するために、chomp を使うべき所で、
文字列の末尾の1文字を削除する、chop を使っていた

最終行に改行が無くて、abc なら、ab になっていたw
558: 2021/02/16(火)14:01 ID:kKLrubPe(1/3) AAS
>>554
fgets はバッファの長さ次第
559: 2021/02/16(火)14:15 ID:kKLrubPe(2/3) AAS
>>554
getline はデフォルトのデリミタだと ' ' と 改行で切られる (ファイル終端の改行はあってもなくても同じ結果)
また fgets と違って取得した文字列にデリミタは含まれない

ちなみに ifs >> s も getline と似た使い方が出来るが
こっちはデフォルトのデリミタは改行のみ ( ' ' ) は取得される
また取得した文字列にデリミタは含まれない

つまり ifs >> s と getline(ifs, s) は同じではない
560: 2021/02/16(火)14:20 ID:kKLrubPe(3/3) AAS
>>554
おまけ
外部リンク:ideone.com
561
(1): 2021/02/16(火)18:35 ID:7otM+IWb(1) AAS
googleのv8がc++で書かれてるってきいて興味もったんですが最強?
562: ◆QZaw55cn4c 2021/02/16(火)21:12 ID:I98rHtI/(1) AAS
>>561
そういうインフラ用途には C/C++ しかないかと‥‥
563: 2021/02/17(水)18:17 ID:8Df3qLX7(1) AAS
v8 って node.js やん
564: 2021/02/17(水)18:40 ID:ZNwah53O(1) AAS
v8みたいに飛躍的に処理速度伸びたエンジンって他になにかあるんですか?
565: 2021/02/17(水)19:16 ID:Pg4t51og(1) AAS
sourcetrail入れてみた
566
(2): 2021/02/23(火)08:35 ID:qdsH3SX7(1) AAS
すみません、C++で0以上の整数の範囲を表す型を使いたいのですが、どうするのがおすすめですかね?
struct { unsigned begin; unsigned end; }; ま、基本的にこれでいいんですが、もしより良い方法があれば...

- もしかして std::pair の方がいいんですかね? ただの struct よりメリットがあったりします?
- 一応、「有効な範囲を指してない」という状態が明確化できたらいいんですが... 最近 std::optinal というのを
知ったのですが、大げさ? 上記 begin と end を signed にして負のときは無効、とかでもいいんですが。
- 2つの範囲に対して各種集合演算的なものもできるとさらに。
567: 2021/02/23(火)12:05 ID:EYNng8zF(1) AAS
lowerbound+offsetの方が融通が効くのでは
範囲としては倍表せるわけだし
wrap around しても2周はしないわけだから、範囲に入ってるかの判定には問題は無い
568: 2021/02/23(火)13:18 ID:iu17pC6m(1) AAS
>>566
> - 一応、「有効な範囲を指してない」という状態が明確化できたらいいんですが...
end < begin なら有効でないってやればいいだけじゃね?
569: はちみつ餃子 ◆8X2XSCHEME 2021/02/23(火)14:15 ID:ZvemQ+Fv(1) AAS
>>566
std::ranges::views::iota
570: 2021/03/06(土)08:41 ID:QrSKtEDt(1/2) AAS
変な質問ですが
std::vector<int, std::allocator<double> > を定義しようとしたら
static_assertでタイプが違うと指摘されました
じゃあなんでテンプレート変数分けてるんですかね...?
571
(1): 2021/03/06(土)10:56 ID:DM5zd16W(1) AAS
自作のアロケータを使う時に使う、
型が違うのはお約束に反する
572: 2021/03/06(土)11:39 ID:8MIrd+yZ(1) AAS
テンプレートテンプレートパラメータにしなかったのは何故なんだろうな
573: 2021/03/06(土)12:39 ID:QrSKtEDt(2/2) AAS
>>571 そう言われてみれば当たり前の話な気がしますね・・・
574: 2021/03/06(土)12:45 ID:4A7TIztL(1) AAS
ああそうか、Allocatorだけ受け取る方法もあるのか
575
(2): 2021/03/12(金)20:55 ID:ZDqlVx3B(1) AAS
すみません。C/C++自体というよりは、その学習方法についてですけど、教えて下さい。
ネット上で無料で公開されているC++の学習コンテンツで一番良いもしくは定番のものはどれでしょうか?

私はC, Java, C#の経験があります。しかしながら、Cはほとんど忘れてしまいました。
その状態の人間がC++をネット上の無料のコンテンツのみで学習したいのですが、どのページが良いでしょうか?
開発環境は既に準備しました。

よろしくお願いいたします。
576: 2021/03/13(土)11:40 ID:g/wAdnDh(1/3) AAS
とりあえずwebのロベールとかでも良いとは思うけど・・
独習とかの本は何か持っといた方がいいと思う
577
(1): はちみつ餃子 ◆8X2XSCHEME 2021/03/13(土)14:13 ID:aUdFS8U8(1/4) AAS
ウェブのロベール本ってこれのこと?
外部リンク:www7b.biglobe.ne.jp
いまどき #include <iostream.h> とか書いてあるのはちょっと微妙だと思うぞ。
どの箇所だったか忘れたけど const の扱いで現行の仕様に合わない部分について
Taratail だったか Qiita だったかで見た記憶もあるし。

個別に見ればささいなことだけど、
入門者はそのささいなこともわかってないから入門者なわけで、
細かい引っ掛かりが多いとしんどいんじゃないか?
578: ◆QZaw55cn4c 2021/03/13(土)14:52 ID:o3uThhpf(1) AAS
>>575
本を買った方がいいでしょう、それも複数買う前提で、この世界では「一冊で完結」は無理です

最初の一冊なら私なら旧独習をお勧めします(私がそうでしたから)、が、新独習の評判は聞いてみたいとは思っています
579
(1): 2021/03/13(土)15:28 ID:iXgnaDGC(1) AAS
>>577
お前がゴリ押ししてる江添本よりはマシだと思うよ
580: はちみつ餃子 ◆8X2XSCHEME 2021/03/13(土)15:50 ID:aUdFS8U8(2/4) AAS
>>579
俺は江添本を (全体を通しては) 読んだことがないのでごり押しするほど強い関心無いんだけど。

ただ C++ は C++11 が大きなターニングポイントになってるので、それより古い前提の説明は論外という立場。
ましてや C++03 にすら合致しないのは論外も論外。
論外のものを除いて入門向けにマシそうな、
しかも無料で読めるものというと江添本以外に実質的に選択肢がないからよく挙げるだけだよ。
581
(1): 2021/03/13(土)16:12 ID:g/wAdnDh(2/3) AAS
QZも言ってるが独習の新版はC++17らしいぞ
582: はちみつ餃子 ◆8X2XSCHEME 2021/03/13(土)16:33 ID:aUdFS8U8(3/4) AAS
>>575
話題に上がったから紹介しておくけど、江添本ってのはこれのことね。
外部リンク:ezoeryou.github.io
入門書であまり取り上げられないけど入門者が躓きがちなコンパイラのコマンドの話や makefile とかいった周辺事情も
取り上げているかわりに、ヘッダファイルを使い分けしなかったり、継承を扱わなかったりで、
網羅的に C++ を理解するための本ではない。 入門者が入門するための本。
それ以上のことは他の本を読めという投げっぱなしだが、
とりあえず無料で基礎をおさえられる (しかも日本語!) という意味では他に紹介できるほどのものはない。

C++ ではありがたいことに無料で利用できるリファレンスは意欲的に整備している方々がいて、
外部リンク:ja.cppreference.com
省4
583: 2021/03/13(土)16:48 ID:g/wAdnDh(3/3) AAS
そら今時コマンドラインツール使っててソース1つだけで書いてるようなC++オタクには合ってるかもしれんけどな・・
584: はちみつ餃子 ◆8X2XSCHEME 2021/03/13(土)17:11 ID:aUdFS8U8(4/4) AAS
他に存在するなら紹介するんだけど、
無料でという制約の中で (個別のブログ記事とかじゃなく) それなりに筋道をつけた入門書で古すぎないものとなると無いだろ。
英語でいいならあったりするかな?
585
(1): 2021/03/13(土)17:54 ID:pYfy5bp8(1) AAS
>>581
自分は半月ほど前に最新版の独習を買って、半分ぐらい(p370あたり)読み進めているんだが、「本書について」によると、C++14とC++17をメインのターゲットにしてるって書いてますね
586
(1): 2021/03/14(日)08:22 ID:Zb/GuQ+J(1) AAS
アドバイスありがとうございます。
とりあえず、教えていただいたロベールさんのページを見たのですが、網羅的に書かれているようなのでまずはこれを読もうと思います。

> いまどき #include <iostream.h> とか書いてあるのはちょっと微妙だと思うぞ。
すみません。これ、何が悪いのでしょうか。。。

あと、教えていただいて気がついたのですが、C++も結構色々なバージョンがあるのですね。
私が今回触らなければならないコードはかなり前のコードなので、もしかすると古いバージョンのC++かもしれません。
その辺も意識して勉強しなくては駄目ですね。
587: 2021/03/14(日)10:23 ID:FJEdpMO0(1) AAS
今はもう標準ライブラリに.hがついてるのは無いからそもそも実行できない可能性ある
588: 2021/03/14(日)10:49 ID:8Ki8FhWw(1) AAS
実行?
589
(1): ◆QZaw55cn4c 2021/03/14(日)14:53 ID:uaeFGveg(1/6) AAS
>>585
旧独習には「std::stringを自分で実装せよ」という初級者には眩暈がするほどの崇高な課題が採用されていましたが、新独習には「〜を独力で実装せよ」系のお題は採用されていますか?
すくなくとも「〜を独力で実装する」系お題が可能になるだけの基礎知識をつけてくれる本ですか?
590
(2): 2021/03/14(日)17:03 ID:ERa14GlL(1/3) AAS
>>589
全13章605ページのうち7章380ページまで進んでいますが、そのようなお題にはお目にかかっておりませんな。
練習問題やその章の理解度チェックで色々な問題が出されていますが、何れも本をよく読めば解ける問題ばかりです。
さらっと先まで目を通してみましたが、そのような課題は見当たらないようです。
旧版のどの箇所あたりで出題されたものですか? もしかして、全く別の本のことなのでしょうかねえ。

↓の「おまけ」にあるような解答を求める問題でしょうか?
std::stringの実装に学ぶC++入門 - Qiita
外部リンク:qiita.com

自分はまだ独習中で、C++は未だ*や&、&&、で頭の中がグルグル回ってしまうレベルなもので、理解できそうですが
いきなり自力で作れそうにありませんわw
591
(1): はちみつ餃子 ◆8X2XSCHEME 2021/03/14(日)18:12 ID:aW+jce3e(1/2) AAS
>>586
> これ、何が悪いのでしょうか。。。

1998 年に国際規格 (ISO) になって以来、規格に iostream.h というものが有ったことはない。
.h は不要。
諸々の事情から iostream.h も用意している開発環境が多かったせいか
古い書籍では iostream.h としている場合は少なからずあるのだけれど、
主要な処理系の標準への準拠が急速に進んだこともあって、
資料も規格に寄せた書き方が今では普通。
iostream.h は古い本の象徴みたいな感じになってる。

そんでもって規格にない以上は iostream.h が存在しない開発環境も普通にあるってのが問題。
省6
592
(2): ◆QZaw55cn4c 2021/03/14(日)20:04 ID:uaeFGveg(2/6) AAS
>>590
手元の旧独習4版(ハーバード・シルト著)6章末「総合理解度チェック」
・次の演算ができるような strtype クラスを作成しなさい
・+ 演算子による文字列連結
・= 演算子による文字列代入
・<>==による文字列比較
固定長文字列を使ってもかまいません。難問ですが、よく考えていろいろと試してみてください。
必ずできるはずです。
593
(1): ◆QZaw55cn4c 2021/03/14(日)20:13 ID:uaeFGveg(3/6) AAS
>>590
>C++は未だ*や&、&&、で頭の中がグルグル回ってしまう
これらの「記号」は習得に順序があります。
まず * をしっかり理解します。C/C++ はなんといってもポインタが基本です。
次に参照 & を理解します。参照& を使う場面が出てきたら、これを * を使った書き方に書き直す、という機械的な訓練がいい練習になるでしょう
参照 で返す、という場面でも、?参照返しが出来る場合と、?参照返しはできずせいぜい RVO に期待するしかない場合、の??二つの違いを明確に即答できるようになるべきでしょう(最近まで私はそれができなかった……)参照& の表現は新しい表現( ranged-for とか) でよく目にしますし、??は結構重要だと思います

&& は多分最後でしょうね、私も && は良く分かっておらず、というか、分からないから使わないという態度に留まっていますが、まあそれでもなんとかなる気がします
594
(1): 2021/03/14(日)20:26 ID:ERa14GlL(2/3) AAS
>>592
やはり「独習」の違う本でしたわw
自分はC++関係の5ちゃんスレすら最近になって見てるんで、知らなかったけど
その本が「独習」のスタンダードなんですねw
独習C++ 第4版
外部リンク:poland-it-blog.com

自分のは、↓の9位に入ってる本です。(しかも同じ出版社)
外部リンク:freelifetech.com
ご紹介の独習はやり応えありそうなので、今の本を2回ほどやってから、次のステップでそちらを検討してみますわ
595
(1): 2021/03/14(日)20:28 ID:EFkbulbJ(1) AAS
QZ案外初心者やなw
でも言ってることは全面的に賛成
ポインタや参照、クラス等の基本を抑えてからでないとスマポや、C++11からの要素(右辺値参照含む)の使い方もわからんと思う
596: 2021/03/14(日)20:35 ID:ERa14GlL(3/3) AAS
>>593
大変勉強になります
今後もよろしく
597: 2021/03/14(日)20:46 ID:uaeFGveg(4/6) AAS
>>595
>でも言ってることは全面的に賛成
ありがとうございます!

>QZ案外初心者やなw
もう永遠の初心者のままだと思っていますが、それならそれで「初心者の気持ちが分かる視点からの意見の表明」という形でコントリビュートするのもありかな…、と。
598: ◆QZaw55cn4c 2021/03/14(日)22:01 ID:uaeFGveg(5/6) AAS
>>594
>>592 は歯ごたえがありそうでしょう?私もこの課題を最初に見たときは眩暈がしました…
それから 10 年くらいかな??それくらいたってから 2chスレ:tech を書き、なんとか卒業できたような気がします
なおこれは、これでも例外方面に配慮が行き届いていない、とさらに書き直した気がしますが、その書き直しは失くしてしまいました……
599: はちみつ餃子 ◆8X2XSCHEME 2021/03/14(日)23:21 ID:aW+jce3e(2/2) AAS
個別の機能を理解してからそれの組み立て方を学習するのがまどろっこしく感じる人もいると思う。
抽象度の高いほう (スマートポインタなど) から解体していく形での
学習のアプローチもそれはそれでありかもしれん。

個人的には個別の機能を先に学んだほうがいいとは思うんだけどね。
実例から学ぶと使い方のパターンとして頭に入ってしまって正確な理屈を
きちんと習得できない気がするから。

そうは言っても途中で学習を諦めてしまうようだと正確さもくそもないから、
人によってわかりやすさは違うし学習にはいろんなアプローチがあるということは
覚えておいてほしい。
600: ◆QZaw55cn4c 2021/03/14(日)23:51 ID:uaeFGveg(6/6) AAS
確かに、私が理解している狭い範囲においても、イテレータが先かポインタが先か、とか
C++11 / std::thread から入門したけど posix-thread なんか知らん!とか
そんな人から補強説が来るのが楽しみです
601: 2021/03/15(月)07:36 ID:PXZ12KYt(1) AAS
>>591
ご回答ありがとうございます。
理解しました。
その辺も調査しながらやります。
602: 2021/03/15(月)13:58 ID:RVKfnS+W(1) AAS
QZが意外と素直で好印象度アップ
逆に高飛車な餃子の高感度ダウン
603: 2021/03/15(月)21:47 ID:pqfQRyG1(1) AAS
Qちゃんは昔からいるけど態度は変わらんね
ときどき自前のコード上げてるあたりは好ましい
プロへのリスペクトは持ってるし謙虚ではある

餃子ちゃんはマジメというか
いちいち規格に沿って発言してくれるんで好ましい
ただコード上げてるのはみたことないんで実力は不明
アマチュアなのにときどき調子乗っちゃってるのも微笑ましい
604: 2021/03/15(月)23:09 ID:kCaDVUc0(1) AAS
はちみつのコードたまーに見るけどすごい変な癖があるよ
意味があるなしに関わらず固執するタイプなんだろうな
605
(2): 2021/03/16(火)13:45 ID:A61zCves(1) AAS
参照を返す関数の質問です。
オブジェクトの複数のパラメータを設定するときに、obj.param1(...).param2(...).param3(...); みたいに呼ぶ
パターンがあるじゃないですか(ちなみにこれって名前はあります?)

これをやりたいときは
Obj& param1(int val) { mParam1 = val; return *this; }
みたいに参照を返すように宣言しないとダメですよね?

Obj param1(int val) { mParam1 = val; return *this; }
だと、obj.param1(...) は動くけどリターン用にオブジェクトの(余計な)コピーが発生する、
obj.param1(...).param1(...) みたいに呼んだ場合はオブジェクトのコピーに2番目の呼び出しが行われ、
結局破棄されてしまうので、objに2番目のparam1()の呼び出しが反映されない。
省5
606: 2021/03/16(火)16:13 ID:xnFU2goU(1) AAS
builderパターンやね
607: はちみつ餃子 ◆8X2XSCHEME 2021/03/16(火)16:40 ID:AqAKN3jJ(1/2) AAS
クラス構成を見ればビルダーパターンにあてはまりそうだけど、
メンバ関数を連鎖していく表記法のことはメソッドチェインと言ったり、
目的から言うと名前付き引数イディオムということもある。
外部リンク:en.wikibooks.org
(要するに考え方のレイヤによる。)
608: 2021/03/16(火)17:00 ID:7emEuadh(1) AAS
obj + a + b + c
 operator + () は obj そのものを書き換えず、新たな実体を戻す

obj += a
 operator += () は obj そのものを書き換えるついでに、自分自身の参照を戻す

これのどっちに合致したほうが都合がいいかで
複製を戻すか、自分自身の参照を戻すかを分けてる感じ
609
(1): 2021/03/16(火)20:32 ID:VN15UowM(1) AAS
>>605
> (ちなみにこれって名前はあります?)

大きく言うとFluent interface
外部リンク:en.wikipedia.org
610
(1): ◆QZaw55cn4c 2021/03/16(火)21:25 ID:EIvloTfy(1) AAS
>>609
その wikipedia の C++ サンプルは int main() が二箇所に現れていますが、これってどう読むのですか?
611
(4): 2021/03/16(火)22:36 ID:ne+I3KBD(1) AAS
すみません。
仮に、本を買って勉強する場合は独習C++というのがいいのですか?
独習C++はCの知識がなくても大丈夫ですか??
612: はちみつ餃子 ◆8X2XSCHEME 2021/03/16(火)23:10 ID:AqAKN3jJ(2/2) AAS
>>610
単に使い方のサンプルを便宜的に main で書いてあるだけでふたつあるのは特に意味ない。
613: 2021/03/18(木)18:04 ID:KYeguKkE(1/2) AAS
>>611
614: 2021/03/18(木)18:05 ID:KYeguKkE(2/2) AAS
>>611
江添本一択
615: 2021/03/18(木)18:59 ID:OslqqG1Q(1) AAS
>>611
C関係無しで覚えるのもいいんじゃね?
616: 2021/03/18(木)19:00 ID:OIk6P4WM(1) AAS
>>611
独習C++はCの知識が前提だったはず
617
(1): ◆QZaw55cn4c 2021/03/18(木)23:28 ID:QiBLMBVe(1) AAS
>>605
>これをやりたいときは
>みたいに参照を返すように宣言しないとダメですよね?
>obj.param1(...).param1(...) みたいに呼んだ場合はオブジェクトのコピーに2番目の呼び出しが行われ、
>結局破棄されてしまうので、objに2番目のparam1()の呼び出しが反映されない。

確かに、メソッドチェインを繰り返すたびにコピーコンストラクタが呼び出されるのは、イマイチ、という感覚を私も同様に持ちます
だからメソッドチェインを書くときには私も参照を返すように書きます、結局のところ「参照を返す」というのは「ポインタを返す」ことですから、コンストラクタの走りようがない

しかし「参照を返す『必要がある』」と言い切れるかどうか?
「結局破棄される」というのは最後のメンバ関数が返す実体を回収していないからであり、「参照を返すから」破棄されるわけではないと感じました。
実際、この実体を回収すれば、それはそれで 2 番目以降の呼び出しが意味を持つように書けると思います
省4
618
(1): 2021/03/19(金)03:28 ID:mbZVOQ2F(1) AAS
だからムーブコンストラクタとムーブ代入演算子があるんだろうが・・
619: 2021/03/19(金)03:37 ID:0CmLwf9e(1) AAS
>>617-618
てかそもそもコンストラクタ走っていいのかよこの場合に
620
(1): 2021/04/09(金)12:21 ID:dUyySPje(1) AAS
クラスFooのメンバ関数fの型ってどう書くの?
戻り値void、引数intです。
621
(1): 2021/04/09(金)12:52 ID:N6zWukcq(1) AAS
>>620
f の型は void (int) だけど f へのポインタの型は void (Foo::*)(int)
622
(1): 2021/04/09(金)18:45 ID:WYvZUx+H(1) AAS
>>621
それはメンバ関数へのポインタでしょ
聞いてるのは関数の型でもなく、メンバ関数の型です
623: 2021/04/09(金)20:18 ID:DC3guaga(1) AAS
言われてみれば関数の型ってなんだ?
624: はちみつ餃子 ◆8X2XSCHEME 2021/04/09(金)21:13 ID:foJJo5gI(1) AAS
C だと関数指示子 (Function Designator) で説明されたりするんだが、
C++ の仕様を Designator で検索しても出てこないな。
シグネチャもまたちょっと違う概念だし、
このあたりのきちんとした解説がまとまったものがあればぜひ読みたい。
625: 2021/04/09(金)21:39 ID:MYEEijki(1) AAS
「メンバ関数の型」が必要になるケースって何じゃろ?
626: 2021/04/10(土)01:44 ID:4ITkpFPM(1) AAS
>>622
だから「f の型は void (int)」って書いたのに、なんでそれが答えじゃないと思うの?

typedef void ftype(int);
struct Foo { ftype f; };
void Foo::f(int) {}
int main() { Foo x; x.f(0); }
627: 2021/04/10(土)08:44 ID:gtw6CEDD(1) AAS
関数ポインタを考える以前は関数の型と言えばイコール評価した値の型だったな。
628: 2021/04/13(火)16:10 ID:uVvL/txB(1) AAS
今は関数の型とかもうどうでもよくて
一周回り帰えりキャプチャとかダイナミックスコープとかの有用性や整合性が中心よね
629: 2021/04/15(木)15:55 ID:6RtJrvVe(1) AAS
pod的な意味でなく論理的整合性的な型付けの恩恵受けたいなら、別に包む必要無くても常に即席structで返しててやんでい
630
(1): 2021/04/24(土)08:11 ID:LUJ0Utr0(1/4) AAS
C++/CLIで、スタティックライブラリからマネージドクラスを公開するのは無理なんでしょうか?
ヘッダファイルに全部実装書けば出来る、ってところまでは調べたんですが、ソースコードをプロジェクト外に置いてるのと変わらないので…。
ダイナミックライブラリでできるならそれでも構わないです。
631
(1): 2021/04/24(土)08:19 ID:nPKzA798(1) AAS
>>630
.NETでstatic libraryなんて作れたっけ?
最終的に.exeと.dllができるのが邪魔だからstatic libraryにしたいというだけなら、
いったんDLLとして作ってILmergeするのが一般的だと思う
632: 2021/04/24(土)08:36 ID:LUJ0Utr0(2/4) AAS
>>631
Lib自体は作れるし、アンマネージクラスなら公開もできるんですが、マネージクラスだと参照側でメンバーが参照できず、LNK2020が発生してしまうんですよね。
ビルドオプションでなんとかできるものなのかな、と。
633
(1): 2021/04/24(土)09:53 ID:K4uxnQki(1/2) AAS
LNK2020ってそれnativeのC++からリンクしようとしてる?
634: 2021/04/24(土)14:56 ID:LUJ0Utr0(3/4) AAS
>>633
libなのでクライアントはC++です
635
(1): 2021/04/24(土)15:16 ID:K4uxnQki(2/2) AAS
そりゃ無理。その仲立ちをするためにC++/CLIがあるのに。
一応nativeのC++からでも自分でCLRを立ち上げたりしてマネージドクラスにアクセスする方法は
あるらしいが、リンクしてそのまま呼ぶという形にはならない。
636
(12): 2021/04/24(土)15:41 ID:at4cvaWV(1/2) AAS
自作のプログラム、起動時の読み込み処理の前に以下を入れると
for(int i = 0; i < 100; ++i){
OutputDebugString("dummy!!!!\n");
}
起動時に行っている外部データの読み込みが凄く速くて
これを無くすと凄く遅くなるんですが怖い…
3分くらい違いが出るので明らかにおかしい
どっかでメモリでもぶっ壊れてますかね?
どういう理由が考えられるでしょうか?
637
(1): 636 2021/04/24(土)15:43 ID:at4cvaWV(2/2) AAS
さっきのダミーを入れなくても
普通にコードを追加したりしてても遅くなったり速くなったりする
別に読み込み処理の部分とは関係ないところでも。
なんでだろう?
638
(1): 2021/04/24(土)15:54 ID:hc4SaSPr(1) AAS
>>637
それは、本当に native の C++?
もしかして、C#のC++/CLI とか?
639
(1): 2021/04/24(土)16:03 ID:lkpB631F(1) AAS
コンパイラはほんと何してるのか分からんから、問題の部分だけ切り出したのを.sへ吐かせて読みなさい
10行程度のcコードなら、edxとか変な名前のは取り敢えず変数だなって思って追えば、アセンブリ知らずとも大体分かるよ
640
(1): 2021/04/24(土)20:39 ID:LUJ0Utr0(4/4) AAS
>>635
いや、
C++ライブラリ内にマネージクラスを作って
マネージのC++プロジェクトから
呼び出したいだけ
DLLだったら、C#のDLLからマネージクラスを呼び出すのと
理屈上同じだからできそうな気がするのだけれど

以前実装した時はInterfaceだけ公開して
呼び出されるとそのインスタンスを返す、みたいなことをしたんだけれど
641
(1): 2021/04/24(土)21:31 ID:+v1plSJo(1) AAS
>>640
.NETはstatic libraryをサポートしていない
出来上がった.libにはそのマネージドクラスのメタデータとか入ってないんじゃない?
642
(1): 2021/04/25(日)00:05 ID:Oojm0ZzH(1) AAS
>>641
結局そういうことだよね
なんか普通にlibのクラスを呼び出せますみたいなのをサンプル付きで出してた記事があってさ…。

まあstaticメソッドしかないクラスばかりだから、アンマネージクラスで公開するか、namespaceでまとめます。
ありがとうございました。
643
(2): 636 2021/04/25(日)00:07 ID:sRfn5IZk(1/11) AAS
>>638
C++とWin32APIのプログラムです
>>639
これは自分へのレスですか?

特に遅くなる以外は止まったりする事もないので
困ることはないですがなんか気持ち悪い…
644: 2021/04/25(日)03:40 ID:vJWG11Gh(1/7) AAS
>>643
外部データの読み込みは、fopen, _open, CreateFile、CFile のどの系統を使
ってる?
645
(2): 2021/04/25(日)03:43 ID:vJWG11Gh(2/7) AAS
>>643
関係ないかもしれないが、HDDが寿命で故障寸前の時にHDDの読み込みが
時々極端に遅くなったりする現象を経験したことがある。
その場合は、そのプログラム以外でも同様の現象が起きるが。
646
(1): 2021/04/25(日)03:49 ID:vJWG11Gh(3/7) AAS
>>645
もし、他のアプリやファイルマネージャーも遅くなることがあるなら、
CrystalDiskInfoなどで診断してみて欲しい。
そのアプリだけ遅くなるが、アプリの動作は正常、というなら、
メモリーやスレッドやOSリソースの使いすぎなども考えられなくは無いが。
何か極端に変わったことしてたりしない?
647
(1): 2021/04/25(日)09:07 ID:x26Nnfhp(1) AAS
OutPutDegugなんちゃらの関数がファイル出力してるなら、単純にそのドライブのアクセス準備が整ってないとか。

以前、SSDに同じファイル名で一時ファイルの作成と削除を繰り返したら、SSDの仕組み上めっちゃ遅くなったことがある。
648: 2021/04/25(日)09:59 ID:j6IXZwA/(1/2) AAS
>>642
どこの記事?
ちょっと気になった
649: 636 2021/04/25(日)10:38 ID:sRfn5IZk(2/11) AAS
>>645-647
遅くなる原因の個所が分かった!
画像を読み込む時にメモリを操作して
16bitで読み込む部分があるんだけど
これを32bitで読み込むようにすると
どんなコードでもまったく遅くならない。
メモリの操作の部分がおかしかったみたい。
自分で書いたコードじゃないのでよくわからない。
32bitのやつと16bitのやつを載せるのでおかしい所あったら教えて。
650
(6): 636 2021/04/25(日)10:39 ID:sRfn5IZk(3/11) AAS
これは遅くならないコード
int X = 0;
for(int y = ImageHeight - 1; y >= 0; --y){
X = 0;
for(int x = 0; x < ImageWidth; ++x){
pPx[X] = ((DWORD*)pSrcBuf)[x + (y * ImageWidth)];
++X;
}
pPx += Pitch;
}
651
(5): 636 2021/04/25(日)10:42 ID:sRfn5IZk(4/11) AAS
これが遅くなる場合があるコード
WORD px, tmp;
BYTE b;
int X = 0;
for(int y = ImageHeight - 1; y >= 0; --y){
X = 0;
for(int x = 0; x < ImageWidth; ++x){
px = 0x00000000;
pPx[X] = px;

b = (BYTE)((((DWORD*)pSrcBuf)[x + (y * ImageWidth)] & 0xff000000) >> 24); //A
省16
652
(1): 636 2021/04/25(日)10:46 ID:sRfn5IZk(5/11) AAS
pPxは、32bitの時はDWORD*で、16bitの時はWORD*になってた。
全て載せると長くなるので変更すると速度が変わる部分だけ載せたよ。
16bitの方でも>>636のダミーを入れれば遅くならないんだよね。
やっぱメモリが壊れてるのかな?
653
(2): 2021/04/25(日)11:02 ID:vJWG11Gh(4/7) AAS
>>651
pSrcBuf, pPx, Pitch の型、及び、それらを初期化しているコードが重要。
そこに問題があるとバッファオーバーランしている可能性が捨てきれない。
1-
あと 349 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.119s