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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.89【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1390171944/
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

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

hogeは禁止します、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
なお、hogeはNGワードに追加しておくことが強く推奨されています。
2デフォルトの名無しさん:2014/03/25(火) 00:46:37.60 ID:VoemgV7u
----テンプレここまで-----
3デフォルトの名無しさん:2014/03/25(火) 00:49:06.88 ID:bvFcvrs8
このスレで質問することを禁ずる
4デフォルトの名無しさん:2014/03/25(火) 00:49:55.79 ID:VoemgV7u
↑ いつものボット
5デフォルトの名無しさん:2014/03/25(火) 00:56:06.42 ID:bvFcvrs8
このスレで質問するってことは無能である何よりの証拠
6デフォルトの名無しさん:2014/03/25(火) 08:45:20.17 ID:b1DcnFZ1
>>1
7デフォルトの名無しさん:2014/03/25(火) 18:57:42.36 ID:mtUgnBBf
新スレhoge記念
8デフォルトの名無しさん:2014/03/25(火) 21:01:46.39 ID:A1lqZyhT
hogeは禁止されていません
自由に使って構いません
9デフォルトの名無しさん:2014/03/26(水) 00:51:02.53 ID:oexEF2Zl
ここはhogeスレニダ。ウリのスレニダ
10デフォルトの名無しさん:2014/03/27(木) 21:24:22.59 ID:bJmMH0bS
私はBorland C++を使ってプログラミングしているのですが、
makefileの使い方が分かりません。
どなたか教えてくれませんか?
11片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/27(木) 21:55:02.97 ID:pkdNwHUQ
>>10
Makefileがあるコマンドラインでmakeまたはmake -f Makefileを実行すると、ビルドが開始される。
make cleanでコンパイル後のオブジェクトをきれいさっぱり消す。
make (ルール名)でMakefileに書かれたルールを実行する。ルールは次のように記述する:

ルール: 必要なファイルのスペース区切り
<タブ文字>実行するコマンド

詳しくは附属のヘルプを見ろ
12デフォルトの名無しさん:2014/03/27(木) 21:55:09.35 ID:iFr+67KQ
make
と入力してEnterをおします
13デフォルトの名無しさん:2014/03/27(木) 21:58:54.48 ID:pkdNwHUQ
(誤)Makefileがあるコマンドライン
(正)Makefileがあるフォルダのコマンドプロンプト
14デフォルトの名無しさん:2014/03/27(木) 22:02:28.05 ID:hIRwfa74
>Makefileがあるフォルダのコマンドプロンプト

日本語でおk
15デフォルトの名無しさん:2014/03/27(木) 22:08:24.63 ID:pkdNwHUQ
コマンドプロンプトを開いて、CDコマンドとドライブ指定でMakefileのあるフォルダに移動して(以下略)

古くないWindowsならShift+フォルダ右クリックでコマンドプロンプトが開ける
16デフォルトの名無しさん:2014/03/27(木) 22:10:06.86 ID:bJmMH0bS
コマンドプロンプトはスタートを押すと出てくるプログラムですか?

makefileというファイルに以下のように記述しました。

#
# Borland社のBorland-C++コンパイラ用のMakefile
#
CC=bcc
#
# フラグ
# -N -- スタックオーバーフローのチェック
# -v -- デバッグ可能
# -w -- すべての警告をオンにする
# -ml -- ラージモデル
#
CFLAGS=-N -v -w -ml

calc1.exe: calc1.c
$(CC) $(CFLAGS) -ecalc1 calc1.c

clean:
erase calc1.exe
17デフォルトの名無しさん:2014/03/27(木) 22:14:20.02 ID:pkdNwHUQ
Borlandが古すぎる。BccInstでBCC55をインストールして使え
18デフォルトの名無しさん:2014/03/27(木) 22:18:41.99 ID:pkdNwHUQ
コマンドプロンプトは、コマンドが入力できる黒い画面。古いWindowsならDOSプロンプト
19デフォルトの名無しさん:2014/03/27(木) 22:23:05.34 ID:pkdNwHUQ
何でそんな古いコンパイラ使ってるの? 馬鹿にされるよ
20デフォルトの名無しさん:2014/03/27(木) 22:23:47.82 ID:bJmMH0bS
ドライブ指定してmakefileに移動しようとしたら
「ディレクトリ名が無効です」になります。
21デフォルトの名無しさん:2014/03/27(木) 22:24:52.62 ID:lIcuNLQ3
もうvisualstudio入れろよ
今更そんな古い環境使うとか苦行だろ
22デフォルトの名無しさん:2014/03/27(木) 22:25:13.90 ID:pkdNwHUQ
「makefileに移動」じゃなくて「makefileのあるフォルダに移動」だよ
23デフォルトの名無しさん:2014/03/27(木) 22:28:10.86 ID:bJmMH0bS
makeを入力すると、
'make'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたバッチファイルとして認識されません
とでます。
24デフォルトの名無しさん:2014/03/27(木) 22:28:38.98 ID:pkdNwHUQ
別のドライブに移動したいときは「D:」のように入力してEnter
25デフォルトの名無しさん:2014/03/27(木) 22:31:28.19 ID:ErFGKncP
パス通ってないだろ
26デフォルトの名無しさん:2014/03/27(木) 22:32:03.27 ID:pkdNwHUQ
>>23
bccのインストールができてない。
まずは環境変数PATHを設定する。
「SET PATH=%PATH%;bccのあるフォルダへのパス」
27デフォルトの名無しさん:2014/03/27(木) 22:33:02.94 ID:V0dGQBZu
>>23
プログラムの前にDOSの勉強をしろ
28デフォルトの名無しさん:2014/03/27(木) 22:41:07.96 ID:pkdNwHUQ
古い!! ふるすぎる。。。(藁)
お前はそれでも地球人か!!!
29デフォルトの名無しさん:2014/03/27(木) 22:44:32.34 ID:bJmMH0bS
インストールしました。
makeを押しても何の反応もありませんが。
30デフォルトの名無しさん:2014/03/27(木) 22:46:00.71 ID:lIcuNLQ3
ダメだこいつ…
31デフォルトの名無しさん:2014/03/27(木) 22:47:11.61 ID:pkdNwHUQ
エラーメッセージがなく、EXEが作成されてれば成功。
32デフォルトの名無しさん:2014/03/27(木) 22:47:17.82 ID:bJmMH0bS
Copyrightが出てくるだけです。
33デフォルトの名無しさん:2014/03/27(木) 22:50:45.73 ID:pkdNwHUQ
タブ文字って知ってる?
34デフォルトの名無しさん:2014/03/27(木) 22:51:15.73 ID:bJmMH0bS
.exeは対象のプログラム名で出てくるのでしょうか?
それとも、makefile.exeのように出てくるのでしょうか?
35デフォルトの名無しさん:2014/03/27(木) 22:53:22.32 ID:bJmMH0bS
タブ文字・・・分かりません。
makefileに書く書式でしょうか?
36デフォルトの名無しさん:2014/03/27(木) 22:58:18.30 ID:bJmMH0bS
タブ文字調べました。
プログラムのスペース文字のことですね。
37デフォルトの名無しさん:2014/03/27(木) 23:04:46.62 ID:pkdNwHUQ
キーボードの左側にあるTabというキーを打つと入力できる。
Makefile中のコマンドの前にはTab文字を入力しないといけない。
「CD」で現在のフォルダの場所(パス)を確認しろ。calc1.cを右クリックプロパティで場所を確認しろ。
38デフォルトの名無しさん:2014/03/27(木) 23:15:12.68 ID:iFr+67KQ
Tabをおしてもタブ文字がはいらなかった場合は…
たとえば、4個の半角空白を\tに置換します
しかしそれができるエディタなら、タブ文字がはいるだろう
39デフォルトの名無しさん:2014/03/27(木) 23:19:21.00 ID:bJmMH0bS
Tabで打ってませんでした。
パスとcalc1.cの場所は同じです。
40デフォルトの名無しさん:2014/03/27(木) 23:22:14.63 ID:pkdNwHUQ
「DIR /W」した結果をここに貼れや

MakefileがMakefile.txtになってる可能性があるな
41デフォルトの名無しさん:2014/03/27(木) 23:27:47.79 ID:bJmMH0bS
拡張子はつけてません
42デフォルトの名無しさん:2014/03/27(木) 23:30:50.82 ID:pkdNwHUQ
Makefileは同じ場所にある?
念のために「DIR」して確認してくれ。
43デフォルトの名無しさん:2014/03/27(木) 23:36:59.26 ID:TRNtuGkP
uuエンコードしてup
44デフォルトの名無しさん:2014/03/27(木) 23:39:08.03 ID:bJmMH0bS
同じ場所にあります。
45デフォルトの名無しさん:2014/03/27(木) 23:39:22.57 ID:LrW8OE+k
俺、子供の頃地球に住んでたことあるよ。
46デフォルトの名無しさん:2014/03/27(木) 23:40:29.85 ID:fqEnNET5
>>24
変なこと教えるなよ。
ドライブごとのカレントフォルダーは
今となっては誰も欲してない機能なんだから
cd /d 移動先のパス
にしとけ。
47デフォルトの名無しさん:2014/03/27(木) 23:45:04.99 ID:pkdNwHUQ
フォルダをZIP圧縮してアップローダーにアップロードしろ
48デフォルトの名無しさん:2014/03/27(木) 23:55:18.99 ID:pkdNwHUQ
古過ぎるコンパイラは馬鹿には無理。
49デフォルトの名無しさん:2014/03/27(木) 23:58:38.08 ID:pkdNwHUQ
It is impossible for fools to use too old compilers.
50デフォルトの名無しさん:2014/03/28(金) 00:02:57.04 ID:CsDGXoI3
BorlandっていまやWin最強のコンパイラーだろ?
Clangになって一番すごいWinのコンパイラーに進化したらしいよな
51デフォルトの名無しさん:2014/03/28(金) 00:41:16.94 ID:yDdY0uS3
VC++ EEじゃあかんのか
52デフォルトの名無しさん:2014/03/28(金) 00:52:34.68 ID:vM8zXvpO
次のように表示されます。

bcc -N -v -w -ml -ecalc1 calc1.c
'bcc'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。
** error 1 ** deleting calc1.exe
53デフォルトの名無しさん:2014/03/28(金) 01:08:29.53 ID:a5++l4GP
>>52
じゃあパスが通ってないんだろう、環境変数のpathnの項を弄れ
やり方? bccの使い方を説明するサイトとか本にはだいたい載ってるだろと
54デフォルトの名無しさん:2014/03/28(金) 01:09:57.34 ID:CsDGXoI3
>>52
違う,いまのBorlandは
clang -o calc1.exe calc1.c
55デフォルトの名無しさん:2014/03/28(金) 01:12:20.51 ID:CsDGXoI3
>>53
Borlandにはbccなんてのはないから、当然>>52になる
56デフォルトの名無しさん:2014/03/28(金) 01:15:11.69 ID:CsDGXoI3
おそらく、bccってやってるぐらいだからコンパイラ・リンカーのcfg設定すら出来てないだろうな
57デフォルトの名無しさん:2014/03/28(金) 01:21:27.24 ID:ZLrJM0xQ
とりあえずフルパスでやってみろよ
58デフォルトの名無しさん:2014/03/28(金) 01:27:34.35 ID:vM8zXvpO
cfg設定はしてます。
makeを入力すると52のように表示されます。
59デフォルトの名無しさん:2014/03/28(金) 01:29:03.46 ID:vM8zXvpO
makefileは>>16のように記述したのですが間違っていますか?
60デフォルトの名無しさん:2014/03/28(金) 02:01:11.81 ID:vM8zXvpO
CC=bcc32
に書き換えたら行けました。
そしたら今度は
コマンドオプションの間違い -ml
というエラーが出ました。
-mlをとってmakeをしたら上手くいきました。ラージモデル-mlは認識されていないのでしょうか?
教科書通りにしてるのにおかしいですね。
61デフォルトの名無しさん:2014/03/28(金) 02:34:35.65 ID:Bi202b4z
>>60
俺Winの知識ないって自慢し過ぎ
bcc32に限らずwinのコマンドのオプションリスト表示すら出したことないだろ
winの経験が少しあれば普通はオプションリスト表示オプションを付けて起動して、
どんなオプション付けられ、それが何をするのか調べることぐらい出来ると思うが
winの場合のオプションリスト表示は /? ってのが普通(常識)
62デフォルトの名無しさん:2014/03/28(金) 02:42:52.86 ID:oiG2WFSt
スモールモデル、ラージモデルは、16ビットの時代
63デフォルトの名無しさん:2014/03/28(金) 02:51:20.42 ID:Bi202b4z
>>62
16bitとはおいおいすぎ><
16bitのプログラムを開発したいから、わざわざBorlandを選んだのかな
64デフォルトの名無しさん:2014/03/28(金) 05:13:02.52 ID:FWVtOBdw
つーか、おまえらバカにして遊んでるだけだろ
65デフォルトの名無しさん:2014/03/28(金) 10:06:39.77 ID:6uoLiniK
とんでもない。
馬鹿になんてしてないよ。
遊んでいることは否定しないけど。
66デフォルトの名無しさん:2014/03/28(金) 11:40:09.31 ID:dRXuKu/3
>>64
そりゃsizeofをプリプロセッサが処理するような処理系を好んで使うような奴だもの
67デフォルトの名無しさん:2014/03/28(金) 11:52:19.86 ID:WLy6H0qs
やっぱりねw
68デフォルトの名無しさん:2014/03/28(金) 12:29:41.58 ID:dy0OpFC/
>>64
bccに-mlでバージョン出さない時点で普通に古いコンパイラを前提にするだろ
69デフォルトの名無しさん:2014/03/28(金) 13:04:27.64 ID:RWL6RT/i
明示するだろ、JK
70デフォルトの名無しさん:2014/03/28(金) 17:42:32.13 ID:vM8zXvpO
>>61
オプションリスト表示はどのように開くのでしょうか?
コマンドプロンプトに/?を入力しても反映されません。
71デフォルトの名無しさん:2014/03/28(金) 18:40:43.95 ID:YNdMan3y
単に
bcc32
と入力してEnterをおします

むかしBorland C++Builder バージョン5か6のおまけとして
コマンドラインコンパイラのオプションの表が付属していました。
それと異なります。たぶん全部を表示しないと思われます
72デフォルトの名無しさん:2014/03/28(金) 18:47:27.10 ID:YNdMan3y
>>19
いいコンパイラだよ
73デフォルトの名無しさん:2014/03/28(金) 18:50:58.97 ID:YNdMan3y
calc1.cってなに?
74デフォルトの名無しさん:2014/03/28(金) 21:02:05.81 ID:vM8zXvpO
>>71
表示されました。ありがとうございます。

>>73
今、オライリーのC実践プログラミングという教科書を使用しているのですが、
その中に例として出ているプログラムです。
75 ◆QZaw55cn4c :2014/03/28(金) 21:16:01.34 ID:oXAQt7Rw
>>72
そうそう、コードガードはわりと便利、評価版をダウンロードすればいいし
76デフォルトの名無しさん:2014/03/29(土) 12:43:43.99 ID:OMABeBxL
本が古いなら、それに環境をあわせないと。
煽られているように、とりまそれ最新じゃないよ

時代は便利になったんだ。
codepad, ideone もあるよ。 >>1
77デフォルトの名無しさん:2014/03/29(土) 12:48:33.82 ID:T0jzXlJE
>>76
いわゆる分割コンパイルにも対応してほしいな、makefile いれとけるとか
78デフォルトの名無しさん:2014/04/01(火) 18:44:18.29 ID:zkzJISd4
C++の基礎だけかじって、GUIプログラムも作ってみたいと思ってVisualStudioを触ってみると、様相がだいぶ違って困惑しています。
2つ教えてください。
1つ目
まず、MFCで自動作成されたソースファイルを見てもmain()?winmain()?_tmain()?すら見つかりません。
イベントドリブンだから、初期化とそれぞれのイベントに対応した部分以外は触る必要がないので隠されているのでしょうか?
なんとなくでも全体の流れを把握したいのでmain()にあたる部分を見たいのですが、どこに置いてあるのでしょうか?

2つ目
VisualStudioで作成したソースを、フリーで落とせる、C++の勉強に使っていたようなC++コンパイラでコンパイルすることはできるのでしょうか?
複数のファイルに分かれたようなプログラムを書いたことがないのでmakefileとかもよくわかってはいないし、目的があって他のコンパイラを使いたいわけでもないのですが、
VisualStudioで作成したソースはVisualStudioを使わないとコンパイルできない特殊な仕様なのか、
(ファイル間の関係を理解して正しくmakefileを書けば)あくまで普通のC++の仕様に従った、一般的なコンパイラが理解できるソースを作成しているのか知りたいと思っています。
79片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/01(火) 19:06:36.07 ID:28c8XDsv
1つめ。WinMain関数は自動リンクされるライブラリに含まれている。
有料VC++がインストールされているフォルダのどこかにMFCのソースがある。
初心者には膨大なのでgrepを使いこなさないと読めない。
WinMainとCWinAppを読めば動作がわかる。
2つめ。ソースプログラムやコンパイラによる。ソースがC++11なら
C++11に準拠したコンパイラでなければ使えない。
80デフォルトの名無しさん:2014/04/01(火) 19:14:53.77 ID:KWNjZyFY
1つめはステップインで開始すればいい
81デフォルトの名無しさん:2014/04/01(火) 19:45:25.44 ID:28c8XDsv
ヒント:C:\Program Files
82デフォルトの名無しさん:2014/04/01(火) 19:53:07.99 ID:CqvqfScs
>>78
とりあえずVC++ExpressEdition触ってみたらいいと思う
83デフォルトの名無しさん:2014/04/01(火) 20:06:30.50 ID:hppE64Hw
rc とか mc が無いとguiは難しいでしょうね
84デフォルトの名無しさん:2014/04/01(火) 20:27:34.83 ID:PR3x9no5
>>82
素で言っているのか
85デフォルトの名無しさん:2014/04/01(火) 20:34:07.93 ID:CqvqfScs
>>84
初期プロジェクトで既にウィンドウ生成までできてるから
流れ見るのならいけるんじゃね?
関数はもちろん調べながら
86デフォルトの名無しさん:2014/04/01(火) 20:53:33.69 ID:eefQLiAy
>>82
VCでGUIソフトとなるとMFC使えないExpressは苦行だろ
MFCじゃなくてQtなら良いが
87デフォルトの名無しさん:2014/04/01(火) 20:58:12.28 ID:eyBPHv5q
今時MFCとかMやな
88デフォルトの名無しさん:2014/04/01(火) 21:00:40.54 ID:zkzJISd4
レスありがとうございます。
ステップインで見てみると、appmodul.cppというファイルに_tWinMain()があり、そこからさらに
winmain.cppというファイル内のAfxWinMain()が呼ばれているようでした。
いきなり理解するのは難しそうですが、おいおい見ていこうかと思います。

ところで>>82でVC++ExpressEditionを薦めていただきましたが、製品版とは何か違うのでしょうか?
今使っているのはDreamSparkで手に入れたVisualStudio2013を使っていますが、旧版やExpressEditionのダウンロードも可能です。
VisualStudio2013の情報はぐぐった限りまだ少ないので旧版を使った方がいいような気もしてます。
89デフォルトの名無しさん:2014/04/01(火) 21:02:18.77 ID:28c8XDsv
製品版あるなら製品版だけでいいよ
90デフォルトの名無しさん:2014/04/01(火) 21:03:43.90 ID:28c8XDsv
expressは製品版に比べ機能が少ない
91デフォルトの名無しさん:2014/04/01(火) 21:47:13.30 ID:BTv6StGE
製品版よりちょっと動作が軽い
92デフォルトの名無しさん:2014/04/01(火) 22:13:30.10 ID:q8+ciQV2
MFCが付いてない
93デフォルトの名無しさん:2014/04/01(火) 22:27:29.90 ID:CqvqfScs
>>87
VS2013触った事ないからわからんけど
フォームアプリケーションじゃなくてwin32アプリケーションがあればそれでソース見れるんじゃない?

> なんとなくでも全体の流れを把握したいのでmain()にあたる部分を見たい
こういう事かな ttp://msdn.microsoft.com/ja-jp/library/bb384843.aspx
94デフォルトの名無しさん:2014/04/01(火) 23:04:38.46 ID:JvY411Bp
Expressに無料版MFCでいいじゃん。
ATLの方が簡単だけどな。
95デフォルトの名無しさん:2014/04/01(火) 23:46:31.78 ID:q8+ciQV2
無料MFCて何の事だよ
96デフォルトの名無しさん:2014/04/02(水) 17:38:29.47 ID:SfgYmxWg
それっぽい単語を並べただけなのでマジレスしないでください
97デフォルトの名無しさん:2014/04/02(水) 19:39:44.52 ID:aNx9C+Mf
>>95はモグリ
98片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/03(木) 12:52:10.02 ID:lJqirrU9
99デフォルトの名無しさん:2014/04/03(木) 15:33:05.57 ID:BFyxuILc
てっきりMZCが出てくる流れかと思ったがそうじゃなかったw
100デフォルトの名無しさん:2014/04/04(金) 15:36:27.65 ID:QN8rMztS
マルチコアへの対応って、AfxBeginThreadでマルチスレッドにしたらOSが勝手にコアごとに振り分けてくれるという認識であってる?
ググるとParallelクラスがあるけど、ネイティブでは使えないっぽい。
101デフォルトの名無しさん:2014/04/04(金) 16:48:02.82 ID:nM83ZP3Z
AfxBeginThreadはある関数を新しいスレッドで開始するだけだから、
parallel forみたいなことをしたい場合は、
自分で各スレッドのforの範囲を決めたり、
スレッドが終了するのを自分で待ったりする必要がある。

ネイティブで使えるパラレルライブラリはちゃんと入っているから探すべし。
102デフォルトの名無しさん:2014/04/04(金) 19:59:43.18 ID:ZtsQOPBg
マルチコアまともに扱いたいならMFCなんか使わんやろ
103デフォルトの名無しさん:2014/04/04(金) 20:06:44.55 ID:2QttofMo
OpenMPは楽して並列化させたい場合に威力を発揮するな
……OpenACCが使えるCompilerってフリーに無かったっけ?
104デフォルトの名無しさん:2014/04/04(金) 20:41:28.03 ID:DD5EG69p
マルチコアを真面目に使いたいときに
GUIフレームワークをわざわざ変える奴は
マトモな設計が出来ない奴
105デフォルトの名無しさん:2014/04/04(金) 20:43:23.33 ID:eu/rYsXw
MFC関係ないよね
106デフォルトの名無しさん:2014/04/04(金) 20:59:32.67 ID:UDPO/kAP
儂もそう思う。が、未だに世に知られていない新理論を
構築済みなのかも知れないのでもう少し語らせてみたいです。
107デフォルトの名無しさん:2014/04/04(金) 23:36:48.04 ID:QN8rMztS
>>101
OpenMPとかPPLとかBoostとかいろいろあるんだな
調べてみるよありがとう
108デフォルトの名無しさん:2014/04/05(土) 00:52:05.63 ID:Z9uNYFZQ
char なら printf
w_char なら wprintf
TCHAR なら _tprintf
だと思うのですが、どうして三番目のやつは先頭に _ が付くのでしょうか?
109デフォルトの名無しさん:2014/04/05(土) 00:56:55.10 ID:JxLvhIna
マクロって_MAX_PATHとか付くやん
110デフォルトの名無しさん:2014/04/05(土) 01:50:54.62 ID:EG+AV0eK
標準規格にはないWindows用の独自拡張だから
111デフォルトの名無しさん:2014/04/05(土) 02:16:53.63 ID:goifYp5b
コンパイラメーカーや、ライブラリの作者は、_を多用します
プログラマは、先頭に、_をつかわないようにします(おれは、そういわれた)
112デフォルトの名無しさん:2014/04/05(土) 02:21:01.16 ID:zHyV6h3a
>>111
俺もC言語辞典(古い)でそれ見た
113デフォルトの名無しさん:2014/04/05(土) 02:47:32.13 ID:oiRFlfhh
>>100だけど、とりあえず何もしないループ回してCPU使用率見たら、特にマルチスレッド処理してないのに複数コアが仕事してるみたいだった。
マルチスレッドを意識してプログラムしなくてもwindows8は賢いからある程度勝手に対応してくれるのか?
かといって全コアが100%に張り付くというわけでもなく、60%弱くらいでよくわからん。

これを回しただけなんだけど
for (int j = 0; j < 100000; j++){
for (int i = 0; i < 100000; i++){}
}
114デフォルトの名無しさん:2014/04/05(土) 03:30:05.84 ID:zHyV6h3a
>>113
空ループって最適化したら消えるんじゃねーの?
それ以前に裏で別のプロセス走ってるとか
コンパイラの自動並列化が効いちゃったとかのオチな気がする
115デフォルトの名無しさん:2014/04/05(土) 03:59:45.28 ID:JxLvhIna
>>113
1コアの100% =
2コアの50% =
4コアの25%
116デフォルトの名無しさん:2014/04/05(土) 04:09:44.16 ID:4p3tjfYN
よくわからないがシングルスレッド高負荷処理で
同一コアと思われるハイパースレッディングの
論理CPUペアが50%ずつ(たまに60+40の非対称)
になるのはWindowsでよくあること。
表示が間違ってるのではないかと思ってるけど
117デフォルトの名無しさん:2014/04/05(土) 11:56:14.14 ID:oiRFlfhh
コンパイラの自動並列化がそれっぽい、便利なんだな
もっと詳しくならないとマルチコアとか考えるだけ無駄ってことか……
118デフォルトの名無しさん:2014/04/05(土) 12:06:18.53 ID:Vwyio/wC
マルチコアとマルチスレッドはべつ。
シングルスレッド・プログラムでも、OSがマルチコア使うかもしれないし
マルチスレッド・プログラムでも、OSが1コアしか使わないかもしれない。
プログラマが出来るのは主にスレッド管理だけ。
119デフォルトの名無しさん:2014/04/05(土) 12:07:27.06 ID:zHyV6h3a
120デフォルトの名無しさん:2014/04/05(土) 12:10:33.92 ID:Vra9QIvI
にほんごでおk
121デフォルトの名無しさん:2014/04/05(土) 12:59:48.48 ID:zqI4wR1v
>>113
「マルチスレッドにすると勝手にコアごとに割り付けてくれる」ってのは正しい
正確には割り付けるんじゃなく、並列に実行される。

CPU使用率は、ツールやコマンドによって計算方法が違っている場合がある。
例えば4コアの場合、全CPUをフルで使った場合100%と表示するか、400%と表示するかはツール次第。
122デフォルトの名無しさん:2014/04/05(土) 13:32:33.53 ID:Gtcr4gqx
構造体を動的に生成したいのですが、このやりかたでよろしいでしょうか?
http://ideone.com/Yr4XRf
123片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/05(土) 13:35:36.03 ID:pKk9GxNe
>>122
型名の始めは大文字にしたほうがいいね。
124デフォルトの名無しさん:2014/04/05(土) 13:38:16.05 ID:Gtcr4gqx
>>123
そうですね^^

型名以外には何か問題点とかありますか?
125デフォルトの名無しさん:2014/04/05(土) 13:38:47.30 ID:NnouwwX7
はい
126デフォルトの名無しさん:2014/04/05(土) 13:39:59.09 ID:Gtcr4gqx
>>125
具体的にはどのような?
127デフォルトの名無しさん:2014/04/05(土) 13:42:36.52 ID:30x58bFF
このやりかたでよろしいでしょうか?
はい
後何が必要なのか?
128デフォルトの名無しさん:2014/04/05(土) 13:44:42.90 ID:Gtcr4gqx
>>127
ポインタの扱いが苦手でして
一応コンパイラもエラー吐かなかったので大丈夫みたいですがなにぶん心配性なもんで・・・
129デフォルトの名無しさん:2014/04/05(土) 13:50:24.60 ID:/rC4NDRr
>>128
で?
130片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/05(土) 14:03:30.11 ID:pKk9GxNe
>>129
次のコード書いてみて。
131デフォルトの名無しさん:2014/04/05(土) 15:18:00.60 ID:N2+78ftB
>>108
願望
132デフォルトの名無しさん:2014/04/05(土) 15:21:03.39 ID:zHyV6h3a
>>122
そもそも構造体のメンバ変数が1つだけって……
動的確保してるのにその個数が定数値って……

例:http://codepad.org/l9spLfkF
133デフォルトの名無しさん:2014/04/05(土) 15:22:25.93 ID:zHyV6h3a
おっとfreeを忘れてた……
http://codepad.org/3ZiOa4oN
134デフォルトの名無しさん:2014/04/05(土) 15:23:25.39 ID:JxLvhIna
>>132
例だから別にいいだろ
135デフォルトの名無しさん:2014/04/05(土) 15:53:12.52 ID:Vra9QIvI
ライブラリとかで予め決まっている名前以外は _ をつけるべきじゃない

typedef struct 〜 の書式で宣言するなら struct の後のタグ名は不要
おまじない気分でつけるものじゃない

何よりまず、obj001からobj002にコピーしている意味がわからない
この後 obj002を使おうとしていますというオチじゃないかと非常に気持ち悪い
136デフォルトの名無しさん:2014/04/05(土) 15:55:30.71 ID:Vra9QIvI
×ライブラリとかで予め決まっている名前以外は _ をつけるべきじゃない
○ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない
137デフォルトの名無しさん:2014/04/05(土) 15:55:38.93 ID:PXTTIzjC
> 何よりまず、obj001からobj002にコピーしている意味がわからない

いや、その点はどうでもいだろw
ポインタの勉強するときそういう代入してみるのってよくあることだろ。
138デフォルトの名無しさん:2014/04/05(土) 16:15:50.31 ID:JxLvhIna
本題以外にケチつける奴はただ優越感に浸りたいだけ
浸れてないけど
139デフォルトの名無しさん:2014/04/05(土) 16:21:18.84 ID:LokGB3M7
×ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない
○ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない、というのが持論です
140デフォルトの名無しさん:2014/04/05(土) 17:03:41.01 ID:Vra9QIvI
改めて見直してみたらいろいろな慣習とか規約があるみたいだな
よし、今日のところは引き分けにしておいてやる
141デフォルトの名無しさん:2014/04/05(土) 17:55:33.89 ID:YrLzJmoN
sprt使わずにdistance名乗るか
142デフォルトの名無しさん:2014/04/05(土) 18:38:06.46 ID:zqI4wR1v
>>123
え?なんで型名を大文字で始めるの
定数と間違えてない?
143デフォルトの名無しさん:2014/04/05(土) 19:04:31.24 ID:zHyV6h3a
>>141
実用上はいちいちsqrtしないだろ?

……ごめんなさい忘れてただけです
144片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/05(土) 19:22:03.80 ID:kCbCwa1D
>>142
例えばDogという型名とdogという変数名が衝突しないから、分かりやすいコードが書ける。
145デフォルトの名無しさん:2014/04/05(土) 19:35:59.53 ID:zqI4wR1v
>>144
うん。そうです。自分が勘違いしていました・・・
146デフォルトの名無しさん:2014/04/05(土) 22:27:29.57 ID:pxBAHja5
型名と変数名が衝突しないルールなどこの世に無数にあるのに、
自分の使ってるルールがさも普遍的に良いものであるかのような
ミスリードをする奴の言うことなど真に受けてはいけない
147デフォルトの名無しさん:2014/04/05(土) 22:45:29.81 ID:JxLvhIna
char cszBuff
TCHAR tszBuff
int nCount
UINT unCount

typedef struct tagStructName{
} T_STRUCTNAME;

いろいろやってみて自分が納得行くの使ったらいいんや
148デフォルトの名無しさん:2014/04/05(土) 23:56:57.72 ID:d+kzfy0R
>>147
システムハンガリアンさんちーす
まだ絶滅してなかったんすね!
頑張ってくださいね!
149デフォルトの名無しさん:2014/04/06(日) 03:16:28.05 ID:PoyortF4
> 型名と変数名が衝突しないルールなどこの世に無数にあるのに、

ルール以前に、文法で型名と集成体タグ名と変数名は衝突し得ないんじゃね?
http://ideone.com/srhSui

あと、typedefされた型名って_tってサフィックスつけるのが一般的だと思うんだけど
これもローカルなルールなんやろか
150デフォルトの名無しさん:2014/04/06(日) 03:33:10.66 ID:v5F7vKVc
>>149
そのとおりだねえ
ISO/IEC 9899:1999 6.2.1p1
An identifier can denote an object; a function; a tag or a member of a structure, union, or
enumeration; a typedef name; a label name; a macro name; or a macro parameter.

集成体タグと typedef 名と変数は異なる名前空間だね
151デフォルトの名無しさん:2014/04/06(日) 03:39:44.68 ID:lcQBK2Mz
>>149
http://en.wikipedia.org/wiki/Typedef
によると、POSIXでは _t サフィックスは typedef の名前にリザーブされていて、それゆえ
名前が衝突しないようにユーザが定義する typedef には _t を使わないほうがいいらしい
152デフォルトの名無しさん:2014/04/06(日) 03:53:44.87 ID:PoyortF4
>>150
規約での確認、dです

>>151
> Such type names are reserved by POSIX for future extensions and should generally be avoided for user defined types.
…マジっすか orz
153デフォルトの名無しさん:2014/04/06(日) 04:43:31.25 ID:7TI60JXf
衝突ってのはコンパイルエラーではなくて
人が目で見て区別がつきやすいよう
同じ綴りを避けるって話だろうに
アスペなおまいらは
154デフォルトの名無しさん:2014/04/06(日) 07:44:06.37 ID:AUPUS+0I
>>153
人の目で区別する必要があるシチュエーションってどんなの?
155デフォルトの名無しさん:2014/04/06(日) 11:01:21.41 ID:Gd53X1PX
>>153
よほど糞な開発環境なんだなお前
156デフォルトの名無しさん:2014/04/06(日) 11:52:04.47 ID:gdJCg3c2
あえて言おう
処理系指定で組めばおk
初心者なんだろ、何か組みあがった快感って大事だぞ
157デフォルトの名無しさん:2014/04/06(日) 12:09:44.18 ID:BmjYK//+
別のものには違う名前を使うもので
名前を使い回すなって当たり前のことだろ
どんだけ馬鹿なんだおまえら
158デフォルトの名無しさん:2014/04/06(日) 12:18:02.39 ID:PoyortF4
流れぶったぎりでスマソ
_tサフィックスのことは、下にも書かれてたよorz
ttp://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_02_02
159デフォルトの名無しさん:2014/04/06(日) 13:36:30.63 ID:9b0FkJFr
>Such type names are reserved by POSIX

本当にWikiは嘘だらけだな
byだと適用範囲がPOSIXでなくC全般と読めてしまう
160デフォルトの名無しさん:2014/04/06(日) 15:47:59.42 ID:PoyortF4
byよりinの方が良いかもね…スレチだけど
161デフォルトの名無しさん:2014/04/06(日) 16:35:16.36 ID:5rOAt6qX
>>159-160
Wikiなんだから編集できるんじゃねーの?
162デフォルトの名無しさん:2014/04/06(日) 16:39:48.19 ID:Pw+vYT2x
A「こんな説明みつけたよ!
B「間違ってるねそれ。
 やっぱりWikipediaはこらだから
A「直せるんだから直せよ
B「えっ、何で俺が?
A「えっ?
163デフォルトの名無しさん:2014/04/06(日) 16:46:07.08 ID:YqB/fCSo
byの方がいいだろ
164デフォルトの名無しさん:2014/04/06(日) 16:56:24.24 ID:k991ba7o
A「byだとPOSIX以外にもルールが適用されると読める
B「byの方がいいだろ

せめて意見するときは
そう考える根拠ぐらい書きたいものだ
165デフォルトの名無しさん:2014/04/06(日) 16:57:56.33 ID:PoyortF4
byの方が良いのかorz
Wiki編集するところだったよorz
166デフォルトの名無しさん:2014/04/06(日) 19:15:29.97 ID:X8q2hYwd
そもそもその後の for 以下を読めば C 全般に適用とかの変な解釈するわけないと思うんだが...
167デフォルトの名無しさん:2014/04/06(日) 19:22:56.79 ID:714kpsax
>Such type names are reserved by POSIX for future extensions and should generally be avoided for user defined types.

POSIXによって予約されているため
ユーザー定義型での使用は避けるべきである

POSIX準拠システムでのアプリケーションプログラムを超えて
POSIXと関係ないオペレーティングシステムのアプリケーションにまで言及しとりますがな
168デフォルトの名無しさん:2014/04/06(日) 19:41:42.06 ID:YqB/fCSo
避けるべきということに変わりはないだろ
お前は移植性の事全く考えないの?
POSIXでないシステムの方が圧倒的に少ないというのに
169デフォルトの名無しさん:2014/04/06(日) 19:47:23.97 ID:X8q2hYwd
で、どこに C 全般とか書いてあるんだ?
170デフォルトの名無しさん:2014/04/06(日) 19:54:26.32 ID:PoyortF4
>>167
"by ISO/IEC"でなく"by POSIX"という時点でお察し(ry
171デフォルトの名無しさん:2014/04/06(日) 19:56:17.95 ID:k991ba7o
なんでこんなに揉めるんだ?
Cのtypedefの説明に「_tはPOSIXで予約済」
って書いてあったら
POSIX系以外も従う必用性がある
ように読めるだろ。

>避けるべきということに変わりはないだろ
それは書いた人の主観であって
百科事典の説明に書くべきじゃないぞ。
技術文書書いたこと無いの?
172デフォルトの名無しさん:2014/04/06(日) 19:58:14.20 ID:k991ba7o
「POSIXではオペレーティングシステムの為に予約」
という表現にすれば問題なくなると思うのだが
173デフォルトの名無しさん:2014/04/06(日) 19:59:31.29 ID:14wt57ia
>>158
いっぱいあるんだな……
174デフォルトの名無しさん:2014/04/06(日) 20:13:54.33 ID:IsEOtgMD
_t はタグのtなのかtypedefのtなのかどっちですか?
175デフォルトの名無しさん:2014/04/06(日) 20:16:44.81 ID:YqB/fCSo
>>171
読めないよ
俺C言語で新しいOS書いたわー
そのOSでは大文字で始まる型名予約してるから使うなよ!って書いて、誰がC言語全般に影響あると思うんだ?
176デフォルトの名無しさん:2014/04/06(日) 20:22:32.03 ID:YqB/fCSo
POSIXが何かわかってるやつはC言語全般に影響が〜なんて誤解しない。
POSIXが何かわかってない奴は(圧倒的多数であるPOSIXシステムで動かされる可能性を考慮して)無条件に従っておいた方がいい

なんの問題もない。
177デフォルトの名無しさん:2014/04/06(日) 20:22:37.76 ID:ZIQhn8PO
Wikipediaの内容についての議論はWikipediaのTalkページでやれよ
178デフォルトの名無しさん:2014/04/06(日) 20:24:58.76 ID:X8q2hYwd
>>171
> なんでこんなに揉めるんだ?

単なるしきたりを

> POSIX系以外も従う必用性がある
> ように読めるだろ。

なんて言うアホがいるからだろ。
179デフォルトの名無しさん:2014/04/06(日) 20:29:09.78 ID:k991ba7o
>>178
説明の文面が妥当かどうかの話をするときに
どうしてシキタリが出てくるんだよアホですか?
180デフォルトの名無しさん:2014/04/06(日) 20:30:38.36 ID:8z3KlCR7
もうここで議論するべき内容ではないどっか行け
181デフォルトの名無しさん:2014/04/06(日) 20:34:13.86 ID:X8q2hYwd
convention も読めないアホは口挟むなよ (w
182デフォルトの名無しさん:2014/04/06(日) 20:36:21.69 ID:PoyortF4
なかなか面白かった

>>174
型名(type name)のtらしい…俺はtypedefのtって思い込んでたけど
ttp://stackoverflow.com/questions/231760/what-does-a-type-followed-by-t-underscore-t-represent
183デフォルトの名無しさん:2014/04/06(日) 20:44:57.82 ID:k991ba7o
>>181
「Cのsize_t(しきたりでtypedefには_tを付けたもの)は
 POSIXによって予約されている」
などと言っている出鱈目なWikipediaの説明が
妥当だと思うアホはすっこんでろ
184デフォルトの名無しさん:2014/04/06(日) 20:57:23.37 ID:6fUxN2Jx
All rights are reserved by POSIX.
185デフォルトの名無しさん:2014/04/06(日) 20:57:26.93 ID:X8q2hYwd
>>183
誰が妥当って言ってるんだ?
俺は単にそう書いてると言ってるだけだぞ。

まあ、しきたりで自爆したからごまかしたいんだろうけど (w
186デフォルトの名無しさん:2014/04/06(日) 21:05:47.20 ID:frwmbROr
NG推奨ワード:
Qz
STL
ヘッダ
POSIX ←new
片山
hoge
187デフォルトの名無しさん:2014/04/06(日) 21:23:14.93 ID:YqB/fCSo
CがNGワードになる日も近いな
188デフォルトの名無しさん:2014/04/06(日) 21:28:22.80 ID:5rOAt6qX
>>186
え、いつの間にかSTLとヘッダもアウトになってたのかw
ここは酷いインターネッツですね
189デフォルトの名無しさん:2014/04/06(日) 21:39:32.30 ID:uqLF0x8H
>>186
ついでに
スレが荒れるのでCやC++に関することはすべて厳禁
190デフォルトの名無しさん:2014/04/06(日) 21:52:35.54 ID:EzHv0eI8
まどろっこしいな
ようは2ちゃんねるの禁止が落としどころだよね
191デフォルトの名無しさん:2014/04/06(日) 22:19:16.09 ID:2m7iHXEE
p2使えないから2ch廃止でいいよもう
出先で書き込めなくてもどかしいったらありゃしない
192デフォルトの名無しさん:2014/04/06(日) 22:35:34.44 ID:yUhKfMaZ
●は使えるだろ
●が無いとスレ立てできない
193デフォルトの名無しさん:2014/04/06(日) 23:14:43.66 ID:2m7iHXEE
浪人ってやつ?
買う気ないからひろゆきの新しい方に期待するわ
194デフォルトの名無しさん:2014/04/07(月) 01:28:14.02 ID:AB68SSs6
SYSTEMTIMEの引き算をしたくて
http://stackoverflow.com/questions/8699069/difference-between-two-systemtime-variable
の回答4にある
SYSTEMTIME operator-(const SYSTEMTIME& pSr,const SYSTEMTIME& pSl)
をそのまま使って、

SYSTEMTIME ts,te,tdif;
GetSystemTime(&ts);
Sleep(1000);
GetSystemTime(&te);
tdif = te - ts;

としたら、最後の引き算の行で、
エラー 1 error C2676: 二項演算子 '-' : 'SYSTEMTIME' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照)

と出るのですが、解決方法がわかりません。どうしたらよいでしょうか?
195デフォルトの名無しさん:2014/04/07(月) 02:54:37.57 ID:LXdO3Noc
>>194
teのアドレス - tsのアドレスをtdifに入れるというおかしな事してる
196デフォルトの名無しさん:2014/04/07(月) 04:02:36.25 ID:Yfheg34z
>>194
operator-()の定義かプロトタイプ宣言を
WinMain()だかtmain()だかの前でやれば解決する、と予想
197デフォルトの名無しさん:2014/04/07(月) 04:21:05.28 ID:AB68SSs6
皆さん
アドバイスありがとうございました。
>>196
その通りでした。プロトタイプ宣言忘れていました。
無事に動いたのですが、実行結果がおかしいのです。
約1秒の差が計測できると思ったのですが、
tdifの中身を見ると、
wYear 1601 unsigned short
wMonth 1 unsigned short
wDayOfWeek 1 unsigned short
wDay 1 unsigned short
wHour 0 unsigned short
wMinute 0 unsigned short
wSecond 1 unsigned short
wMilliseconds 515 unsigned short
となっていますので

1601年1月1日0時間0分1.515秒
の差ということでしょうか?どういうことでしょうか?
198デフォルトの名無しさん:2014/04/07(月) 04:29:51.17 ID:Yfheg34z
199デフォルトの名無しさん:2014/04/07(月) 06:08:42.83 ID:NjqqbTFI
>>197
SYSTEMTIME ってカレンダーの年月日時間みたいなもの。
それらの引き算をカレンダーの年月日時間にするってへんだろ。
結果のカレンダー年月日時間は0年0月0日0時0分1.515秒ですって、カレンダーではありえないだろ
期待する結果は年月日時間で表せる差じゃないか(1年2ヶ月3時間4分5秒違うとか)
200デフォルトの名無しさん:2014/04/07(月) 11:35:54.05 ID:uM+gajuN
>>197
SYSTEMTIMEの起点は1601年1月1日0時0分0秒
つまり、ゼロをSYSTEMTIMEとして解釈すると「1601/01/01 0:00:00」になる
201デフォルトの名無しさん:2014/04/07(月) 13:13:30.33 ID:8ZhLD5KA
どうでもいいけど、>199は説明が下手だな。
202片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/07(月) 14:25:12.80 ID:nfj7Xkns
SystemTimeToFileTimeを使ってSYSTEMTIMEをFILETIMEに変換して、
ULARGE_INTEGERを使って64ビット整数に変換して、引き算をする。
203デフォルトの名無しさん:2014/04/07(月) 15:40:44.16 ID:4PSeJxmH
時刻と時間の違いが分かってないタイプ?
204デフォルトの名無しさん:2014/04/07(月) 18:59:37.11 ID:iQnUI2e5
>>202
194がやっているのがまさにそれなんだけど、問題は戻り値の型が時間間隔ではなく
時刻を表す型になっていることだから、
>>194 の operator-() の戻り値を __int64 にして v_res=v_right-v_left; 以下を
return v_res; に変えれば100ナノ秒単位の経過時間が得られるようになる。
100ナノ秒じゃ細かすぎるというなら、戻り値を double にして return v_res / 10000.0;
に変えるとか工夫しろ。
205デフォルトの名無しさん:2014/04/07(月) 19:23:33.56 ID:BajMmze5
>>202
時間差(経過時間)を秒単位ではなくて、年月..秒で表すものにしたいから、
SYSTEMTIMEを戻り型にしているんじゃないのか

Winで経過時間を求めるのにSYSYEMTIMEを使うって普通なのか?
違うなら何を使うのが多い?
206デフォルトの名無しさん:2014/04/07(月) 19:29:45.40 ID:4vTqmZSq
よく分からんがC++なら<chrono>使えばいいんじゃね?
Win依存でいいならtimeGetTimeとかQueryPerformanceCounterとかがあるし
207デフォルトの名無しさん:2014/04/07(月) 20:26:10.88 ID:Y4utMABq
「時間差(経過時間)を秒単位ではなくて、年月..秒で表すものにしたい」
という要求下で "年" の計算にうるう年の考慮は必要だろうか?
208デフォルトの名無しさん:2014/04/07(月) 20:35:46.78 ID:4vTqmZSq
>>207
その辺難しいよね
365日とするか365.2425日とするか365.2422日とするか……
表示を日までに済ませておくのが無難かと
209デフォルトの名無しさん:2014/04/07(月) 21:01:58.18 ID:iQnUI2e5
>>208
.NETのTimeSpanクラスはそうなってるね。
内部表現は100ナノ秒刻みの整数値で、ミリ秒、秒、分、時間、日への変換はするが
月、年への変換はしない。
210デフォルトの名無しさん:2014/04/07(月) 21:27:01.61 ID:dmj0DO96
>>207
それ以前に月が 30日でいいのかと...
211デフォルトの名無しさん:2014/04/07(月) 21:32:53.82 ID:Y4utMABq
>>210
あああああーーーーー
考えるほどマンドクサイっすな
212デフォルトの名無しさん:2014/04/07(月) 21:49:28.54 ID:wQYu7k63
>>186
なんでQZが筆頭なんだ?
213デフォルトの名無しさん:2014/04/07(月) 21:52:25.42 ID:pviM0T4Q
どう考えても一番の荒らしです
214デフォルトの名無しさん:2014/04/07(月) 22:31:32.85 ID:tNhu6rzw
片山やhogeよりPOSIXが上なのかw
215デフォルトの名無しさん:2014/04/07(月) 22:33:46.15 ID:4vTqmZSq
質問いい?
switch構文のcase内で変数宣言したら、それについて
「'変数' の初期化が 'case' ラベルによって行われませんでした。」
って言われたんだけどどういうことなの……?
ついでにswitch部分に赤波線が付いて、「制御の転送は次の初期化をバイパスします」
って言われたんだけど何故エラーになるのか意味が分からない。誰か分かる人教えて下さい
(VS2013でコンパイルしている時に発生)
216デフォルトの名無しさん:2014/04/07(月) 22:35:47.03 ID:2mFu56Lz
caseだけだとスコープが同じになる
ブロックをつければいい
217デフォルトの名無しさん:2014/04/07(月) 22:40:02.07 ID:Y4utMABq
switch () {
case A:
 { // ローカルスコープにしちまう
  int a;
 } break;
case B:
 …
default:
 …
}
218デフォルトの名無しさん:2014/04/07(月) 22:41:30.01 ID:4vTqmZSq
>>216
ブロックを付けるって、要するに
case test:
 〜
 break;

case test:{
 〜
 break;
}
にするってことでいいの?
219デフォルトの名無しさん:2014/04/07(月) 22:47:22.50 ID:2mFu56Lz
Yes
220デフォルトの名無しさん:2014/04/07(月) 23:30:25.89 ID:H5+AU72d
個人的にはbreakは外に出したいな
221デフォルトの名無しさん:2014/04/08(火) 00:20:22.54 ID:lvT6VRY6
case test:としたときに
testにおけるのは何?
int a,b,c;
...
switch()
case (b=a+1, c++, C): なんてのでもOK(試してないけど)?
222デフォルトの名無しさん:2014/04/08(火) 00:23:17.09 ID:lXmRpq/E
>>221
試せ
223デフォルトの名無しさん:2014/04/08(火) 00:32:19.53 ID:zX8m8ach
>>221
ラベルだけだよ
224デフォルトの名無しさん:2014/04/08(火) 00:32:44.67 ID:4GqgTU2E
>>221
定数の整数式とscoped enumの値だけ
switch (a) case std::integral_constant<int, 6>::value:;
225デフォルトの名無しさん:2014/04/08(火) 13:44:22.59 ID:J+Ne3rG0
最近、よその板で、"「"だけで右を閉じてないのが流行ってるのか
すんげーむずむずするんだが
226デフォルトの名無しさん:2014/04/08(火) 14:02:26.18 ID:M2I5N33k
>>225
在日のおまえは知らないだろうが、明治時代からある用法だぞ。
227デフォルトの名無しさん:2014/04/08(火) 16:39:02.94 ID:9nnVwB+Q
>>226
(正直鬼物語で見たのが最初だなんて言えない)
228デフォルトの名無しさん:2014/04/08(火) 17:27:19.75 ID:DhHmBmSp
エロゲーでは普通じゃないのか?
229デフォルトの名無しさん:2014/04/08(火) 18:01:46.09 ID:Agmut9XT
どんな使い方なんだ?
(ry なんかはときどき見るな
閉じていない括弧に違和感を持つのはある意味プログラマらしいか
230デフォルトの名無しさん:2014/04/08(火) 18:31:11.83 ID:Bi2RyCEo
カッコつけてんじゃね〜よ
231デフォルトの名無しさん:2014/04/08(火) 18:50:35.55 ID:C0aY6nOj
つけてねーよ
232デフォルトの名無しさん:2014/04/08(火) 19:05:43.04 ID:Ge61TJlR
case 1+1;
goto 2;
goto 1+1;
goto 2*1;
各環境でナニがドコまで許されるのか興味はあるな
233デフォルトの名無しさん:2014/04/08(火) 22:58:16.49 ID:5xZMJR+X
>>229
プログラマは、半開区間が大好きさ!
[0, 4)
234デフォルトの名無しさん:2014/04/08(火) 23:04:52.46 ID:9wIzdaaz
>>233
ワロタ
235デフォルトの名無しさん:2014/04/09(水) 00:10:02.38 ID:dDyddEcZ
もう全て半角にして英語圏顔文字でも使っとけよ:D
236デフォルトの名無しさん:2014/04/09(水) 04:45:08.14 ID:GDCkrjSs
roffとか気持ち悪いよな
237デフォルトの名無しさん:2014/04/09(水) 13:15:17.74 ID:/wyRfLaC
>>236
UN*XやるまえにDOSでTeXやってたからあれは意外になんとも
かつては汗でパーサ書いてたっていうから、まあそういうことなら。
238デフォルトの名無しさん:2014/04/13(日) 08:17:37.43 ID:7/oWURrR
time関数は1970年からの秒数らしいですが
long型で格納するとなると、68年くらいで限界が来ませんか?
2038年くらいにいろんなプログラムやばいっすか?
239デフォルトの名無しさん:2014/04/13(日) 08:24:54.58 ID:2iqAA/H6
2000年問題の時に話題にあがりました 「2038年問題」でぐぐれぇ
240デフォルトの名無しさん:2014/04/13(日) 08:30:51.23 ID:7/oWURrR
おーやべえ
でも今からプログラムつくろうとするとtime_tは64bitで定義されてるっぽいですね
3000億年まで安心か
241デフォルトの名無しさん:2014/04/13(日) 09:06:00.54 ID:olete8aZ
炎上学習法は要りません
242デフォルトの名無しさん:2014/04/13(日) 09:33:49.42 ID:m7xM1FWF
どこが炎上してんだよ
243デフォルトの名無しさん:2014/04/13(日) 15:21:37.00 ID:qnyX9I3J
2000年の頃は見えないほど先の話だと思っていたが
既に3分の1消化してるんだな
244デフォルトの名無しさん:2014/04/13(日) 18:18:53.37 ID:CtgsENNt
1000年以上先の問題ならまだしも、38年だと分野によっては平気で使われ続けるからな
245デフォルトの名無しさん:2014/04/13(日) 18:50:58.03 ID:Am7dEU9n
言わんとしてることはわかるからいいんだけど、64bitでコンパイルしてlongが32bitなのMSのコンパイラぐらいだぞ
246デフォルトの名無しさん:2014/04/13(日) 18:52:32.07 ID:P3Ox4abS
互換性を優先したんだろうね
247デフォルトの名無しさん:2014/04/13(日) 18:55:12.72 ID:N2UMgO6H
time_tは64bitになってるから許してやれ
248デフォルトの名無しさん:2014/04/14(月) 07:18:41.20 ID:CAt5QB21
ttp://ja.wikipedia.org/wiki/%E6%95%B4%E6%95%B0%E5%9E%8B
同じソースでlongが32bitになったり64bitになったりする方が混乱するわ
昔intが16bitになったり32bitになったりで難儀した
249デフォルトの名無しさん:2014/04/14(月) 08:17:35.70 ID:XwQYiHbH
typedefせずソースに直接intとかlongとか書いてるの?
250デフォルトの名無しさん:2014/04/14(月) 08:28:42.62 ID:iMQET/ga
>>248
つstdint.h(cstdint)
規格仕様上複数マシンで動作できることを重視したから型ごとの制約が緩いのよね
と言うか既出の話題だったわw
http://toro.2ch.net/test/read.cgi/tech/1393539884/61-69
251デフォルトの名無しさん:2014/04/14(月) 11:00:15.74 ID:fXV0vjOD
vectorにクラスを格納するのって
#include <iostream>
#include <vector>
class c_myclass
{
public:
    void myfunc(int num)
    {
        std::cout << "myfunc" << num << " が呼び出されました \n";
    }
};
int main()
{
    c_myclass temp;
    std::vector<c_myclass> vec;
    
    for(int i=0; i<10; ++i)
        vec.push_back(temp);
    
    for(int i=0; i<vec.size(); ++i)
        vec[i].myfunc(i);
    
    return 0;
}
このような感じでよろしいでしょうか?
ちなみに
サイズを指定する場合は
std::vector<c_myclass> vec(10);でしょうか?
252デフォルトの名無しさん:2014/04/14(月) 11:15:14.08 ID:Kn6UHMuG
よろしいです
しいて言えば
vec.push_back(temp);
より
vec.emplace_back();
の方がよろしいかと思われます
253デフォルトの名無しさん:2014/04/14(月) 11:22:23.22 ID:fXV0vjOD
>>252
ありがとうございます
もしよろしければemplace_back()について解説お願いします
リファレンスを見てもよくわからなかったので
254デフォルトの名無しさん:2014/04/14(月) 11:23:47.56 ID:Kn6UHMuG
コンストラクタを直接呼び出してくれるpush_backでございます
コピーが発生しないので多少効率的になります
255デフォルトの名無しさん:2014/04/14(月) 11:25:50.80 ID:fXV0vjOD
>>254
なるほど
256KUSO KOTE ◆unko./w.Osri :2014/04/14(月) 12:36:29.24 ID:8ev4IZFy
>>253
もしc_myclassにc_myclass(bool,double)みたいなコンストラクターがあったら、
emplace_back(true,1.23)とすることが出来て
かつvectorの中の格納領域上に直接c_myclassを作成できる。
と思う(想像)。
257デフォルトの名無しさん:2014/04/14(月) 15:28:45.80 ID:MAoTOR9V
emplace*()はいいね。巨大なクラスを連想配列に放り込む時に重宝だよ。
258デフォルトの名無しさん:2014/04/14(月) 16:17:06.14 ID:/qNJTuFi
open(2)したディレクトリを直接read(2)する方法ってあります?
259デフォルトの名無しさん:2014/04/14(月) 16:37:16.17 ID:oIWmwaCC
日本語でおk
260デフォルトの名無しさん:2014/04/14(月) 17:29:53.33 ID:aQsMBHRD
↓ちなみにひろゆきサイドの開発者はめちゃくちゃ臭い

4095 :名無しさん@13周年 :2014/04/14(月) 04:46:02.73 ID:wJLzpOd2P(4)
jimがさくらのクローラを遮断したみたいだな
迂回しても迂回→遮断のイタチごっこは目に見えてるので遮断できない方法でdatを引っこ抜くまでだ
具体的には専ブラっぽい挙動でnetからdat引っこ抜いてscに投げるスクリプト書いてやるからお前らそれブン回せ
たらこにはリクエスト+受け取り+改ざんチェック用のスクリプト書いてやるよ

あー久しぶりにemacs起動するわ
3時間で書いてやる

4209 :名無しさん@13周年 :2014/04/14(月) 09:22:21.15 ID:wJLzpOd2P(4)
あとちょっと書き足してバグとったらexeで配るよ
さしあたりdatの回収は俺がやっとく
C++で書きなおして独自の難読化施してるからnetの奴らにREできるかな?マカフィーでも無理なんじゃないかな

4210 :名無しさん@13周年 :2014/04/14(月) 09:24:13.59 ID:wJLzpOd2P(4)
今の時点で一つ言えるとしたら不特定多数を舐めるなってこと



あー久しぶりにemacs起動するわ()
3時間で書いてやる()

C++で書きなおして独自の難読化施してるからnetの奴らにREできるかな?マカフィーでも無理なんじゃないかな()

不特定多数を舐めるなってこと()
261デフォルトの名無しさん:2014/04/14(月) 18:01:44.00 ID:0/p4fR0J
いちいち持ってくるお前も臭い
262デフォルトの名無しさん:2014/04/14(月) 19:15:32.34 ID:yacO1o/C
>>258
できるでしょ?readdir(3C)とかは内部ではreadを呼んでる
263デフォルトの名無しさん:2014/04/14(月) 20:02:57.67 ID:g31zNjzu
>>262
read(2) の manには

EISDIR fd refers to a directory.

Other errors may occur, depending on the object connected to fd.
POSIX allows a read() that is interrupted after reading some data to
return -1 (with errno set to EINTR) or to return the number of bytes

とある
264デフォルトの名無しさん:2014/04/14(月) 20:41:55.55 ID:DVvt3Ia1
最近C++勉強始めたんですが、質問があります。(Cは良く分っているつもりです)。
C++には参照渡しという記述方法があることを知ったのですが、Cのポインタ渡しに
慣れている私としては、参照渡しを使わずにすべてポインタ渡しでコードを記述する
ほうが見易いので、そうしようかと思うのですが、何かデメリットありますか?
参照渡しを使うほうがよい点などありましたら教えてください。
265デフォルトの名無しさん:2014/04/14(月) 20:51:36.33 ID:UPYb5gKr
(個人的に思う)一般的に
ポインタで渡す=ヌルが渡ってくる可能性がある、つまり、常にヌルチェックが必要
ポインタで渡す=ヌルが渡せる、この引数はオプション的である

参照で渡す=なんかしらわたってくる、ヌルチェック不要
参照で渡す=この引数は必ず必要である

あと一時変数オブジェクトの寿命の関係とかあった気がするが忘れたw
266デフォルトの名無しさん:2014/04/14(月) 21:14:47.05 ID:iMQET/ga
>>264
ポインタ渡しと違い、参照渡しの場合、
・絶対に実体があるので、適当なアドレスが渡って
 不正なメモリアクセスを行うことがない
 また、参照する中身は変更できないので紛れがない
・普通の変数と同じように記述できる。構造体のメンバ関数にも
 アロー演算子ではなくドット演算子でアクセスできる
 また、関数の引数に使った際、呼び出す側としてはいちいち
 アドレスを渡すということを意識せず使用できる
・ポインタと違い参照自体にはメモリ消費がない
こんなところか
267デフォルトの名無しさん:2014/04/14(月) 21:17:29.88 ID:lcY87dee
返り値の話ではないとして。
参照渡しの一番のメリットは渡したオブジェクトの所有権が移動しない事がわかる事かな。
268デフォルトの名無しさん:2014/04/14(月) 21:21:57.27 ID:lEZQ3TFl
メモリ消費がないというのは不適切だろ
インラインで消えたりするが
269デフォルトの名無しさん:2014/04/14(月) 21:46:00.21 ID:iMQET/ga
>>268
いや、俺の持ってる本では
「ポインタと違って独自にメモリ領域が割り当てられない」
的なことが書いてあるんだが……違うの?
270デフォルトの名無しさん:2014/04/14(月) 21:49:58.13 ID:7APDnn3f
(お前が)(malloc/new等で)と読めなくもないが大丈夫か
271デフォルトの名無しさん:2014/04/14(月) 21:55:35.64 ID:buURFUek
初期のC++はC言語へのコンバータで実現してたろ。
参照も内部的にはポインタ動作と変わらないかと。
272デフォルトの名無しさん:2014/04/14(月) 22:00:06.15 ID:iMQET/ga
>>271
それって「参照がポインタで実装されてる(ことが多い)」って話じゃなかった?
273264:2014/04/14(月) 22:02:44.39 ID:DVvt3Ia1
みなさん解説ありがとうございます。
大変参考になります。
>参照渡しの一番のメリットは渡したオブジェクトの所有権が移動しない事がわかる事かな。
もう少し詳しく解説お願いします。
274デフォルトの名無しさん:2014/04/14(月) 22:04:37.96 ID:iMQET/ga
275デフォルトの名無しさん:2014/04/14(月) 22:18:22.93 ID:msrdBAHC
>>269
通常の実装では、呼び出し側ではスタックにアドレスを積むという点で全く同じだし、
呼ばれる側でもそこを参照するのに違いはないよ。
まぁ、インライン展開で消えれば話は別だけど。
一番のメリットは、(参照先ではなく)参照自体を書きかえられないことだね。
それもまた、ポインタでもconstにすればできるわけだけど。
276デフォルトの名無しさん:2014/04/14(月) 22:54:29.26 ID:CAt5QB21
ttp://codepad.org/Qo0ErNs1
この例ではポインタで渡す気が起きない
277デフォルトの名無しさん:2014/04/14(月) 23:06:35.99 ID:lcY87dee
>>276
const付けような。
278264:2014/04/14(月) 23:14:28.51 ID:DVvt3Ia1
>276
サンプルコードありがとうございます。
>この例ではポインタで渡す気が起きない
すみません、まだよく分らないのですが、ポインタで
void WriteLine(const string *pstr)
{
printf("%s\n", pstr->c_str());
}
のようにすると何か問題があるのでしょうか?
279デフォルトの名無しさん:2014/04/14(月) 23:17:14.74 ID:lcY87dee
http://codepad.org/UUMHZZxJ

参照にするとこうかける
280デフォルトの名無しさん:2014/04/14(月) 23:20:11.44 ID:i+D5B13r
>>273
++や--の挙動がポインタと参照で違うんじゃね?
281デフォルトの名無しさん:2014/04/14(月) 23:32:46.57 ID:lcY87dee
>>273
ポインタでオブジェクト返されると誰がdeleteすべきなのかドキュメント見るか返す関数の中身見るまでわからないよね?
参照にすると返したやつが所有している物の中身を見させて貰ってるってことがわかるからdeleteしなくていいって事がドキュメント見なくてもわかる。

引数でもポインタだと引数で渡されたポインタを内部で保持しておくから呼び出し側でdeleteや中身の変更をしてはだめになるのかとかわからない。
282デフォルトの名無しさん:2014/04/14(月) 23:41:59.74 ID:CAt5QB21
>>278
ttp://codepad.org/uAzCCBJQ
ポインタでも書けるしこの例では問題はない
が、やっぱり人に見せると「何で参照使わないの?」と言われそう
283デフォルトの名無しさん:2014/04/14(月) 23:54:52.78 ID:73GA0vhp
string *str = new string("hello");
....
delte str;
....
WriteLine(str); //deleteしてるけど、、、ポインタ値は生きてるから アッー

結局、コンテナをうまく使って生ポ(生new)は極力排除しようぜって流れ
284デフォルトの名無しさん:2014/04/14(月) 23:59:10.65 ID:lcY87dee
>>282
なんで「何で参照使わないの?」と言われるのかその理由を書かないと意味ないだろ。

たとえば
http://codepad.org/wCMxFlfO
文字列を返す関数と文字列を引数にとる関数があるとする。
参照だったら文字列を返す関数を文字列を引数にとる関数の引数に直接書ける
ポインタだったら一度ローカル変数で受け取ってそのポインタを書かないとだめ
285デフォルトの名無しさん:2014/04/15(火) 00:13:55.46 ID:MOmoi8a1
int& a = *(int*)0;
a = 0;
286デフォルトの名無しさん:2014/04/15(火) 00:17:57.06 ID:lShoPitp
ポインター操作が目的でなく
null許可を表現させたいわけでもなく
読み取り用途限定の時に
わざわざポインターを使う方が不自然
287デフォルトの名無しさん:2014/04/15(火) 00:21:36.20 ID:jMxUSFKT
>>285
一行目がダメコードって一目瞭然じゃないか。
ポインタだったらnullを渡すのが悪いのか?nullチェックせずに代入するほうが悪いのか?になる

>>286
ポインタしかない世界から来た人には多分通じないよ。
288デフォルトの名無しさん:2014/04/15(火) 00:25:16.54 ID:hh7KqCRP
生ポ引数/戻り値なんて特別理由がある場合以外は使うなってこった
289264:2014/04/15(火) 00:28:56.87 ID:7FIahpja
私なりに結論を出してみたのですが、
参照渡しをするのは、
void WriteLine(const string &str);
みたいに、その関数に値を読み取り限定で渡す場合に主に使う。
ただし、必ずconstを付けておく。

上記以外はポインタ渡しを使う。
で良いでしょうか?
290デフォルトの名無しさん:2014/04/15(火) 00:35:43.12 ID:8L+RgIaL
参照はポインタの初心者版みたいなもの。
使い方が分からないのがあえて使わなくていい。
291デフォルトの名無しさん:2014/04/15(火) 00:36:31.44 ID:c0zlhsuS
>上記以外はポインタ渡しを使う

いいえ。
その他にもムーブセマンティクスを達成
したいときにも参照を使います。
292デフォルトの名無しさん:2014/04/15(火) 00:45:18.87 ID:jMxUSFKT
>>290 っていうC++初心者が書くコードはひどく読みづらいので真に受けたらだめ
293デフォルトの名無しさん:2014/04/15(火) 01:27:44.04 ID:PjplhgrG
ageる奴は碌なこと喋んねーな
294デフォルトの名無しさん:2014/04/15(火) 03:06:53.30 ID:2JpOUwgl
>>289
漏れも俺様ルールで、const参照は読み取り用、
ポインタは値を変更する時と、使い分けている
295デフォルトの名無しさん:2014/04/15(火) 06:05:04.19 ID:sGkhMKKa
>>289
ttp://ideone.com/SIOYc5
なかなかいい例が思い浮かばないが
この例ではconstを付けられないが参照が相応しいと思う

全てに当てはまる使い分けの条件は提示できないので
個人やチームの判断で使い分けするしか
296デフォルトの名無しさん:2014/04/15(火) 07:52:53.60 ID:AA0ZYDWw
格納場所という意味で>289が作った関数仕様を実装する場合も、自衛はするべき。
void readSome(Type * const result)
{
// ++result; // これがエラーになってくれる。
}
297デフォルトの名無しさん:2014/04/15(火) 08:09:35.12 ID:6lm4j3zL
俺はしないな。
意味的にはそうなのだけれど
C++のconstは真面目に付けると可読性を著しく損なう
298デフォルトの名無しさん:2014/04/15(火) 08:59:58.71 ID:Byz6doxp
>>263
うん。262は間違いでした。
調べたらreaddirはgetdents(2)を呼んでた
そりゃそうか。ファイルシステムで構造違うしな
299デフォルトの名無しさん:2014/04/15(火) 10:42:12.48 ID:ZiuccpsX
>>296
そのレベルは冗長
300デフォルトの名無しさん:2014/04/15(火) 12:47:22.14 ID:tCJ2yelK
参照なら要らないのにね。
301デフォルトの名無しさん:2014/04/15(火) 12:54:41.51 ID:dDf7e/l1
値渡しの引数にconstをつけるのはやりすぎな気がする
void f(const int x) なんてしないでしょ
302デフォルトの名無しさん:2014/04/15(火) 13:09:58.76 ID:tCJ2yelK
する奴いるよ。きっと>296も同じタイプ。
303KAC:2014/04/15(火) 13:26:56.79 ID:OYr23JgA
>>296
なんか違う事書いてるぞ。>289の仕様満たすならconstは*の左。

>>297
どんな所で可読性が落ちるって?
お前がまともに使えないだけじゃないの?
304デフォルトの名無しさん:2014/04/15(火) 14:19:33.38 ID:SFbbbO6x
流れぶった切って悪いんですが
>>251
c_myclassがインターフェースクラスを継承している場合は
継承元メンバ(インターフェースクラス)に仮想デストラクタを書いておけば良いのですか?
305デフォルトの名無しさん:2014/04/15(火) 14:41:39.21 ID:tCJ2yelK
>>303
>296が言いたいことは、>289の仕様ならconst * string const strだろ。
306デフォルトの名無しさん:2014/04/15(火) 14:42:44.92 ID:tCJ2yelK
いけね、Typo。
string const * const strね。
307デフォルトの名無しさん:2014/04/15(火) 14:59:38.52 ID:JmWJ8ekL
>>304
違いが分かればよいのだが…
http://ideone.com/w9UqT0
308デフォルトの名無しさん:2014/04/15(火) 15:09:29.49 ID:SFbbbO6x
>>307
さらっと確認したので怪しいのですがたぶん
クラスAには仮想デストラクタが無い為に
newしたオブジェクトがデリートされる際、継承元のデストラクタが呼び出されていませんが、
クラスBは仮想デストラクタがメンバにあるので
deleteされる際に継承元のデストラクタが呼び出される訳ですよね

そこで、ベクターにオブジェクトを格納する話につながる訳ですが
>>251のc_myclassがインターフェースクラスを継承しているときには
やはり継承元のクラスに仮想デストラクタを記述しておかないと危険だという事ですよね?
309デフォルトの名無しさん:2014/04/15(火) 15:27:23.32 ID:JmWJ8ekL
だーね
310デフォルトの名無しさん:2014/04/15(火) 15:32:30.40 ID:SFbbbO6x
確認しつこくてすいませんが
まとめると>>307のdlvBを
dlvB temp
std::vector<dlvB> obj;
obj.push_back(temp);
みたいにしちゃっておkってことですよね
311デフォルトの名無しさん:2014/04/15(火) 18:05:27.38 ID:ef3kTbvB
>>310
そうしたいなら仮想デストラクタとか仮想関数とか関係ない。
コピーコンストラクタを作ればいいだけ。
312デフォルトの名無しさん:2014/04/15(火) 18:37:17.89 ID:u428dFct
std::vector<clsB>にdlvB型のオブジェクトを突っ込むとスライシングでダメになるから気をつけるように
多態をコンテナ内で実現したいならstd::shared_ptrやunique_ptrを入れるのがよい
313デフォルトの名無しさん:2014/04/15(火) 20:01:11.81 ID:Nbqron3B
仮想デストラクタが必須なのは当然として
vectorに突っ込むケースを考えると
難易度としては
vetcor<Base>
vetcor<Base*>
vetcor<shared_ptr<Base>>
ptr_vector<Base>
こんな感じじゃね?
それぞれ注意点はあるが
一見簡単そうに見える
vetcor<Base>
が一番きつい
314デフォルトの名無しさん:2014/04/15(火) 20:12:18.40 ID:MU2KfTCa
>vetcor<Base>
そもそも派生クラスを突っ込めない。
>vetcor<Base*>
所有権がどこにあるのか分からないので論外。
>vetcor<shared_ptr<Base>>
virtualデストラクタ不要で便利。
>ptr_vector<Base>
今更ptr_vector?unique_ptrでいい。
315デフォルトの名無しさん:2014/04/15(火) 20:33:50.00 ID:O7xBtcGx
make_uniqueが標準に入らないと、記述量がちょっと面倒
316デフォルトの名無しさん:2014/04/15(火) 20:42:49.07 ID:Nbqron3B
>>314
たしかに
デザパタで
知らんかった
流行り廃りとかあるの?デザパタで
317デフォルトの名無しさん:2014/04/15(火) 20:49:25.61 ID:aOtL598m
std::unique_ptrはvectorに突っ込めるのにboost::scoped_ptrは出来ないのはなんで?
318デフォルトの名無しさん:2014/04/15(火) 20:54:50.82 ID:tBkVUf7m
moveできないから
319デフォルトの名無しさん:2014/04/15(火) 23:53:29.68 ID:hh7KqCRP
noncopyableだからだろ
320デフォルトの名無しさん:2014/04/15(火) 23:56:04.64 ID:of9IS0B8
ユニポもそうだけど
321デフォルトの名無しさん:2014/04/16(水) 00:00:41.11 ID:cUKcFdx2
>>320
すまん、そうだね、copyかmoveが出来ないとコンテナには入れられないということで
322デフォルトの名無しさん:2014/04/16(水) 00:40:07.75 ID:UZj3cAYP
なるほど、unique_ptrの機能はC++11が前提なんですね
323デフォルトの名無しさん:2014/04/16(水) 01:04:51.10 ID:RlYL1+PT
>>321
>copyかmoveが出来ないとコンテナには入れられない

ソースは?
vectorについてはその通りだとは思うが
324デフォルトの名無しさん:2014/04/16(水) 01:55:04.23 ID:cUKcFdx2
>>323
悪いけど、規格の該当箇所探すのメンドいから↓読んでみて
http://faithandbrave.hateblo.jp/entry/20120418/1334731512
325323:2014/04/16(水) 06:52:53.53 ID:gRD8q33D
>>324
23.3.5p2でstd::listは23.2の仕様に従うとなっていて
そこで説明されるemplace_frontはEmplaceConstructibleであることが要求されていて
26.2.1p13のEmplaceConstructibleの定義は
コピー/ムーブを要求していないと読んだのだけれど
326デフォルトの名無しさん:2014/04/16(水) 08:18:00.83 ID:ySVTxJz4
古い仕様からアップデートしてない人なんじゃね?
327デフォルトの名無しさん:2014/04/16(水) 09:04:15.08 ID:AatfYxHX
>>262
ジジイがしょうわ
328デフォルトの名無しさん:2014/04/16(水) 09:05:40.16 ID:AatfYxHX
>>262
ジジイが昭和の知識でレスすんな
つーか、いい加減に死ねよ
329デフォルトの名無しさん:2014/04/19(土) 15:31:58.78 ID:9tEZQcT3
順列を列挙しようと思ったのですが、うまく行きません。どこが間違っているのでしょうか
http://codepad.org/WCpyEKL1
330デフォルトの名無しさん:2014/04/19(土) 16:05:56.26 ID:j1F3U2CR
>>329
ここ
// for(i=0;i<D && used[i]==0;i++){
for(i=0;i<D;i++){
if(used[i] != 0) continue;
331デフォルトの名無しさん:2014/04/19(土) 16:17:09.98 ID:9tEZQcT3
>>330
あw
うっかりでした。ありがとうございます!
332デフォルトの名無しさん:2014/04/21(月) 02:08:03.43 ID:myPATJ+I
CYKのプログラム書きたいんだけどいまいちわからんわ
333デフォルトの名無しさん:2014/04/21(月) 20:25:21.57 ID:aqBwlWRf
自作のプログラムにboostのregexのlibboost_regex-vc120-mt-sgd-1_55.libを
スタティックリンクして使いたいのですが、あるもうひとつ別のライブラリも
リンクしていてその中にparseという関数があり、.DEFファイルでexportして
います。そうすると、parseという関数が二か所にあるのでエラーするようで、
error LNK2001: 外部シンボル "parse" は未解決です。
となります。良い解決方法ありますか?VS2013です。
334デフォルトの名無しさん:2014/04/21(月) 20:28:06.08 ID:FhRn8cH8
もう一つのライブラリはLoadLibraryでロードする
335デフォルトの名無しさん:2014/04/21(月) 20:45:39.61 ID:sEf+QBU0
namespaceがあるのに競合するの?
パネーな
336デフォルトの名無しさん:2014/04/21(月) 21:03:16.16 ID:nKQE7Rc+
自作の方をLoadLibraryした方が融通利く気がする
337デフォルトの名無しさん:2014/04/21(月) 21:33:12.78 ID:GRQWVWO3
衝突の時は別のエラーになると思う
338デフォルトの名無しさん:2014/04/21(月) 21:37:25.48 ID:Ugb12/p0
衝突ではなく未解決のシンボルってことは
呼び出し規約の間違いとかかね?
339デフォルトの名無しさん:2014/04/21(月) 21:39:13.49 ID:lfASPZAR
定義が見つからないんだろう
340デフォルトの名無しさん:2014/04/21(月) 21:49:42.60 ID:bZ7teAnE
extern "C"していないとか
アンダーラインが付いているとか
341デフォルトの名無しさん:2014/04/21(月) 21:51:36.46 ID:k3MeFw2G
dumpbin /EXPORTS
342デフォルトの名無しさん:2014/04/21(月) 23:02:41.37 ID:aqBwlWRf
すみません、ちょっと説明を間違えていました。自作のDLL (マルチスレッド デバッグ (/MTd))を作成中で、
その中にparseという関数があります。その関数は.DEFでExportしています。boostのregexを使いたいので
#include "boost/regex.hpp" をインクルードして、ビルドすると、そのparseは
libboost_regex-vc120-mt-sgd-1_55.lib で定義されていますというような警告が出てエラーします。
少し調べてみたところ、regexに限らず、boostの関数名と同じ関数を自作のDLLの中に作って、それを.DEF
ファイルに書くと、同じエラー出ました。
たとえば、boost::filesystem::exists()に対して、void exists()という関数を作り、.DEFに書くと
同じエラーします。とりあえず.DEFに書くのをやめると解決するのですが、昨日からboost使い始めたばかりなので
基本的なこと良く分っていません。解決方法ありましたら教えて下さい。
教えていただいたLoadLibraryやextern "C"やdumpbin /EXPORTS は初めてなのでいま調査中です。
343デフォルトの名無しさん:2014/04/21(月) 23:24:39.75 ID:sEf+QBU0
>>342
MT,MD,Unicode,SJIS,debug,release,32,64...
うひゃー
344デフォルトの名無しさん:2014/04/21(月) 23:26:41.35 ID:p/5mORia
>>342
.defの書き方が間違ってんだろ
ちゃんと=でマングリ名指定してるか?
そもそもLoadLibraryを使ってないのに.defなんて要るのか疑問
345デフォルトの名無しさん:2014/04/21(月) 23:44:38.09 ID:bP/zsOii
マングリって卑猥な響きだから「ング」まで書こうなw
346デフォルトの名無しさん:2014/04/21(月) 23:46:37.00 ID:lfASPZAR
C++だし名前が被ったからって問題になるとは思えんが
347デフォルトの名無しさん:2014/04/22(火) 00:32:10.03 ID:XZpvcXn8
さっぱり分からんけど、boostのlib関数がextern "C"扱いになっているのか
348デフォルトの名無しさん:2014/04/22(火) 02:56:45.37 ID:z792onaE
>>342
ビシッと
using namespace boost::filesystem;
using namespace boost::regex;
ってしているか?
349デフォルトの名無しさん:2014/04/22(火) 13:53:46.62 ID:z8WHMXPV
boost云々は関係なくてDLLとか装飾名のルールがわかってない
そしてその次は呼び出し規約の罠に嵌るだろう
350デフォルトの名無しさん:2014/04/23(水) 08:47:13.64 ID:Fk2AHs0t
マクロをグローバル変数に置き換えたいんですけど、
インクルードガードを使ったヘッダーにグローバル変数を定義すれば使えばexternを使う必要ないし
どこかでグローバル変数の定義を必要もないんじゃないですか?
どうやるのが普通ですか?
351デフォルトの名無しさん:2014/04/23(水) 10:08:33.15 ID:PVKzZAxe
状況がよくわからんが、どうやるのが普通かと聞かれればマクロもグローバル変数も使わないのが普通。
352デフォルトの名無しさん:2014/04/23(水) 10:32:56.00 ID:Fk2AHs0t
#define ASPECT_RATIO 1.653
でも
const double AspectRatio = 1.653;
でもないとしたら
なにが正解ですか?
353デフォルトの名無しさん:2014/04/23(水) 10:37:08.06 ID:jGDL0Z25
もしかしてstaticを知らん人かな
354デフォルトの名無しさん:2014/04/23(水) 11:24:29.54 ID:+dMP+eIV
Asperger_ratio
355デフォルトの名無しさん:2014/04/23(水) 11:25:41.35 ID:PVKzZAxe
>>352
それらの定義で何が不満なの?
356デフォルトの名無しさん:2014/04/23(水) 11:38:28.27 ID:uO48px5M
何がしたいのかわからん
てにをはちゃんと使って
357デフォルトの名無しさん:2014/04/23(水) 12:13:19.90 ID:rM84JtQI
.hにはexternつけて宣言
どれかの.cで定義
358デフォルトの名無しさん:2014/04/23(水) 18:08:37.36 ID:6DXUFUqF
元がマクロなら実体がいらないはず
C++なら constで問題ない

それとも"変数"にするのが目的なのか
359デフォルトの名無しさん:2014/04/23(水) 18:31:38.51 ID:rpCr7euc
ここで__declspec(selectany)で動作保証を得たQが
extern要らない珍説のために降臨です
360デフォルトの名無しさん:2014/04/23(水) 20:19:24.40 ID:K3ATFzcJ
質問します。

下記のようなプログラムを作ってみたのですが、バグ(?)が発生しています。

具体的に言いますと、5.6/0.8=7であるはずなのに、「商の整数は・・・」の所が「6」と返されたり、「あまりの結果は・・・」の所が「0.8」と返されたりします。

検索して解決方法を探してみましたが、自分では解決できませんでした。

ご教示よろしくお願いします。

#include <stdio.h>
#include <math.h>

int main()
{
 int shou_int;
 double x=5.6, y=0.8, shou, amari;

 shou = x/y;
 shou_int = (int)shou;
 amari = fmod(x,y);

 printf("商の結果は・・・%f\n",shou);
 printf("商の整数は・・・%d\n",shou_int);
 printf("あまりの結果は・・・%f\n",amari);

 return 0;
}
361デフォルトの名無しさん:2014/04/23(水) 20:36:19.28 ID:FOWeiF78
>>360
0.8×6+0.8=5.6 何ら問題ない。
商7、あまり0.0を期待したなら
誤差があるdoubleを使うことが誤り。

http://ideone.com/0NyTzT
362KUSO KOTE ◆unko./w.Osri :2014/04/23(水) 21:07:45.02 ID:awWEnTYH
doubleはこういう落とし穴があるので注意されたし。
http://ideone.com/xhrAFz
363デフォルトの名無しさん:2014/04/23(水) 21:47:01.45 ID:Md9gKFL1
動的確保について質問です
動的確保をした関数からは確保した配列を他関数に渡せますが
他の関数からは渡せません(Segmentation fault)
なぜでしょうか
また、回避策はありますか

http://codepad/ssrgksbZ
364デフォルトの名無しさん:2014/04/23(水) 21:48:24.84 ID:Md9gKFL1
切り貼りしててorg抜け
すみません
http://codepad.org/ssrgksbZ
365デフォルトの名無しさん:2014/04/23(水) 21:54:08.65 ID:FOWeiF78
>回避策はありますか
なめてんのか。馬鹿に付けるクスリは無いわボケ

>void initMatrix(int **matrix,
 ↓
int **initMatrix(int **matrix,
matrix = initMatrix(…)
366デフォルトの名無しさん:2014/04/23(水) 21:56:11.85 ID:FOWeiF78
まちがえた
>void initMatrix(int **matrix,int m,int
n)
 ↓
int **initMatrix(int m,int n){…}
matrix = initMatrix(m, n);
367デフォルトの名無しさん:2014/04/23(水) 22:03:51.85 ID:WNesHxZT
>>366
なるほど
修正したところうまく動きました
ありがとうございます

初心者でよくわからないのですがなぜセグフォになるのでしょうか
関数が終わってしまうと自動的に開放されてしまうのですか?
368デフォルトの名無しさん:2014/04/23(水) 22:05:34.00 ID:K3ATFzcJ
>>361-362
そういう仕様(?)なんですね。
回答していただきありがとうございます。
369デフォルトの名無しさん:2014/04/23(水) 22:05:58.79 ID:FOWeiF78
>>367
関数呼び出し側と呼ばれた先でそれぞれ
printf("%p\n", matrix);
して出直せ
370デフォルトの名無しさん:2014/04/23(水) 22:07:22.97 ID:FOWeiF78
誤: printf("%p\n", matrix);
正: printf("%p\n", &matrix);
俺が出直してくるわボケ
371デフォルトの名無しさん:2014/04/23(水) 22:17:03.67 ID:WNesHxZT
in initMatrix: [matrix] == 0x1f70010
in main: [matrix] == (nil)

開放されたという認識であっていますか
372デフォルトの名無しさん:2014/04/23(水) 22:39:21.12 ID:D69Yihbi
Asperger_ratio = 100%
373デフォルトの名無しさん:2014/04/23(水) 22:54:49.37 ID:SZamVfz1
>>370
あ,なるほど
そういうことでしたか
これだと値渡しと一緒ということですね
理解しました
ありがとうございました
374デフォルトの名無しさん:2014/04/23(水) 22:58:31.24 ID:6UzUL/o1
>ID:FOWeiF78
口調何とかしろ、それ以前にまずは落ち着け
>ID:Md9gKFL1=ID:WNesHxZT
>>366のように、ポインタを引数にするのではなく返り値をポインタにするのが常道
375デフォルトの名無しさん:2014/04/23(水) 23:06:33.34 ID:h/mD0R6k
結果反映を 引数側への作用 として実装しなければならないのなら
やり取りしたい型の {C++ なら 参照} {Cなら ポインタ}

やり取りしたい型 TYPE

呼び出し元変数
TYPE a;

C++
関数 func_cpp(TYPE& arg);
呼び出し func_cpp(a);

C
関数 func_c(TYPE* arg);
呼び出し func_c(&a);
376デフォルトの名無しさん:2014/04/23(水) 23:20:22.44 ID:ThiOTjLk
そういうのはC++向けにラッパー書くものじゃね
377デフォルトの名無しさん:2014/04/23(水) 23:42:39.30 ID:6UzUL/o1
>>376
そもそもC++ならvectorあるけどな……
378デフォルトの名無しさん:2014/04/24(木) 00:40:47.85 ID:duqxO9nN
>>367
セグフォあーだこーだの前に、超シンプルにして
int a = 1;
関数change_aでこの変数aを100に書き換えたい。
void change_a(???){???}
?のところどうしたら良いと思う
379デフォルトの名無しさん:2014/04/24(木) 02:25:11.42 ID:V/BmNssB
>>371
「matrixは」解放されてるな、malloc()で得た領域は解放されていないが

#include <stdio.h>
void f(int arg) { arg = 2; }
int main() {
int v = 1;
f();
printf("%d\n", v); // さて、ここで表示される数は?その理由は?
return 0;
}
380デフォルトの名無しさん:2014/04/24(木) 02:54:34.67 ID:AklGWvZ+
int **matrix;

initMatrix(&matrix, ・・・)
showMatrix(sxmatrix)
・・・
って動作をしたかったんだろな
381デフォルトの名無しさん:2014/04/24(木) 02:55:20.80 ID:AklGWvZ+
sxはゴミだ忘れてくれ
382デフォルトの名無しさん:2014/04/24(木) 04:56:14.66 ID:zfDiDIb5
>>364
無意味なcastすんな

メモリ管理できねえならC++でかけ
http://codepad.org/BuDsQKHX
383デフォルトの名無しさん:2014/04/24(木) 08:43:35.64 ID:urYv0y/c
MatrixT initMatrix(size_t m,size_t n) {  MatrixT matrix;
 return matrix;
}
これってNRVOを期待してるけど
最適化されなかったら大ダメージ?
384383:2014/04/24(木) 08:47:09.71 ID:urYv0y/c
ああ、ムーブコンストラクターがあれば
大した問題ではないな。失礼
385デフォルトの名無しさん:2014/04/24(木) 13:07:39.50 ID:f/UtlFnw
多次元配列が絡んだ場合がよくわかっていないようです
勉強してきます

>>378
void change_a(int *a){ *a = 100; }
>>379
1
値渡し
vの値をf()のargにコピーしているだけ
386デフォルトの名無しさん:2014/04/24(木) 13:11:34.00 ID:Z31Ilie8
× vの値をf()のargにコピーしているだけ
○ 変更しているf のargはvとは別の変数(値は呼び出し時のvのコピー)であるため
387デフォルトの名無しさん:2014/04/24(木) 13:17:20.61 ID:AklGWvZ+
void f(int arg)なのに呼び出しはf()かよ
ってのはおいといて

f(v)であったとしても
int arg = v;
arg = 2;
return;
と同義だからな
388デフォルトの名無しさん:2014/04/24(木) 18:51:35.45 ID:UcaZdIF2
>>387
>呼び出しはf()かよ

f()が呼び出しだなんて誰か言ったっけ。
Cでの宣言(引数は言及しない関数の宣言)を使って
特定の関数のことを指しているのではないの?
389デフォルトの名無しさん:2014/04/24(木) 19:07:27.89 ID:2icztRE+
文意は >>379 中のコードの話だと思われる
390デフォルトの名無しさん:2014/04/24(木) 20:26:13.24 ID:oR64+xqp
>>385
じゃ
int* pa;
のpaを関数内で書き換えときは?
そして int** ppa;
のppaを関数内で書き換えるときは?
391デフォルトの名無しさん:2014/04/24(木) 20:30:38.78 ID:AklGWvZ+
>>390
お前は宣言する時にわざわざ
int a, b;
int* c, *d;
とやっているのか

int a, b, *c, *d;じゃないのか
392デフォルトの名無しさん:2014/04/24(木) 22:15:41.81 ID:oR64+xqp
宣言....
393デフォルトの名無しさん:2014/04/24(木) 22:25:22.75 ID:tXCIarBm
この場合は定義だね、おっと、 extern は‥‥とかいう信者が湧いてくる
394デフォルトの名無しさん:2014/04/24(木) 23:38:14.25 ID:V/BmNssB
>>387
すまんコンパイル通さずにレスした俺が悪かった、修正ありがとう…

要するに、>>364 ではポインタで分かりにくくなってるだけで
起きてるのはそれと同じことなんよね
395デフォルトの名無しさん:2014/04/25(金) 00:05:21.23 ID:fXiUYsOQ
>>391
> int a, b, *c, *d;じゃないのか

こんな書き方する奴、まだいるのか
396デフォルトの名無しさん:2014/04/25(金) 00:30:55.96 ID:VLxq923M
>>391は普通にそうしているんだろ
397デフォルトの名無しさん:2014/04/25(金) 01:12:44.63 ID:k40O+kcb
どっちもでいいよ。
使用するintを1行で書きたいんでしょ。
398デフォルトの名無しさん:2014/04/25(金) 01:52:47.62 ID:KcORG+H/
そもそも関数の先頭で未初期化変数定義するみたいな奴なんてまだいるのか
399デフォルトの名無しさん:2014/04/25(金) 01:54:09.50 ID:m07o/u+5
そりゃいるでしょうね
コンパイラを選びますし
400デフォルトの名無しさん:2014/04/25(金) 02:08:33.86 ID:KcORG+H/
>>399
コンパイラのせいにして思考停止しているのか?
古い仕様のCで書くにしてもスコープ切ればよいだけで
未初期化変数、変数の使いまわしなんてバグの温床だからやっちゃダメ
401デフォルトの名無しさん:2014/04/25(金) 02:39:15.54 ID:m07o/u+5
> 古い仕様のCで書くにしてもスコープ切ればよいだけで
Cで書かれたメジャーどころでそんなイディオム使ってるのって存在するの?
そんな規約に出会った事はないし見たこともないのだが。
402デフォルトの名無しさん:2014/04/25(金) 02:52:23.74 ID:IKT5NePF
そんな古いコンパイラ使わされるとか苦行ですね。
どんな業界で残ってるんですか?
その業界には絶対に近づかないでおこうと思うので後学のために教えていただけると有り難いです。
403デフォルトの名無しさん:2014/04/25(金) 03:53:59.11 ID:VL+oWFa1
必要無いのに初期化とか工程増えるだけやん
404デフォルトの名無しさん:2014/04/25(金) 04:53:32.31 ID:DUkBiaE/
gcc に 未だに -pedantic オプションが存在していることを考えるんだ!
405デフォルトの名無しさん:2014/04/25(金) 07:38:35.04 ID:IKT5NePF
>>403
初期化の必要がないってどんなとき?
406デフォルトの名無しさん:2014/04/25(金) 07:54:41.16 ID:VHgb1LJP
int a;
(分岐して分岐先でそれぞれ代入)
407デフォルトの名無しさん:2014/04/25(金) 07:56:53.20 ID:jPmvuOB6
そんなところではろくなエディタやツールもないだろうし
空スコープの濫用でうっかり予期せぬ行連結かましたりする方がこわい
408デフォルトの名無しさん:2014/04/25(金) 08:02:41.14 ID:5CU5NLZq
また随分な珍説が出てきたな。
409デフォルトの名無しさん:2014/04/25(金) 08:20:24.78 ID:4HugTnIc
>>402
教えてやろう。
お前の周りの家電のマイコンファームウェアだ。
ifやforと同じくらいスコープのネストが深くなるのが基本。
410デフォルトの名無しさん:2014/04/25(金) 12:07:55.03 ID:/pxP7/DV
自動変数の領域をスコープ外れた時点で回収するコンパイラ少ないでしょ
少なくともオレは見たことない
組み込みこそスタック領域は貧弱だろ
411デフォルトの名無しさん:2014/04/25(金) 12:45:07.65 ID:4HugTnIc
回収っていうか、スコープはずれたら別のスコープの
変数に割り当てられるだけ。
例えばaとbは同じアドレスになる。
デストラクタとかないから、bの時点でaの値が
そのまま残ってる。
{ int a = 100; }
{ int b; }
412デフォルトの名無しさん:2014/04/25(金) 12:51:13.14 ID:jPmvuOB6
>>410
最適化で省略してるだけじゃね
413デフォルトの名無しさん:2014/04/25(金) 13:14:30.62 ID:TvmR/CLK
規格できまっている挙動ではないし不毛だな
414デフォルトの名無しさん:2014/04/25(金) 13:42:24.28 ID:IMABWYJa
だな、>>411 なんてアドレス同じ以前になにもしない可能性が高いし。
415デフォルトの名無しさん:2014/04/25(金) 13:43:29.17 ID:B1sFbtmb
>>410
回収ってメモリのことだと思うが
そもそもスコープに入るときに確保されたものじゃないから
スコープ抜けるときに回収しないのは当然
416デフォルトの名無しさん:2014/04/25(金) 14:47:59.37 ID:VL+oWFa1
>>414
例えなんだから他は省いてるだろ
417デフォルトの名無しさん:2014/04/25(金) 15:27:09.22 ID:KcORG+H/
下等で奇怪、見慣れたコードとはまるで違うとおぼしきモノ達。
それら異形の一群を、ヒトは古くから畏れを含み、いつしか総じて“バグ”と呼んだ。
418デフォルトの名無しさん:2014/04/25(金) 19:07:14.27 ID:DUkBiaE/
単にスタックポインタが動くだけなのに回収とか‥‥
419デフォルトの名無しさん:2014/04/25(金) 19:08:46.41 ID:ldQxBRm0
そもそも回収という言葉は何を意味するのか
420デフォルトの名無しさん:2014/04/25(金) 22:24:27.23 ID:NLMkqq4l
.cppの拡張子でc言語を使いたいのですが(関数のオーバーロードが出来る等 便利な機能があるので)
c++で拡張された部分を使わなければmallocを用いても平気でしょうか?
421デフォルトの名無しさん:2014/04/25(金) 22:36:21.02 ID:ldQxBRm0
拡張が見極められるならいいんじゃね
422デフォルトの名無しさん:2014/04/25(金) 22:36:57.12 ID:mwVDX3LY
ボクは平気です
423デフォルトの名無しさん:2014/04/25(金) 22:37:35.91 ID:jPmvuOB6
言ってることがハチャメチャ
424デフォルトの名無しさん:2014/04/25(金) 22:41:48.11 ID:NLMkqq4l
>>423
自分でも言ってて ん?って感じなんですが
for(int i; ; ++i)
みたいなものだとか
結構限定的に使うって感じなんですが
大まかには std空間とクラスを使わない

もっと言うと.cのものを.cppにかえちゃっても大丈夫でしょうかみたいな感じですかね...
425デフォルトの名無しさん:2014/04/25(金) 22:44:37.36 ID:I0yUpS7C
C++ で、新たに予約語になったものが、
たまたまCで使われてると、書き換えが必要になる (new とか delete とか)
426デフォルトの名無しさん:2014/04/25(金) 22:44:57.28 ID:XFGUZTlf
C経験者ですが例外・テンプレート・クラスを除く
C++の便利な機能を使いたいです。
C++コンパイラーを使ってCのスタイルでmallocを用いてもよかですか?
427デフォルトの名無しさん:2014/04/25(金) 22:45:39.98 ID:NLMkqq4l
bool型があったりとか(intで代用すれば問題ないのですが)
//でコメントがサポートされてないのもあるし
cppのおいしい部分だけ使いたいんですよね...
428デフォルトの名無しさん:2014/04/25(金) 22:46:59.12 ID:vKWRVcWD
>>426
宜しいんじゃござんせんか?
429デフォルトの名無しさん:2014/04/25(金) 22:49:02.72 ID:vKWRVcWD
>>427
>bool型があったりとか(intで代用すれば問題ないのですが)
C99にもそうでない環境でも、大抵stdbool.hが使えると思いますが。

>//でコメントがサポートされてないのもあるし
今時、そんな例外殆どないでしょう。そもそも、普通C99
430デフォルトの名無しさん:2014/04/25(金) 22:50:46.85 ID:NLMkqq4l
>>429
すんません
ちょっと極端に言いたかっただけです
431デフォルトの名無しさん:2014/04/25(金) 22:53:19.80 ID:LtcOoigK
>>426
いわゆるbetter Cか……別に良いんじゃない?
ただ、mallocじゃなくてnew使おうな
それに、例外・テンプレート・クラスはC++の旨味の大部分だったりするけど大丈夫?
(STLは例外・テンプレート・クラスによる産物なので使わないって意味でOK?)
432デフォルトの名無しさん:2014/04/25(金) 23:15:36.79 ID:JcA2jKFr
>>426
むしろ便利なC関数を使えるのがC++の利点だと思う
printfの代わりにcoutしかなかったら間違いなくハゲるし、
mallocの代わりにchar配列をnewするとか、やってられんよ
433デフォルトの名無しさん:2014/04/25(金) 23:18:06.68 ID:ldQxBRm0
coutはそうだけどmallocじゃなくnewしようよ
後でオーバーロードしたくなったりするじゃんね
434デフォルトの名無しさん:2014/04/25(金) 23:22:28.07 ID:LtcOoigK
>>432
>printfの代わりにcoutしかなかったら間違いなくハゲる
確かにマニピュレータ使い倒して書式設定するのは慣れないとキツいかもね
でもただ表示させたいだけならcout(ストリーム処理)の方が修正も楽じゃん?
>char配列をnewする
悪いことは言わないからstring使っとけ
435デフォルトの名無しさん:2014/04/25(金) 23:31:47.30 ID:vKWRVcWD
まぁ、std::stringの代わりにstd::vector<char>を使うこともあるが。
streamのいい点はstd::complexでも分かるように、自作のクラスも階層的に
一度出力処理を書いておけば事が足りる点だな。
436デフォルトの名無しさん:2014/04/26(土) 00:07:53.16 ID:4cZNGc28
初心者に対して「mallocじゃなくてnewを使え」とだけしか言わないと、free()使った
ままだったりdelete[]使わなかったり、コンパイルエラーにならないところではまりそう。
437デフォルトの名無しさん:2014/04/26(土) 00:14:02.92 ID:2mPnYH20
その手の馬鹿は何度も何度もハマればいいんだよ
438デフォルトの名無しさん:2014/04/26(土) 00:19:25.71 ID:LrSvGOM8
malloc が駄目ならalloca を使えば良いじゃない
439デフォルトの名無しさん:2014/04/26(土) 00:21:45.69 ID:e4eB3nqK
大抵その時は動いてしまうからたちが悪いんたよ。
440デフォルトの名無しさん:2014/04/26(土) 00:54:22.87 ID:TYiKquMH
VC使いに多いかと。
私も平気にfreadとか使ってました。
441デフォルトの名無しさん:2014/04/26(土) 01:00:10.95 ID:LAXHDRsh
>>439
ガシガシ使わないとそうそう問題にはなりにくいからな……>メモリーリーク
442デフォルトの名無しさん:2014/04/26(土) 01:23:39.24 ID:RUZS612/
こんなコードみつけたんだけど
static const LPCTSTR list[] = {TEXT("AAA"),TEXT("BBB"),TEXT("CCC")};
LPCTSTRの前にconstつけるのと、つけないのでどんな変化があるんですか?
443デフォルトの名無しさん:2014/04/26(土) 01:35:06.71 ID:rnp+GXdW
LPCTSTRにコンストはいってるか?
そうだとしても明記したかったんだろ。
444デフォルトの名無しさん:2014/04/26(土) 01:42:16.09 ID:fIjhv7f7
list[0]++;
445デフォルトの名無しさん:2014/04/26(土) 07:44:36.86 ID:fzTmiJwL
>>441
malloc()なんて裸でつかうもんじゃないよ
446デフォルトの名無しさん:2014/04/26(土) 07:47:28.76 ID:fKMdaZRq
// main.c
int main() {
Test test;
test.func();
}

// test.h
class Test {
void func();
};

// test.cpp
void Test::func() {
Test2 tes2;
test2.func2();
}

// test2.h
class Test2 {
void func2();
};

// test2.cpp
void Test2::func2(){
printf("hello\n");
}
447デフォルトの名無しさん:2014/04/26(土) 07:50:59.21 ID:fKMdaZRq
というソースコードがあったときに以下のようなmakefileを書きました.

// makefile
main.o : main.cpp
g++ -c main.cpp
test.o : test.cpp
g++ -c test.cpp
test2.o : test2.cpp
g++ -c test2.cpp

libtest2.a : test2.o
ar crsv libtest2.a test2.o
libtest.a : test.o libtest2.a
ar crsv libtest.a test.o libtest2.a

program : main.o libtest.a
g++ -o main main.o libtest.a
448デフォルトの名無しさん:2014/04/26(土) 07:52:03.99 ID:FDgGm5F+
malloc使うといけないのか?
449デフォルトの名無しさん:2014/04/26(土) 07:56:41.06 ID:fKMdaZRq
ここで,make programすると,Test2::func2がundefined referenceとなってしまいます.
この理由を教えて頂けないでしょうか?

自分では,ar crsv libtest.a test.o libtest2.aでは,Test::funcとTest2::func2が
紐づかないのかなと考えているのですが,,,

尚,makefileの最終行をg++ -o main main.o libtest.a libtest2.aとすれば
成功することはわかっています.
450デフォルトの名無しさん:2014/04/26(土) 08:04:58.64 ID:H4OEZVXF
不思議だねw
451デフォルトの名無しさん:2014/04/26(土) 08:14:52.42 ID:qVfVXmNl
以下のコードがコンパイル出来ないのです。
std::make_sharedの引数にthisポインタを使用していることが問題っぽいのですが。。。
どなたかC++にお詳しい方、どうか御教授くださいまし。

#include <iostream>
#include <memory>

class T;
class TS;
class TS1;
class TS2;

class TS
{
public:
virtual ~TS() {}
virtual void change() {};
};

class T
{
public:
T() { ts_ = std::make_shared<TS>(); }
void f1() { ts_ = std::make_shared<TS1>(this); } // <= ここと
void f2() { ts_ = std::make_shared<TS2>(this); } // <= ここに問題がありそうなんです。
void ft() { ts_->change(); }
private:
std::shared_ptr<TS> ts_;
};
452デフォルトの名無しさん:2014/04/26(土) 08:16:25.20 ID:qVfVXmNl
>>451の続きです

class TS1 : public TS
{
public:
TS1(T* t) : t_(t) {}
virtual ~TS1() {std::cout << "TS1 is dead" << std::endl; }
virtual void change() { t_->f2(); }
private:
T* t_;
};

class TS2 : public TS
{
public:
TS2(T* t) : t_(t) {}
virtual ~TS2() {std::cout << "TS2 is dead" << std::endl; }
virtual void change() { t_->f1(); }
private:
T* t_;
};

int main(void)
{
T t;
for (int i = 0; i < 20; i++) {
std::cout << i;
t.ft();
}
std::cout << "END" << std::endl;
}
453デフォルトの名無しさん:2014/04/26(土) 08:19:13.28 ID:H4OEZVXF
エラーメッセージは?
454デフォルトの名無しさん:2014/04/26(土) 08:22:01.61 ID:qVfVXmNl
shared_ptrに関するエラーが200行以上出てきます...
455デフォルトの名無しさん:2014/04/26(土) 08:27:27.83 ID:BINT6LGE
クラスも使わないbetter C利用者に対して
mallocの代わりにnewを使えというやつはバカ。
エラー処理の考え方が根本的に違って大きな見直しが必用になるのだから
過剰なものを「こちらがいいんだ!」と押しつける
ありがた迷惑
456デフォルトの名無しさん:2014/04/26(土) 08:57:11.02 ID:qVfVXmNl
すいません >>451 >>452です。
自己解決しました。

単純にstd::make_shared<TS1>とstd::make_shared<TS2>を呼び出す前に
TS1とTS2の定義がなされてなかったためエラーが出ただけでした。

あまりにも長いエラーメッセージだったのでとんでもないことをしでかしているのかと焦って質問したのですが、
なんともないような話でした。
すいません。。。 > <
457デフォルトの名無しさん:2014/04/26(土) 09:17:48.18 ID:oTpRF7L2
make_sharedにthisって根本的に間違ってるぞ。
458デフォルトの名無しさん:2014/04/26(土) 09:23:24.24 ID:e4eB3nqK
>>456
単にメンバー内のクラスに持ち主の参照を持たせたいだけだとおもう。

>>455
プリミティブ型なら文句は言わんがC++の構造体とかもmalloc使うのは嫌な匂いがするな。
mallocしか使えないなら大人しくC言語使ってた方がいいんじゃね?
そもそもクラス使わないC++に何のメリットがあんの?
459デフォルトの名無しさん:2014/04/26(土) 09:29:41.92 ID:oTpRF7L2
ああ、単にコンストラクタの引数ってだけか
460デフォルトの名無しさん:2014/04/26(土) 12:45:37.15 ID:LAXHDRsh
>>458
>クラス使わないC++に何のメリットがあんの?
俺も同意見だが、覚えるのが大変だから覚えない、ってことじゃね?
http://www.kijineko.co.jp/tech/betterc/1
461デフォルトの名無しさん:2014/04/26(土) 13:05:57.99 ID:dMJ+hsKf
>>442
list[] 自体が const になるよ。
462デフォルトの名無しさん:2014/04/26(土) 13:10:59.56 ID:dMJ+hsKf
>>426
その条件を守っている限りは、問題ないと思いうよ。
*.c と混在させる場合は外部リンケージに注意ね。
463デフォルトの名無しさん:2014/04/26(土) 13:12:17.01 ID:+AzHArIu
C++の場合、構造体もクラスの一種だから
コンストラクタやデストラクタその他メソッドがあっても普通のことで
だから「構造体ならmalloc()でもいい」ってのは言えないんよね

…だから、その構造体が自分が管理するものであって
C形式の構造体としてのみ定義されるのなら、かなあ

上にも書かれてる通り、malloc()と違いnewのそれは例外になるから
例外処理を知らない人にはその場で強制終了みたいなもんなんよね
…まあメモリすら確保できないんなら、大概は強制終了で良いような気もするがw
464デフォルトの名無しさん:2014/04/26(土) 15:11:50.98 ID:au4nADwa
mallocの件は、単なるメモリ領域を確保したいような場合に、C++なら
newよりもシンプルな手段を取れるってことだろう。
例外じゃなく返り値で判定できるのもいいところ。
当たり前だけど、C++のオブジェクトをmallocで確保するようなことはしないほうがいい。
465デフォルトの名無しさん:2014/04/26(土) 15:29:44.95 ID:e4eB3nqK
>>460
なんだ甘えか。
だったらC言語使ってろよって話ですね。
C++の案件にCの知識だけでずっとやっていこうとか思ってるならしね。
>>464
型を決めずに単なるメモリ確保する事って殆ど無いだろ。
例外が嫌ならせめてnew(std::nothrow)使え。それでも例外発生するときはあるがその時はmallocで代替出来ないときだ。
466デフォルトの名無しさん:2014/04/26(土) 15:36:17.91 ID:EyRxebkg
何熱くなってるのか知らんが
C++はベターCとしても使えるようになってるんだしmalloc/free使ってもいいだろ
ここの質問者はプログラミング専門とは限らないんだし
467デフォルトの名無しさん:2014/04/26(土) 15:41:00.49 ID:ztZgog+i
windows7の32bit VS2013pro無償評価版使用で以下のエラーが出るので
どこをいじったらいいか教授願います

error RC2104: undefined keyword or key name: C:\asukalib-master\asukalib-master\AsukaLib.rc 99 1 AsukaLib

https://github.com/naka2/asukalib ソース一式
https://github.com/naka2/asukalib/blob/master/AsukaLib.h
https://github.com/naka2/asukalib/blob/master/resource.h
468デフォルトの名無しさん:2014/04/26(土) 15:46:49.33 ID:rnp+GXdW
AsukaLib.rc 99 1 で、AsukaLibがundefined keyword or key nameでは
469デフォルトの名無しさん:2014/04/26(土) 15:49:33.08 ID:e4eB3nqK
>>466
いや、だからクラスも使わないC++の何がベターなの?
メリットない使い方してmalloc使うことによって落とし穴にハマるぐらいならC言語使えばいいじゃん?C++覚える気もないみたいだし?
470デフォルトの名無しさん:2014/04/26(土) 15:58:18.06 ID:au4nADwa
C++信者はこれだから・・・。
例えば、Cの文字列処理は初心者泣かせなので、文字列処理のみ
std::stringを使うのはありだよ
471デフォルトの名無しさん:2014/04/26(土) 16:06:00.04 ID:e4eB3nqK
>>470
例外、テンプレート、クラスを使わないって前提で話してたんだけど?
std::string使う時点で全てに当てはまりますやん
472デフォルトの名無しさん:2014/04/26(土) 16:24:09.22 ID:EyRxebkg
>>469
質問者が「関数オーバーロード」を上げてるでしょ
たとえ「それだけ」であっても便利だと思うけど
引数型ごとに関数名変えるのは確かに面倒だし
473デフォルトの名無しさん:2014/04/26(土) 16:27:43.67 ID:dMJ+hsKf
>>469
基本的には、とにかくやってみろ、でいいんじゃね。
本人が制限つけた上でオーバーロード機能を使いたいって言ってるだけなんだから。
仕事じゃないんだから、そこまで全力で反対しなくても。
474デフォルトの名無しさん:2014/04/26(土) 18:19:37.24 ID:LAXHDRsh
>>466
ベターC的な要素って大抵最新のCには実装されているんだよな(例:ブロックの途中で宣言)

関数オーバーロードとかのようにほんのつまみ食いしかしないってんなら知らん
でもまあstd::stringとかstd::vectorとかはちょっと覚えるだけで楽できる機能の代表だったり……
475デフォルトの名無しさん:2014/04/26(土) 18:37:04.64 ID:Vsr2O9eZ
>std::stringとかstd::vectorとかはちょっと覚えるだけで楽できる

例外安全はくそくらえってことですねわかります
476デフォルトの名無しさん:2014/04/26(土) 18:48:00.90 ID:JLcEd4yY
考慮する必要がどこにある
477デフォルトの名無しさん:2014/04/26(土) 19:22:58.63 ID:pdO++Zde
バッファオーバーランに比べればどうということはない
478デフォルトの名無しさん:2014/04/26(土) 19:30:11.19 ID:e4eB3nqK
std::vector、std::stringを使っただけで例外安全じゃなくなるわけでもなし。メモリ確保に失敗なんていう致命的な例外発生したなら大抵はそのまま終了でいいんじゃないかと思う。

そもそもC言語だけ使ってたら例外と無縁で居られるかと言えばそうでもないし、例えばWindowsだといろんなWin32APIがC言語で使ってても例外出す(SEH)。
479デフォルトの名無しさん:2014/04/26(土) 19:40:11.42 ID:TksPWY/c
kuso *p = (kuso *)malloc(sizeof(kuso)*100);

vector<int> a(100); // ここで例外出たらどうすんの

free(p);
480デフォルトの名無しさん:2014/04/26(土) 19:51:25.71 ID:e4eB3nqK
>>479
そのままプロセス終了してなんの問題もないじゃん。
481デフォルトの名無しさん:2014/04/26(土) 19:56:45.35 ID:ahYJ/99m
つまり例外安全はくそくらえってこと
482デフォルトの名無しさん:2014/04/26(土) 19:58:16.52 ID:e4eB3nqK
はあ?
外に例外出さない事が例外安全ってわけじゃないぞ?
483デフォルトの名無しさん:2014/04/26(土) 20:01:51.06 ID:ahYJ/99m
>>478
>Win32APIがC言語で使ってても例外出す(SEH)
参考までに、例外を出すAPIは何?
484デフォルトの名無しさん:2014/04/26(土) 21:06:09.66 ID:LAXHDRsh
>>482
例外安全の段階:
[1]不送出保証→そもそも例外を外に出さない
[2]強い例外安全性→失敗しても副作用を起こさず、全データは元の値を保持
[3]基本的例外安全性→失敗すると副作用が起こるかもしれないがデータは有効な値である
485デフォルトの名無しさん:2014/04/27(日) 09:02:09.27 ID:jKbi43u9
>>474
> 関数オーバーロードとかのようにほんのつまみ食いしかしないってんなら知らん

恥ずかしくない?
ちょっと ROM ってなよ。
486デフォルトの名無しさん:2014/04/27(日) 10:26:32.60 ID:GHcWHbCh
>>483
InitializeCriticalSection
487デフォルトの名無しさん:2014/04/27(日) 13:12:36.77 ID:lkIW61dB
>>483
int a = 1, b = 0, c;
c = a / b; // SEH発生。

RaiseExceptionでもSEH起こせる。
488デフォルトの名無しさん:2014/04/27(日) 13:50:54.86 ID:t1mtJyDY
>>469
流石にクラス使っちゃうとbetterCどころかC++でしか無いと思うが…

>>474
そもそもbetterCって言葉自体が昔のCで生まれた言葉だからな
まあ、現代ではC++環境をC言語として使わざるを得ないケースもある
その結果C99ではなくbetterCに成らざるを得ないって事情もあるけど
489デフォルトの名無しさん:2014/04/27(日) 15:25:31.54 ID:ysde5Cmk
>>487
undefined behaviorの挙動や
明示的に例外だすAPIの話をされてもねぇ
490デフォルトの名無しさん:2014/04/27(日) 15:25:43.37 ID:XlPRquUK
SEH の __try 〜 __finally を実装してる Cコンパイラで
どうSEHを捕まえてるのか良くわからんな
491デフォルトの名無しさん:2014/04/27(日) 16:00:19.19 ID:jKbi43u9
>>489
> 明示的に例外だすAPIの話をされてもねぇ

意味わからん
492デフォルトの名無しさん:2014/04/27(日) 22:54:26.81 ID:OJzsjaa+
toupperやtolowerの全角文字版って有りますか?
493デフォルトの名無しさん:2014/04/27(日) 23:03:22.74 ID:dRMpu4rZ
>>492
全角文字の文字コードは何?JIS?shift-JIS(CP932)?, EUC?, それとも?
494デフォルトの名無しさん:2014/04/27(日) 23:17:09.79 ID:KqK7z0IN
よくある、計算結果の下5桁を〜の問題をとく上で、
10進数で表すと5桁以内の数字A の二乗の下五桁をとって新しいAとし、・・・
をできるだけ早く何回も繰り返す計算をC言語で実現したいです。どんな方法が最適でしょうか?

素直に
int A = 765 //初期値
for(i=0; i<10000; i++){
A = (A*A) % 100000;
}
とするのが一番早いのでしょうか
495デフォルトの名無しさん:2014/04/27(日) 23:20:06.18 ID:D03yOYH6
gmpだな
496デフォルトの名無しさん:2014/04/28(月) 00:07:41.35 ID:vBB1ZBuL
>>494
マジレスすると、その計算はもっとエレガントに書ける
http://d.hatena.ne.jp/kazu-yamamoto/20090223/1235372875
ついでにメモ化を施せば完璧
497デフォルトの名無しさん:2014/04/28(月) 00:37:29.03 ID:S0oQyofE
最適化された式を求めるのは数学者がやるのか?
498デフォルトの名無しさん:2014/04/28(月) 05:29:03.79 ID:nB7PeshG
>>494
Aが符号付き32bitで 46341 以上の時、また、
Aが符号無し32bitで 65537 以上の時、
A * A はオーバーフローするね。

A = (A * A) % 100000;
で、次のAは 100000 の剰余なのでありえる。

Aを64bit値にするか、宿題の制限で32bit整数しか
使えないのなら自前でやるか
499デフォルトの名無しさん:2014/04/28(月) 11:03:17.60 ID:3V71eLEm
>>494
オーバーフローを回避するにはキャストすると良いよ
A = ((long long)A * A) % 100000;
500デフォルトの名無しさん:2014/04/28(月) 14:46:48.36 ID:JkAfPWWw
ていうか素で計算しちゃ駄目な
パズル寄りの問題なんじゃないの
501デフォルトの名無しさん:2014/04/28(月) 15:08:25.42 ID:97z81I41
long double という128bitがあるのに
intには128bitがないのでしょうか?
502デフォルトの名無しさん:2014/04/28(月) 15:22:00.40 ID:mheEU0a2
long doubleが128ビットとは決まっていないし
intが128ビットでも問題ない
503デフォルトの名無しさん:2014/04/28(月) 15:58:44.30 ID:RIsmFlCa
またこいつか
504デフォルトの名無しさん:2014/04/28(月) 16:05:25.72 ID:fuxL29fH
vs は80bitだったし、今はdouble と一緒だよ。
505デフォルトの名無しさん:2014/04/28(月) 19:04:52.24 ID:t63YSNJY
>>504
>vs は80bitだったし
本当か?単にFPUの内部処理桁というだけで、表からは触れないんじゃなかったか?
506デフォルトの名無しさん:2014/04/28(月) 19:15:35.13 ID:mheEU0a2
win16時代のms-c系は80ビットだった
507デフォルトの名無しさん:2014/04/28(月) 19:24:46.50 ID:fuxL29fH
508デフォルトの名無しさん:2014/04/28(月) 20:08:02.05 ID:eYjErRwy
windows formに関してなのですが
//Form1.h
private:
    PictureBox^ p;
    System::void Form1_Load(System::Object^ , Sytem::EventArgs^ e)
    {
        p = gcnew PictureBox;
        p->Dock = DockStyle::Fill;
        p->BackColor = Color::White;
        
        p->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::display);
        this->Controls->Add(p);
    }
    void display(Object^ s, System::Windows::Forms::PaintEventArgs^ e)
    {
        draw(e, p);
    }
//graph.cpp
    void draw(System::Windows::Forms::PaintEventArgs^ e, System::Windows::Forms::PictureBox^ p)
    {
        System::Drawing::Graphics^ g = e->Graphics;
        //描画処理
    }
のように分割コンパイルしても大丈夫ですか(一応エラーは出なかったのですが)
509デフォルトの名無しさん:2014/04/28(月) 20:32:31.13 ID:/YsEmaXY
省略する部分のチョイスがおかしいので読み取れないが
エラーも警告も無ければ大丈夫じゃない?
510デフォルトの名無しさん:2014/04/28(月) 20:34:54.25 ID:eYjErRwy
>>509
ありがとうございます
たしかにチョイスしているところが微妙ですね...
要はForm1.hにガリガリ書きたくないので外部ファイルに委託したかっただけです
511デフォルトの名無しさん:2014/04/28(月) 20:50:39.82 ID:/YsEmaXY
要はC++/CLIでポトペタし生成されたコードが
汚ならしく我慢できないって話でしょ?
それは昔から言われてる事で改善される気配もないから
GUI周りはC#で書くのが基本だよ
512デフォルトの名無しさん:2014/04/28(月) 20:55:46.98 ID:eYjErRwy
>>511
そうなのでしょうね...
ところで あまりC#には詳しくないので、
.NETを使う上ではc++とc#の実行速度に違いとかは出てくるのでしょうか
513デフォルトの名無しさん:2014/04/28(月) 21:06:47.27 ID:/YsEmaXY
基本同じと見ていいよ
ど忘れしたが3文字のなんだったかな、IronPythonで使われてるソレは遅い
でも、C#,C++/CLI,VB.NET,Boo,F#...なんかは同等とみていい
C++/CLIのメリットは
速度じゃなくて、P/Invokeでラッパー書かれることが無いようなマイナーな
C/C++なライブラリをそのまま扱えるので手抜きが出来る
正直それだけだと思うよ
514デフォルトの名無しさん:2014/04/28(月) 21:12:51.02 ID:eYjErRwy
ありがとうございます
c#はシンプルに書けるので良いですよね
いままでC/C++を使っていましたが
確かにC#に移行してみるのも手ですね
515デフォルトの名無しさん:2014/04/28(月) 22:17:33.16 ID:nYT9hkTJ
>>513
3文字っつーとDLRかな
まああれが遅いのはしゃーない気がする
516デフォルトの名無しさん:2014/04/28(月) 23:41:11.77 ID:rB8lTHTI
switch文で意図的なフォールスルーをするとき
なにかわかりやすい目印を書きたいんだけど
みんなはどうしてる?
517デフォルトの名無しさん:2014/04/28(月) 23:42:52.41 ID:nYC6TNjH
// fall through
518デフォルトの名無しさん:2014/04/29(火) 00:04:11.92 ID:aeW4+FvO
>>515
それそれ
しゃーない部分があるのは承知してるし
場合によっては使える状況もあるだろうから否定はしない
ただ、用途に合わない人にとって
裏切られたというか騙された感を持つのはこれもまたしゃーない部分なんじゃないかな
ソレ系のものはソレである事をなるべく目立たないよう擬態する傾向にあるよね
suffixにソレを付ける命名規則を義務付けて欲しいよマジで
手間が増えるだけで嫌がらせでしか無い
519デフォルトの名無しさん:2014/04/29(火) 00:24:59.21 ID:Br1Uxtes
>>516
// no break
520デフォルトの名無しさん:2014/04/29(火) 00:45:09.57 ID:9oDU/gS/
ガベコレが自動でほぼ制御できないjavaとC#で長く経験をつんできた開発者が
C++の原始的なリソース管理に慣れるにはどういう学習素材が推奨されますか?
521デフォルトの名無しさん:2014/04/29(火) 00:47:07.98 ID:QmOywj8Q
メモリ以外のリソースに関しては
C++もJavaもC#も変わらないと思うのだが
522デフォルトの名無しさん:2014/04/29(火) 01:18:14.33 ID:QkXu+GLn
コンストラクタ、デストラクタがあるからJavaより楽だよな。
523デフォルトの名無しさん:2014/04/29(火) 01:32:39.98 ID:F17WGv/b
Javaは原因を突き止めるのが非常に困難なメモリリークに弱い印象
実際すごく苦労している
524デフォルトの名無しさん:2014/04/29(火) 01:46:56.22 ID:aeW4+FvO
>>520
質問がおかしい
> JavaとC#で長く経験をつんできた開発者
であるならばCは使えるでしょ
525デフォルトの名無しさん:2014/04/29(火) 02:48:00.08 ID:AbATIs9f
初歩的すぎる質問ですがVC++2010で標準ライブラリを使うとき
#include の前に必要な準備はありますか?
(どこかからヘッダファイルをダウンロードして突っ込むとか)
526デフォルトの名無しさん:2014/04/29(火) 02:51:13.36 ID:tzWpsPe5
>>525
標準ライブラリなら何も要らないよ
普通に「#include <stdio.h>」とか書けばいい
と言うか他のコンパイラでも標準ライブラリは
デフォで組み込まれてるだろw
527デフォルトの名無しさん:2014/04/29(火) 05:43:49.50 ID:9oDU/gS/
JavaとC#の経験しかなくて、オブジェクト指向の基本は理解してるつもりだけど
C++でコード書くと必ずメモリリークが起ります。
こんな私が読むべき基本書籍があればご教示ください。
528デフォルトの名無しさん:2014/04/29(火) 05:58:15.66 ID:04fcb81y
newなどを使わず、STLを使う。
529デフォルトの名無しさん:2014/04/29(火) 06:04:36.63 ID:pH50e3ah
newしたものは必ずスマポに入れる
530デフォルトの名無しさん:2014/04/29(火) 07:42:22.09 ID:TKW4+dLj
newしたものはグローバル変数にいれる。そしてdeleteしない。絶対にしない。
531デフォルトの名無しさん:2014/04/29(火) 08:09:12.73 ID:B/znruqO
それじゃダメだろ
532デフォルトの名無しさん:2014/04/29(火) 08:51:47.48 ID:TKW4+dLj
64ビットあれば使い切れないから大丈夫。使い切るころには128ビットになってる。
533デフォルトの名無しさん:2014/04/29(火) 09:11:51.14 ID:devc/baf
>>527
オブジェクト指向を忘れるのが第一
534デフォルトの名無しさん:2014/04/29(火) 09:40:00.00 ID:5ghJ9rEO
>>527
関数別にしてその関数をループで何回も呼んで
どの関数でリークしてるか確認
535デフォルトの名無しさん:2014/04/29(火) 09:41:52.06 ID:5ghJ9rEO
動的確保されたメモリのリークは_CrtSetDbgFlag使う
536デフォルトの名無しさん:2014/04/29(火) 18:35:47.38 ID:lGzouSbD
素人だがvectorじゃだめなのん?
537デフォルトの名無しさん:2014/04/29(火) 18:46:49.51 ID:qPmT0/IR
そんなレベルの素人は引っ込んでろ(`・ω・´)!
538デフォルトの名無しさん:2014/04/29(火) 18:55:46.21 ID:lGzouSbD
>>537
じゃあ代案出してみろよ
539デフォルトの名無しさん:2014/04/29(火) 19:00:52.43 ID:qPmT0/IR
>>529
これに一票
540KAC:2014/04/29(火) 19:16:34.41 ID:3cTlepGQ
>>527
その手の手法に関するいい書籍は見たこと無いな。

とはいえ、さほど難しい話じゃ無い。
忘れててもなんとかなるような案が上に色々紹介されてるが、
基本的にはdeleteを忘れなければいい。

処理の初めにnewしたら処理が終わってdelete
クラス生成時にnewしたらクラス消すときにdelete
というように、作るタイミングと消すタイミングは対にできる。
(初めに0初期化して適宜newする方法でも同じ考えでいい)

プログラムで何かをロックしてロック解除を忘れることは無いよな?
同じようなイメージで扱えばいいだけだよ。
541デフォルトの名無しさん:2014/04/29(火) 19:17:16.90 ID:lGzouSbD
本末転倒ではあるがnewを使いたければ素直にgcのあるものを使えば良いと思うんだけど...
そもそもjava c#と違ってnew避けるべきだと思うんだが速度は落ちるし
一応gcを実装するライブラリもあったような記憶はあるけど
いきなりc++の設計に手を出すんじゃなくてcから手を出した方が良いと思うんだが素人だけど
>>539
あとスマポって万能なの?
542デフォルトの名無しさん:2014/04/29(火) 19:22:38.00 ID:YSaKMYqx
循環参照はだめで、「弱い」参照とかいろいろ駆使している模様、というかそういうときは Boehm GC でいいと思う
543デフォルトの名無しさん:2014/04/29(火) 19:27:46.11 ID:lGzouSbD
>>542
そうそれ
ところでBoehmGCには弱点とかある?
544デフォルトの名無しさん:2014/04/29(火) 19:39:02.96 ID:04fcb81y
速度はどれだけ違うんだよ?
STLの標準装備のコンストラクタ、デストラクタでは不可能なことはなによ?
545デフォルトの名無しさん:2014/04/29(火) 19:41:50.07 ID:qPmT0/IR
細かいことかもしらんが
>STLの標準装備のコンストラクタ、デストラクタでは不可能なことはなによ?
とはなんぞ
546デフォルトの名無しさん:2014/04/29(火) 19:42:08.49 ID:lGzouSbD
>>544
速度はどれだけ違うんだよ←実行する環境によって変わるだろ
547デフォルトの名無しさん:2014/04/29(火) 19:56:20.09 ID:04fcb81y
>>545
動的確保して自動で解放するが。

char *p = new char [10000];
int *q = new int [10000];



string p(10000,'\0');
vector<int> q(10000);
548デフォルトの名無しさん:2014/04/29(火) 19:58:13.49 ID:Kb/I3Vlc
速度は実測が基本
549デフォルトの名無しさん:2014/04/29(火) 20:00:27.36 ID:qPmT0/IR
>>547
それはコンストラクタ・デストラクタとは言わない(だから細かいことかもと言った)
550デフォルトの名無しさん:2014/04/29(火) 20:05:26.50 ID:qPmT0/IR
>>547
あと出来ないこととしてポリモーフィズムを使うクラスの動的確保が思いつかないのはどうかと
551デフォルトの名無しさん:2014/04/29(火) 20:08:30.04 ID:lGzouSbD
>>550
kwsk
552デフォルトの名無しさん:2014/04/29(火) 20:20:37.20 ID:qPmT0/IR
クラスAと派生Bがあって
管理はAだけで行いとして
new/deleteを使わずvectorだけで行えるかと言ったら
行えないでしょ
553デフォルトの名無しさん:2014/04/29(火) 20:26:46.08 ID:lGzouSbD
たしかに
554デフォルトの名無しさん:2014/04/29(火) 20:33:46.15 ID:04fcb81y
わけわからん
できれば簡易なコードをのせてくれないか
555デフォルトの名無しさん:2014/04/29(火) 20:48:13.51 ID:qPmT0/IR
class A
{
556デフォルトの名無しさん:2014/04/29(火) 20:52:35.27 ID:qPmT0/IR
http://codepad.org/0KxLBhHf
push_back時でエラーになると思ったが・・・
まあどのみち出来ないが
557デフォルトの名無しさん:2014/04/29(火) 21:21:18.44 ID:pH50e3ah
vector<B>とvector<A*>でおk
558デフォルトの名無しさん:2014/04/29(火) 21:25:20.68 ID:qPmT0/IR
それはポリモーフィズムの有り難みがないなあw
559デフォルトの名無しさん:2014/04/29(火) 21:26:58.34 ID:l3FqGA+x
スマポやptr_で突っ込めばいいじゃん
560デフォルトの名無しさん:2014/04/29(火) 21:27:01.68 ID:pH50e3ah
一応条件は満たしてるが誰もやらんわな
new使ってvector<unique_ptr<A>>にするわ
561デフォルトの名無しさん:2014/04/29(火) 21:39:32.17 ID:qPmT0/IR
だからわりと>>529に帰結する
562デフォルトの名無しさん:2014/04/29(火) 22:33:19.67 ID:Xa41IdEJ
boost::ptr_vectorでしょポリモーフィズムしたいのなら
563デフォルトの名無しさん:2014/04/29(火) 22:34:28.52 ID:Xa41IdEJ
>>556
ああそれスラッシング起きてますわ
エラーにはならない
564デフォルトの名無しさん:2014/04/29(火) 22:40:08.35 ID:dgi8jKwW
>>563
スライシングでは?
と突っ込んでみる。
565デフォルトの名無しさん:2014/04/29(火) 23:29:13.34 ID:U0vwb+Hl
スラッシングってメモリが足りなくて仮想記憶が動きっぱなしになってしまう状態だよな
566デフォルトの名無しさん:2014/04/29(火) 23:53:34.34 ID:5ghJ9rEO
スワップひどい常態か
567デフォルトの名無しさん:2014/04/30(水) 10:37:19.00 ID:Q2kmZuTL
vector<bool>で
1000番目だけtrueにしてあとは0にしたいんですけど、
push_backを1000回繰り替えさないと駄目なんですか?
まとめて入力する方法があれば数十回0をコピーするだけでいいと思うのですが。
568デフォルトの名無しさん:2014/04/30(水) 10:44:35.64 ID:d1Jpupa6
>>567
・vector<bool>は基本的に使わない方が良い。詳しくは次のURL参照
https://sites.google.com/site/cpprefjp/reference/vector
boolの配列的なものが欲しければdeque<bool>を使うか、std::bitsetを使うか、
boost::dynamic_bitsetを使うことをお勧めする
http://d.hatena.ne.jp/melpon/20111114/1321297053

・配列やコンテナを同じ値で埋める際はstd::fillを使うといい。使い方は次の通り
http://topcoder.g.hatena.ne.jp/nitoyon/20081019/1224429244
http://ppp-lab.sakura.ne.jp/cpp/library/016.html
569デフォルトの名無しさん:2014/04/30(水) 10:45:43.72 ID:cWCEN50W
>>567
そんなことは無い。いろんなメンバ関数があるからちゃんとドキュメント見て好きに使えばいい。
570デフォルトの名無しさん:2014/04/30(水) 10:54:40.91 ID:DEeR9Enb
>>567
v.resize(1001,false);
v[1000]=true;
571デフォルトの名無しさん:2014/04/30(水) 10:57:37.86 ID:Q2kmZuTL
std::fillはvector<bool>に最適化されてますか?
572デフォルトの名無しさん:2014/04/30(水) 10:59:21.14 ID:dDdWmtnK
いいえ
573デフォルトの名無しさん:2014/04/30(水) 11:00:28.63 ID:cWCEN50W
>>571
標準ではそんなことは規定されていない。実装によっては最適化されていることがあるかもしれない。
なんにせよ、速度は実測が基本。
574デフォルトの名無しさん:2014/04/30(水) 11:00:39.21 ID:Q2kmZuTL
>>570
ありがとうございます。
575デフォルトの名無しさん:2014/04/30(水) 16:38:42.27 ID:0+BDS9HE
2130706433を127.0.0.1の文字列に変換したいのですが、どのようにしたら良いでしょうか

よろしくお願いします。
576デフォルトの名無しさん:2014/04/30(水) 16:54:41.19 ID:d1Jpupa6
>>575
256との剰余を取ってから割ることを繰り返せばおk
577デフォルトの名無しさん:2014/04/30(水) 17:00:23.79 ID:a+D9ZyB5
>>575
puts(inet_ntoa((struct in_addr){.s_addr = inet_addr("2130706433")}));
578デフォルトの名無しさん:2014/04/30(水) 17:44:08.61 ID:0+BDS9HE
>>576-577
ありがとうございます
579デフォルトの名無しさん:2014/04/30(水) 22:52:24.52 ID:Aiz3G3Sd
テンプレート関数をintやdoubleのような特定の型に制限する方法はありますか
Javaでいうとextends、C#でいうとwhere T :みたいなもの
580デフォルトの名無しさん:2014/04/30(水) 23:00:32.39 ID:d1Jpupa6
>>579
C#のってこれ?
http://msdn.microsoft.com/ja-jp/library/bb384067.aspx
よく分からんが、テンプレートって型が違ってもOKなようにするものじゃねーの?
581デフォルトの名無しさん:2014/04/30(水) 23:05:35.65 ID:6FRdosdN
enable_if
582デフォルトの名無しさん:2014/05/01(木) 01:19:59.17 ID:f1m4ekfh
int i = 0; WCHAR num[2]={0}; LVITEM item = {0};
_itow_s(i,num,10,sizeof(num));
item.pszText = num;
583デフォルトの名無しさん:2014/05/01(木) 01:21:55.06 ID:f1m4ekfh

→_itow_s(i,num,sizeof(num), 10);
って誘導先のスレに質問が移動してくる前に書いちまったw
584デフォルトの名無しさん:2014/05/01(木) 04:21:23.22 ID:w9/KPUlo
はいはーい

struct st1 {
int a;
struct st2 *b;
};

struct st2 {
int a;
struct st1 *b;
};

のような参照の仕方は仕様的に問題ありませんか?
一応gccではできたっぽいんですが、ほかのコンパイラとかで使っても大丈夫ですか?
どーも自信持てなくて、、、
585デフォルトの名無しさん:2014/05/01(木) 04:42:44.04 ID:cjwRCMlg
おk
586デフォルトの名無しさん:2014/05/01(木) 06:24:01.30 ID:9zM4+Fav
st1の前に、st2を前方宣言したら?
587586:2014/05/01(木) 06:29:36.93 ID:9zM4+Fav
あ、ポインタは32, 64ビットのどちらかで、
型が決まっているから、前方宣言いらんのか
588デフォルトの名無しさん:2014/05/01(木) 07:13:14.25 ID:cjwRCMlg
ポインタでも宣言は必要
589デフォルトの名無しさん:2014/05/01(木) 16:24:23.71 ID:O61PxCRM
ではない
590デフォルトの名無しさん:2014/05/01(木) 17:50:45.92 ID:EbX4Dp2d
>>582-583さんありがとうございます。こちらで答えてくれていたとは思いませんでした。

このレスを参考に
int i = 0; WCHAR num[2]={0}; LVITEM item = {0};
for(i=0;i<20;i++){
_itow_s(i+1,num,10,sizeof(num));
item.pszText = num;
item.iItem = i;
ListView_InsertItem(hList , &item);
}
としたところプログラムが起動しなくなってしまいました。
iの中を確認したところ_itow_sの時にiが初期化してしまうために無限ループが起きてしまっていると思うのですが、
_itow_s()にint変数を初期化する仕様があるのでしょうか?
初期化するようならint変数をもう1個用意すれば動くのですが、初期化の伴わないintからWCHARへの変換を行う関数というものは無いのでしょうか?
どなたかよろしくお願いします
591デフォルトの名無しさん:2014/05/01(木) 17:59:56.59 ID:K+RzAtOV
ヌルターミネートまでいれると最低3文字は必要だろ
592デフォルトの名無しさん:2014/05/01(木) 18:00:07.87 ID:cjwRCMlg
std::wstring strnum = std::to_wstring(i + 1);
item.pszText = const_cast<LPWSTR>(strnum.c_str());
593デフォルトの名無しさん:2014/05/01(木) 18:49:41.25 ID:O61PxCRM
バッファあふれが原因
594デフォルトの名無しさん:2014/05/01(木) 19:09:33.09 ID:X9uChr+4
itow_sの引数の順序を間違っているのと文字数を渡すべきなのにバイト数を渡している
595デフォルトの名無しさん:2014/05/01(木) 19:18:08.61 ID:EbX4Dp2d
>>591-594
ありがとうございます。無事解決しました。
596デフォルトの名無しさん:2014/05/02(金) 15:34:11.98 ID:Y5rKh6pa
ウィンドウHWND hWnd;をDestroyWindow()を使って破棄した場合、
再びhWnd=CreateWindow()という風に新しいウィンドウを作る事は出来るのでしょうか?
それともhWndというハンドル自体が破棄されるのでしょうか?

スイッチによって子ウィンドウを切り替えるアプリを作ろうとしているのですが、
スイッチを押す度にウィンドウを破棄→生成とする設計にするべきなのか
最初に子ウィンドウを複数作ってスイッチによって見えるウィンドウを変える設計にすべきなのかが判断付かないので質問しました。

どなたかよろしくお願いします。
597デフォルトの名無しさん:2014/05/02(金) 15:42:03.73 ID:mphOrT6X
出来る
598デフォルトの名無しさん:2014/05/02(金) 15:45:23.76 ID:wOX1O7vl
コリエイトしたものを使い回しているのではなく新たに生成しているのに
出来ないと思ったのが不思議
599デフォルトの名無しさん:2014/05/02(金) 16:06:08.20 ID:WERRY4Df
C++で画像を表示する場合、どれを使ったらいいの?
DXライブラリを使わない場合で
600デフォルトの名無しさん:2014/05/02(金) 16:09:56.65 ID:IdTqtCyu
gdip
601デフォルトの名無しさん:2014/05/02(金) 16:20:18.97 ID:Y5rKh6pa
>>597-598
ありがとうございます。
602デフォルトの名無しさん:2014/05/02(金) 16:48:37.49 ID:KtmglHA9
>>601
最初に複数作成
→切り替えは表示非表示
→終了時に破棄
のがスマートと思う
603デフォルトの名無しさん:2014/05/02(金) 16:50:12.77 ID:WERRY4Df
directdrawって使わない方がいいの?
代わりに何使えばいいの?
604デフォルトの名無しさん:2014/05/02(金) 18:50:10.79 ID:Y5rKh6pa
文字列の幅を求める関数を調べたらGetTextExtentPoint32()ってのが出てきたのですが、
この関数の第一引数の「デバイスコンテキスト」って何を入れたらいいのでしょうか?

また、文字列の幅を調べたい理由はリストボックスの横スクロールを使いたいと思ったからなのですが、
リストボックスの文字サイズってどうやって取得したらいいのでしょうか?
デフォルトのフォントを調べたところ、高さと幅の数値に0が入っていて自動的にサイズを調整する方式みたいなので困っています。

一度に二つ質問してしまってすみませんがよろしくお願いします。
605デフォルトの名無しさん:2014/05/02(金) 19:03:24.92 ID:IdTqtCyu
>>604
GetWindowDCで取れる
606デフォルトの名無しさん:2014/05/03(土) 01:55:01.96 ID:ZVBod6nU
int hoge(const string& str){
hoge<char>(str);
}
int hoge(const wstring& str){
hoge<wchar_t>(str);
}

template<class T> int hoge(const basic_string<T>& str){
//処理
}

みたいな書き方はありですか
607デフォルトの名無しさん:2014/05/03(土) 01:58:49.19 ID:Q6/trxkK
>>606
コンパイルしてみればわかるんじゃないの?
そうじゃないなら、何がわからないのか書いてもらわないと。
608KUSO KOTE ◆unko./w.Osri :2014/05/03(土) 02:19:35.05 ID:tvP1y9zx
特に問題は思い当たりませぬ。
http://ideone.com/6ry1qG
609デフォルトの名無しさん:2014/05/03(土) 10:35:51.17 ID:4EIdW7HC
C++のオーバーロード解決は明示的に指定しない限り
テンプレートより普通の関数優先で合ってる?
610デフォルトの名無しさん:2014/05/03(土) 11:44:12.05 ID:NUO+XoEk
>>604
Windows プログラミングの「画面描画の基礎」を少し勉強したほうがいい
断片的な知識でやると地雷だらけのバグアプリになる
611デフォルトの名無しさん:2014/05/03(土) 20:10:03.15 ID:lJjp0zKR
>>610
>>596みたいな事聞いてるんだぞ・・・
ksのksからで
カスじゃなくて基礎な
612デフォルトの名無しさん:2014/05/04(日) 03:21:49.77 ID:StveqMJh
>>608
どーもです
613【重要】:2014/05/04(日) 15:17:55.72 ID:owW4rydZ
hogeは禁止されています、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
なお、hogeはNGワードに追加しておくことが強く推奨されています。
614デフォルトの名無しさん:2014/05/04(日) 15:27:20.14 ID:0Lb8hh8H
嫌hogeをNGIDにするととても見やすいなーこのスレ
615デフォルトの名無しさん:2014/05/04(日) 16:16:35.49 ID:6pFdiYZZ
#include <pshpack2.h>

ってどういう意味あるの?
616超重要:2014/05/04(日) 16:37:15.78 ID:Av6aDk2F
hogeは禁止されていません。hogeを妬むチョーセン人がチョーセンルールを押し付けていますが、
日本人は従う必要はありません。
617デフォルトの名無しさん:2014/05/04(日) 16:37:35.03 ID:tByDu0vN
>>615
pshpack2.hをインクルードファイルサーチパスから探してインクルードする。
618デフォルトの名無しさん:2014/05/04(日) 19:18:25.75 ID:G4bkQ4r/
俺に向かってhageと言うなよ、わかったな
619超重要:2014/05/04(日) 20:19:26.89 ID:Av6aDk2F
このスレではハゲは尊称
620デフォルトの名無しさん:2014/05/04(日) 23:03:47.87 ID:vSRu9IqQ
>>618
ハゲ乙
621デフォルトの名無しさん:2014/05/05(月) 04:16:08.27 ID:xdFqa6AX
チョーンジン荒らしのくせにハゲとは生意気な
貴様が禿げるのは10年早い
622デフォルトの名無しさん:2014/05/05(月) 12:30:19.69 ID:Mu2ScZdD
nullptrをdeleteしてもdelete[]しても問題ないですよね?
623デフォルトの名無しさん:2014/05/05(月) 12:55:28.68 ID:CN0OEHd5
>>622
問題ない。
malloc()/free() で free(NULL); が「なにも起こらない」と定義されて以来の伝統だ。
624デフォルトの名無しさん:2014/05/05(月) 13:01:42.77 ID:r55hxj+Y
初心者が nullptr とか口にする時代がきていた
625デフォルトの名無しさん:2014/05/05(月) 15:54:09.89 ID:hsi4q6Ai
>>624
よう老害
626デフォルトの名無しさん:2014/05/05(月) 17:29:42.81 ID:ic/qAIV8
VC++ 2010 EEを使用してる環境で
#include <math.h>と記入しているのに
acosh()が未定義になります

使用したい場合はどうすればいいですか?
627デフォルトの名無しさん:2014/05/05(月) 17:39:11.07 ID:SYEvdBak
>>626
1.2013に替える

2.
#include <math.h>
namespace std{}//他との互換のため
using namespace std;
static double unko = acosh(1.0);

3.
#include <cmath>
static double unko = std::acosh(1.0);
628デフォルトの名無しさん:2014/05/05(月) 21:05:14.36 ID:ic/qAIV8
>>627
vistaなので1はできない
2,3も未定義と出たのでlog使った式に置き換えて対処しました
ありがとうございました
629デフォルトの名無しさん:2014/05/05(月) 23:06:39.14 ID:KNzAgd/2
>#include <math.h>と記入しているのに
>acosh()が未定義になります

そりゃmath.hヘッダーはおろか標準ライブラリに
acosh()なんて無いからな
630デフォルトの名無しさん:2014/05/05(月) 23:26:45.47 ID:EsHOP99t
>>629
いつの時代の人?
631デフォルトの名無しさん:2014/05/05(月) 23:42:58.99 ID:vDmHAviQ
>>630

> 626 名前:デフォルトの名無しさん[sage] 投稿日:2014/05/05(月) 17:29:42.81 ID:ic/qAIV8 [1/2]
> VC++ 2010 EEを使用してる環境で
632デフォルトの名無しさん:2014/05/05(月) 23:44:27.04 ID:vDmHAviQ
この手のやつはバージョン見て
boostあたりとプリプロセスで切り替えるのが定番なんじゃないの
633デフォルトの名無しさん:2014/05/05(月) 23:49:12.71 ID:vDmHAviQ
> バージョン見て
ってのはちと適当すぎた
OS、コンパイラ、バージョン、スイッチ、envあたりも見なきゃならんね
634デフォルトの名無しさん:2014/05/06(火) 00:37:10.49 ID:eHTf3NEj
Visual C++でコンパイル出来ているのにCライブラリがリンク出来ないとなると
/NODEFAULTLIBオプションしか思い当たらない。
635デフォルトの名無しさん:2014/05/06(火) 06:45:35.64 ID:5E8fiGLl
VisualStudioでacoshが使えるようになるのは2012からなんですよ
636デフォルトの名無しさん:2014/05/06(火) 07:10:09.00 ID:i8DiB40Z
なるほど
ISO/IEC 14882:2011およびISO/IEC 9899:1999
で規定されたacoshが無いコンパイラは捨てるしかあるまい
637デフォルトの名無しさん:2014/05/06(火) 13:07:56.84 ID:z8IrcxQC
acosh(x) = log(x + sqrt(x2 - 1))
638デフォルトの名無しさん:2014/05/06(火) 13:18:15.94 ID:QzakODtK
まさかの>>637の頭の悪さ、コミュ障っぷりには脱帽するしかない
639デフォルトの名無しさん:2014/05/06(火) 13:36:05.40 ID:mfZzKbLo
まさかの>>638の頭の悪さ、コミュ障っぷりには脱帽するしかない
640デフォルトの名無しさん:2014/05/06(火) 20:35:42.00 ID:WjTWSVZo
>>637
細かいが
acosh(x) = log(x + sqrt(pow(x, 2) - 1))
だな
641デフォルトの名無しさん:2014/05/06(火) 21:04:32.72 ID:c8YNOPNu
VCで数値演算を気合を入れてするようなすごい奴いないから2012からサポートなんだろ
ついでにそんな奴がWin使いにいるのか?
642デフォルトの名無しさん:2014/05/06(火) 21:05:50.40 ID:0/z9kdsI
精度的にはsqrt()の引き数はx * x - 1にしておきたいところだな。
643デフォルトの名無しさん:2014/05/06(火) 21:23:54.54 ID:WjTWSVZo
興味本位で物理演算?
自由落下とか空気抵抗ありとか
644デフォルトの名無しさん:2014/05/07(水) 15:46:20.67 ID:XxSBZtfo
>>641
学生?職業プログラマで普通に居るよ 例えば俺とか
別に凄いことでもなんでもない
645デフォルトの名無しさん:2014/05/07(水) 15:54:16.56 ID:s5t2UWqJ
ミサワ風イラストつけて頼む
646デフォルトの名無しさん:2014/05/07(水) 18:21:44.52 ID:MZ01fZnX
2chの住民平均以下の生活水準の奴にはここが居心地良いのかと
647デフォルトの名無しさん:2014/05/07(水) 22:15:16.82 ID:DmN4H+C2
>>644
5年前までは数値演算ならintelかPGIコンパイラと決まっていたんだが、最近MSも追い付いたのか?
648デフォルトの名無しさん:2014/05/07(水) 23:04:31.89 ID:XxSBZtfo
>>647
まあスピードが必要なところは外部ライブラリ使うことになるけどな
それはVCだろうがICCだろうが同じ
649デフォルトの名無しさん:2014/05/07(水) 23:15:32.84 ID:QqPD6ddY
お世話になります。
ロベールのC++入門本を2週しました。
プログラムはすべて打ち込んで動作確認したり一部改変したりして
学習したのですが、どうしても自作プログラムが書けません。
C言語でしたらプロとして通用するレベル(PG歴9年です)なのですが、
C++でまとまった意味のあるプログラムが書けません。
どのような訓練をすればいいでしょうか?
650649:2014/05/07(水) 23:17:26.44 ID:QqPD6ddY
C++で書きたいのはH8のプログラムです。マイコンです。
651デフォルトの名無しさん:2014/05/07(水) 23:32:23.38 ID:HeYKw+Nm
>スピードが必要なところは外部ライブラリ使うことになるけどな
なんかワロタ
652デフォルトの名無しさん:2014/05/07(水) 23:44:17.26 ID:ZcddfNS5
GMPとか勝てんだろ
653デフォルトの名無しさん:2014/05/07(水) 23:46:14.07 ID:cMom8c9/
>>651
知ったかクンだろ、スルーしてやれよ
654デフォルトの名無しさん:2014/05/08(木) 00:33:35.82 ID:NSiHhXoS
パフォーマンスが必要なところは他任せで、自分がやるのはそうじゃないところ
ってゆとり開発なら当然だよね。 いまはゆとり開発が主流だしね
655デフォルトの名無しさん:2014/05/08(木) 00:39:55.71 ID:u1P/WjZg
表計算をしたいという要求に対して
オペレーティングシステムと表計算アプリケーションの開発を
提案するんだろうか。
大切な所を購入ソフトに頼るのはゆとりとか言って
656デフォルトの名無しさん:2014/05/08(木) 00:42:28.50 ID:WPnVChLN
誰がそんな事を言っているのだろうか
657デフォルトの名無しさん:2014/05/08(木) 00:49:58.56 ID:NSiHhXoS
>>656
だれが言っているんだろね
658デフォルトの名無しさん:2014/05/08(木) 00:55:15.63 ID:F90LFLZ7
よーしパパ、
FFTをループのアンローリングしゃうぞー
659デフォルトの名無しさん:2014/05/08(木) 01:19:39.17 ID:WasTJn9b
Haswellでループのアンロールやってみたけどあまり効果がなかった
Pentium4の時はすごく違ったのになあ
660デフォルトの名無しさん:2014/05/08(木) 01:41:22.05 ID:Ejp4CkYN
>>659
適当にWikipediaでアーキテクチャ見てみた限り、
分岐予測が改善されたのと、パイプライン段数が減ってるから
予測ミスのペナルティがpentium4ほど大きくないからかな
661デフォルトの名無しさん:2014/05/08(木) 01:41:26.59 ID:/bB+WIRU
>>650
Cでなら書けると言い張るなら、Cで書けばいいじゃん。
どうしてもC++にしたいなら、一度Cで書いてから次の点に留意して書き直してみるとか。
・グローバル変数やデバイスのような単一資源はクラス化する。
・ネームスペースを活用する。
・GPIOのような固定値で表現できる資源はテンプレート関数化する。
いま思いつくのはこんなところかな。
662デフォルトの名無しさん:2014/05/08(木) 01:42:39.49 ID:1wrEfjwT
実践で全く役立たずのゆとりにゆとり呼ばわりされちゃったよ(笑)
663デフォルトの名無しさん:2014/05/08(木) 01:43:20.85 ID:/bB+WIRU
>>659
コンパイラに任せれば済むことでは?w
664デフォルトの名無しさん:2014/05/08(木) 01:47:45.96 ID:1wrEfjwT
偉そうなことほざいてるゆとりはFFTWやIPPより高速なFFTコードをアップしてからにしてくれな
665デフォルトの名無しさん:2014/05/08(木) 01:52:08.61 ID:0ZjLmGKH
C言語で
int id=001;
のように変数に10進数を与えたいのですが、10進数ではなく8進数として判断されてしまいます。
この0から始まる値を10進数として与えるにはどうすればいいのでしょうか。

すみません。よろしくお願いします。
666デフォルトの名無しさん:2014/05/08(木) 01:53:31.41 ID:Oom5aWWV
00を消せばいい
667デフォルトの名無しさん:2014/05/08(木) 01:53:56.37 ID:H5CeDMPH
車輪の再発明して何になるん
668デフォルトの名無しさん:2014/05/08(木) 01:58:57.37 ID:WPnVChLN
パフォーマンス、サイズ、ライセンス諸々
用途次第でよくある話じゃない?
669デフォルトの名無しさん:2014/05/08(木) 02:12:06.73 ID:1wrEfjwT
今時マイコンだって数値計算用のライブラリはチップメーカが最適化されたものを用意してるのが普通
C/C++の標準関数を使わなければいけないことのほうが稀
670デフォルトの名無しさん:2014/05/08(木) 02:34:47.69 ID:wkkQdFik
>>669
だからこそ、ゆとりやドカタでもそこそこのパフォーマンスを出せるものが作れる
671デフォルトの名無しさん:2014/05/08(木) 02:36:12.22 ID:QWFUcZUM
非常に初歩的な質問で申し訳ないです
int st[10][10]という配列の一行目に、2014050810という値を代入したいのですが
書き方を教えていただけませんか
672デフォルトの名無しさん:2014/05/08(木) 02:38:43.30 ID:o358HCml
>>671
1行目とは何を指すのか。
配列を行列と見做すのならrow-majorなのかcolumn-majorなのか。
673デフォルトの名無しさん:2014/05/08(木) 03:39:06.24 ID:35TTXgql
>>671
・「2014050810」が配列の各要素の数字をまとめたものの場合→
 素直に1つづつfor文で回してコピーしろよ
・「2014050810」が20億1405万810の場合→
 10で割るのと剰余をとるのを繰り返して配列1個づつにコピーしろよ
 (注:20億1405万810はint型変数1個にギリギリ入るので、
   20億1405万810を配列の各要素に代入したい場合は
   for文を回して(ry)
・「2014050810」が文字列(C言語ならchar型の配列)の場合→
 '0'を引くとかstrtolとかで数字に変換しろよ
674デフォルトの名無しさん:2014/05/08(木) 05:43:59.23 ID:G9NaZtKr
>>661
おー具体的なアドバイスありがとう!!
そうやってくんだねぇ
675デフォルトの名無しさん:2014/05/08(木) 09:59:45.58 ID:Pn75zzX2
皮肉を書いたら感謝されたでござる。
676デフォルトの名無しさん:2014/05/08(木) 10:07:10.43 ID:JZCmTzL0
>>673
てっきり1セルに入れる値と思い込んでいた俺のエスパー力はまだまだ未熟
677デフォルトの名無しさん:2014/05/08(木) 10:08:34.96 ID:35TTXgql
>>676
charをintにキャストする場合を忘れてたんだぜ……
678デフォルトの名無しさん:2014/05/08(木) 11:52:39.17 ID:TYDayfT0
scanf関数が良く理解できないのですが、
何方かご教授いただけませんか
よろしくお願いします。
679デフォルトの名無しさん:2014/05/08(木) 12:22:32.29 ID:VQ+BCLxz
>>678
書式の通りに入力
以上終わり
680デフォルトの名無しさん:2014/05/08(木) 13:06:23.48 ID:ZRNNbMYn
scanfってなんで未だに言語仕様の中に残ってるんだろう
681デフォルトの名無しさん:2014/05/08(木) 13:17:03.32 ID:OtdKkzKB
少し前の入門書でscanfやgetsがかなり感情的に否定されてたから
洗脳されちゃった人かな
682デフォルトの名無しさん:2014/05/08(木) 13:26:02.31 ID:JZCmTzL0
熟練者が内内で使う分には優れているが
入門書なんかで扱うべき代物ではないな
683デフォルトの名無しさん:2014/05/08(木) 13:34:16.13 ID:SgcQR1UW
入力処理以外の部分にフォーカスされたトピックがあって
ちゃちゃーっと とりあえず入力するのに使うと
684デフォルトの名無しさん:2014/05/08(木) 14:13:33.82 ID:+RsurlEd
C++でゲームを作っているのですが
ゲーム本編のクラスに細かい機能のクラスを追加したかった場合
どのように追加したクラスを本編クラスにくっつけるものなのですか?
本編クラスのメンバーでその追加クラスを生成すれば良いですか?
685デフォルトの名無しさん:2014/05/08(木) 15:30:14.62 ID:muF0Pbbm
c言語で、入力された値が1桁〜3桁までの、整数以外なら弾くプログラムを作りたいのですがどうしたらよいですか?

なるべくstdio.hのライブラリのみで作りたいです。
入力をchar型に入れればいいのは分かるんですが…。
686デフォルトの名無しさん:2014/05/08(木) 15:32:23.21 ID:QETE0hyv
宿題は、宿題スレへ・・・
687片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/08(木) 16:30:35.39 ID:o5H0kOM9
>>684
本編との共通データと共通インターフェイスを分析せよ。所有、仮想関数、継承などを使う。
688デフォルトの名無しさん:2014/05/08(木) 16:34:02.02 ID:PCqjElIP
C言語をプログラミングを始めたばかりなんですが
ピラミッドをfor文で作る際にln が段数で
for(i = 1; i <= ln; i++){
for(j = ln - i; j > 0; j--)
{
printf(" ");
}

for(j = i * 2 - 1; j > 0; j--)
{
printf("*");
}
putchar('¥n');
}

のi * 2 -1とかっていうのはパッと見て思いつくものなのでしょうか?
慣れればすぐに思いつけるものなのでしょうか?
689片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/08(木) 17:04:48.57 ID:o5H0kOM9
>>688
数学の等差数列。
690デフォルトの名無しさん:2014/05/08(木) 17:15:40.82 ID:Z/VcgkBH
>>685
1文字ずつ、0-9の数字かどうか確かめる
そしてそれが、1-3個あればよい

文字列(ascii)から数値(int)へ変換する関数
int atoi( const char *string );

これで数値へ変換できたら、0-999であるか確かめる


>>688
i * 2 - 1 は、1, 3, 5, 7, 9個の、"*"を表示する
なぜ、1, 2, 3, 4, 5じゃダメなのか?
理由はその作者にしかわからない
691デフォルトの名無しさん:2014/05/08(木) 18:00:18.08 ID:97XJLzXo
>>690
1,2,3,4,5じゃ綺麗なピラミッドにならないだろう。
>>688のコードを実行してみたら分かる
692デフォルトの名無しさん:2014/05/08(木) 18:03:54.78 ID:97XJLzXo
>>688は自分でそのピラミッドを表示するコードを書いてみて
他の人に見てもらったら、多分何人かはなんでそういうコードを
思いついたか疑問に思うだろう。
問題解決の道筋は一つとは限らない(最適解はあるだろうが)。
693デフォルトの名無しさん:2014/05/08(木) 18:07:03.46 ID:WPnVChLN
*を全角にすればイケるわけだから
結局の所は作者の好みだって言ってるんじゃない?
694デフォルトの名無しさん:2014/05/08(木) 19:15:36.07 ID:m/3Cotp7
C++でzip/unzipのライブラリありますか?
DotNetZipみたいな便利なのがあればいいのですが。
695デフォルトの名無しさん:2014/05/08(木) 19:23:32.39 ID:jSvCbKd2
zlib
696デフォルトの名無しさん:2014/05/08(木) 20:08:55.25 ID:35TTXgql
>>682
それ言い出したらCの入出力なんて……
>>684
「細かい機能のクラス」ってなんなんだよ……
別にクラスは関数セットってわけじゃねーんだぞ
>>687も「設計しなおせ」(要約)って言ってるわけだし
>>690
atoiにはstdlib.hが要るんですがそれは……
つかstdlib.hにはstrtolがあるんだからそっちを薦めるべき
(宿題で利用できる関数が制限されてたら仕方がないが)
697デフォルトの名無しさん:2014/05/08(木) 20:19:22.48 ID:H5CeDMPH
>>671
int st[10][10] = { {2, 0, 1, 4, 0, 5, 0, 8, 1, 0} };
としたいんじゃないのか
698デフォルトの名無しさん:2014/05/08(木) 20:22:44.38 ID:iWHr/ksT
ハッシュは可逆とか言ってた子まだいるのかなこのスレ
699デフォルトの名無しさん:2014/05/08(木) 20:46:26.15 ID:WPnVChLN
>>698
【レス抽出】
対象スレ:【初心者歓迎】C/C++室 Ver.89【環境依存OK】
キーワード:ハッシュ
検索方法:マルチワード(OR)
抽出レス数:0


【レス抽出】
対象スレ:【初心者歓迎】C/C++室 Ver.90【環境依存OK】
キーワード:ハッシュ
検索方法:マルチワード(OR)
698 名前:デフォルトの名無しさん[sage] 投稿日:2014/05/08(木) 20:22:44.38 ID:iWHr/ksT
ハッシュは可逆とか言ってた子まだいるのかなこのスレ
抽出レス数:1


誰がそんな事言ってるの?
700デフォルトの名無しさん:2014/05/08(木) 21:00:13.61 ID:H5CeDMPH
cryptの挙動見れば無理ってわかるのにな
701デフォルトの名無しさん:2014/05/08(木) 21:10:21.35 ID:m/3Cotp7
>>695
ありがとうございます。
zlibというのはDotNetZipみたいにmemory streamに対して
zip/unzip出来るでしょうか?
702デフォルトの名無しさん:2014/05/08(木) 21:12:31.87 ID:QETE0hyv
できるからググってドキュメント読んでこい
703デフォルトの名無しさん:2014/05/08(木) 21:15:19.41 ID:7Gl9qGxi
C++のMemoryStreamってなんだ
704デフォルトの名無しさん:2014/05/08(木) 21:27:39.97 ID:dPnVK8av
CHRNからおさらいした方が良さげだな
705デフォルトの名無しさん:2014/05/08(木) 21:27:50.66 ID:Oom5aWWV
IStreamとか?
706デフォルトの名無しさん:2014/05/08(木) 21:45:04.63 ID:WPnVChLN
>>700
それに使われているのはバリエーションの一部であって
hash(...) { return ... }
こんな受けたものをそのまま生で返すのも
立派なハッシュ関数ですよ
707デフォルトの名無しさん:2014/05/08(木) 21:51:48.56 ID:muBIMt4G
std::vectorをバッファーにしたistreamとかたまに使うな。
708デフォルトの名無しさん:2014/05/09(金) 00:44:50.53 ID:S4GfSN5p
派生と継承ってなにが違うの?
詳しく教えて
709デフォルトの名無しさん:2014/05/09(金) 00:48:46.05 ID:Z1SwkjRK
>>708
雰囲気が違う。
710708:2014/05/09(金) 00:59:28.44 ID:S4GfSN5p
>>709
まじめに教えてください
711デフォルトの名無しさん:2014/05/09(金) 01:00:38.29 ID:Z1SwkjRK
>>710
まじめに雰囲気が違うだけ。
712デフォルトの名無しさん:2014/05/09(金) 01:04:06.68 ID:bHTKjDjb
>>708
美文書の問題なだけなので、あまり気にしなくても良い気がする。

派生する・されるのはクラス
継承する・されるのはメンバ
ってだけの話。
713デフォルトの名無しさん:2014/05/09(金) 01:04:08.31 ID:ebCqqhjn
Aを基にして出来たが同じではないBはAの派生
Aと同じBはAの継承

適当だが
714デフォルトの名無しさん:2014/05/09(金) 02:44:19.51 ID:9FYhMONq
英語では派生も継承も derived とかのようだが‥‥なんで訳を分けたの?
715デフォルトの名無しさん:2014/05/09(金) 02:51:35.09 ID:Kz50EFWR
おまいは二つ前のレスも読めないのか
inherit(派生) と derived(継承した)
と言う用語が使い分けられている。
ついでに"derived"は規格中で特別な用語(10p2)
716デフォルトの名無しさん:2014/05/09(金) 02:57:51.81 ID:1HcIeJu0
UFC 128 - エリック・コク vs. ハファエル・アスンサオ
https://www.youtube.com/watch?v=n2CcU1A1i-0

UFC 134 - エリック・シウバ vs. ルイス・ラモス
https://www.youtube.com/watch?v=x25xIpNmhCo

UFC 140 - コスタ・フィリッポウ vs. ジャレッド・ハマン
https://www.youtube.com/watch?v=etC-LdvIe8A

UFC on Fox 5 - マット・ブラウン vs. マイク・スウィック
https://www.youtube.com/watch?v=HvWDkItV20s
717デフォルトの名無しさん:2014/05/09(金) 03:08:47.50 ID:9FYhMONq
>>715
逆じゃないの?
http://cpplover.blogspot.jp/2010/11/abstract-class.html

>>712 が正解のようだ
718デフォルトの名無しさん:2014/05/09(金) 03:15:04.52 ID:Kz50EFWR
>>717
逆だった。

ちなみにinherit(継承)/derive(派生)の使い分けはC++・Java・C#で共通。
719デフォルトの名無しさん:2014/05/09(金) 03:20:35.70 ID:ClmLL0Ax
UMLだとクラス間の関係にもにinheritanceを使用していたような
720デフォルトの名無しさん:2014/05/09(金) 08:25:24.13 ID:YiLzwXxL
クラス B はクラス A から派生しており、メンバー X を継承する

だろ?
雰囲気とか、大丈夫か?
721デフォルトの名無しさん:2014/05/09(金) 09:41:00.16 ID:1s+wO78F
"単継承"、"多重継承" の言葉が相手にしてるのはクラスだろうけど...
うーん?
722KUSO KOTE ◆unko./w.Osri :2014/05/09(金) 09:49:18.53 ID:tVqxelwX
10.1 Multiple base classes『Note:The use of more than one direct base class is often called multiple inheritance.』
※multiple inheritanceは斜体ではない

つまり多重継承はC++の規格の用語とは違う(たぶん)。
723デフォルトの名無しさん:2014/05/09(金) 10:53:03.38 ID:Mr0Sp7Ii
多重継承は
同じシグネチャを持つメンバをそれぞれの親から持ち込んで〜
っていう例の問題を指すんじゃないの?
724デフォルトの名無しさん
> inherit(継承)/derive(派生)

単にこれシノニムとして読んだんじゃいかんのか。