1 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 22:58:02.60 ID:dU5z27As.net] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック) ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用) 前スレ 【初心者歓迎】C/C++室 Ver.99【環境依存OK】 echo.2ch.net/test/read.cgi/tech/1469177649/
237 名前:デフォルトの名無しさん mailto:sage [2017/01/15(日) 00:34:44.37 ID:H7ag5TAh.net] 警告文をコピペしてくれると話が早いような
238 名前:デフォルトの名無しさん mailto:sage [2017/01/15(日) 00:51:14.06 ID:e3PYrJk6.net] そのヘッダーファイルの中でプロトタイプ宣言はされているんじゃないのか 警告の原因は別のことだろ
239 名前:デフォルトの名無しさん mailto:sage [2017/01/15(日) 01:02:35.94 ID:7/DzGkQz.net] インクルードするファイルを間違えてたみたいです お騒がせしました
240 名前:デフォルトの名無しさん mailto:sage [2017/01/19(木) 22:46:56.05 ID:knltoro2.net] 新しくクラスとそれに関連した処理などを実装するとき ヘッダー側でクラスの定義、ソースファイル側にクラス内のメンバ関数の実装部などを書きますよね その時メンバ関数はどんな場合でもヘッダー側に書かずにソース側に書くものですか? たとえば //ヘッダー側です class A{ private: int num; public: int ReturnNum(void){ return num; } }; 処理はたった一行ですけどこの場合もint ReturnNum()の実装部はソースファイル側にint A::ReturnNum()のように移すべきですか? ネット上のプログラムをいくつか見てみたらこのようにメンバ変数をただ返すだけの処理ならヘッダー側に書いてあるものも少なくなかったのでどっちが好ましいんだろうと気になりました
241 名前:デフォルトの名無しさん mailto:sage [2017/01/19(木) 23:08:04.39 ID:ipEwSksA.net] プログラムは普通すべて「ソースファイル」に書くものです 「ヘッダー」に書くのはコンパイラー開発者だけです
242 名前:デフォルトの名無しさん mailto:sage [2017/01/19(木) 23:11:24.96 ID:ydMYZ/gE.net] クラスもヘッダに書きますけどぉ
243 名前:デフォルトの名無しさん mailto:sage [2017/01/19(木) 23:55:32.15 ID:A0Yl7Ujc.net] > その時メンバ関数はどんな場合でもヘッダー側に書かずにソース側に書くものですか? 別にどんな場合でもソース側に書くというわけではない ヘッダに書くのもソースに書くのも一長一短はあり絶対的にどっちがいいというものではない 君が違いを理解し何を重視するかを意識すれば 君にとってどっちが好ましいかは自然とはっきりする
244 名前:デフォルトの名無しさん [2017/01/20(金) 00:23:32.93 ID:7sj2OAGi.net] なんか禅問答が始まったかと思ったわ
245 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 01:12:20.36 ID:/ixeQkYS.net] 短いメソッドなら、ヘッダに、inline 指定して書くと、 関数化せずに、inline にしてくれる可能性が高い まあ、言語では保証していないけど。コンパイラ依存
246 名前:デフォルトの名無しさん [2017/01/20(金) 05:11:02.70 ID:vaOLIJJw.net] クラス定義で定義されたメンバ関数は暗黙にinlineになるね。 (『プログラミング言語C++第4版』p.464 16.2.8 クラス内関数定義) class SomeClass { public: int a() {return a_;} // 暗黙のinline指定 private: int a_; } …という話を書くために厚い本を調べてたら class SomeClass { public: int a(); private: int a_; } inline int SomeClass::a() // 明示的にinline指定 { return a_; } と書く方法も載ってた。 >>240 は後者の説明だったのね。
247 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 07:10:06.09 ID:Nvso2zBq.net] >>235 本体側に書くのが原則 特にシステムが大きくなる場合 よほどの理由がある場合(インライン化して高速化するなど)はヘッダに書くこともある
248 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 08:09:40.71 ID:B05iL6IP.net] 『〜のが原則』 『理由がある場合〜こともある』 俺の会社のルールは世界普遍的 思考
249 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 16:53:52.68 ID:abKD9bRi.net] inlineにするのはほとんどその時の気分みたいな? なんかマクロみたいだな。inlineにすっかみたいな。
250 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/01/20(金) 17:10:04.08 ID:XdmbS/hB.net] >>244 関数呼び出しのオーバーヘッドの回避と、定数畳み込みなどの最適化が期待できる場合にインライン化する。
251 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 17:38:00.40 ID:abKD9bRi.net] >>245 そんな感じ
252 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 20:04:23.44 ID:1c/0Zcpc.net] >>245 インラインにしても劇的に速くなった経験が無いんですが、コツは有りますか?
253 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 20:57:25.59 ID:pNkrp0ep.net] 効果が出るのは ・小さい かつ ・短時間に非常に多数呼び出される 関数だけだよ。 しかも、まず劇的ではない。
254 名前:デフォルトの名無しさん [2017/01/20(金) 21:15:10.32 ID:esT1VQmf.net] inlineキーワードはヘッダに実装書くときなどに使用するものでインライン展開を狙った最適化の為に書くものではない
255 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 21:15:23.08 ID:abKD9bRi.net] もしかしてコンパイラの方で展開してるとか はないかなぁw
256 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 21:57:28.38 ID:aetIobRP.net] >>249 インライン関数の話の途中でinlineキーワードの関数の話を始めて、いきなりどうした
257 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 22:07:56.98 ID:CICAdfuU.net] >>249 上にもあるけどヘッダに実装書いたら暗黙でインライン指定されるから、そこにinlineキーワードを使用するのは無意味 やはりinlineは最適化のためでしょう
258 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 23:11:34.78 ID:LsENUQp+.net] ベクトルとか行列のライブラリを使った時は全部インラインにしたな 1/60秒にかなりの回数呼ぶし ライブラリとかもインラインで書かれてる
259 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 23:12:36.14 ID:LsENUQp+.net] ×使った ??作った
260 名前:デフォルトの名無しさん [2017/01/20(金) 23:27:28.97 ID:esT1VQmf.net] >>252 んなわけない
261 名前:デフォルトの名無しさん mailto:sage [2017/01/20(金) 23:34:20.48 ID:ITfb1kXg.net] >>255 んなこたーない
262 名前:デフォルトの名無しさん [2017/01/20(金) 23:36:05.42 ID:esT1VQmf.net] ヘッダに書いたら暗黙でinlineって #includeの機能しらんとしか思えないんだが
263 名前:デフォルトの名無しさん mailto:sage [2017/01/21(土) 00:40:48.27 ID:dThE4/1u.net] ちょと混じっちゃったね。 関数を定義されたヘッダーが複数のソースに呼ばれちゃったら、実体が いっぱい出来ちゃうもんね。
264 名前:デフォルトの名無しさん mailto:sage [2017/01/21(土) 01:48:12.93 ID:RmTA4cQd.net] 江添はなんて言ってる?
265 名前:デフォルトの名無しさん mailto:sage [2017/01/21(土) 07:06:45.50 ID:5NCJ8rOL.net] forceを信じるのだ
266 名前:デフォルトの名無しさん mailto:sage [2017/01/21(土) 08:35:23.75 ID:P1/rV56D.net] インライン関数はODR回避のためだと思っていた C++17(予定)のインライン変数もそんな感じ
267 名前:デフォルトの名無しさん mailto:sage [2017/01/21(土) 11:00:41.73 ID:wrzS/cSB.net] ODRって何?
268 名前:デフォルトの名無しさん mailto:sage [2017/01/21(土) 11:17:05.01 ID:J7ipYv9j.net] 単一定義則 One Definition Rule の略語
269 名前:263 mailto:sage [2017/01/21(土) 19:43:36.29 ID:J7ipYv9j.net] 「単一定義規則」の方が検索にかかりやすい言葉かも。
270 名前:デフォルトの名無しさん mailto:sage [2017/01/22(日) 08:28:10.05 ID:5o7PrILb.net] >>261 そうそう。最適化目的でinline付けても普通無視されるからね。
271 名前:デフォルトの名無しさん mailto:sage [2017/01/22(日) 14:37:23.33 ID:hBhrTyQG.net] https://chrome.google.com/webstore/detail/%E3%81%AF%E3%81%A6%E3%81%AAng/mbgdnfmdelffjdhkdggilmphfdihnmcj?hl=ja
272 名前:デフォルトの名無しさん [2017/01/24(火) 12:50:54.05 ID:ZplzBBh2.net] Windows上で、APIを使わずに、コマンドプロンプト上だけで結果が ほしいような、C言語のプログラムを作るのに便利な開発環境はありますか? VIsualStudioは重すぎてあまり使いたくありません。 どうぞよろしくお願いします。
273 名前:デフォルトの名無しさん mailto:sage [2017/01/24(火) 13:20:58.13 ID:qjTW56fl.net] msys2
274 名前:デフォルトの名無しさん [2017/01/24(火) 13:39:24.94 ID:ZplzBBh2.net] msysって、どういうものですか?
275 名前:デフォルトの名無しさん mailto:sage [2017/01/24(火) 13:58:35.63 ID:qjTW56fl.net] >>269 コンパイラツールチェインとターミナルとライブラリ管理のパッケージツールを纏めたものです エディタは無いし ビルドツールはautotoolsとかcmakeとかを使います ただ単体ファイルをコンパイルして実行するだけなら gccを叩くだけなので ご要望に沿うかと
276 名前:デフォルトの名無しさん mailto:sage [2017/01/24(火) 14:14:08.29 ID:tjYeiy24.net] 重いのがイヤなら code::blocks はどうかね demura.net/lecture/12713.html
277 名前:デフォルトの名無しさん mailto:sage [2017/01/24(火) 20:33:35.20 ID:bAAm8CCs.net] >>267 自分もvisual studio が重いのと好きなエディタ使いたいのと、 でもGUIでファイル管理とかコンパイルエラー行へのジャンプをしたかったの自分でそういうツールを作った。TTVC Developer っていうのだけど ネット上に公開してるけど反応無いので本当に良くできてるかどうかは わからんが、自分的には便利だとは思ってる
278 名前:デフォルトの名無しさん mailto:sage [2017/01/24(火) 20:39:04.14 ID:2gaKjsEX.net] 俺はqt creator使ってるな VSよりマシってくらいだが
279 名前:デフォルトの名無しさん mailto:sage [2017/01/24(火) 20:46:07.50 ID:HHZbO6eg.net] >>267 notepad.exe cl.exe link.exe
280 名前:デフォルトの名無しさん [2017/01/24(火) 21:22:57.39 ID:nvNd8iP1.net] Bash on Ubuntu on Windws
281 名前:デフォルトの名無しさん mailto:sage [2017/01/24(火) 21:41:00.44 ID:1ohBhH6C.net] あれβとれたっけ?
282 名前:デフォルトの名無しさん mailto:sage [2017/01/27(金) 01:10:08.67 ID:c6wkRwWW.net] *p++ って 参照してからインクリメントですよね。 某書に*(p++)と等価って書いてあったけど。 ん 同じか
283 名前:デフォルトの名無しさん mailto:sage [2017/01/27(金) 01:47:57.39 ID:JFq0FevS.net] 同じだよ その括弧かあってもなくても実際にインクリメントがされるタイミングには影響しない
284 名前:デフォルトの名無しさん mailto:sage [2017/01/27(金) 02:43:45.51 ID:c6wkRwWW.net] すまん 評価してからインクリメントは同じだもんね。
285 名前:デフォルトの名無しさん mailto:sage [2017/01/28(土) 22:24:20.92 ID:fbuNIeJW.net] >>279 いいってことよ 何気に愉快なIDだな
286 名前:デフォルトの名無しさん mailto:sage [2017/01/29(日) 14:28:58.62 ID:XKehhdE4.net] 質問です。 VisualStudio2015でReleaseビルドをしていたところ、生成されたEXEに気になる点がありました if(false){ printf("hogehoge"); } という処理を書いたところ、このprintfは到達不可能なのに、EXEの中に"hogehoge"という文字列が含まれていたのです。 ※再現コードなのでhogehoeをprintしてなんの意味があるのかというコードですが 到達不能なのが明らかな部分は最適化で削除されるものだと思っていたのですが、何かしらの私の不手際でしょうか? 最適化は /O2オプションです
287 名前:デフォルトの名無しさん mailto:sage [2017/01/29(日) 15:19:11.63 ID:DfD+S+Qh.net] >>281 /O4とかは?
288 名前:デフォルトの名無しさん mailto:sage [2017/01/29(日) 15:31:20.39 ID:2ZaFXkbr.net] オプションによる不確定なものをどうして不手際と思ったのか謎 /O2 /GF-なら残る可能性高いし
289 名前:デフォルトの名無しさん mailto:sage [2017/01/29(日) 17:04:30.90 ID:XKehhdE4.net] アドバイスありがとうございます >>282 VisualStudioには無いようです。GCCにはあるようですが、ぐぐった限りだと効果はないようなことが散見されました >>283 「不要なコードを削る」というのは、一番単純で効果が高そうなので、まっさきに確実に全除去してくれるだろうと思い込んでいたためです この手のコードが最適化で消えないと、ifdefだらけになりそうなのですが、何か対策はないものでしょうか?
290 名前:デフォルトの名無しさん mailto:sage [2017/01/29(日) 18:59:23.49 ID:K+/fnyLa.net] 何かの理由があって残してるという事はないのかな・・・
291 名前:デフォルトの名無しさん mailto:sage [2017/01/29(日) 19:49:35.57 ID:6wGEJq5M.net] >>281 普通に削除されて文字列もなくなるけど?
292 名前:デフォルトの名無しさん mailto:sage [2017/01/29(日) 23:12:58.08 ID:XKehhdE4.net] >>285-286 ご返答ありがとうございます。 どうも文字列をあれこれ変えて、消えたり消えなかったりとよくわからない状況になってきました。 とりあえず、VS2015での最小コードを作れましたので貼り付けます int main() { char text[] = "foofoo"; printf("hogehoge"); if (false) { printf(text); } return 0; } こうすると以下の挙動になります。 このまま: exeにhogehoge, foofooの両方が含まれているのを確認できる printf("hogehoge");を削除: hogehoge, foofooの両方がEXEから消える ※単に0を返すだけの結果固定関数になるため、変数の割り当てすらしなくなるから?
293 名前:デフォルトの名無しさん mailto:sage [2017/01/29(日) 23:42:21.35 ID:DuISdTe+.net] VS2015の環境を持っていないんで見当違いかも知れんが…。 #include <stdio.h> か #include <cstdio> を書いてみる。 char text[] = ... を const char text[] = ... にしてみる。 これらを(独立して)変えてみたら状態が変わらんかな? printf()による副作用の可能性を考慮してtextを消さないのかも知れん。 もちろんprintf("hogehoge")を呼び出しても 引数になってないtextが読み書きされるはずはないんだけど。
294 名前:デフォルトの名無しさん mailto:sage [2017/01/30(月) 00:05:47.51 ID:iVXSa+56.net] >>288 アドバイスありがとうございます すいません。最小コードといいつつincludeをきちんと書いておりませんでした #include <stdio.h>を最初に書いております cstdioに変えてみて、各種パターンやってみましたが、変化は見られませんでした 次に、以下です const char ではfoofooは消えませんでした const static char に変えたところ、消えました printfが、中でスタック消費量でも利用しているのかな…と馬鹿なことを考えて char text〜をグローバル空間に出してみましたが、foofooは消えずです
295 名前:デフォルトの名無しさん mailto:sage [2017/01/30(月) 13:26:01.87 ID:NFw8h2uH.net] >>289 グローバル変数にするのは最適化されにくくなるだけ。 とりあえずこれで #include <stdio.h> int main(){ printf("hogehoge"); if(false){ printf("foofoo"); } return 0; } データセグメントが消えるかどうかは最適化の 目的じゃないと思うが、"foofoo"が残るか見てみると VS2015 cl /Ox /Fa hoge.cpp きえない cl /O1 /Fa hoge.cpp きえた cl /O2 /Fa hoge.cpp きえた GCC-3.4.5 gcc -S hoge.cpp きえた まあ所詮VC
296 名前:デフォルトの名無しさん mailto:sage [2017/01/30(月) 17:50:38.46 ID:X+M9ocjS.net] つまり>>281 は嘘つきってこと?
297 名前:デフォルトの名無しさん mailto:sage [2017/01/30(月) 19:47:42.18 ID:p0U51Ig/.net] exeの中身まで気が回りませんわ
298 名前:デフォルトの名無しさん mailto:sage [2017/01/30(月) 22:08:56.31 ID:mpXbeHjF.net] exeにビルド時のフルパスが埋め込まれてるとイラっとする
299 名前:デフォルトの名無しさん [2017/01/30(月) 22:20:13.70 ID:XMGcU10o.net] デバッグビルドなら普通でしょ
300 名前:デフォルトの名無しさん mailto:sage [2017/01/31(火) 02:46:33.99 ID:SZ8YrWi+.net] リリースビルドにして、最適化オプションを指定すれば?
301 名前:デフォルトの名無しさん mailto:sage [2017/01/31(火) 09:17:11.64 ID:r8Cb1+5o.net] デバッグ情報を含めなければいいだけだしな
302 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 01:15:31.17 ID:lC8eLy+G.net] あるクラスに引数で渡されるオブジェクトのconstではない参照を持ちたいんですけどどのようにやればいいでしょうか ポインタはなるべく使いたくないのですが class A { public: void setParam(Param&); private: Param& m_param; } 状況としては あるクラスBがクラスAみたいなParamの参照を持つクラスを複数持っていて クラスBがvector<Param>でParamの実体を持っているという感じです
303 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 01:25:10.63 ID:V+KME3Sb.net] ライフタイムと循環参照のもたらす悪夢を 全部避けられるように熟考しながら shared_ptr / weak_ptr をどうぞ Welcome to C++ nightmare!!
304 名前:デフォルトの名無しさん [2017/02/01(水) 01:36:32.13 ID:nwC60mRJ.net] shared_ptrの何が難しいのか判らん。 shared_ptr程度で悪夢とか言ってたらswiftも使えなくない?
305 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 02:15:37.65 ID:V+KME3Sb.net] まぁ良く調べて使ってねってのを脅し効かせた程度です 他の言語で参照カウント型のsmart_ptr解ってるなら 確かに大丈夫
306 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 12:17:29.74 ID:RxSebrTI.net] Windows10でBluetoothを使ったCOM通信を行いたく、 プログラムのほうはCOMポート通信のつもりで書き、 OSの設定でBluetoothに仮想COMポートを追加しました。 Androidとは問題なく接続・通信できたのですが、 Windows10同士ではうまくいきませんでした。 これは仮想COMポート作成するときに、どちらのPCも「受信」(相手側が接続を開始する)にしていたからだと思い、 片方を「送信」に変更しようとしました。 しかし、この場合は接続先PCを指定しなくてはならないのですが 対象PCが選択リスト内に出てこなくて作成することができません。 ペアリングはできているにもかかわらずです。 どうすればWin10PC同士でBluetoothを介したCOMポート接続・通信ができるでしょうか?
307 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 12:30:13.62 ID:HL/HxBhd.net] 直接の解はわからないけど、ぐぐって見つかったので確認 ポート開くとき "\\\\.\\COM○○" (○は数字 \はエスケープ込み) って開いてる? ポート番号が1桁の場合に限り "COM○"でも開けるらしいけど、 そのコードの延長で 2桁渡すとそれは開けないから
308 名前:301 mailto:sage [2017/02/01(水) 12:49:42.61 ID:RxSebrTI.net] >>302 あ、はい。それはやってます。 今、わかったのですが、 一旦ペアリングを解除して、改めて「送信」COMポートを追加しようとすると、 先程までペアリングしていた対象PCが選択できるようになりました。 しかし今度は「選択されたデバイスでシリアルポートサービスが実行されていません。」と出て作成されません。 相手側に「受信」のCOMポートは作成済みなのですが…。
309 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 13:25:07.55 ID:HL/HxBhd.net] ttp://kokufu.blogspot.jp/2014/02/windows-bluetooth-spp-server.html これとかの雰囲気だと 「受信」で作った側のPCのソフトを先に立ち上げて接続待ちにして(SPPサーバー) 「送信」で作った側のPCを後追いで接続 かなぁ 力になれなくてすまん
310 名前:301 mailto:sage [2017/02/01(水) 14:06:25.03 ID:RxSebrTI.net] >>304 いえいえ! 色々と調べていただいて参考になりました。 どうもシリアル接続サービスをサポートしていないようです。 今回の条件ではあまり好ましくないのですが、 WiFiを使ったソケット通信で妥協することにします。 ありがとうございました。
311 名前:デフォルトの名無しさん mailto:sage [2017/02/01(水) 14:21:22.91 ID:+8V+I8xy.net] >>298-300 ありがとうございます 帰ったら勉強してみます
312 名前:デフォルトの名無しさん [2017/02/01(水) 20:39:39.90 ID:3j6uP7e4.net] >>297 参照をメンバで持ちたい時は、コンストラクタでの初期化以外は無理。 class A { public: A(Param& x):m_param(x){} private: Param& m_param; };
313 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 01:04:42.40 ID:CAgg+EtY.net] shared_ptr,weak_ptrのことで質問なのですが 自クラス2つを引数に取る+演算子をオーバーロードしているクラスMatrixを使って func(std::weak_ptr<Matrix> m1, std::weak_ptr<Matrix> m2){ mat = m1 * m2; … } みたいにやりたいんですが、オペランドに一致する演算子がないと言われます shared_ptr,weak_ptrに入れた場合どのようにしてオーバーロードされた演算子を利用できますか?
314 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 01:27:35.78 ID:FXYEZ0RW.net] >>308 weak_ptr から shared_ptr を作って、それを通して参照すればいい ・・・んだけど、それ weak_ptr::expired() な場合にどうするつもりなん?
315 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 02:04:10.33 ID:CAgg+EtY.net] >>309 ありがとうございます weak_ptrを使っている理由は funcはあるクラスのメンバ関数で、引数で渡されたポインタの所有権をクラスが持たないこと示すためにweak_ptrを使っているのですが weak_ptr::expired()な場合は想定していません
316 名前:デフォルトの名無しさん [2017/02/02(木) 02:21:14.81 ID:ExAPXdhA.net] >>310 なんか根本的に勘違いしてる感が const referenceの関数見たら中でポインタ持ち続けちゃう心配とかしてんの?
317 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 02:21:18.81 ID:EB2HJN86.net] スマートポインタはポインタのように振る舞うものだから *や->でポインタの指す値にしなければならないよ
318 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 10:51:03.92 ID:335RX4F5.net] VS2015で.objを.libに変換してリンクできなくて悩んでいます そういうことはできないのでしょうか? 複数のC++ファイルをビルド→.objが複数できる 新しいEXEプロジェクト作る→main()を用意→そこの.vcxprojを編集して複数の.objをincludeする→ビルドで正常な.exeできる(exeサイズ10MB) include方法は<Object Include="abc1.obj" /> <Object Include="abc2.obj" />・・・ 新しいスタティックライブラリプロジェクト作る→そこの.vcxprojを編集して複数の.objをincludeする→ビルドで.libができる(libサイズ100MB) →新しいEXEプロジェクト作る→main()を用意→追加のライブラリで.libをリンクする→ビルドで動かない.exeできる(exeサイズ1MB) 動かない.exeのビルド時はリンカーエラーなど出ません exeサイズが期待しているよりも小さく、実行時に例外で強制終了します
319 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 12:49:56.83 ID:cH1kwi7M.net] 例外を具体的に
320 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 13:18:13.30 ID:Nq0thOwX.net] >>314 > ハンドルされない例外がスローされました:読み取りアクセス違反。 > xxxxx が nullptr でした。 xxxxxはポインタ変数 exeサイズが小さいからリンクできてるように見えてリンクできてないのかなとは思うけど libの追加方法を#pragma comment(lib,"")にしてもうまくいかずでどうしたらいいものか
321 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 18:40:08.32 ID:qO0hDPsp.net] >>313 > vcxprojを編集して複数の.objをincludeする なんか色々勘違いしてないか?
322 名前:デフォルトの名無しさん [2017/02/02(木) 18:48:07.72 ID:S7kpFPUA.net] >>316 そういう実験してるんでしょ。 それを他人に聞いて何か返ってくると思ってるのが間違ってる感があるけど。
323 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 19:11:39.98 ID:Eu4e1EaI.net] >>316 objからlibを作って動くならそれがいいのだけどその方法が分からない lib.exeでobjからlibを作って使っても同じ状況
324 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 19:16:04.83 ID:WkIFQVuy.net] >>317 普通とは違うことをしているなと思ったが、実験しているのか vcxprojを編集してソースコードではなくobjを用いるVSプロジェクトを作りたいのかな
325 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 19:18:03.73 ID:qhXDtbED.net] .c, .cpp から .lib 作るプロジェクト -(A) そいつをリンクしつつ、 .c, .cpp から実行ファイルを作るプロジェクト -(B) (参照設定とか依存関係とかで (A) を使うぜ俺 って指定する)
326 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 19:38:57.55 ID:WkIFQVuy.net] こんな感じだろ ソースからobj生成: VSプロジェクトでなくていい VSプロジェクト 1. objからexe作るVSプロジェクト (結果OK) 2. objからlib作るVSプロジェクト (3.がNGで、本当にうまくlib作れたかわからず) 3. 上のlibからexe作るVSプロジェクト (exeが例外でNG)
327 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 19:51:53.25 ID:Eu4e1EaI.net] >>321 まさにその状態 >>320 の(A)が作れればいいけど、objファイルは数百プロジェクトの600ファイルぐらいあるから試そうにも数日かかりそうで避けたい 今は全プロジェクトまとめたソリューションあるけどリビルドだけで1時間以上かかる。簡単にexe作れるようにしたいというのが原点
328 名前:デフォルトの名無しさん mailto:sage [2017/02/02(木) 20:22:53.95 ID:k638XiO/.net] そこまで行ったらDLLに分けるだろう
329 名前:313 mailto:sage [2017/02/03(金) 13:56:09.01 ID:3xPmzf3n.net] 4番をやってみましたが結果OKでした 1. objからexe作るVSプロジェクト (結果OK) 2. objからlib作るVSプロジェクト (3.がNGで、本当にうまくlib作れたかわからないが、4がOKで作れてる可能性高い) 3. 2のlibからexe作るVSプロジェクト (exeが例外でNG) 4. 2のlibからobjを抽出して、そのobjからexe作るVSプロジェクト (結果OK) 作業の前提条件として下の2つは意味が同じと思っているのですが、違いがあるのでしょうか? cppをコンパイルしてobjにし、objをリンクしてexeを作る cppをコンパイルしてobjにし、objをlibに変換してからリンクしてexeを作る
330 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 13:56:30.01 ID:OeN1TpCU.net] Ubuntu16.04,gcc5.4.0で,書籍を参考に下記のプログラムを コンパイル(gcc program.c -lalut -s -o program)したところ, 「'nullptr' was not declared in this scope」というエラーになりました 何が間違っているのか教えてください ---program--- #include<AL/al.h> #include<AL/alc.h> int main() { //OpenAlの初期化 //デバイスを開く ALCdevice* device = alcOpenDevice(nullptr); //コンテキストを生成 ALCcontext* context = alcCreateContext(device, nullptr); //生成したコンテキストを操作対象にする alcMakeContextCurrent(context); //OpenALの後始末 //操作対象のコンテキストを解除 alcMakeContextCurrent(nullptr); //コンテキストを破棄 alcDestroyContext(context); //デバイスを閉じる alcCloseDevice(device); }
331 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 14:06:26.05 ID:S9UE3yae.net] nullptrはC++11からの機能だからですね "gcc" -> "g++ --std=c++11"を使ってください 元のコンパイルは-lalutを指定していますが そのプログラムならOpenALだけで大丈夫なので 下記で通ります ライブラリをpkg-configに探させてるだけです g++ --std=c++11 program.c `pkg-config openal --libs` -o program
332 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 14:55:43.86 ID:xVLuMTde.net] >>324 一般論で言えば同じはず。 ファイルサイズが小さいのなら正常にリンクできてない。 使ってない関数やクラスをリンクしてるわけじゃないよね
333 名前:デフォルトの名無しさん mailto:sage [2017/02/03(金) 15:42:48.87 ID:3xPmzf3n.net] >>327 使ってるのも使ってないのもある libの追加方法は二通り試したけどどちらもビルドエラーはでないけど実行時NG どちらもlibの追加を省略すると外部シンボルが見つからないエラーでビルドが通らない プロジェクトのプロパティの「追加の依存ファイル」から→実行時NG ソースファイル中に「#pragma comment(lib,"")」から→実行時NG
334 名前:デフォルトの名無しさん [2017/02/04(土) 00:14:20.36 ID:z/XsYQOx.net] 何もしていない普通の一般人の自宅に隠しカメラを取り付け それをネットでリアルタイム配信 仲間という人間に対する盗聴盗撮生ネット配信の会 しかけたカメラの映像 乗っ取っているPCの画像をリアルタイムで生配信中 集団で仲間の私生活を覗いて楽しんでいる そんなことが今この国では行われています
335 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 05:54:43.47 ID:/r5Uxr2+.net] libでリンク解決してもダイナミックリンクにしてれば実行時にパス内に見つからずにエラー スタティ
336 名前:ックリンクにしないと [] [ここ壊れてます]
337 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 09:51:58.52 ID:GdM1I4zb.net] 久々にプログラミングしようと思うんですけど USBカメラがあるからそれを使って監視カメラにしたいんだが ピクセルデータが取れればあとは簡単だと思うんだけど、その前に この適当に昔買ったバッファローのUSBからデータ取り出す事って可能なんですか?