【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2016/11/06(日) 22:58:02.60ID:dU5z27As
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

前スレ
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1469177649/
2017/01/24(火) 13:20:58.13ID:qjTW56fl
msys2
269デフォルトの名無しさん
垢版 |
2017/01/24(火) 13:39:24.94ID:ZplzBBh2
msysって、どういうものですか?
2017/01/24(火) 13:58:35.63ID:qjTW56fl
>>269
コンパイラツールチェインとターミナルとライブラリ管理のパッケージツールを纏めたものです
エディタは無いし ビルドツールはautotoolsとかcmakeとかを使います
ただ単体ファイルをコンパイルして実行するだけなら
gccを叩くだけなので ご要望に沿うかと
2017/01/24(火) 14:14:08.29ID:tjYeiy24
重いのがイヤなら code::blocks はどうかね
http://demura.net/lecture/12713.html
2017/01/24(火) 20:33:35.20ID:bAAm8CCs
>>267
自分もvisual studio が重いのと好きなエディタ使いたいのと、
でもGUIでファイル管理とかコンパイルエラー行へのジャンプをしたかったの自分でそういうツールを作った。TTVC Developer っていうのだけど
ネット上に公開してるけど反応無いので本当に良くできてるかどうかは
わからんが、自分的には便利だとは思ってる
2017/01/24(火) 20:39:04.14ID:2gaKjsEX
俺はqt creator使ってるな
VSよりマシってくらいだが
2017/01/24(火) 20:46:07.50ID:HHZbO6eg
>>267
notepad.exe
cl.exe
link.exe
275デフォルトの名無しさん
垢版 |
2017/01/24(火) 21:22:57.39ID:nvNd8iP1
Bash on Ubuntu on Windws
2017/01/24(火) 21:41:00.44ID:1ohBhH6C
あれβとれたっけ?
2017/01/27(金) 01:10:08.67ID:c6wkRwWW
*p++ って 参照してからインクリメントですよね。
某書に*(p++)と等価って書いてあったけど。
ん 同じか
2017/01/27(金) 01:47:57.39ID:JFq0FevS
同じだよ
その括弧かあってもなくても実際にインクリメントがされるタイミングには影響しない
2017/01/27(金) 02:43:45.51ID:c6wkRwWW
すまん 評価してからインクリメントは同じだもんね。
2017/01/28(土) 22:24:20.92ID:fbuNIeJW
>>279
いいってことよ

何気に愉快なIDだな
2017/01/29(日) 14:28:58.62ID:XKehhdE4
質問です。
VisualStudio2015でReleaseビルドをしていたところ、生成されたEXEに気になる点がありました

if(false){
printf("hogehoge");
}

という処理を書いたところ、このprintfは到達不可能なのに、EXEの中に"hogehoge"という文字列が含まれていたのです。
※再現コードなのでhogehoeをprintしてなんの意味があるのかというコードですが

到達不能なのが明らかな部分は最適化で削除されるものだと思っていたのですが、何かしらの私の不手際でしょうか?
最適化は /O2オプションです
2017/01/29(日) 15:19:11.63ID:DfD+S+Qh
>>281
/O4とかは?
2017/01/29(日) 15:31:20.39ID:2ZaFXkbr
オプションによる不確定なものをどうして不手際と思ったのか謎
/O2 /GF-なら残る可能性高いし
2017/01/29(日) 17:04:30.90ID:XKehhdE4
アドバイスありがとうございます

>>282
VisualStudioには無いようです。GCCにはあるようですが、ぐぐった限りだと効果はないようなことが散見されました

>>283
「不要なコードを削る」というのは、一番単純で効果が高そうなので、まっさきに確実に全除去してくれるだろうと思い込んでいたためです
この手のコードが最適化で消えないと、ifdefだらけになりそうなのですが、何か対策はないものでしょうか?
2017/01/29(日) 18:59:23.49ID:K+/fnyLa
何かの理由があって残してるという事はないのかな・・・
2017/01/29(日) 19:49:35.57ID:6wGEJq5M
>>281
普通に削除されて文字列もなくなるけど?
2017/01/29(日) 23:12:58.08ID:XKehhdE4
>>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を返すだけの結果固定関数になるため、変数の割り当てすらしなくなるから?
2017/01/29(日) 23:42:21.35ID:DuISdTe+
VS2015の環境を持っていないんで見当違いかも知れんが…。

#include <stdio.h> か #include <cstdio> を書いてみる。
char text[] = ... を const char text[] = ... にしてみる。

これらを(独立して)変えてみたら状態が変わらんかな?
printf()による副作用の可能性を考慮してtextを消さないのかも知れん。


もちろんprintf(&quot;hogehoge&quot;)を呼び出しても
引数になってないtextが読み書きされるはずはないんだけど。
2017/01/30(月) 00:05:47.51ID:iVXSa+56
>>288
アドバイスありがとうございます
すいません。最小コードといいつつincludeをきちんと書いておりませんでした
#include <stdio.h>を最初に書いております
cstdioに変えてみて、各種パターンやってみましたが、変化は見られませんでした

次に、以下です
const char ではfoofooは消えませんでした
const static char に変えたところ、消えました

printfが、中でスタック消費量でも利用しているのかな…と馬鹿なことを考えて
char text〜をグローバル空間に出してみましたが、foofooは消えずです
2017/01/30(月) 13:26:01.87ID:NFw8h2uH
>>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
2017/01/30(月) 17:50:38.46ID:X+M9ocjS
つまり>>281は嘘つきってこと?
2017/01/30(月) 19:47:42.18ID:p0U51Ig/
exeの中身まで気が回りませんわ
2017/01/30(月) 22:08:56.31ID:mpXbeHjF
exeにビルド時のフルパスが埋め込まれてるとイラっとする
294デフォルトの名無しさん
垢版 |
2017/01/30(月) 22:20:13.70ID:XMGcU10o
デバッグビルドなら普通でしょ
2017/01/31(火) 02:46:33.99ID:SZ8YrWi+
リリースビルドにして、最適化オプションを指定すれば?
2017/01/31(火) 09:17:11.64ID:r8Cb1+5o
デバッグ情報を含めなければいいだけだしな
2017/02/01(水) 01:15:31.17ID:lC8eLy+G
あるクラスに引数で渡されるオブジェクトのconstではない参照を持ちたいんですけどどのようにやればいいでしょうか
ポインタはなるべく使いたくないのですが
class A {
public:
void setParam(Param&);
private:
Param& m_param;
}
状況としては
あるクラスBがクラスAみたいなParamの参照を持つクラスを複数持っていて
クラスBがvector<Param>でParamの実体を持っているという感じです
2017/02/01(水) 01:25:10.63ID:V+KME3Sb
ライフタイムと循環参照のもたらす悪夢を
全部避けられるように熟考しながら
shared_ptr / weak_ptr をどうぞ
Welcome to C++ nightmare!!
299デフォルトの名無しさん
垢版 |
2017/02/01(水) 01:36:32.13ID:nwC60mRJ
shared_ptrの何が難しいのか判らん。
shared_ptr程度で悪夢とか言ってたらswiftも使えなくない?
2017/02/01(水) 02:15:37.65ID:V+KME3Sb
まぁ良く調べて使ってねってのを脅し効かせた程度です 
他の言語で参照カウント型のsmart_ptr解ってるなら 確かに大丈夫
2017/02/01(水) 12:17:29.74ID:RxSebrTI
Windows10でBluetoothを使ったCOM通信を行いたく、
プログラムのほうはCOMポート通信のつもりで書き、
OSの設定でBluetoothに仮想COMポートを追加しました。

Androidとは問題なく接続・通信できたのですが、
Windows10同士ではうまくいきませんでした。
これは仮想COMポート作成するときに、どちらのPCも「受信」(相手側が接続を開始する)にしていたからだと思い、
片方を「送信」に変更しようとしました。
しかし、この場合は接続先PCを指定しなくてはならないのですが
対象PCが選択リスト内に出てこなくて作成することができません。
ペアリングはできているにもかかわらずです。

どうすればWin10PC同士でBluetoothを介したCOMポート接続・通信ができるでしょうか?
2017/02/01(水) 12:30:13.62ID:HL/HxBhd
直接の解はわからないけど、ぐぐって見つかったので確認
ポート開くとき "\\\\.\\COM○○" (○は数字 \はエスケープ込み)
って開いてる?

ポート番号が1桁の場合に限り "COM○"でも開けるらしいけど、
そのコードの延長で 2桁渡すとそれは開けないから
303301
垢版 |
2017/02/01(水) 12:49:42.61ID:RxSebrTI
>>302
あ、はい。それはやってます。

今、わかったのですが、
一旦ペアリングを解除して、改めて「送信」COMポートを追加しようとすると、
先程までペアリングしていた対象PCが選択できるようになりました。

しかし今度は「選択されたデバイスでシリアルポートサービスが実行されていません。」と出て作成されません。
相手側に「受信」のCOMポートは作成済みなのですが…。
2017/02/01(水) 13:25:07.55ID:HL/HxBhd
ttp://kokufu.blogspot.jp/2014/02/windows-bluetooth-spp-server.html
これとかの雰囲気だと
「受信」で作った側のPCのソフトを先に立ち上げて接続待ちにして(SPPサーバー)
「送信」で作った側のPCを後追いで接続 かなぁ
力になれなくてすまん
305301
垢版 |
2017/02/01(水) 14:06:25.03ID:RxSebrTI
>>304
いえいえ!
色々と調べていただいて参考になりました。

どうもシリアル接続サービスをサポートしていないようです。
今回の条件ではあまり好ましくないのですが、
WiFiを使ったソケット通信で妥協することにします。

ありがとうございました。
2017/02/01(水) 14:21:22.91ID:+8V+I8xy
>>298-300
ありがとうございます
帰ったら勉強してみます
307デフォルトの名無しさん
垢版 |
2017/02/01(水) 20:39:39.90ID:3j6uP7e4
>>297
参照をメンバで持ちたい時は、コンストラクタでの初期化以外は無理。

class A {
public:
A(Param& x):m_param(x){}
private:
Param& m_param;
};
2017/02/02(木) 01:04:42.40ID:CAgg+EtY
shared_ptr,weak_ptrのことで質問なのですが
自クラス2つを引数に取る+演算子をオーバーロードしているクラスMatrixを使って
func(std::weak_ptr<Matrix> m1, std::weak_ptr<Matrix> m2){
mat = m1 * m2;

}
みたいにやりたいんですが、オペランドに一致する演算子がないと言われます
shared_ptr,weak_ptrに入れた場合どのようにしてオーバーロードされた演算子を利用できますか?
2017/02/02(木) 01:27:35.78ID:FXYEZ0RW
>>308
weak_ptr から shared_ptr を作って、それを通して参照すればいい
・・・んだけど、それ weak_ptr::expired() な場合にどうするつもりなん?
2017/02/02(木) 02:04:10.33ID:CAgg+EtY
>>309
ありがとうございます
weak_ptrを使っている理由は
funcはあるクラスのメンバ関数で、引数で渡されたポインタの所有権をクラスが持たないこと示すためにweak_ptrを使っているのですが
weak_ptr::expired()な場合は想定していません
311デフォルトの名無しさん
垢版 |
2017/02/02(木) 02:21:14.81ID:ExAPXdhA
>>310
なんか根本的に勘違いしてる感が
const referenceの関数見たら中でポインタ持ち続けちゃう心配とかしてんの?
2017/02/02(木) 02:21:18.81ID:EB2HJN86
スマートポインタはポインタのように振る舞うものだから
*や->でポインタの指す値にしなければならないよ
2017/02/02(木) 10:51:03.92ID:335RX4F5
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サイズが期待しているよりも小さく、実行時に例外で強制終了します
2017/02/02(木) 12:49:56.83ID:cH1kwi7M
例外を具体的に
2017/02/02(木) 13:18:13.30ID:Nq0thOwX
>>314
> ハンドルされない例外がスローされました:読み取りアクセス違反。
> xxxxx が nullptr でした。
xxxxxはポインタ変数

exeサイズが小さいからリンクできてるように見えてリンクできてないのかなとは思うけど
libの追加方法を#pragma comment(lib,"")にしてもうまくいかずでどうしたらいいものか
2017/02/02(木) 18:40:08.32ID:qO0hDPsp
>>313
> vcxprojを編集して複数の.objをincludeする
なんか色々勘違いしてないか?
317デフォルトの名無しさん
垢版 |
2017/02/02(木) 18:48:07.72ID:S7kpFPUA
>>316
そういう実験してるんでしょ。
それを他人に聞いて何か返ってくると思ってるのが間違ってる感があるけど。
2017/02/02(木) 19:11:39.98ID:Eu4e1EaI
>>316
objからlibを作って動くならそれがいいのだけどその方法が分からない
lib.exeでobjからlibを作って使っても同じ状況
2017/02/02(木) 19:16:04.83ID:WkIFQVuy
>>317
普通とは違うことをしているなと思ったが、実験しているのか
vcxprojを編集してソースコードではなくobjを用いるVSプロジェクトを作りたいのかな
2017/02/02(木) 19:18:03.73ID:qhXDtbED
.c, .cpp から .lib 作るプロジェクト -(A)
そいつをリンクしつつ、 .c, .cpp から実行ファイルを作るプロジェクト -(B)
(参照設定とか依存関係とかで (A) を使うぜ俺 って指定する)
2017/02/02(木) 19:38:57.55ID:WkIFQVuy
こんな感じだろ
ソースからobj生成: VSプロジェクトでなくていい
VSプロジェクト
1. objからexe作るVSプロジェクト (結果OK)
2. objからlib作るVSプロジェクト (3.がNGで、本当にうまくlib作れたかわからず)
3. 上のlibからexe作るVSプロジェクト (exeが例外でNG)
2017/02/02(木) 19:51:53.25ID:Eu4e1EaI
>>321
まさにその状態
>>320の(A)が作れればいいけど、objファイルは数百プロジェクトの600ファイルぐらいあるから試そうにも数日かかりそうで避けたい
今は全プロジェクトまとめたソリューションあるけどリビルドだけで1時間以上かかる。簡単にexe作れるようにしたいというのが原点
2017/02/02(木) 20:22:53.95ID:k638XiO/
そこまで行ったらDLLに分けるだろう
324313
垢版 |
2017/02/03(金) 13:56:09.01ID:3xPmzf3n
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を作る
2017/02/03(金) 13:56:30.01ID:OeN1TpCU
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);
}
2017/02/03(金) 14:06:26.05ID:S9UE3yae
nullptrはC++11からの機能だからですね
"gcc" -> "g++ --std=c++11"を使ってください

元のコンパイルは-lalutを指定していますが
そのプログラムならOpenALだけで大丈夫なので 下記で通ります
ライブラリをpkg-configに探させてるだけです

g++ --std=c++11 program.c `pkg-config openal --libs` -o program
2017/02/03(金) 14:55:43.86ID:xVLuMTde
>>324
一般論で言えば同じはず。
ファイルサイズが小さいのなら正常にリンクできてない。
使ってない関数やクラスをリンクしてるわけじゃないよね
2017/02/03(金) 15:42:48.87ID:3xPmzf3n
>>327
使ってるのも使ってないのもある

libの追加方法は二通り試したけどどちらもビルドエラーはでないけど実行時NG
どちらもlibの追加を省略すると外部シンボルが見つからないエラーでビルドが通らない

プロジェクトのプロパティの「追加の依存ファイル」から→実行時NG
ソースファイル中に「#pragma comment(lib,"")」から→実行時NG
329デフォルトの名無しさん
垢版 |
2017/02/04(土) 00:14:20.36ID:z/XsYQOx
何もしていない普通の一般人の自宅に隠しカメラを取り付け
それをネットでリアルタイム配信

仲間という人間に対する盗聴盗撮生ネット配信の会

しかけたカメラの映像
乗っ取っているPCの画像をリアルタイムで生配信中
集団で仲間の私生活を覗いて楽しんでいる

そんなことが今この国では行われています
2017/02/04(土) 05:54:43.47ID:/r5Uxr2+
libでリンク解決してもダイナミックリンクにしてれば実行時にパス内に見つからずにエラー
スタティックリンクにしないと
2017/02/04(土) 09:51:58.52ID:GdM1I4zb
久々にプログラミングしようと思うんですけど
USBカメラがあるからそれを使って監視カメラにしたいんだが
ピクセルデータが取れればあとは簡単だと思うんだけど、その前に
この適当に昔買ったバッファローのUSBからデータ取り出す事って可能なんですか?
2017/02/04(土) 10:24:35.81ID:94H9RTyk
>>330
lib作るときのプロジェクトタイプはスタティックライブラリにしているけど、それとは別に設定であるのでしょうか?

>>331
「usbカメラ キャプチャ c++」で検索すると色々な方法が見つかるよ。よほど変なカメラ出ない限り仕様は同じだから使える
2017/02/04(土) 10:55:19.44ID:GdM1I4zb
>>332
ありがとうございますだ
2017/02/04(土) 21:25:32.55ID:uqEM2LY/
int a = 0;
int *b = &(1+a);
これが出来ないのはなぜですか?
1+aの計算結果というのはメモリ上のどこかにあると思うんですが
2017/02/04(土) 21:28:28.23ID:sK4bvJ1n
>>334
CPUのレジスタには物理アドレスが無い。
2017/02/04(土) 21:31:18.24ID:3pCbKNVT
&1 を許すとややこしいことになりそうだ
2017/02/04(土) 21:38:25.89ID:wIflvrKT
>>334
計算結果はレジスタに入っててメモリには入ってないんじゃない?
2017/02/04(土) 21:52:37.41ID:uqEM2LY/
>>335-337
なるほど、勘違いしてました
ありがとうございます
2017/02/05(日) 19:35:43.24ID:ktep0Dpi
>>326
遅くなりすいません
できました
ありがとうございました
2017/02/05(日) 22:43:20.73ID:F2ePDpTS
>337
レジスタがメモリじゃないかのようなアホレスだな
2017/02/05(日) 23:03:58.60ID:wagcFIA6
レジスタのアドレスって・・・
2017/02/06(月) 01:31:32.48ID:DI3VdQ+9
アドレスのないレジスタはCでアクセスできないからな
アセンブリでしてねになるからね
343デフォルトの名無しさん
垢版 |
2017/02/06(月) 03:41:00.32ID:oG8S/cPb
って言うかレジスタ関係なくね?
右辺値に対してアドレス取ろうとしてるから駄目なわけで。
2017/02/06(月) 05:58:55.21ID:GvVdGH4O
>>334 の質問に対して「右辺値」を出すのは大げさじゃないかな。
もちろん正しいんだけど、詳細に踏み込みすぎというか、
その話はもっと理解が深まってから、というか。

「過去に自分がこの疑問を持ったときに、どんな説明をされたら
すっきり腑に落ちて先に進めただろうか」と思い返しながら回答してるんだろう。
2017/02/06(月) 08:21:18.53ID:87jFG7WV
そもそも >>338 で本人納得してるのに
> レジスタがメモリじゃないかのようなアホレスだな
とか
> 右辺値に対してアドレス取ろうとしてるから駄目なわけで。
とかは知ったか自慢にしか見えない
2017/02/06(月) 08:58:46.99ID:L0zP1ki7
間違った説明で相手を納得させておいて開き直りとはこれいかに
2017/02/06(月) 13:17:28.90ID:WLH8uv6+
>>345
本人の納得は無関係
その二つどっちも誤り
2017/02/06(月) 20:21:28.41ID:VJg+IRhi
>>345
> その二つどっちも誤り
でもどう誤ってるかは書けないんだよね w
2017/02/06(月) 20:22:09.67ID:VJg+IRhi
>>348>>347 宛だったわ
350デフォルトの名無しさん
垢版 |
2017/02/06(月) 20:58:58.36ID:oG8S/cPb
>>344
でもさ、レジスタって言語と関係ないじゃん?
2017/02/06(月) 21:52:01.05ID:w07g0Jpo
registerは予約語なのに無関係は無いわ
2017/02/06(月) 22:13:36.15ID:rtwfNknd
>registerは予約語なのに無関係は無いわ
規格のどこを読んだら「register」キーワードと「レジスター」との関連が読みとれるんだか
2017/02/06(月) 23:29:15.59ID:w07g0Jpo
規格厨には理解しろと言っても無理だ
2017/02/06(月) 23:45:37.66ID:+fmEnPzx
>int a = 0;
>int *b = &(1+a);

っていうのが今intになってるからレジスタがどうとか言えるけど
intじゃなくて自分で定義したクラスとかだったらどうなんだって話だな
レジスタだからアドレスが取れないっていう説明はアレすぎないかい?
そもそもレジスタだけで済ませるかどうかはコンパイラの自由ってのもあるし
2017/02/06(月) 23:48:30.59ID:tIYhS76V
一生懸命だなあw
2017/02/07(火) 00:11:08.64ID:STnejiJM
俺が思うにさ
最適化でレジスタに配置されてメモリに実体が確保されない変数ってのは
普通にありふれているわけじゃないですか
で、それらの変数のアドレスを取得するように
コードを書き換えたら、コンパイルエラーになるんですか?ってね
その場合ちゃんとコンパイラはメモリに実体を作るような動作になる
だからレジスタ云々はオプティマイズの話であって本質的に全く関係ないだろうと
レジスタに配置されているからアドレス取得できませんって意味不明で
だったらメモリに実体を作ればいくらでもアドレス取得できるだろって話なんだよ

どちらかというとこれは変数の寿命の関係でそうなっているんだよ
2017/02/07(火) 00:12:13.25ID:vsDAW+dO
初心者向けの簡易な説明に外野がつまらない茶々入れて大騒ぎするなよ。
2017/02/07(火) 00:25:30.14ID:pfKer2X+
>最適化でレジスタに配置されてメモリに実体が確保されない変数ってのは
>普通にありふれているわけじゃないですか

本当にありふれてるのか?
359デフォルトの名無しさん
垢版 |
2017/02/07(火) 00:48:05.62ID:PI0qtNzz
winsock(UDP)を使ったプログラムを作っています。
ほぼできたのですが、数100回繰り返すと徐々に通信が
遅くなっていきます。
通信するたびに、オープンとクローズを繰り返しているのですが、
その辺に原因がありそうでしょうか・・・。
2017/02/07(火) 02:25:04.93ID:e2fTv1VF
メモリを解放していないから、使用メモリがドンドン大きくなっていくとか?

プロセスの使用メモリを、チェックすれば?
2017/02/07(火) 07:22:03.04ID:ff698yUf
>>354
> そもそもレジスタだけで済ませるかどうかはコンパイラの自由ってのもあるし
その自由さのために言語仕様でできないようにしてるだけでしょ
2017/02/07(火) 07:23:26.33ID:ff698yUf
>>359
再現性あるならどこが遅くなってるかを調べたら?
2017/02/07(火) 07:43:41.13ID:AbeSLyAt
>その自由さのために言語仕様でできないようにしてるだけでしょ

根拠は俺の「こうだったらいいな」
この理屈で行くとアドレスをとれる変数は
レジスタに乗せてはいけないことになるな
2017/02/07(火) 11:15:58.10ID:bjgueVwS
register云々してるやつはCかC++か区別して書け
2017/02/07(火) 11:47:58.10ID:+LdvU0fQ
class A
{
 public:
  int xxx;
  void yyy();
};

class B : protected A  ←protectedのままにしたい
{
 public:
  void yyy() {  __super::yyy();  }
};

B bbb;
bbb.xxx = 0;   ←アクセスできない
bbb.yyy();    ←使える

xxxをclassBの内部を変えることでアクセスできるようにする方法ない?
2017/02/07(火) 11:52:35.77ID:Ex9Qk6T0
public:
using A::xxx;
2017/02/07(火) 11:57:42.37ID:+LdvU0fQ
>>366
おお!yyy()もそれでいけるね。サンクス
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況