[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 03/03 02:10 / Filesize : 267 KB / Number-of Response : 1017
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.100【環境依存OK】



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/

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からデータ取り出す事って可能なんですか?

338 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 10:24:35.81 ID:94H9RTyk.net]
>>330
lib作るときのプロジェクトタイプはスタティックライブラリにしているけど、それとは別に設定であるのでしょうか?

>>331
「usbカメラ キャプチャ c++」で検索すると色々な方法が見つかるよ。よほど変なカメラ出ない限り仕様は同じだから使える

339 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 10:55:19.44 ID:GdM1I4zb.net]
>>332
ありがとうございますだ

340 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 21:25:32.55 ID:uqEM2LY/.net]
int a = 0;
int *b = &(1+a);
これが出来ないのはなぜですか?
1+aの計算結果というのはメモリ上のどこかにあると思うんですが

341 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/02/04(土) 21:28:28.23 ID:sK4bvJ1n.net]
>>334
CPUのレジスタには物理アドレスが無い。



342 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 21:31:18.24 ID:3pCbKNVT.net]
&1 を許すとややこしいことになりそうだ

343 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 21:38:25.89 ID:wIflvrKT.net]
>>334
計算結果はレジスタに入っててメモリには入ってないんじゃない?

344 名前:デフォルトの名無しさん mailto:sage [2017/02/04(土) 21:52:37.41 ID:uqEM2LY/.net]
>>335-337
なるほど、勘違いしてました
ありがとうございます

345 名前:デフォルトの名無しさん mailto:sage [2017/02/05(日) 19:35:43.24 ID:ktep0Dpi.net]
>>326
遅くなりすいません
できました
ありがとうございました

346 名前:デフォルトの名無しさん mailto:sage [2017/02/05(日) 22:43:20.73 ID:F2ePDpTS.net]
>337
レジスタがメモリじゃないかのようなアホレスだな

347 名前:デフォルトの名無しさん mailto:sage [2017/02/05(日) 23:03:58.60 ID:wagcFIA6.net]
レジスタのアドレスって・・・

348 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 01:31:32.48 ID:DI3VdQ+9.net]
アドレスのないレジスタはCでアクセスできないからな
アセンブリでしてねになるからね

349 名前:デフォルトの名無しさん [2017/02/06(月) 03:41:00.32 ID:oG8S/cPb.net]
って言うかレジスタ関係なくね?
右辺値に対してアドレス取ろうとしてるから駄目なわけで。

350 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 05:58:55.21 ID:GvVdGH4O.net]
>>334 の質問に対して「右辺値」を出すのは大げさじゃないかな。
もちろん正しいんだけど、詳細に踏み込みすぎというか、
その話はもっと理解が深まってから、というか。

「過去に自分がこの疑問を持ったときに、どんな説明をされたら
すっきり腑に落ちて先に進めただろうか」と思い返しながら回答してるんだろう。

351 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 08:21:18.53 ID:87jFG7WV.net]
そもそも >>338 で本人納得してるのに
> レジスタがメモリじゃないかのようなアホレスだな
とか
> 右辺値に対してアドレス取ろうとしてるから駄目なわけで。
とかは知ったか自慢にしか見えない



352 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 08:58:46.99 ID:L0zP1ki7.net]
間違った説明で相手を納得させておいて開き直りとはこれいかに

353 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 13:17:28.90 ID:WLH8uv6+.net]
>>345
本人の納得は無関係
その二つどっちも誤り

354 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 20:21:28.41 ID:VJg+IRhi.net]
>>345
> その二つどっちも誤り
でもどう誤ってるかは書けないんだよね w

355 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 20:22:09.67 ID:VJg+IRhi.net]
>>348>>347 宛だったわ

356 名前:デフォルトの名無しさん [2017/02/06(月) 20:58:58.36 ID:oG8S/cPb.net]
>>344
でもさ、レジスタって言語と関係ないじゃん?

357 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 21:52:01.05 ID:w07g0Jpo.net]
registerは予約語なのに無関係は無いわ

358 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 22:13:36.15 ID:rtwfNknd.net]
>registerは予約語なのに無関係は無いわ
規格のどこを読んだら「register」キーワードと「レジスター」との関連が読みとれるんだか

359 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 23:29:15.59 ID:w07g0Jpo.net]
規格厨には理解しろと言っても無理だ

360 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 23:45:37.66 ID:+fmEnPzx.net]
>int a = 0;
>int *b = &(1+a);

っていうのが今intになってるからレジスタがどうとか言えるけど
intじゃなくて自分で定義したクラスとかだったらどうなんだって話だな
レジスタだからアドレスが取れないっていう説明はアレすぎないかい?
そもそもレジスタだけで済ませるかどうかはコンパイラの自由ってのもあるし

361 名前:デフォルトの名無しさん mailto:sage [2017/02/06(月) 23:48:30.59 ID:tIYhS76V.net]
一生懸命だなあw



362 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 00:11:08.64 ID:STnejiJM.net]
俺が思うにさ
最適化でレジスタに配置されてメモリに実体が確保されない変数ってのは
普通にありふれているわけじゃないですか
で、それらの変数のアドレスを取得するように
コードを書き換えたら、コンパイルエラーになるんですか?ってね
その場合ちゃんとコンパイラはメモリに実体を作るような動作になる
だからレジスタ云々はオプティマイズの話であって本質的に全く関係ないだろうと
レジスタに配置されているからアドレス取得できませんって意味不明で
だったらメモリに実体を作ればいくらでもアドレス取得できるだろって話なんだよ

どちらかというとこれは変数の寿命の関係でそうなっているんだよ

363 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 00:12:13.25 ID:vsDAW+dO.net]
初心者向けの簡易な説明に外野がつまらない茶々入れて大騒ぎするなよ。

364 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 00:25:30.14 ID:pfKer2X+.net]
>最適化でレジスタに配置されてメモリに実体が確保されない変数ってのは
>普通にありふれているわけじゃないですか

本当にありふれてるのか?

365 名前:デフォルトの名無しさん [2017/02/07(火) 00:48:05.62 ID:PI0qtNzz.net]
winsock(UDP)を使ったプログラムを作っています。
ほぼできたのですが、数100回繰り返すと徐々に通信が
遅くなっていきます。
通信するたびに、オープンとクローズを繰り返しているのですが、
その辺に原因がありそうでしょうか・・・。

366 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 02:25:04.93 ID:e2 ]
[ここ壊れてます]

367 名前:fTv1VF.net mailto: メモリを解放していないから、使用メモリがドンドン大きくなっていくとか?

プロセスの使用メモリを、チェックすれば?
[]
[ここ壊れてます]

368 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 07:22:03.04 ID:ff698yUf.net]
>>354
> そもそもレジスタだけで済ませるかどうかはコンパイラの自由ってのもあるし
その自由さのために言語仕様でできないようにしてるだけでしょ

369 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 07:23:26.33 ID:ff698yUf.net]
>>359
再現性あるならどこが遅くなってるかを調べたら?

370 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 07:43:41.13 ID:AbeSLyAt.net]
>その自由さのために言語仕様でできないようにしてるだけでしょ

根拠は俺の「こうだったらいいな」
この理屈で行くとアドレスをとれる変数は
レジスタに乗せてはいけないことになるな

371 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 11:15:58.10 ID:bjgueVwS.net]
register云々してるやつはCかC++か区別して書け



372 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 11:47:58.10 ID:+LdvU0fQ.net]
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の内部を変えることでアクセスできるようにする方法ない?

373 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 11:52:35.77 ID:Ex9Qk6T0.net]
public:
using A::xxx;

374 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 11:57:42.37 ID:+LdvU0fQ.net]
>>366
おお!yyy()もそれでいけるね。サンクス

375 名前:デフォルトの名無しさん mailto:sage [2017/02/07(火) 19:45:06.55 ID:R+lISOuU.net]
>>364
register変数のアドレスを取る話をしてるわけじゃないのに
いきなりどうした

376 名前:デフォルトの名無しさん mailto:sage [2017/02/08(水) 19:54:01.02 ID:zyGgo9zG.net]
俺,register使ったことないが
register int a = 0;
int *b = &a;
とすると、b経由で割り当てられたCPUレジスタにアクセスできるのか?

377 名前:デフォルトの名無しさん mailto:sage [2017/02/08(水) 20:15:16.32 ID:x9WXoVQQ.net]
cではregister指定された変数のアドレスは取れない
c++では取ってもいいが、取ると普通はレジスタではなくメモリ割り当てになる

そもそもregister指定しても必ずレジスタ割り当てになるわけではない
今のコンパイラの多くはregisterを無視してるらしい

378 名前:デフォルトの名無しさん mailto:sage [2017/02/08(水) 20:21:15.44 ID:6Dg3FALd.net]
>>369
それ面白いけど実装がめちゃくちゃ大変だし、そもそもメリットないだろ

379 名前:デフォルトの名無しさん [2017/02/08(水) 20:38:12.66 ID:Z1e//95W.net]
C++では次のC++17(今年出る予定)から機能削除、かつ将来のためにキーワードは予約だよ

380 名前:デフォルトの名無しさん mailto:sage [2017/02/08(水) 20:41:11.49 ID:039KZGQ+.net]
register int a = 0;
int *b = &a;
これで b が a を格納してるCPUレジスタをポイントすると、
b++ とかした時に、どのレジスタを指すの? て話で困るんじゃないか。

int& b = a;
という具合に参照で受ければ何とか…。

381 名前:デフォルトの名無しさん [2017/02/08(水) 20:43:52.35 ID:Z1e//95W.net]
>>373
そんなの普通の変数だって未定義動作じゃん



382 名前:デフォルトの名無しさん mailto:sage [2017/02/08(水) 20:47:07.07 ID:6Dg3FALd.net]
>>373
> b++ とかした時に、どのレジスタを指すの? て話で困るんじゃないか。
ax 指してたら bx を指すようになる
dx 指してる時に b++ したらお約束の鼻から悪魔でいいだろ

383 名前:デフォルトの名無しさん mailto:sage [2017/02/08(水) 21:02:48.15 ID:x9WXoVQQ.net]
なんでx86前提なんだよ
実際出来ないんだから議論の意味ないが、出来たとしても実装依存だろ

384 名前:デフォルトの名無しさん mailto:sage [2017/02/08(水) 22:06:39.93 ID:r8a3b7fC.net]
>>374
おい馬鹿
int aho{};
int *p{&aho};
p++;
これが未定義動作などと規格のどこに書いてある?

385 名前:デフォルトの名無しさん mailto:sage [2017/02/08(水) 22:23:33.67 ID:t4XC3Oio.net]
p++ が動作未定儀か否かとは関係ない話だと思うが

ポインタの指し先を求めず、ポインタの演算と差分
 int a;
 int* p = &a;
 int* q = p + 1;
 q-p;

で 実体の要素数+1 までは正しく差分が取れることを保障している ってどっかであった記憶

386 名前:デフォルトの名無しさん [2017/02/09(木) 02:31:40.69 ID:lnTHGhne.net]
>>377
>>378
んなこた

387 名前:知っとるわ。どのレジスタを指すのかって言ってんだからポインタの先を参照する事前提だろ?
そうじゃなきゃ単に無理やり割り当てたアドレスに+1にすればいいだけ。指し示す先に何があるかなんて関係ない。
[]
[ここ壊れてます]

388 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 03:48:37.73 ID:WRm++DjL.net]
int i;
int *ip=&i;
ip+1はほんとにあるんかい?
いやあるんだろうけどw

389 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 06:05:01.98 ID:4sYnDBFk.net]
同等なレジスタを32個とか内蔵してて番号で区別する
RISCチップだと不自然でもない気がしてきた。

390 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 06:22:52.94 ID:ZHuRANtU.net]
>>379
>>374 については?
普通の変数だって(指し先参照してないのに)未定儀動作とか言っちゃってるんですけど

391 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 06:42:00.30 ID:RO+sEjyT.net]
>>376
> なんでx86前提なんだよ
お前の言うように実装依存なんだから例に決まってるだろ
68k なら d0, d1, ... ってもっと分かりやすいし他のプロセッサでも適当に決めりゃいいだけ
てか、ネタに突っ込むならもっと面白い奴にしてくれ



392 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 07:01:49.92 ID:RO+sEjyT.net]
>>381
for(register int* r = &_r0; r < &_r32; r++){
*r = 0;
}
で、全レジスタがクリアできるとか便利かも
で r が _r3 辺りに割り当てられててバグるところまでがセットだよな w

393 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 12:57:20.22 ID:DuGTx+Z0.net]
レジスタってそう多くないから別に…
SPARCのレジスタウィンドウ合わせて128個とかならまあ

394 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 14:24:27.76 ID:ZeoIDdik.net]
つ ゼロページレジスタ

395 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 16:59:44.90 ID:m9bylyVb.net]
register int a = 0;
int *b = &a;
としたとき、Cではアドレスが取れないって話だったが、C++では取れる
が、次期規格でregisterは無視されるようになる・・・って話だよね

ま、仮にアドレスを取ったとしても何も問題ないように思うが
というのも、CPUの演算は通常レジスタに対してしかできないし
一方でアドレスが取れるのはメモリにあるものだけなので
普通の変数もレジスタとメモリの間を最新の値が行ったり来たりしているのが通常で
コンパイラは矛盾が起きないようなコードを吐き出すように出来ている
だからregister指定要らないよねって話になってるだろう

そもそも、可能な限りレジスタに配置する、というのがあいまいで
レジスタは有限個なのでregister指定しても必ずしもレジスタのみに配置されるかどうか
分からないしCPUにもよる
ここで、アドレスを取ったらレジスタのみに配置することが出来ないのだから
register指定であっても、「可能な限りレジスタに配置する」が出来ないということで
普通の変数扱いということで問題ない

396 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 17:03:46.90 ID:XjHAaCWU.net]
>次期規格でregisterは無視されるようになる・・・って話だよね

文盲は去れ
長文で荒らすな

397 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 17:18:48.08 ID:m9bylyVb.net]
>372 名前:デフォルトの名無しさん[] 投稿日:2017/02/08(水) 20:38:12.66 ID:Z1e//95W [1/2]
>C++では次のC++17(今年出る予定)から機能削除、かつ将来のためにキーワードは予約だよ

は噓ということ?

398 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 17:24:14.08 ID:WRm++DjL.net]
registerってのを使わなきゃいんでないのw

399 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 17:31:18.93 ID:aUQtcCRM.net]
規格なんて知らんがレスから想像するとこうじゃないのか?

今の規格は「可能ならレジスタに割り当てろ」で、実際のコンパイラは無視してるのが多い
事実上機能してないから次期規格では仕様変えてregister変数やめる

400 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 17:50:34.94 ID:55oKC5Ju.net]
C++ではすでにregisterは無視されてて、17からはエラーになるってことだろ

401 名前:デフォルトの名無しさん [2017/02/09(木) 18:47:17.89 ID:lnTHGhne.net]
C++11の時点でdeprecatedになってて
C++17で書いたらエラーになる
キーワードはいつか規格で何かに再利用するかもしれないから予約したまま(ユーザーが関数名などに使用出来ないまま)。



402 名前:デフォルトの名無しさん [2017/02/09(木) 19:03:26.16 ID:QPpApk6a.net]
https://www.youtube.com/watch?v=quIHgwuF6r4&sns=em

403 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 20:05:28.75 ID:IuYXl6Zl.net]
>>393
registerについては、再利用の可能性というより、混乱の元だから今後は誰も触れてくれるなってところかな。

404 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 20:34:41.55 ID:wAatsUnZ.net]
今、キーワードとして問題ないからそのままにしておくってことだろ
一旦キーワードでなくしてしまうと将来また使いたくなった時に大混乱するから

405 名前:デフォルトの名無しさん mailto:sage [2017/02/09(木) 20:46:05.15 ID:WRm++DjL.net]
C++17なんてもあるのか。 ついてけんわぁ

406 名前:デフォルトの名無しさん mailto:sage [2017/02/10(金) 12:36:17.18 ID:yPTk9ivW.net]
register使うなら今のうち

407 名前:デフォルトの名無しさん mailto:sage [2017/02/10(金) 16:29:47.71 ID:gDFEqThI.net]
C++17以降のregisterは、ガチャガチャチーン!とbeep音を鳴らします

408 名前:デフォルトの名無しさん mailto:sage [2017/02/11(土) 17:45:33.84 ID:B6KA1QDA.net]
Mingwのgccでこんなのためしたら結構はやくなるのね。C++だと速度変わらんかったけど。
#include <windows.h>
#include <stdio.h>
int main(void) {
register int i;
DWORD t;
t = GetTickCount();
for(i=0 ; i <100000000 ; i++);
printf("%d\n",(int)(GetTickCount()-t));
return 0;
}

409 名前:デフォルトの名無しさん mailto:sage [2017/02/11(土) 17:50:28.59 ID:o1zrWG0U.net]
registerネタどんだけ続けるんだ

410 名前:デフォルトの名無しさん mailto:sage [2017/02/11(土) 18:02:59.72 ID:Ka66uAeU.net]
>int main(void) {
> register int i;

変数を先頭で宣言しないと精神の安定が保てない病気

411 名前:デフォルトの名無しさん mailto:sage [2017/02/11(土) 18:27:32.77 ID:2x1BPms4.net]
っくっだらないとこでも叩いておかないと精神の安定が保てない病気



412 名前:デフォルトの名無しさん mailto:sage [2017/02/11(土) 18:51:03.55 ID:jl0P82O4.net]
インデントや{}のスペース・改行でも自分のやり方と違うと喚きそうだなw

413 名前:デフォルトの名無しさん mailto:sage [2017/02/11(土) 19:53:33.79 ID:7HNC8OW9.net]
>>404
違和感がでるよね。
会社でこれがうちのスタイルって強制され、それになじむと
そうじゃないスタイルのものは気持ち悪いって感じるようになった

>for(i=0 ; i <100000000 ; i++);
最近のコンパイラはまじめにやらないで、コンパイル時にiは使ってないあるね
処理省くニダってして実行コード生成してなさそうな気がするが。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<267KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef