[表示 : 全て 最新50 1-99 101- 201- 301- 2chのread.cgiへ]
Update time : 04/16 00:16 / Filesize : 71 KB / Number-of Response : 322
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



1 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 00:45:54.57 ID:VoemgV7u]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

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

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

hogeは禁止します、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
なお、hogeはNGワードに追加しておくことが強く推奨されています。

2 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 00:46:37.60 ID:VoemgV7u]
----テンプレここまで-----

3 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 00:49:06.88 ID:bvFcvrs8]
このスレで質問することを禁ずる

4 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 00:49:55.79 ID:VoemgV7u]
↑ いつものボット

5 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 00:56:06.42 ID:bvFcvrs8]
このスレで質問するってことは無能である何よりの証拠

6 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 08:45:20.17 ID:b1DcnFZ1]
>>1

7 名前:デフォルトの名無しさん mailto:sage [2014/03/25(火) 18:57:42.36 ID:mtUgnBBf]
新スレhoge記念

8 名前:デフォルトの名無しさん [2014/03/25(火) 21:01:46.39 ID:A1lqZyhT]
hogeは禁止されていません
自由に使って構いません

9 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 21:55:09.35 ID:iFr+67KQ]
make
と入力してEnterをおします

13 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 21:58:54.48 ID:pkdNwHUQ]
(誤)Makefileがあるコマンドライン
(正)Makefileがあるフォルダのコマンドプロンプト

14 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 22:02:28.05 ID:hIRwfa74]
>Makefileがあるフォルダのコマンドプロンプト

日本語でおk

15 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 22:23:05.34 ID:pkdNwHUQ]
何でそんな古いコンパイラ使ってるの? 馬鹿にされるよ

20 名前:デフォルトの名無しさん [2014/03/27(木) 22:23:47.82 ID:bJmMH0bS]
ドライブ指定してmakefileに移動しようとしたら
「ディレクトリ名が無効です」になります。



21 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 22:33:02.94 ID:V0dGQBZu]
>>23
プログラムの前にDOSの勉強をしろ

28 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 22:41:07.96 ID:pkdNwHUQ]
古い!! ふるすぎる。。。(藁)
お前はそれでも地球人か!!!

29 名前:デフォルトの名無しさん [2014/03/27(木) 22:44:32.34 ID:bJmMH0bS]
インストールしました。
makeを押しても何の反応もありませんが。

30 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 22:46:00.71 ID:lIcuNLQ3]
ダメだこいつ…



31 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 22:47:11.61 ID:pkdNwHUQ]
エラーメッセージがなく、EXEが作成されてれば成功。

32 名前:デフォルトの名無しさん [2014/03/27(木) 22:47:17.82 ID:bJmMH0bS]
Copyrightが出てくるだけです。

33 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 23:30:50.82 ID:pkdNwHUQ]
Makefileは同じ場所にある?
念のために「DIR」して確認してくれ。

43 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 23:40:29.85 ID:fqEnNET5]
>>24
変なこと教えるなよ。
ドライブごとのカレントフォルダーは
今となっては誰も欲してない機能なんだから
cd /d 移動先のパス
にしとけ。

47 名前:デフォルトの名無しさん [2014/03/27(木) 23:45:04.99 ID:pkdNwHUQ]
フォルダをZIP圧縮してアップローダーにアップロードしろ

48 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 23:55:18.99 ID:pkdNwHUQ]
古過ぎるコンパイラは馬鹿には無理。

49 名前:デフォルトの名無しさん mailto:sage [2014/03/27(木) 23:58:38.08 ID:pkdNwHUQ]
It is impossible for fools to use too old compilers.

50 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 00:02:57.04 ID:CsDGXoI3]
BorlandっていまやWin最強のコンパイラーだろ?
Clangになって一番すごいWinのコンパイラーに進化したらしいよな



51 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 01:08:29.53 ID:a5++l4GP]
>>52
じゃあパスが通ってないんだろう、環境変数のpathnの項を弄れ
やり方? bccの使い方を説明するサイトとか本にはだいたい載ってるだろと

54 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 01:09:57.34 ID:CsDGXoI3]
>>52
違う,いまのBorlandは
clang -o calc1.exe calc1.c

55 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 01:12:20.51 ID:CsDGXoI3]
>>53
Borlandにはbccなんてのはないから、当然>>52になる

56 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 02:34:35.65 ID:Bi202b4z]
>>60
俺Winの知識ないって自慢し過ぎ
bcc32に限らずwinのコマンドのオプションリスト表示すら出したことないだろ
winの経験が少しあれば普通はオプションリスト表示オプションを付けて起動して、
どんなオプション付けられ、それが何をするのか調べることぐらい出来ると思うが
winの場合のオプションリスト表示は /? ってのが普通(常識)

62 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 02:42:52.86 ID:oiG2WFSt]
スモールモデル、ラージモデルは、16ビットの時代

63 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 02:51:20.42 ID:Bi202b4z]
>>62
16bitとはおいおいすぎ><
16bitのプログラムを開発したいから、わざわざBorlandを選んだのかな

64 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 05:13:02.52 ID:FWVtOBdw]
つーか、おまえらバカにして遊んでるだけだろ

65 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 10:06:39.77 ID:6uoLiniK]
とんでもない。
馬鹿になんてしてないよ。
遊んでいることは否定しないけど。

66 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 11:40:09.31 ID:dRXuKu/3]
>>64
そりゃsizeofをプリプロセッサが処理するような処理系を好んで使うような奴だもの

67 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 11:52:19.86 ID:WLy6H0qs]
やっぱりねw

68 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 12:29:41.58 ID:dy0OpFC/]
>>64
bccに-mlでバージョン出さない時点で普通に古いコンパイラを前提にするだろ

69 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 13:04:27.64 ID:RWL6RT/i]
明示するだろ、JK

70 名前:デフォルトの名無しさん [2014/03/28(金) 17:42:32.13 ID:vM8zXvpO]
>>61
オプションリスト表示はどのように開くのでしょうか?
コマンドプロンプトに/?を入力しても反映されません。



71 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 18:40:43.95 ID:YNdMan3y]
単に
bcc32
と入力してEnterをおします

むかしBorland C++Builder バージョン5か6のおまけとして
コマンドラインコンパイラのオプションの表が付属していました。
それと異なります。たぶん全部を表示しないと思われます

72 名前:デフォルトの名無しさん mailto:sage [2014/03/28(金) 18:47:27.10 ID:YNdMan3y]
>>19
いいコンパイラだよ

73 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [2014/03/28(金) 21:16:01.34 ID:oXAQt7Rw]
>>72
そうそう、コードガードはわりと便利、評価版をダウンロードすればいいし

76 名前:デフォルトの名無しさん mailto:sage [2014/03/29(土) 12:43:43.99 ID:OMABeBxL]
本が古いなら、それに環境をあわせないと。
煽られているように、とりまそれ最新じゃないよ

時代は便利になったんだ。
codepad, ideone もあるよ。 >>1

77 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 19:14:53.77 ID:KWNjZyFY]
1つめはステップインで開始すればいい



81 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 19:45:25.44 ID:28c8XDsv]
ヒント:C:\Program Files

82 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 19:53:07.99 ID:CqvqfScs]
>>78
とりあえずVC++ExpressEdition触ってみたらいいと思う

83 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 20:06:30.50 ID:hppE64Hw]
rc とか mc が無いとguiは難しいでしょうね

84 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 20:27:34.83 ID:PR3x9no5]
>>82
素で言っているのか

85 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 20:34:07.93 ID:CqvqfScs]
>>84
初期プロジェクトで既にウィンドウ生成までできてるから
流れ見るのならいけるんじゃね?
関数はもちろん調べながら

86 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 20:53:33.69 ID:eefQLiAy]
>>82
VCでGUIソフトとなるとMFC使えないExpressは苦行だろ
MFCじゃなくてQtなら良いが

87 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 20:58:12.28 ID:eyBPHv5q]
今時MFCとかMやな

88 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 21:00:40.54 ID:zkzJISd4]
レスありがとうございます。
ステップインで見てみると、appmodul.cppというファイルに_tWinMain()があり、そこからさらに
winmain.cppというファイル内のAfxWinMain()が呼ばれているようでした。
いきなり理解するのは難しそうですが、おいおい見ていこうかと思います。

ところで>>82でVC++ExpressEditionを薦めていただきましたが、製品版とは何か違うのでしょうか?
今使っているのはDreamSparkで手に入れたVisualStudio2013を使っていますが、旧版やExpressEditionのダウンロードも可能です。
VisualStudio2013の情報はぐぐった限りまだ少ないので旧版を使った方がいいような気もしてます。

89 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 21:02:18.77 ID:28c8XDsv]
製品版あるなら製品版だけでいいよ

90 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 21:03:43.90 ID:28c8XDsv]
expressは製品版に比べ機能が少ない



91 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 21:47:13.30 ID:BTv6StGE]
製品版よりちょっと動作が軽い

92 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 22:13:30.10 ID:q8+ciQV2]
MFCが付いてない

93 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 22:27:29.90 ID:CqvqfScs]
>>87
VS2013触った事ないからわからんけど
フォームアプリケーションじゃなくてwin32アプリケーションがあればそれでソース見れるんじゃない?

> なんとなくでも全体の流れを把握したいのでmain()にあたる部分を見たい
こういう事かな ttp://msdn.microsoft.com/ja-jp/library/bb384843.aspx

94 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 23:04:38.46 ID:JvY411Bp]
Expressに無料版MFCでいいじゃん。
ATLの方が簡単だけどな。

95 名前:デフォルトの名無しさん mailto:sage [2014/04/01(火) 23:46:31.78 ID:q8+ciQV2]
無料MFCて何の事だよ

96 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 17:38:29.47 ID:SfgYmxWg]
それっぽい単語を並べただけなのでマジレスしないでください

97 名前:デフォルトの名無しさん mailto:sage [2014/04/02(水) 19:39:44.52 ID:aNx9C+Mf]
>>95はモグリ

98 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/04/03(木) 12:52:10.02 ID:lJqirrU9]
www.geocities.jp/home_page22/C/dmc.html

99 名前:デフォルトの名無しさん mailto:sage [2014/04/03(木) 15:33:05.57 ID:BFyxuILc]
てっきりMZCが出てくる流れかと思ったがそうじゃなかったw

100 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 15:36:27.65 ID:QN8rMztS]
マルチコアへの対応って、AfxBeginThreadでマルチスレッドにしたらOSが勝手にコアごとに振り分けてくれるという認識であってる?
ググるとParallelクラスがあるけど、ネイティブでは使えないっぽい。



101 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 16:48:02.82 ID:nM83ZP3Z]
AfxBeginThreadはある関数を新しいスレッドで開始するだけだから、
parallel forみたいなことをしたい場合は、
自分で各スレッドのforの範囲を決めたり、
スレッドが終了するのを自分で待ったりする必要がある。

ネイティブで使えるパラレルライブラリはちゃんと入っているから探すべし。

102 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 19:59:43.18 ID:ZtsQOPBg]
マルチコアまともに扱いたいならMFCなんか使わんやろ

103 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 20:06:44.55 ID:2QttofMo]
OpenMPは楽して並列化させたい場合に威力を発揮するな
……OpenACCが使えるCompilerってフリーに無かったっけ?

104 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 20:41:28.03 ID:DD5EG69p]
マルチコアを真面目に使いたいときに
GUIフレームワークをわざわざ変える奴は
マトモな設計が出来ない奴

105 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 20:43:23.33 ID:eu/rYsXw]
MFC関係ないよね

106 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 20:59:32.67 ID:UDPO/kAP]
儂もそう思う。が、未だに世に知られていない新理論を
構築済みなのかも知れないのでもう少し語らせてみたいです。

107 名前:デフォルトの名無しさん mailto:sage [2014/04/04(金) 23:36:48.04 ID:QN8rMztS]
>>101
OpenMPとかPPLとかBoostとかいろいろあるんだな
調べてみるよありがとう

108 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 00:52:05.63 ID:Z9uNYFZQ]
char なら printf
w_char なら wprintf
TCHAR なら _tprintf
だと思うのですが、どうして三番目のやつは先頭に _ が付くのでしょうか?

109 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 00:56:55.10 ID:JxLvhIna]
マクロって_MAX_PATHとか付くやん

110 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 01:50:54.62 ID:EG+AV0eK]
標準規格にはないWindows用の独自拡張だから



111 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 02:16:53.63 ID:goifYp5b]
コンパイラメーカーや、ライブラリの作者は、_を多用します
プログラマは、先頭に、_をつかわないようにします(おれは、そういわれた)

112 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 02:21:01.16 ID:zHyV6h3a]
>>111
俺もC言語辞典(古い)でそれ見た

113 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 03:30:05.84 ID:zHyV6h3a]
>>113
空ループって最適化したら消えるんじゃねーの?
それ以前に裏で別のプロセス走ってるとか
コンパイラの自動並列化が効いちゃったとかのオチな気がする

115 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 03:59:45.28 ID:JxLvhIna]
>>113
1コアの100% =
2コアの50% =
4コアの25%

116 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 04:09:44.16 ID:4p3tjfYN]
よくわからないがシングルスレッド高負荷処理で
同一コアと思われるハイパースレッディングの
論理CPUペアが50%ずつ(たまに60+40の非対称)
になるのはWindowsでよくあること。
表示が間違ってるのではないかと思ってるけど

117 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 11:56:14.14 ID:oiRFlfhh]
コンパイラの自動並列化がそれっぽい、便利なんだな
もっと詳しくならないとマルチコアとか考えるだけ無駄ってことか……

118 名前:デフォルトの名無しさん [2014/04/05(土) 12:06:18.53 ID:Vwyio/wC]
マルチコアとマルチスレッドはべつ。
シングルスレッド・プログラムでも、OSがマルチコア使うかもしれないし
マルチスレッド・プログラムでも、OSが1コアしか使わないかもしれない。
プログラマが出来るのは主にスレッド管理だけ。

119 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 12:07:27.06 ID:zHyV6h3a]
>>117
msdn.microsoft.com/ja-jp/library/hh872235.aspx

120 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 12:10:33.92 ID:Vra9QIvI]
にほんごでおk



121 名前:デフォルトの名無しさん mailto:sage [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]
構造体を動的に生成したいのですが、このやりかたでよろしいでしょうか?
ideone.com/Yr4XRf

123 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/04/05(土) 13:35:36.03 ID:pKk9GxNe]
>>122
型名の始めは大文字にしたほうがいいね。

124 名前:デフォルトの名無しさん [2014/04/05(土) 13:38:16.05 ID:Gtcr4gqx]
>>123
そうですね^^

型名以外には何か問題点とかありますか?

125 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 13:38:47.30 ID:NnouwwX7]
はい

126 名前:デフォルトの名無しさん [2014/04/05(土) 13:39:59.09 ID:Gtcr4gqx]
>>125
具体的にはどのような?

127 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 13:42:36.52 ID:30x58bFF]
このやりかたでよろしいでしょうか?
はい
後何が必要なのか?

128 名前:デフォルトの名無しさん [2014/04/05(土) 13:44:42.90 ID:Gtcr4gqx]
>>127
ポインタの扱いが苦手でして
一応コンパイラもエラー吐かなかったので大丈夫みたいですがなにぶん心配性なもんで・・・

129 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 13:50:24.60 ID:/rC4NDRr]
>>128
で?

130 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/04/05(土) 14:03:30.11 ID:pKk9GxNe]
>>129
次のコード書いてみて。



131 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 15:18:00.60 ID:N2+78ftB]
>>108
願望

132 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 15:21:03.39 ID:zHyV6h3a]
>>122
そもそも構造体のメンバ変数が1つだけって……
動的確保してるのにその個数が定数値って……

例:codepad.org/l9spLfkF

133 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 15:22:25.93 ID:zHyV6h3a]
おっとfreeを忘れてた……
codepad.org/3ZiOa4oN

134 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 15:23:25.39 ID:JxLvhIna]
>>132
例だから別にいいだろ

135 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 15:53:12.52 ID:Vra9QIvI]
ライブラリとかで予め決まっている名前以外は _ をつけるべきじゃない

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

何よりまず、obj001からobj002にコピーしている意味がわからない
この後 obj002を使おうとしていますというオチじゃないかと非常に気持ち悪い

136 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 15:55:30.71 ID:Vra9QIvI]
×ライブラリとかで予め決まっている名前以外は _ をつけるべきじゃない
○ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない

137 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 15:55:38.93 ID:PXTTIzjC]
> 何よりまず、obj001からobj002にコピーしている意味がわからない

いや、その点はどうでもいだろw
ポインタの勉強するときそういう代入してみるのってよくあることだろ。

138 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 16:15:50.31 ID:JxLvhIna]
本題以外にケチつける奴はただ優越感に浸りたいだけ
浸れてないけど

139 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 16:21:18.84 ID:LokGB3M7]
×ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない
○ライブラリとかで予め決まっている名前以外は 先頭に _ をつけるべきじゃない、というのが持論です

140 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 17:03:41.01 ID:Vra9QIvI]
改めて見直してみたらいろいろな慣習とか規約があるみたいだな
よし、今日のところは引き分けにしておいてやる



141 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 17:55:33.89 ID:YrLzJmoN]
sprt使わずにdistance名乗るか

142 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 18:38:06.46 ID:zqI4wR1v]
>>123
え?なんで型名を大文字で始めるの
定数と間違えてない?

143 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 19:35:59.53 ID:zqI4wR1v]
>>144
うん。そうです。自分が勘違いしていました・・・

146 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 22:27:29.57 ID:pxBAHja5]
型名と変数名が衝突しないルールなどこの世に無数にあるのに、
自分の使ってるルールがさも普遍的に良いものであるかのような
ミスリードをする奴の言うことなど真に受けてはいけない

147 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 22:45:29.81 ID:JxLvhIna]
char cszBuff
TCHAR tszBuff
int nCount
UINT unCount

typedef struct tagStructName{
} T_STRUCTNAME;

いろいろやってみて自分が納得行くの使ったらいいんや

148 名前:デフォルトの名無しさん mailto:sage [2014/04/05(土) 23:56:57.72 ID:d+kzfy0R]
>>147
システムハンガリアンさんちーす
まだ絶滅してなかったんすね!
頑張ってくださいね!

149 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 03:16:28.05 ID:PoyortF4]
> 型名と変数名が衝突しないルールなどこの世に無数にあるのに、

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

あと、typedefされた型名って_tってサフィックスつけるのが一般的だと思うんだけど
これもローカルなルールなんやろか

150 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 03:39:44.68 ID:lcQBK2Mz]
>>149
en.wikipedia.org/wiki/Typedef
によると、POSIXでは _t サフィックスは typedef の名前にリザーブされていて、それゆえ
名前が衝突しないようにユーザが定義する typedef には _t を使わないほうがいいらしい

152 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 04:43:31.25 ID:7TI60JXf]
衝突ってのはコンパイルエラーではなくて
人が目で見て区別がつきやすいよう
同じ綴りを避けるって話だろうに
アスペなおまいらは

154 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 07:44:06.37 ID:AUPUS+0I]
>>153
人の目で区別する必要があるシチュエーションってどんなの?

155 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 11:01:21.41 ID:Gd53X1PX]
>>153
よほど糞な開発環境なんだなお前

156 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 11:52:04.47 ID:gdJCg3c2]
あえて言おう
処理系指定で組めばおk
初心者なんだろ、何か組みあがった快感って大事だぞ

157 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 12:09:44.18 ID:BmjYK//+]
別のものには違う名前を使うもので
名前を使い回すなって当たり前のことだろ
どんだけ馬鹿なんだおまえら

158 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 13:36:30.63 ID:9b0FkJFr]
>Such type names are reserved by POSIX

本当にWikiは嘘だらけだな
byだと適用範囲がPOSIXでなくC全般と読めてしまう

160 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 15:47:59.42 ID:PoyortF4]
byよりinの方が良いかもね…スレチだけど



161 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:35:16.36 ID:5rOAt6qX]
>>159-160
Wikiなんだから編集できるんじゃねーの?

162 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:39:48.19 ID:Pw+vYT2x]
A「こんな説明みつけたよ!
B「間違ってるねそれ。
 やっぱりWikipediaはこらだから
A「直せるんだから直せよ
B「えっ、何で俺が?
A「えっ?

163 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:46:07.08 ID:YqB/fCSo]
byの方がいいだろ

164 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:56:24.24 ID:k991ba7o]
A「byだとPOSIX以外にもルールが適用されると読める
B「byの方がいいだろ

せめて意見するときは
そう考える根拠ぐらい書きたいものだ

165 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 16:57:56.33 ID:PoyortF4]
byの方が良いのかorz
Wiki編集するところだったよorz

166 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:15:29.97 ID:X8q2hYwd]
そもそもその後の for 以下を読めば C 全般に適用とかの変な解釈するわけないと思うんだが...

167 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:41:42.06 ID:YqB/fCSo]
避けるべきということに変わりはないだろ
お前は移植性の事全く考えないの?
POSIXでないシステムの方が圧倒的に少ないというのに

169 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:47:23.97 ID:X8q2hYwd]
で、どこに C 全般とか書いてあるんだ?

170 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:54:26.32 ID:PoyortF4]
>>167
"by ISO/IEC"でなく"by POSIX"という時点でお察し(ry



171 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:56:17.95 ID:k991ba7o]
なんでこんなに揉めるんだ?
Cのtypedefの説明に「_tはPOSIXで予約済」
って書いてあったら
POSIX系以外も従う必用性がある
ように読めるだろ。

>避けるべきということに変わりはないだろ
それは書いた人の主観であって
百科事典の説明に書くべきじゃないぞ。
技術文書書いたこと無いの?

172 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:58:14.20 ID:k991ba7o]
「POSIXではオペレーティングシステムの為に予約」
という表現にすれば問題なくなると思うのだが

173 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 19:59:31.29 ID:14wt57ia]
>>158
いっぱいあるんだな……

174 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:13:54.33 ID:IsEOtgMD]
_t はタグのtなのかtypedefのtなのかどっちですか?

175 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:16:44.81 ID:YqB/fCSo]
>>171
読めないよ
俺C言語で新しいOS書いたわー
そのOSでは大文字で始まる型名予約してるから使うなよ!って書いて、誰がC言語全般に影響あると思うんだ?

176 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:22:32.03 ID:YqB/fCSo]
POSIXが何かわかってるやつはC言語全般に影響が〜なんて誤解しない。
POSIXが何かわかってない奴は(圧倒的多数であるPOSIXシステムで動かされる可能性を考慮して)無条件に従っておいた方がいい

なんの問題もない。

177 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:22:37.76 ID:ZIQhn8PO]
Wikipediaの内容についての議論はWikipediaのTalkページでやれよ

178 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:24:58.76 ID:X8q2hYwd]
>>171
> なんでこんなに揉めるんだ?

単なるしきたりを

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

なんて言うアホがいるからだろ。

179 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:29:09.78 ID:k991ba7o]
>>178
説明の文面が妥当かどうかの話をするときに
どうしてシキタリが出てくるんだよアホですか?

180 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:30:38.36 ID:8z3KlCR7]
もうここで議論するべき内容ではないどっか行け



181 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:34:13.86 ID:X8q2hYwd]
convention も読めないアホは口挟むなよ (w

182 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:44:57.82 ID:k991ba7o]
>>181
「Cのsize_t(しきたりでtypedefには_tを付けたもの)は
 POSIXによって予約されている」
などと言っている出鱈目なWikipediaの説明が
妥当だと思うアホはすっこんでろ

184 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:57:23.37 ID:6fUxN2Jx]
All rights are reserved by POSIX.

185 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 20:57:26.93 ID:X8q2hYwd]
>>183
誰が妥当って言ってるんだ?
俺は単にそう書いてると言ってるだけだぞ。

まあ、しきたりで自爆したからごまかしたいんだろうけど (w

186 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:05:47.20 ID:frwmbROr]
NG推奨ワード:
Qz
STL
ヘッダ
POSIX ←new
片山
hoge

187 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:23:14.93 ID:YqB/fCSo]
CがNGワードになる日も近いな

188 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:28:22.80 ID:5rOAt6qX]
>>186
え、いつの間にかSTLとヘッダもアウトになってたのかw
ここは酷いインターネッツですね

189 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:39:32.30 ID:uqLF0x8H]
>>186
ついでに
スレが荒れるのでCやC++に関することはすべて厳禁

190 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 21:52:35.54 ID:EzHv0eI8]
まどろっこしいな
ようは2ちゃんねるの禁止が落としどころだよね



191 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 22:19:16.09 ID:2m7iHXEE]
p2使えないから2ch廃止でいいよもう
出先で書き込めなくてもどかしいったらありゃしない

192 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 22:35:34.44 ID:yUhKfMaZ]
●は使えるだろ
●が無いとスレ立てできない

193 名前:デフォルトの名無しさん mailto:sage [2014/04/06(日) 23:14:43.66 ID:2m7iHXEE]
浪人ってやつ?
買う気ないからひろゆきの新しい方に期待するわ

194 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 01:28:14.02 ID:AB68SSs6]
SYSTEMTIMEの引き算をしたくて
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 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 02:54:37.57 ID:LXdO3Noc]
>>194
teのアドレス - tsのアドレスをtdifに入れるというおかしな事してる

196 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 04:02:36.25 ID:Yfheg34z]
>>194
operator-()の定義かプロトタイプ宣言を
WinMain()だかtmain()だかの前でやれば解決する、と予想

197 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 04:29:51.17 ID:Yfheg34z]
>>197
ttp://msdn.microsoft.com/ja-jp/library/x3399a54.aspx

199 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 06:08:42.83 ID:NjqqbTFI]
>>197
SYSTEMTIME ってカレンダーの年月日時間みたいなもの。
それらの引き算をカレンダーの年月日時間にするってへんだろ。
結果のカレンダー年月日時間は0年0月0日0時0分1.515秒ですって、カレンダーではありえないだろ
期待する結果は年月日時間で表せる差じゃないか(1年2ヶ月3時間4分5秒違うとか)

200 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 13:13:30.33 ID:8ZhLD5KA]
どうでもいいけど、>199は説明が下手だな。

202 名前:片山博文MZジェバンニ ◆T6xkBnTXz7B0 mailto:sage [2014/04/07(月) 14:25:12.80 ID:nfj7Xkns]
SystemTimeToFileTimeを使ってSYSTEMTIMEをFILETIMEに変換して、
ULARGE_INTEGERを使って64ビット整数に変換して、引き算をする。

203 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 15:40:44.16 ID:4PSeJxmH]
時刻と時間の違いが分かってないタイプ?

204 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 19:23:33.56 ID:BajMmze5]
>>202
時間差(経過時間)を秒単位ではなくて、年月..秒で表すものにしたいから、
SYSTEMTIMEを戻り型にしているんじゃないのか

Winで経過時間を求めるのにSYSYEMTIMEを使うって普通なのか?
違うなら何を使うのが多い?

206 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 19:29:45.40 ID:4vTqmZSq]
よく分からんがC++なら<chrono>使えばいいんじゃね?
Win依存でいいならtimeGetTimeとかQueryPerformanceCounterとかがあるし

207 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 20:26:10.88 ID:Y4utMABq]
「時間差(経過時間)を秒単位ではなくて、年月..秒で表すものにしたい」
という要求下で "年" の計算にうるう年の考慮は必要だろうか?

208 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 20:35:46.78 ID:4vTqmZSq]
>>207
その辺難しいよね
365日とするか365.2425日とするか365.2422日とするか……
表示を日までに済ませておくのが無難かと

209 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 21:01:58.18 ID:iQnUI2e5]
>>208
.NETのTimeSpanクラスはそうなってるね。
内部表現は100ナノ秒刻みの整数値で、ミリ秒、秒、分、時間、日への変換はするが
月、年への変換はしない。

210 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 21:27:01.61 ID:dmj0DO96]
>>207
それ以前に月が 30日でいいのかと...



211 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 21:32:53.82 ID:Y4utMABq]
>>210
あああああーーーーー
考えるほどマンドクサイっすな

212 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 21:49:28.54 ID:wQYu7k63]
>>186
なんでQZが筆頭なんだ?

213 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 21:52:25.42 ID:pviM0T4Q]
どう考えても一番の荒らしです

214 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:31:32.85 ID:tNhu6rzw]
片山やhogeよりPOSIXが上なのかw

215 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:33:46.15 ID:4vTqmZSq]
質問いい?
switch構文のcase内で変数宣言したら、それについて
「'変数' の初期化が 'case' ラベルによって行われませんでした。」
って言われたんだけどどういうことなの……?
ついでにswitch部分に赤波線が付いて、「制御の転送は次の初期化をバイパスします」
って言われたんだけど何故エラーになるのか意味が分からない。誰か分かる人教えて下さい
(VS2013でコンパイルしている時に発生)

216 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:35:47.03 ID:2mFu56Lz]
caseだけだとスコープが同じになる
ブロックをつければいい

217 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:40:02.07 ID:Y4utMABq]
switch () {
case A:
 { // ローカルスコープにしちまう
  int a;
 } break;
case B:
 …
default:
 …
}

218 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:41:30.01 ID:4vTqmZSq]
>>216
ブロックを付けるって、要するに
case test:
 〜
 break;

case test:{
 〜
 break;
}
にするってことでいいの?

219 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:47:22.50 ID:2mFu56Lz]
Yes

220 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 23:30:25.89 ID:H5+AU72d]
個人的にはbreakは外に出したいな



221 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 00:23:17.09 ID:lXmRpq/E]
>>221
試せ

223 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 00:32:19.53 ID:zX8m8ach]
>>221
ラベルだけだよ

224 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 00:32:44.67 ID:4GqgTU2E]
>>221
定数の整数式とscoped enumの値だけ
switch (a) case std::integral_constant<int, 6>::value:;

225 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 13:44:22.59 ID:J+Ne3rG0]
最近、よその板で、"「"だけで右を閉じてないのが流行ってるのか
すんげーむずむずするんだが

226 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 14:02:26.18 ID:M2I5N33k]
>>225
在日のおまえは知らないだろうが、明治時代からある用法だぞ。

227 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 16:39:02.94 ID:9nnVwB+Q]
>>226
(正直鬼物語で見たのが最初だなんて言えない)

228 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 17:27:19.75 ID:DhHmBmSp]
エロゲーでは普通じゃないのか?

229 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:01:46.09 ID:Agmut9XT]
どんな使い方なんだ?
(ry なんかはときどき見るな
閉じていない括弧に違和感を持つのはある意味プログラマらしいか

230 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:31:11.83 ID:Bi2RyCEo]
カッコつけてんじゃね〜よ



231 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 18:50:35.55 ID:C0aY6nOj]
つけてねーよ

232 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 19:05:43.04 ID:Ge61TJlR]
case 1+1;
goto 2;
goto 1+1;
goto 2*1;
各環境でナニがドコまで許されるのか興味はあるな

233 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 22:58:16.49 ID:5xZMJR+X]
>>229
プログラマは、半開区間が大好きさ!
[0, 4)

234 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 23:04:52.46 ID:9wIzdaaz]
>>233
ワロタ

235 名前:デフォルトの名無しさん mailto:sage [2014/04/09(水) 00:10:02.38 ID:dDyddEcZ]
もう全て半角にして英語圏顔文字でも使っとけよ:D

236 名前:デフォルトの名無しさん [2014/04/09(水) 04:45:08.14 ID:GDCkrjSs]
roffとか気持ち悪いよな

237 名前:デフォルトの名無しさん mailto:sage [2014/04/09(水) 13:15:17.74 ID:/wyRfLaC]
>>236
UN*XやるまえにDOSでTeXやってたからあれは意外になんとも
かつては汗でパーサ書いてたっていうから、まあそういうことなら。

238 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 08:17:37.43 ID:7/oWURrR]
time関数は1970年からの秒数らしいですが
long型で格納するとなると、68年くらいで限界が来ませんか?
2038年くらいにいろんなプログラムやばいっすか?

239 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 08:24:54.58 ID:2iqAA/H6]
2000年問題の時に話題にあがりました 「2038年問題」でぐぐれぇ

240 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 08:30:51.23 ID:7/oWURrR]
おーやべえ
でも今からプログラムつくろうとするとtime_tは64bitで定義されてるっぽいですね
3000億年まで安心か



241 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 09:06:00.54 ID:olete8aZ]
炎上学習法は要りません

242 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 09:33:49.42 ID:m7xM1FWF]
どこが炎上してんだよ

243 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 15:21:37.00 ID:qnyX9I3J]
2000年の頃は見えないほど先の話だと思っていたが
既に3分の1消化してるんだな

244 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 18:18:53.37 ID:CtgsENNt]
1000年以上先の問題ならまだしも、38年だと分野によっては平気で使われ続けるからな

245 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 18:50:58.03 ID:Am7dEU9n]
言わんとしてることはわかるからいいんだけど、64bitでコンパイルしてlongが32bitなのMSのコンパイラぐらいだぞ

246 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 18:52:32.07 ID:P3Ox4abS]
互換性を優先したんだろうね

247 名前:デフォルトの名無しさん mailto:sage [2014/04/13(日) 18:55:12.72 ID:N2UMgO6H]
time_tは64bitになってるから許してやれ

248 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 08:17:35.70 ID:XwQYiHbH]
typedefせずソースに直接intとかlongとか書いてるの?

250 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 08:28:42.62 ID:iMQET/ga]
>>248
つstdint.h(cstdint)
規格仕様上複数マシンで動作できることを重視したから型ごとの制約が緩いのよね
と言うか既出の話題だったわw
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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 11:23:47.56 ID:Kn6UHMuG]
コンストラクタを直接呼び出してくれるpush_backでございます
コピーが発生しないので多少効率的になります

255 名前:デフォルトの名無しさん [2014/04/14(月) 11:25:50.80 ID:fXV0vjOD]
>>254
なるほど

256 名前:KUSO KOTE ◆unko./w.Osri mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 18:01:44.00 ID:0/p4fR0J]
いちいち持ってくるお前も臭い

262 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 19:15:32.34 ID:yacO1o/C]
>>258
できるでしょ?readdir(3C)とかは内部ではreadを呼んでる

263 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 20:41:55.55 ID:DVvt3Ia1]
最近C++勉強始めたんですが、質問があります。(Cは良く分っているつもりです)。
C++には参照渡しという記述方法があることを知ったのですが、Cのポインタ渡しに
慣れている私としては、参照渡しを使わずにすべてポインタ渡しでコードを記述する
ほうが見易いので、そうしようかと思うのですが、何かデメリットありますか?
参照渡しを使うほうがよい点などありましたら教えてください。

265 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 20:51:36.33 ID:UPYb5gKr]
(個人的に思う)一般的に
ポインタで渡す=ヌルが渡ってくる可能性がある、つまり、常にヌルチェックが必要
ポインタで渡す=ヌルが渡せる、この引数はオプション的である

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

あと一時変数オブジェクトの寿命の関係とかあった気がするが忘れたw

266 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:14:47.05 ID:iMQET/ga]
>>264
ポインタ渡しと違い、参照渡しの場合、
・絶対に実体があるので、適当なアドレスが渡って
 不正なメモリアクセスを行うことがない
 また、参照する中身は変更できないので紛れがない
・普通の変数と同じように記述できる。構造体のメンバ関数にも
 アロー演算子ではなくドット演算子でアクセスできる
 また、関数の引数に使った際、呼び出す側としてはいちいち
 アドレスを渡すということを意識せず使用できる
・ポインタと違い参照自体にはメモリ消費がない
こんなところか

267 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:17:29.88 ID:lcY87dee]
返り値の話ではないとして。
参照渡しの一番のメリットは渡したオブジェクトの所有権が移動しない事がわかる事かな。

268 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:21:57.27 ID:lEZQ3TFl]
メモリ消費がないというのは不適切だろ
インラインで消えたりするが

269 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:46:00.21 ID:iMQET/ga]
>>268
いや、俺の持ってる本では
「ポインタと違って独自にメモリ領域が割り当てられない」
的なことが書いてあるんだが……違うの?

270 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 21:49:58.13 ID:7APDnn3f]
(お前が)(malloc/new等で)と読めなくもないが大丈夫か



271 名前:デフォルトの名無しさん [2014/04/14(月) 21:55:35.64 ID:buURFUek]
初期のC++はC言語へのコンバータで実現してたろ。
参照も内部的にはポインタ動作と変わらないかと。

272 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 22:00:06.15 ID:iMQET/ga]
>>271
それって「参照がポインタで実装されてる(ことが多い)」って話じゃなかった?

273 名前:264 mailto:sage [2014/04/14(月) 22:02:44.39 ID:DVvt3Ia1]
みなさん解説ありがとうございます。
大変参考になります。
>参照渡しの一番のメリットは渡したオブジェクトの所有権が移動しない事がわかる事かな。
もう少し詳しく解説お願いします。

274 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 22:04:37.96 ID:iMQET/ga]
あとこんなページも見つけた
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320144958
www.osak.jp/program/arg_ref_val.html

275 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 22:18:22.93 ID:msrdBAHC]
>>269
通常の実装では、呼び出し側ではスタックにアドレスを積むという点で全く同じだし、
呼ばれる側でもそこを参照するのに違いはないよ。
まぁ、インライン展開で消えれば話は別だけど。
一番のメリットは、(参照先ではなく)参照自体を書きかえられないことだね。
それもまた、ポインタでもconstにすればできるわけだけど。

276 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 22:54:29.26 ID:CAt5QB21]
ttp://codepad.org/Qo0ErNs1
この例ではポインタで渡す気が起きない

277 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:06:35.99 ID:lcY87dee]
>>276
const付けような。

278 名前:264 mailto:sage [2014/04/14(月) 23:14:28.51 ID:DVvt3Ia1]
>276
サンプルコードありがとうございます。
>この例ではポインタで渡す気が起きない
すみません、まだよく分らないのですが、ポインタで
void WriteLine(const string *pstr)
{
printf("%s\n", pstr->c_str());
}
のようにすると何か問題があるのでしょうか?

279 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:17:14.74 ID:lcY87dee]
codepad.org/UUMHZZxJ

参照にするとこうかける

280 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:20:11.44 ID:i+D5B13r]
>>273
++や--の挙動がポインタと参照で違うんじゃね?



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

引数でもポインタだと引数で渡されたポインタを内部で保持しておくから呼び出し側でdeleteや中身の変更をしてはだめになるのかとかわからない。

282 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:41:59.74 ID:CAt5QB21]
>>278
ttp://codepad.org/uAzCCBJQ
ポインタでも書けるしこの例では問題はない
が、やっぱり人に見せると「何で参照使わないの?」と言われそう

283 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:54:52.78 ID:73GA0vhp]
string *str = new string("hello");
....
delte str;
....
WriteLine(str); //deleteしてるけど、、、ポインタ値は生きてるから アッー

結局、コンテナをうまく使って生ポ(生new)は極力排除しようぜって流れ

284 名前:デフォルトの名無しさん mailto:sage [2014/04/14(月) 23:59:10.65 ID:lcY87dee]
>>282
なんで「何で参照使わないの?」と言われるのかその理由を書かないと意味ないだろ。

たとえば
codepad.org/wCMxFlfO
文字列を返す関数と文字列を引数にとる関数があるとする。
参照だったら文字列を返す関数を文字列を引数にとる関数の引数に直接書ける
ポインタだったら一度ローカル変数で受け取ってそのポインタを書かないとだめ

285 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 00:13:55.46 ID:MOmoi8a1]
int& a = *(int*)0;
a = 0;

286 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 00:17:57.06 ID:lShoPitp]
ポインター操作が目的でなく
null許可を表現させたいわけでもなく
読み取り用途限定の時に
わざわざポインターを使う方が不自然

287 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 00:21:36.20 ID:jMxUSFKT]
>>285
一行目がダメコードって一目瞭然じゃないか。
ポインタだったらnullを渡すのが悪いのか?nullチェックせずに代入するほうが悪いのか?になる

>>286
ポインタしかない世界から来た人には多分通じないよ。

288 名前:デフォルトの名無しさん [2014/04/15(火) 00:25:16.54 ID:hh7KqCRP]
生ポ引数/戻り値なんて特別理由がある場合以外は使うなってこった

289 名前:264 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 00:36:31.44 ID:c0zlhsuS]
>上記以外はポインタ渡しを使う

いいえ。
その他にもムーブセマンティクスを達成
したいときにも参照を使います。

292 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 00:45:18.87 ID:jMxUSFKT]
>>290 っていうC++初心者が書くコードはひどく読みづらいので真に受けたらだめ

293 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 01:27:44.04 ID:PjplhgrG]
ageる奴は碌なこと喋んねーな

294 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 03:06:53.30 ID:2JpOUwgl]
>>289
漏れも俺様ルールで、const参照は読み取り用、
ポインタは値を変更する時と、使い分けている

295 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 06:05:04.19 ID:sGkhMKKa]
>>289
ttp://ideone.com/SIOYc5
なかなかいい例が思い浮かばないが
この例ではconstを付けられないが参照が相応しいと思う

全てに当てはまる使い分けの条件は提示できないので
個人やチームの判断で使い分けするしか

296 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 07:52:53.60 ID:AA0ZYDWw]
格納場所という意味で>289が作った関数仕様を実装する場合も、自衛はするべき。
void readSome(Type * const result)
{
// ++result; // これがエラーになってくれる。
}

297 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 08:09:35.12 ID:6lm4j3zL]
俺はしないな。
意味的にはそうなのだけれど
C++のconstは真面目に付けると可読性を著しく損なう

298 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 08:59:58.71 ID:Byz6doxp]
>>263
うん。262は間違いでした。
調べたらreaddirはgetdents(2)を呼んでた
そりゃそうか。ファイルシステムで構造違うしな

299 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 10:42:12.48 ID:ZiuccpsX]
>>296
そのレベルは冗長

300 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 12:47:22.14 ID:tCJ2yelK]
参照なら要らないのにね。



301 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 12:54:41.51 ID:dDf7e/l1]
値渡しの引数にconstをつけるのはやりすぎな気がする
void f(const int x) なんてしないでしょ

302 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 13:09:58.76 ID:tCJ2yelK]
する奴いるよ。きっと>296も同じタイプ。

303 名前:KAC mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 14:41:39.21 ID:tCJ2yelK]
>>303
>296が言いたいことは、>289の仕様ならconst * string const strだろ。

306 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 14:42:44.92 ID:tCJ2yelK]
いけね、Typo。
string const * const strね。

307 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 14:59:38.52 ID:JmWJ8ekL]
>>304
違いが分かればよいのだが…
ideone.com/w9UqT0

308 名前:デフォルトの名無しさん [2014/04/15(火) 15:09:29.49 ID:SFbbbO6x]
>>307
さらっと確認したので怪しいのですがたぶん
クラスAには仮想デストラクタが無い為に
newしたオブジェクトがデリートされる際、継承元のデストラクタが呼び出されていませんが、
クラスBは仮想デストラクタがメンバにあるので
deleteされる際に継承元のデストラクタが呼び出される訳ですよね

そこで、ベクターにオブジェクトを格納する話につながる訳ですが
>>251のc_myclassがインターフェースクラスを継承しているときには
やはり継承元のクラスに仮想デストラクタを記述しておかないと危険だという事ですよね?

309 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 18:05:27.38 ID:ef3kTbvB]
>>310
そうしたいなら仮想デストラクタとか仮想関数とか関係ない。
コピーコンストラクタを作ればいいだけ。

312 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 18:37:17.89 ID:u428dFct]
std::vector<clsB>にdlvB型のオブジェクトを突っ込むとスライシングでダメになるから気をつけるように
多態をコンテナ内で実現したいならstd::shared_ptrやunique_ptrを入れるのがよい

313 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:01:11.81 ID:Nbqron3B]
仮想デストラクタが必須なのは当然として
vectorに突っ込むケースを考えると
難易度としては
vetcor<Base>
vetcor<Base*>
vetcor<shared_ptr<Base>>
ptr_vector<Base>
こんな感じじゃね?
それぞれ注意点はあるが
一見簡単そうに見える
vetcor<Base>
が一番きつい

314 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:33:50.00 ID:O7xBtcGx]
make_uniqueが標準に入らないと、記述量がちょっと面倒

316 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:42:49.07 ID:Nbqron3B]
>>314
たしかに
デザパタで
知らんかった
流行り廃りとかあるの?デザパタで

317 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:49:25.61 ID:aOtL598m]
std::unique_ptrはvectorに突っ込めるのにboost::scoped_ptrは出来ないのはなんで?

318 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 20:54:50.82 ID:tBkVUf7m]
moveできないから

319 名前:デフォルトの名無しさん [2014/04/15(火) 23:53:29.68 ID:hh7KqCRP]
noncopyableだからだろ

320 名前:デフォルトの名無しさん mailto:sage [2014/04/15(火) 23:56:04.64 ID:of9IS0B8]
ユニポもそうだけど



321 名前:デフォルトの名無しさん [2014/04/16(水) 00:00:41.11 ID:cUKcFdx2]
>>320
すまん、そうだね、copyかmoveが出来ないとコンテナには入れられないということで






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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