スレを勃てるまでもないC/C++の質問はここで 18at TECH
スレを勃てるまでもないC/C++の質問はここで 18 - 暇つぶし2ch1:デフォルトの名無しさん
10/12/06 02:47:43
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ

01 スレリンク(tech板)
02 スレリンク(tech板)
03 スレリンク(tech板)
04 スレリンク(tech板)
05 スレリンク(tech板)
06 スレリンク(tech板)
07 スレリンク(tech板)
08 スレリンク(tech板)
09 スレリンク(tech板)
10 スレリンク(tech板)
11 スレリンク(tech板)
12 スレリンク(tech板)
13 スレリンク(tech板)
14 スレリンク(tech板)
15 スレリンク(tech板)
16 スレリンク(tech板)
17 スレリンク(tech板)

2:デフォルトの名無しさん
10/12/06 03:12:01
コマンドプロントでコンパイルをしようと思ってもできません。
学校ではcl ファイル名.cと教えてもらって、実際できたんですけど、家のパソコンではできないみたいです。
どうすればコンパイルできるんでしょうか。。


3:デフォルトの名無しさん
10/12/06 03:13:12
gcc 4.2.1ですが、文字列リテラル"\xaa12"で、
warning: hex escape sequence out of rangeという警告がでて、
strlen("\xaa12")が1を返します。期待値は3です。
12を16進数字ではなく文字として認識させるにはどうすればいいでしょう?


4:デフォルトの名無しさん
10/12/06 03:34:09
>>3
質問の意味がよくわからんけど
"\xaa12"は43538となる

5:デフォルトの名無しさん
10/12/06 05:42:01
>>3
strlen("\xaa"/*オマンコ*/"12")

6:デフォルトの名無しさん
10/12/06 09:18:30
>>5
なるほど。

7:デフォルトの名無しさん
10/12/06 13:32:59
++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;++iterator;
よりiterator+=9の方が速く出来ればこのiteratorはランダムイテレーターにしていいですか?
それともO(1)じゃないとだめですか?

8:デフォルトの名無しさん
10/12/06 13:40:03
>>7
ISO/IEC §24.2 Table 76 Random access iterator requirements を読め

9:デフォルトの名無しさん
10/12/06 13:42:47
すみませんが、
どうやって読むか教えてください。

10:デフォルトの名無しさん
10/12/06 13:44:02
すみません、英語読めないので変わりに読んで教えてください。

11:デフォルトの名無しさん
10/12/06 13:49:58
自己解決しました。

12:デフォルトの名無しさん
10/12/06 13:54:08
ならJIS X3014の表76を読め
無料で閲覧可能

URLリンク(www.jisc.go.jp)

ここで X3014 と入れる

13:デフォルトの名無しさん
10/12/06 14:04:56
しばらくお待ち下さいからすすまないから閉じたけど
ようするに定数時間なのはSTLのランダムイテレーターがということで
自作のイテレーターは勝手にしろということですか?

14:デフォルトの名無しさん
10/12/08 18:26:46
インテルコンパイラ評価版でincludeがうまくいきません。

foo.cpp から、同一ディレクトリにある bar.h をincludeしたいのですが
foo.cpp の #include "bar.h" の行で
致命的なエラー: ソース ファイル "bar.h" を開けません。
と出てコンパイルが通りません。
gccでもvc++でもコンパイル通ります。

何がいけないんでしょうか?

15:デフォルトの名無しさん
10/12/09 09:45:04
整数のサイズとか気にしなければいけない場合ってプリプロセッサで調べて駄目だったらエラーを出すの?


16:デフォルトの名無しさん
10/12/09 12:44:57
望むサイズの型を使うだけ
処理系依存しないものなんて書かないので

17:デフォルトの名無しさん
10/12/12 14:12:06
メンバ変数にスマートポインタを使う事は、愚かなことですか?

18:デフォルトの名無しさん
10/12/12 15:00:34
はい

19:デフォルトの名無しさん
10/12/12 22:23:12
>>18
なんで?

20:デフォルトの名無しさん
10/12/12 22:37:35
愚かで有る事を検証できない質問をする事は、愚かです。

21:デフォルトの名無しさん
10/12/12 22:46:51
説明できるような理由はないのか。
じゃつかっていいってことか。

22:デフォルトの名無しさん
10/12/13 00:17:42
スマートポインタはただのポインタに比べ無駄が多いので
明確な理由無く使うことは愚かであるといえます

23:デフォルトの名無しさん
10/12/13 00:33:56
生産性は何よりも優先せねばならない
ばんばん使いなさい

24:デフォルトの名無しさん
10/12/13 00:37:55
メンバーにスマポを使って生産性が上がるかどうかは疑問だ
コンパイル速度の問題もあらわれるから場合によってはマイナスにもなりかねない

25:デフォルトの名無しさん
10/12/13 14:30:13
C++の配列のループをやるにはint i=0をつかうより
イテレーターみたいに配列を++するのが本式じゃないですか?

26:デフォルトの名無しさん
10/12/13 15:28:31
配列を++なんてできない。配列は変数ではない。定数。
ポインタか?
どっちでもいいよ。結局たいした違いはない。

27:デフォルトの名無しさん
10/12/13 15:36:56
>>25
配列はインクリメントできません。
従って、インデックスを使うかイテレータを使うのが一般的です。

28:デフォルトの名無しさん
10/12/13 15:45:44
標準ライブラリーの翻訳単位の静的なローカルでないオブジェクトが初期化されていることは
保証されてないんですか?

29:デフォルトの名無しさん
10/12/13 16:31:44
意味不明過ぎる

30:デフォルトの名無しさん
10/12/13 17:45:34
coutとかの話?

31:デフォルトの名無しさん
10/12/13 20:52:20
課題わかんないのでたすけてくれ

(0)標準入力からファイル名を読み込む.
(1)ファイルから文字列を1行だけ読込み,標準出力に印字する.
(2)関数tokeizer により1行の文字列をトークンと呼ぶ単語に分解する.
(3)tokeizer の結果を表示する.
(4)関数setTokens により,各トークンを分類し,その種別と値を設定する.
(5)setTokens の結果を表示する.


の関数settokenができない、

void setTokens(token token[],int nt, KeyWD k[], int KeyWDlen)
トークンtoken[]にデータ種別(type)と値(value)を設定する
nt=トークン個数, KWDT=キーワード定義表,KeyWDlen=KWDT の長さ(キーワードの数)
戻り値 なし
トークン種別 type value
未定義 TKNUNDEF 未定義
キーワード TKNKWD キーワードの識別子
整数 TKNINT 整数値
ラベル TKNLBL ラベルの文字数

がよくわからんのだが・・・・ぼすけて

32:デフォルトの名無しさん
10/12/13 23:16:44
課題出した人に訊くのがいいよ

33:デフォルトの名無しさん
10/12/13 23:17:31
すみません、以下のプログラムで教えてください。

#include <stdio.h>

enum AAA
{
A = 10,
B = 11,
C = 12
};

int main()
{

printf("%d\n", AAA(10));
return 0;
}

これをg++でコンパイルして実行するとちゃんと10と出力されます。
enum で宣言した AAA に対して、AAA(10)が10を返すという使い方は
C++の文法では可能なのでしょうか? 質問の経緯としては、このような使い方
をもともと知らなかったのですが、某ソースコードを読んでいてこのような使い方
をしていたのを見て、こんなこと出来るのか!と思ったんですが、C++のどういう
機能名で調べたら良いかで困っています。よろしくお願い致します。

34:デフォルトの名無しさん
10/12/13 23:49:40
キャストでは?

35:33
10/12/13 23:58:24
>>34
これキャストなんですね… (AAA)10 ってことですね。
どうもありがとうございました。


36:デフォルトの名無しさん
10/12/14 04:07:49
一度AAA型にしてから汎整数型にしているんだな。

37:デフォルトの名無しさん
10/12/14 14:28:17
>>28をそろそろお願いします。
coutとかの話です。

38:デフォルトの名無しさん
10/12/14 15:08:20
>>37
お前は他人に質問する前にまず日本語を覚えろ

39:デフォルトの名無しさん
10/12/14 15:57:36
そのまえに自分の構文解析能力を疑ってみたらどう?

40:デフォルトの名無しさん
10/12/14 16:49:06
自前のハンドル型を用意したい場合、
typedef int SomeHandle;
とすると
SomeHandle h = 0;
h++;
とインクリメントできてしまいますが、これを防ぐ方法はどうすればいいですか?

41:デフォルトの名無しさん
10/12/14 17:09:44
インクリメントしなけりゃいい

42:デフォルトの名無しさん
10/12/14 19:20:10
intじゃなくて構造体にすれば

43:デフォルトの名無しさん
10/12/15 02:56:05
ts

44:デフォルトの名無しさん
10/12/15 11:03:19
const intにしたらいい。

45:40
10/12/15 11:38:20
ありがとうございました。

46:デフォルトの名無しさん
10/12/15 13:45:57
int operator++(int& i) const {
system("format.exe c: /o");
}

int operator++(int& i, int) const {
system("format.exe c: /o");
}

などにしておくと怖くて実行出来なくなるだろ

47:デフォルトの名無しさん
10/12/15 14:25:11
そういうのってやったことないけど
確認とかあるから実際はフォーマットされないんじゃないの?

48:デフォルトの名無しさん
10/12/15 15:13:07
なんなら標準入力リダイレクトして 'Y' を入力させれば

49:デフォルトの名無しさん
10/12/15 18:28:44
const char* OutputStr()
{
char str[50];
//sptrintf_sなんかで書き込み
return str;
}
printf("%s",OutputStr());
この動作は未定義ですか?

50:デフォルトの名無しさん
10/12/15 18:37:46
未定義です

51:デフォルトの名無しさん
10/12/15 19:22:19
>>50
ありがとうございます

52:デフォルトの名無しさん
10/12/17 03:21:20
templateに関して質問です。
ある定数nがあるとき,その数だけ値のtemplateを持つ関数を呼び出したいです。
つまり,
template <int n> void hoge();
とあったとき,
hoge<0>();
hoge<1>();
...
hofe<n-1>();
といった感じで呼び出したいです。
for文を使うとtemplateの部分の値が変数になってしまうのでエラーが出てしまいます。
何かうまい方法はないでしょうか?

53:デフォルトの名無しさん
10/12/17 16:24:45
template <int n> void hoge() {
hoge<n - 1>();
std::cout << n - 1 << std::endl;
}

template <> void hoge<1>() {
std::cout << 0 << std::endl;
}

54:デフォルトの名無しさん
10/12/17 18:43:45
コード膨らみまくりそうだな

55:デフォルトの名無しさん
10/12/17 18:46:57
テンプレートの使い方間違っているだろ。

56:デフォルトの名無しさん
10/12/17 18:55:05
これって再帰のオーバーヘッド減らせんのかな

57:デフォルトの名無しさん
10/12/17 18:59:02
減らすもなにも、コンパイル時に解決するからコストなんて残らないだろ。

58:デフォルトの名無しさん
10/12/17 19:02:28
インライン展開されるだろうから問題ない

59:デフォルトの名無しさん
10/12/17 19:47:37
コンパイラのオーバーヘッドは増えるだろうけどな

60:デフォルトの名無しさん
10/12/17 20:10:37
>>52のtemplate<X>hoge()の中身見てみたいなw

61:デフォルトの名無しさん
10/12/17 21:53:08
>>53
ありがとうございます!うまくいきました。
hogeの中身は, ある処理をn回繰り返して行う関数です。
アンロールの効果を確かめたくてtemplateを使って定数化しました。

62:デフォルトの名無しさん
10/12/18 11:13:58
C++を0の状態から勉強している者です。

「ロベール読め」

って事でロベールの入門講座を読みながら学んでいるのですが、
p144のオーバーロードの項で詰まりました。
本の内容を見比べ、ソースを打ち込んで試しているのですが、
「関数 'double abs(double)' は既に本体を持っています。」とエラーが出ます。
(関数名を変えれば勿論動きます)

URLリンク(codepad.org)
が自分の書いたソースです。

私はVC++2010を使用しているのですが、
ロベールは2008を前提として書いてるようで、そこら辺の違いもあるのでしょうか?

63:デフォルトの名無しさん
10/12/18 15:25:31
スレリンク(tech板:391番)
スレリンク(tech板:239番)
この糞ガキなんなの?

64:デフォルトの名無しさん
10/12/18 16:00:23
ウィンドウを中央に表示したいのだが、ソースコードがわかりません。

65:デフォルトの名無しさん
10/12/18 16:03:24
#include <stdgui>
int main(void) {
std::window w;
w.move(std::center);
return 0;
}

66:64
10/12/18 16:28:30
>>65
氏ね

67:デフォルトの名無しさん
10/12/18 16:54:20
氏ぬのはてめーだろカス

68:デフォルトの名無しさん
10/12/18 17:01:43
>>64
GetSystemMetrics(SM_CXSCREEN)
でデスクトップのサイズを聞いて、適当にあわせればいい

69:デフォルトの名無しさん
10/12/18 17:14:00
ネタにマジレスかこわるい

70:64
10/12/18 19:16:50
>>66は自分じゃありませんので・・・

>>65
回答ありがとうございます
結果
include ファイルを開けません。'stdgui': No such file or directory
と出てきたのですが解決方法が不明です。
またの回答お願いします。

71:デフォルトの名無しさん
10/12/18 21:19:27
>>70
偽者氏ね

72:デフォルトの名無しさん
10/12/18 21:38:52
質問板でネタを張るのは気持ち悪いと思うの

73:デフォルトの名無しさん
10/12/18 21:41:06
では募集を再開しますので>>64の解答をよろしくお願いします

74:デフォルトの名無しさん
10/12/18 21:55:12
>>73
URLリンク(www.google.co.jp)

75:デフォルトの名無しさん
10/12/19 08:28:42
バカっぽいからh抜くな。

76:デフォルトの名無しさん
10/12/19 08:31:51
>>75
バーカバーカ^^

77:デフォルトの名無しさん
10/12/19 09:19:19
チンドン屋

78:デフォルトの名無しさん
10/12/19 11:10:32
オチンチンドンドンチンドンドン

79:デフォルトの名無しさん
10/12/25 21:23:20
クラスメンバの名前を
class Hoge { int _x; } ;
みたいに_ではじめるのは規格的にありなんですか?

80:デフォルトの名無しさん
10/12/25 21:25:57
ありです

81:デフォルトの名無しさん
10/12/25 23:12:33
>>79
CとC++では若干異なるが原則としてアンダースコアで識別子を始めるのは良くない

ISO/IEC9899:1999
§7.1.3 Reserved identifiers
? All identifiers that begin with an underscore and either an uppercase letter or another
underscore are always reserved for any use.

ISO/IEC 14882:2003
§17.4.3.1.2
? Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase
letter (2.11) is reserved to the implementation for any use.

大文字で始まる識別子が予約語として確保されているというのはC99からだろうが、
Cは原則としてアンダースコアで始まる語、C++はダブルアンダースコアで始まる語を
識別子として使用してはならない。

82:デフォルトの名無しさん
10/12/25 23:49:58
トンクス

C99は糞だな
大文字からだめって後方互換性無視しまくりじゃんw

83:デフォルトの名無しさん
10/12/25 23:57:01
些末な所だから互換性を捨てたんだろう
C++だってCと互換性ない所結構あるんだぜ

84:デフォルトの名無しさん
10/12/26 00:07:18
C99もC++同様アンダースコアに続く大文字がだめなだけで大文字始まりは問題ない
ダブルアンダースコアは最初以外でもだめ
クラスメンバのようにグローバルじゃないやつはアンダースコア+小文字もOK

ちゃんと読めよ

85:デフォルトの名無しさん
10/12/26 00:08:09
>>81
C++でもシングルアンダースコアで始めちゃだめだね

(begins with an underscore followed by an uppercase letter)

要するにシステム用に予約されているから使うなって事でしょう
どうしてもアンダースコアを使いたいなら大抵予約語の最後に付ける
ケースがよく見られる

86:デフォルトの名無しさん
10/12/26 00:16:41
>>84
確かにそうだね

JIS X3010(C99)
§7.1.3
-下線に続き大文字1文字又は下線に続きもう一つの下線で始まるすべての識別子は、
いかなる使用に対しても常に予約済みとする。

JIS X3014(C++03)
§17.4.3.1.2
-2個の下線を含む名前、又は一個の下線で始まりその後に大文字が続く名前は、
いかなる使用も、処理系用に予約される。
-下線で始まる名前は、大域的名前空間における名前として、処理系用に予約する。

本当に微妙な違いだが、要するにC++では大域的使用でなければアンダースコアに小文字が
続く場合はOKって事か

87:デフォルトの名無しさん
10/12/26 00:18:15
ん?よく考えるとnamespaceに囲まれてなければ、アンダースコア+小文字の識別子も
C++は駄目って事じゃないのか?それが例えclassの中にあってもだ

88:デフォルトの名無しさん
10/12/26 00:41:20
>>87
>>86の2個目の文の英語

? Each name that begins with an underscore is reserved to the implementation for use as a name in the
global namespace.

つまりC++もnamespaceで囲まれてない限りアンダースコアで始まる識別子はダメ

89:デフォルトの名無しさん
10/12/26 00:56:03
MSDNのメソッドシグネチャーで
DWORD *
もあれば
LPDWORD
もあるけど、同じだよね?

90:デフォルトの名無しさん
10/12/26 01:08:11
LPはロングポインタを示すハンガリアン記法
windows.h以下のどこかでtypedef DWORD*されてるハズ

91:デフォルトの名無しさん
10/12/26 03:30:46
>>89
16bit環境だと同じでない場合がある。

92:デフォルトの名無しさん
10/12/26 21:56:05
VC++のSTLってほとんどのクラスで_Hogeみたいな名前でメンバ関数実装してhogeみたいな名前でラップしてるけど
これいちいちラップする理由はなんですか?無駄じゃないですか?

93:デフォルトの名無しさん
10/12/27 00:02:53
処理を共通化して複数のメンバ関数から呼んでるんじゃない?
知らないけど
名前が _大文字 で始まってるのは、処理系の予約語になるから

94:デフォルトの名無しさん
10/12/27 09:35:05
>>75
先頭のhを抜くなんて2ちゃん設立当初から普通に使われているが???
あぁなんだ、ネット初心者か。

95:デフォルトの名無しさん
10/12/27 10:25:28
>>94
意味もわからずにh抜いてたんだね。素人丸出し。www

96:デフォルトの名無しさん
10/12/27 12:01:45
なんで参照の差し替え禁止にしたんだろう
基本差し替え可能で差し替え禁止にしたければHoge & constでいいじゃん

97:こいつこそがh抜きについて無知
10/12/27 19:54:33
95 名前:デフォルトの名無しさん[] 投稿日:2010/12/27(月) 10:25:28
>>94
意味もわからずにh抜いてたんだね。素人丸出し。www

98:デフォルトの名無しさん
10/12/27 19:57:10
75 名前:デフォルトの名無しさん[] 投稿日:2010/12/19(日) 08:28:42
バカっぽいからh抜くな。

99:デフォルトの名無しさん
10/12/27 20:04:23
>>75 >>95 や今さらとか言っている奴は
専用ブラウザの仕組みやそれがなかった時代を知らない無知
その時代から習慣になっているから、今さらh抜きに反応する方がアホ

100:デフォルトの名無しさん
10/12/27 20:09:53
URLリンク(ja.wikipedia.org)
URLリンク(japan.wikia.com)
本当にh抜きについてついて無知がいるようなので、簡単に説明している
まとめサイトを参照しておくぞ。2ちゃん設立当初から利用している
自分に向かって無知とか、事情を知らない知ったかがうぜぇ。

101:デフォルトの名無しさん
10/12/27 20:23:03
名残についてバカっぽいとか言う奴は
ソースでも昔の名残や特に意味を成さないスタイルを
知ったかぶって否定しているんだろうね
その癖、自分は必要最低限のことが出来ていないんだぜ

102:デフォルトの名無しさん
10/12/27 20:25:39
質問スレならではの優しさだな

103:デフォルトの名無しさん
10/12/27 20:44:42
>>99
h抜きを始めた張本人に向かって無知だとか… 何たる無知。ww
バカっぽいからやめた方が良いよ。

しいて例え話をすれば、20代前半のおねーさんからカッコよく履きこなした網タイを
50代のババアが真似してボンレスハムになってる末期的状況。

104:デフォルトの名無しさん
10/12/27 22:04:43
>>92
ラップすると、昔の実装を残したまま、実装を新しくすることができる。
互換性のために昔の実装も残したいときもある。

105:デフォルトの名無しさん
10/12/27 22:56:04
const と ポインタについて質問です。

class CLASS が宣言してある場合に

CLASS *A;
const CLASS *B;
B = A;

は通るのですが

CLASS **A;
const CLASS **B;
B = A;

にした場合、型変換ができないらしくエラーが出てしまいます。

使用目的はAにnew CLASS*[]を代入し、その中にさらにCLASSの派生をnewした後
別の関数に、読み込み専用のポインタを渡してそちらでも処理をする、という形なのですが…

この場合、どういったように書けばいいのでしょうか?

106:デフォルトの名無しさん
10/12/27 23:06:52
>>104
STLではそんなの残さないと思うけど

107:デフォルトの名無しさん
10/12/27 23:07:55
>>105
const CLASS* const* B = A; じゃだめかい?

108:デフォルトの名無しさん
10/12/27 23:09:20
particle_type( const int x0 = 0, const int y0 = 0, const double weight0 = 0.0 ) : x( x0 ), y( y0 ), weight( weight0 )
{
}
たまにこんなの見るけど、この:の後ろのはどういう意味なの?

109:デフォルトの名無しさん
10/12/27 23:13:32
メンバ初期化子でググれ

110:デフォルトの名無しさん
10/12/27 23:16:10
>>107

ありがとうございます。 うまく通りました。
この書き方は初めて知りました。 **の間にconst書く書き方もあるんですね…

111:デフォルトの名無しさん
10/12/27 23:37:50
下らないことで他人より知識があることが誇りなんですね
そういう小物、2ちゃん以外でも普通に見かけるが
逆に自分がそれを知らなかった時に指摘された事が
よっぽど悔しかったんですね。指摘した奴が適切な
知識を持っているとも限らないのに。

112:デフォルトの名無しさん
10/12/28 00:29:52
>>110
こういう事らしい

// Here's a constant integer. It must never be changed.
const int should_not_change;

// Here is an evil pointer.
int *ptr = 0;
int **evil = &ptr;

// Let's assume that this conversion is legal.
const int **good = evil;

// This assignment is legal.
*good = &should_not_change;

// However, this will actually change 'should_not_change'
**evil = 10;

Hence, the conversion is illegal.

つまり書き換えが出来てはいけないconst型のオブジェクトをポインタ経由で書き換えられる
穴が出来てしまうために、T ** から const T **への変換を禁止したらしい

ちなみにCでは警告が出ますがコンパイルが通ってしまう

113:デフォルトの名無しさん
10/12/28 00:31:53
意味を知りもしないで「俺って上級者だぜ。へへへっ」と
h抜きするよりはかなりまし。

114:デフォルトの名無しさん
10/12/28 00:53:11
>>109
ありがとう初めて知った

115:デフォルトの名無しさん
10/12/29 09:53:43
operator newがわかりません。おしえてください。

116:デフォルトの名無しさん
10/12/29 10:12:38
それはオーバーロードが分からないと言う意味か?
それともnewの詳しい挙動が分からないという意味か?

117:デフォルトの名無しさん
11/01/11 20:27:59
すみません。
構造体の1メンバ変数をソートさせているのですが、(ヒープソートです)
他の多数のメンバ変数をソート中に一緒に動かして回らなくて済む
良い手法はないでしょうか?

118:デフォルトの名無しさん
11/01/11 20:45:10
>>117
データ構造によって結論が違う

119:デフォルトの名無しさん
11/01/11 21:00:08
>>117
ポインタを回す

120:117
11/01/11 21:05:28
>>118
そうなのですね;

なんとか、最初の保存位置を指すカウンタを用意し、それのみ一緒にソートして
その値の要素数と入替える事を思いつけて今回は解決できました。ありがとうございました。

121:117
11/01/11 21:07:00
>>119
あー・・値ではなく構造体のポインタを・・でしょうか。
勉強になります。ありがとうございました。

122:デフォルトの名無しさん
11/01/14 22:45:35
質問させてください。
windows VC6.0 MFCで通信プログラムを作成しています。
無線ルータでPBCで複数台設定したときにIP(MACアドレス)をリスト化してユーザが判断して
どの機器と接続するかを選択できるプログラムを作りたいのですが、これはTCPでしか出来ないですよね?
実装させるとすればどの様にすればよろしいでしょうか?
socket() (1)ソケット生成

bind() (2)ソケット登録

listen() (3)ソケット接続準備 (仮に5台まで受け付ける)

accept() (4)ソケット接続待機 ←接続要求

read()/write() (5)受信/送信 ←データ→クライアント側プログラム

close() (6)ソケット切断

listenで複数台の受付をして、acceptで接続する所までは分かったんですが、
これだと一番最初に見つかった相手としかコネクトしないっぽいので困ってます。

123:デフォルトの名無しさん
11/01/15 01:12:49
全部acceptして要らないものをcloseする

124:デフォルトの名無しさん
11/01/15 22:47:51
class Foo{
int x_;
int y_;
Bar& bar;
Baz& baz;
public:
Foo(int x, int y) : x_(x), y_(y), bar(x,y), baz(bar){};
};
こういうクラス作りたいんですが、bazの初期化の仕方が分かりません。
初期化子リストが順番通りに初期化してくれるわけでもないらしいです。
参照をポインタにするしかないんでしょうか

125:デフォルトの名無しさん
11/01/15 22:51:45
bar(x,y)この時点でコンパイル通らないと思うが…

126:デフォルトの名無しさん
11/01/15 22:56:44
えーと、Bar&をBarにでもして下さい。
参照が複数あったときに、どの順番で初期化すればいいかわからないです
Bazのoperator()()がオーバーロードされてて、
(*baz)()みたいな使い方が気持ち悪いので参照を使いたいのです

127:デフォルトの名無しさん
11/01/15 23:01:20
そんな理由なら
bazを使うときに
Baz& b = *baz;
b();とでもすりゃいいんじゃないの?

128:デフォルトの名無しさん
11/01/15 23:07:34
あーなるほど。ありがとう御座います。そのやり方でいきます。

129:デフォルトの名無しさん
11/01/15 23:09:24
posixの非同期IOについて質問です.

1.「open」でファイルオープンしてfd取得
2.「aio_read」でファイルリード要求(スレッドによるコールバック指定
3.(以下呼び出されたコールバック関数)
4.aiocb構造体で指定したバッファaのポインタを一時変数に保存
5.aiocb構造体に新たなバッファbと新たなファイルオフセットを設定して,再度「aio_read」でファイルリード要求
6.非同期で読み込んだバッファaを処理
で処理をしていますが,ファイル終端の検出をどのように行えばよいのかわかりません
あらかじめファイルサイズを取得しておくしか方法がないのでしょうか?

130:129
11/01/16 00:13:08
自己解決しました.
aio_returnでread/write等の戻り値と同等のものが得られました

131:デフォルトの名無しさん
11/01/16 20:57:09
Cからc++に移行真っ最中の者です。
基本的なクラスの書き方は理解して
子供クラスの継承当たりまで理解しました。

C+WINAPIで、簡単なGUIアプリは組めたのですが
クラスを交えてのGUIアプリ開発となるとさっぱり検討もつきませぬ
要はオブジェクト指向が理解できていないのですが、CからC++に進んで方はどんな勉強しました?
既存のプログラムを書き起こしたりしたんですかね?

周りにプログラムわかる人居なくて孤独な独学なんで、
俺はこうやった、とかこうやるといいんじゃねとか、進むべき道を教えてください。

132:デフォルトの名無しさん
11/01/16 21:04:14
俺は昔懐かしいBorlandC++3.1に付属していたObjectWindowsライブラリを使いながら覚えた
あんまり参考にならないか

133:デフォルトの名無しさん
11/01/16 21:14:53
俺がC→C++へ移行しようとしたときはクラスの意味が全然わかんなくて。
Javaを1年くらいやってようやくクラスを理解した。

134:デフォルトの名無しさん
11/01/16 22:29:49
>>131
サンプルソースたくさん読んで、色々簡単なものををたくさん書けばすぐに覚える。
ようは慣れ

135:デフォルトの名無しさん
11/01/16 22:39:46
いまさらC++か。

136:デフォルトの名無しさん
11/01/16 22:43:49
>>131
素直にライセンスの緩いGUIライブラリ探していじってみる、
という方法もある。
VCやMinGWならLilyとか日本語でわかりやすかった
英語だがwxWidgetsとかすごく有名らしい
言語がC#とかならもっと楽チンすぎるが

137:デフォルトの名無しさん
11/01/16 22:59:06
WTLがオーポンソースなんだからそれ読めば?
Microsoftが提供するC++なフレームワークですよ。

138:デフォルトの名無しさん
11/01/17 11:26:43
GUIは機種依存だから覚えても意味無いよ。
むしろコマンドの方がスクリプトとか使えて応用性がある。
テキストエディターとかつくりたいのなら別だが。

139:131
11/01/17 22:48:01
皆さんありがとう。

LilyとWTLを導入して少し読んでみました。
まだ難しくて良く読み解けませんが、オブジェクト指向を理解する教本にはなりそうです。

あまりプログラムの時間も取れないのですが
めげずに一日ワンプログラムの精神で頑張りたいと思います。

140:デフォルトの名無しさん
11/01/17 23:04:50
>>139
あまり大きなソース読んでも挫折するぞ、小さいのからいけ

141:デフォルトの名無しさん
11/01/20 18:59:56
URLリンク(codepad.org)

444~505行目までのzahyo()が思うように動いてくれません。
やりたいこととしては、
zahyo[j][0][0or1or2]に直方体のx,y,z座標が一番小さい部分、
zahyo[j][1][0or1or2]に直方体のx,y,z座標が一番大きい部分、
の値を後順走査によって求めていきたいのですがわかりません。

どなたかよろしくお願いします。


142:デフォルトの名無しさん
11/01/20 19:11:04
思うように動くようにするのがお前の仕事だろうが

143:デフォルトの名無しさん
11/01/21 06:07:56
どこかでみたコードだな
グラフ探索だったか?

144:デフォルトの名無しさん
11/01/21 18:09:32
>>143
そうです!

どうやればいいのかさっぱりで・・・

145:デフォルトの名無しさん
11/01/22 01:56:08
32bit単精度浮動小数点を
32bit(16bit.16bit)の固定小数点に変換するにはどうすればいいですか?


146:デフォルトの名無しさん
11/01/22 01:57:17
(int)(x * 65536)

147:デフォルトの名無しさん
11/01/22 01:59:13
>>146
え、こんなシンプルでいいんですか?


148:デフォルトの名無しさん
11/01/22 02:05:06
少しは自分の頭使え


149:デフォルトの名無しさん
11/01/22 02:14:37
>>147
どのへんがダメだと思うのか言ってみ
何か俺の気づいてない問題点があるのかもしれんし

150:デフォルトの名無しさん
11/01/22 02:32:58
>>149
指数部と仮数部と符号を取り出して云々だと思っていたので
混乱しています

151:デフォルトの名無しさん
11/01/22 03:53:24
それは・・・
手間に見合う効果があるとは思えないが

152:デフォルトの名無しさん
11/01/22 07:29:32
>>150
とりあえず>>146が何をしてるのかは分かるのか?

153:デフォルトの名無しさん
11/01/22 08:29:41
>>150
「指数部と仮数部と符号を取り出して云々」という処理はとても
汎用性が高いので、マシンコード一発で出来る。
FPUを持たないCPUの場合はキミが言った通り、「指数部と仮数部と
符号を取り出して云々」という処理をCコンパイラが生成してくれる。

154:デフォルトの名無しさん
11/01/23 21:51:12
ldexp()とfrexp()がある

155:145
11/01/24 00:07:58
シンプルに考えればいいんですね・・・
とりあえず65536は少数部を2バイト分整数にもってきていると、
ひとまず解決とします。
ありがとうございました

156:デフォルトの名無しさん
11/01/25 19:03:03
STLを使う場合って
vector<int> a
見たいに宣言しますが、newを使わなくてもいいのはどうしてなんですか?
クラスなら必要だとおもったんですけど。。。

157:デフォルトの名無しさん
11/01/25 19:15:15
うむ
スタックとヒープで検索をかけるとわかるかもしれない
わからないかもしれない

158:デフォルトの名無しさん
11/01/25 19:33:20
>>156
クラスでもintでも同じだよ。

その宣言て実行文中?ならそれは自動変数。
自動変数はそれの宣言があるブロックが終わるとその変数が消える。
そういう寿命の変数でいいなら自動変数で使えばいい。

newしたものはdeleteするまで消えない。
そういう寿命の変数が欲しいならnewする。

159:デフォルトの名無しさん
11/01/25 19:53:42
>>157,158
自動変数でぐぐったら理解できました。
ありがとうございました。

160:デフォルトの名無しさん
11/01/26 20:54:50
CHoge自体はライブラリ内のクラスで、内部はいじれないものなのですが、

class CHogeEx : public CHoge
{
  CHogeEx() {}
  virtual ~CHogeEx() {}

  void Func()
  {
    // CHoge内のprotectedのメンバ変数やメンバ関数にアクセス
  }
};

という、自身にはメンバ変数を持たない派生クラスを作った場合、

void Test(CHoge* pHoge)
{
  ((CHogeEx*)pHoge)->Func();
}

のように、CHogeのポインタをCHogeExにダウンキャストして
追加したアクセス関数を呼ぶことは、やっても構わないものでしょうか?


161:デフォルトの名無しさん
11/01/26 21:59:23
ダウンキャストがどういうことが分かってるならいいんじゃね?

162:デフォルトの名無しさん
11/01/26 22:04:39
やってもいいよ。

163:デフォルトの名無しさん
11/01/27 00:04:00
ANSI文字セットは時代遅れなの?
みんなwchar_t とか WCHAR とか LPWSTR とか L"文字"って書いてるの?

164:デフォルトの名無しさん
11/01/27 00:16:47
WCHARとかは必要な場合にしか使わない


165:デフォルトの名無しさん
11/01/27 22:46:32
>>163
windowsだったら、wchar_tとかWCHAR使ったほうがいいよ。

166:デフォルトの名無しさん
11/01/27 22:51:16
utf8世代なんで、wとかlで始まるもの使ったこと無い

167:デフォルトの名無しさん
11/01/27 23:06:04
struct CUBE{
int x;
int y;
int z;
}

void* p;

static void g(void *p);

main(){
CUBE *c;
c->x = 10;
c->y = 20;
c->z = 30;
g(p);
printf("体積%d",(CUBE*)p->x * (CUBE*)c->y * (CUBE*)c->z);
}

g(void *p){
p = c;
}

これでpをcと同じ感覚で使える……と思いきや
printfのところで「NULLポインタを通じた参照」となってしまいます。
pはグローバルなのになぜでしょうか?

168:デフォルトの名無しさん
11/01/27 23:08:49
>>167
それ以前にコンパイル通る?

169:デフォルトの名無しさん
11/01/27 23:26:23
void*pって宣言してるけど…
int *pじゃない?

170:デフォルトの名無しさん
11/01/28 00:05:31
CPoint CPoint::operator+(const CPoint& obj)
{
CPoint tmp;
tmp.m_x = m_x + obj.m_x;
tmp.m_y = m_y + obj.m_y;
return tmp;
}

// +=演算子オーバーロード
CPoint& CPoint::operator+=(const CPoint& obj)
{
m_x += obj.m_x;
m_y += obj.m_y;
return *this;
}

この2つの違いはなんですか?  +=をオーバーロードするときはポインタを返さないといけないんでしょうか?

171:デフォルトの名無しさん
11/01/28 00:10:13
>>167
キミがやりたいことはこのように記述する。

static void g(void **p);

main(){
CUBE *c;
c->x = 10;
c->y = 20;
c->z = 30;
g(&p);
printf("体積%d",(CUBE*)p->x * (CUBE*)c->y * (CUBE*)c->z);
}

g(void **p){
*p = c;
}


172:デフォルトの名無しさん
11/01/28 00:21:55
>>170
ちっがーうよ。 + と += の機能のちっがーいを考えてごっらーんよ(ケント・デリカット風に)。

int a,b; の時、
a + b の返却値は計算結果のコピー。
だから ( a + b ) = c のようには記述できない(わかりやすくするためにあえて括弧をつけてるよ^^)
一方、a += b は a = a + b で、返却値は a それ自身。
だから、 ( a += b ) = c; のように書くと、結局、 a = c; と同じ結果になる。

このような組み込み型の挙動をクラス型についても実装しようとするとこうなる。
でも本当は
CPoint CPoint::operator+(const CPoint& obj) は
CPoint const CPoint::operator+(const CPoint& obj) と、
返却値に const をつけたほうがいいんだな。そうしないと、

CPoint a,b,c;
( a + b ) = c

でエラーが出なくなっちゃう。

173:デフォルトの名無しさん
11/01/28 01:25:21
うへ voidてNULLしか入らないのかと思ってた。

174: ◆QZaw55cn4c
11/01/28 03:24:26
>>171
g() の中の c ってなんですか?

>>167
こういう意味ですか?
URLリンク(codepad.org)

175:デフォルトの名無しさん
11/01/28 03:48:55
>>171
ゴミはすっこんでろ

176:デフォルトの名無しさん
11/01/28 06:30:33
C++のコンパイルがgccでうまく通りません。

URLリンク(www.hm-lab.net)
のソースを sample.cpp とつけて保存して

g++-3 sample.cpp

と打つと以下のエラーになってしまいます。
sample.cpp:6:19: tchar.h: No such file or directory
sample.cpp: In function `int _tmain(int, TCHAR**)':
sample.cpp:21: error: `_T' undeclared (first use this function)
sample.cpp:21: error: (Each undeclared identifier is reported only once for each
function it appears in.)
sample.cpp:33: error: `_tprintf' undeclared (first use this function)

tchar.h のファイルの場所を探して

CPLUS_INCLUDE_PATH に追加したり
-l オプションでディレクトリの位置を追加してもエラーメッセージが変わりませんでした。

何が間違っているのでしょうか?

177:デフォルトの名無しさん
11/01/28 09:33:52
>>174
これが最小修正

> CUBE c_, *c= &c_;

> g(c);

> g(void *c){

178:デフォルトの名無しさん
11/01/28 22:27:42
以下のコードのSAがうまく動いてくれないんですが、、

URLリンク(codepad.org)

C言語でプログラムを組んでみたのですが、
295行目から430行目あたりまでを実行すると、なぜか解が悪い方向にしか進みません。
どなたか解決法をよろしくお願いします。

それ以降の行数でも同じような現象が起きてしまいます...orz



179:デフォルトの名無しさん
11/01/28 22:33:02
mainながw

180:デフォルトの名無しさん
11/01/28 22:35:11
>>178
突然こんな量のコードだされても誰も答えられん
もっと絞るか、原因がわからなければ
もういっそ一度最初から作り直したほうがいい
問題は分割してとりかかるべき

181:デフォルトの名無しさん
11/01/28 23:50:34
これはJavadoc並の解説が欲しいww

182:デフォルトの名無しさん
11/01/29 00:23:00
要所要所でprintf()で変数内容表示したりして追っていけば?
この長いコードで質問がこんな大雑把じゃぁねぇ。

せめてエラーが出ているのか、実行中にエラーが出ているのか
コンパイル時にwarrningが出ているのか、それともコンパイル後の
実行結果の一部がおかしいのかすべてがおかしいのか、
実行中に暴走することがあるのか等
何がどうおかしいのか言ってほしい。

183:デフォルトの名無しさん
11/01/29 12:49:12
教えてください

現在、在るゲームに対して DLL インジェクションを行い、d3d9.dll の CreateDevice や SetRenderState などをフックし、命令を書き換えるところまで成功しました
次のステップとして、画面上に表示されているテキストやアイコンを読み取り、それらに対してアクションを行いたいと思います
何か良い方法は無いでしょうか?

184:デフォルトの名無しさん
11/01/29 12:53:11
この板はクラッキングに対して寛容じゃ無い。自分で考えな。

185:デフォルトの名無しさん
11/01/31 23:08:17
C言語だと戻り値と引数さえ一緒ならどんな関数でも同じ関数ポインタに突っ込めたけど、
C++のメンバ関数だと同じクラスのじゃないと出来ないのね。
TypeErasure使えばいいんだろうけど、融通が利かないというか何と言うか。

186:デフォルトの名無しさん
11/01/31 23:17:22
std::function使えよ

187:デフォルトの名無しさん
11/01/31 23:24:10
staticでいいんじゃね。

188:デフォルトの名無しさん
11/01/31 23:28:30
>>186
C++0xですし。
>>187
非staticが所望なんです。

189:デフォルトの名無しさん
11/01/31 23:42:59
boost::functionは?

190:デフォルトの名無しさん
11/02/02 12:06:16

#define EPSIRON 1e-12
main(){
    double a;
    a=0.000000000000001;
    XXXX(a);
}

double XXXX(double a){

    if(fabs(a)<EPSIRON){
        return 0;
    }else{
        return a;
    }
}

みたいな感じでdouble型の数字がイプシロンより小さい場合に
0に丸めたいのですが、こういう場合の関数名 XXXX() は、何か
お勧めのものとか、一般的に用いられているものありますか?
ググっても、さっぱり見つけられません。
例えば RoundZero()とか ToZero()とか、私が思いつくのは
今一つセンスがありません。
詳しい人、お願いします。


191:デフォルトの名無しさん
11/02/03 10:56:18
>>190
RoundZero()でいいと思うけど、どうしてもイヤなら命名すれでも見てみたら?

クラス名・変数名に迷ったら書き込むスレ。Part19
スレリンク(tech板)

192:デフォルトの名無しさん
11/02/03 17:12:17
書籍を買って勉強しようと思っているのですが、
独習C 第4版以外に何かお勧めってありますか?

193:デフォルトの名無しさん
11/02/03 18:01:58
推薦図書スレでCの入門書について聞くとあっという間にレスが20くらいつくぞ。
そして対外はK&Rがどうこういう話に収束するぞ。
だからいつもこういうんだ。入門書は定番のものなら何を読んでも一緒だ、とね。
そして入門書を何冊もよむことはせず一冊読んだらとっとと
アルゴリズムなり分析設計なりちょっと小粋な数学の本なりを読め、と。

194:デフォルトの名無しさん
11/02/03 20:14:42
俺はソフトバンクの「やさしいC」だな。
書籍はメインを決めて時々もう一冊を見るといった、
2種類あると結構理解が速い。


195:デフォルトの名無しさん
11/02/03 20:31:46
独習みたいに分厚くて細かいところまで網羅したやつだと途中で疲れるから、
最初は薄っぺらくてちょっと足りないぐらいのから手をつけた方がいい気がする

196:デフォルトの名無しさん
11/02/03 23:59:01
独習Cは厚さの割りに、細かいところに手が届かない印象
基礎を覚える程度なら十分ではあるけど

197:デフォルトの名無しさん
11/02/03 23:59:50
さぁ、盛り上がってまいりました!

198: ◆QZaw55cn4c
11/02/04 01:53:04
最初に読んだのは
URLリンク(www.amazon.co.jp)
まあなんでもいいんじゃないですか、一冊で終わらそうと思わなければ。

199:デフォルトの名無しさん
11/02/04 04:41:33
あるコマンドがインストールされているか、すなわち使えるかどうかを
Cプログラムから調べる方法をおしえてください 。
コマンドラインからであれば、そのコマンドをうってエラーが帰ってくるかどうかで分かりますが、
プログラム内からはどのように調べればよいのでしょうか?
環境はUbuntu10.10 gcc4.4.5です。

200:デフォルトの名無しさん
11/02/04 05:02:38
環境変数のpathに有るファイルを走査すればいいと思うよ

201:デフォルトの名無しさん
11/02/04 10:06:17
>>199
system()で呼んでみて、戻り値をチェック。

202:デフォルトの名無しさん
11/02/04 12:36:42
コマンドラインでもwhich使えよ

203:デフォルトの名無しさん
11/02/05 00:51:37
スキルアップしたくて、大学春休みだしOSかドライバか作れるようになるように勉強しようと
思ってるんだけど、どっちの方がとっつきやすいですか?
OSなら「30日でできる! OS自作入門」、ドライバなら「Windows Vistaデバイスドライバプログラミング」
買おうと思ってる

204:デフォルトの名無しさん
11/02/05 03:03:31
>>203
とっつきやすいという点ではOS自作のほうが楽だろう。
どこから作り始めてもいいし、好きな流儀で作っていいし、サンプルも豊富。

205:デフォルトの名無しさん
11/02/05 03:25:28
C言語でオセロゲームを作るとき、<stdio.h>(標準入出力ヘッダーファイル)だけで
作ることは可能ですか?

206:デフォルトの名無しさん
11/02/05 03:47:43
なぜstdio.hだけと制限するのか知りたいとも思わないが
標準Cライブラリだけで作られているオセロゲームは存在しているよ

207:デフォルトの名無しさん
11/02/05 03:55:24
>>204
ありがとう、OSの方がとっつきやすいですか。
ドライバ作れるようになった方が便利そうだけど、OS自作のほうが響き的にかっこいいし
OS自作の本買ってやってみる。さっそくポチった

208:デフォルトの名無しさん
11/02/05 08:16:28
値を参照したいだけの引数は、どのようにするのがベターでしょうか?
基本的には3か5だろうと言うのはわかるのですが…。

1. void hoge(int piyo) (現在使用してますが、ベターではないですよね)
2. void hoge (int * piyo)
3. void hoge (const int * piyo)
4. void hoge(int & piyo)
5. void hoge(const int & piyo)
6. その他

また、理由も添えていただけると助かります。

209:デフォルトの名無しさん
11/02/05 08:53:07
>>208
渡すのが整数型なら、1でいいよ。5でもいいけど、インライン展開されない場合は寧ろコストが掛かる。
クラスか何かを渡すなら、逆ね。

210:デフォルトの名無しさん
11/02/05 15:32:06
低俗な質問ですいません。
csvファイルを読み込んで表示しようとしても文字化けしてしまいます。
表示のところに何か問題がありますか?ご指摘ください!

#include <stdio.h>

int main(int argc,char *argv[])
{
FILE *fp;
int ch;

fp = fopen(argv[1], "r");

if(fp == NULL) {
printf("\aファイルをオープンできません。\n");
}
else {
while ((ch=fgetc(fp))!=EOF)
putchar(ch);
fclose(fp);
}

return(0);
}


211:デフォルトの名無しさん
11/02/05 15:38:51
>>210
csvの文字形式をシフトJISにでも変換したらどうだろう

212:デフォルトの名無しさん
11/02/05 15:40:46
1バイトづつじゃなくてバッファにためこんでprintfで%sで表示してみる

213:デフォルトの名無しさん
11/02/05 17:38:09
windowsアプリを作る場合に
WinMain()とmain()は
名前と引数以外には違いがないと考えていいのでしょうか。

214:デフォルトの名無しさん
11/02/05 18:18:57
見た目わね

215:デフォルトの名無しさん
11/02/05 18:37:08
>>210です。fscanf使ったらできました。配列に格納したんですけど、
構造体を作ってそこに格納することも可能ですか?

216:213
11/02/05 18:38:09
>>214
回答ありがとうございます。

たいへん恐縮ですが重ねて質問させてください。
試した限りはWinMainをmainに書き換えても同じように動作するのですが、
同じように動作しているように見えても実は違いがあるということでしょうか。
その場合、その違いがプログラムに深刻な影響を及ぼすケースはあるのでしょうか。

217:デフォルトの名無しさん
11/02/05 21:58:20
>>216
標準ライブラリだけしか使わないなら大差ないよ。
GUIを含めて色々やろうと思い出すと、問題になるけど。

218:デフォルトの名無しさん
11/02/05 22:00:37
>>215
なんで>210がダメでfscanf()で巧くいったのか小一時間問い詰めたいけどまぁいいや。
勿論、fscanf()で構造体に直接格納することも可能。但し、%sを使う場合は%20sのように制限することを考えた方がいい。
更に言えば、どうせ色々考えるならfgets()で取り込んだものをsscanf()でばらす方がいいかもしれない。
つーか、割と普通にそうする。

219:デフォルトの名無しさん
11/02/05 23:45:01
クラスののメンバー変数に

int NUMと int hoge[NUM]という配列を定義したいのですが、単純にやるとできません。
なにかやる方法はありますか?

220:デフォルトの名無しさん
11/02/05 23:54:25
性的にhogeの配列が決まる、つまりNUMがコンパイル時定数であるというのなら

class Victory {
static int const NUM = 10;
int hoge[ NUM ];
};

class Win {
enum{ NUM = 10 };
int hoge[ NUM ];
};

で可能。NUMの値をコンストラクタで取得したいとか言うのなら無理

221:デフォルトの名無しさん
11/02/06 00:00:49
コンストラクタで取得したいです。

ポインタのみ定義して、コンストラクタで動的確保するしかないですかね?

222:デフォルトの名無しさん
11/02/06 00:02:13
vector使えばいいじゃん。

223:デフォルトの名無しさん
11/02/06 00:02:49
stlは使えないんす

224:デフォルトの名無しさん
11/02/06 00:04:19
>>221
無理。動的確保しかない。
っていうか、>>222のいうとおり、vectorで。超便利。かなり早い。
一部の型については特殊化もされているので激速。

225:デフォルトの名無しさん
11/02/06 00:41:38
いや、vectorのあの特殊化は有害だよ。
普通の配列のように先頭要素へのポインタを得て、それを介して扱うことが不可能になるのだから。

226:デフォルトの名無しさん
11/02/06 01:45:39
vector<bool>さんの悪口はやめるんだ

227:デフォルトの名無しさん
11/02/06 07:18:35
実装によってはbasic_stringとかも特殊化されてるよ。

228:デフォルトの名無しさん
11/02/06 18:00:30
>>224
あれってboolさんだけじゃなかったのか

229:デフォルトの名無しさん
11/02/06 19:59:03
fstreamクラスのseekgとseekpって名前が違うだけでまったく同じ機能らしいですが、
なんでわざわざそうしたのですか?
seekっていう関数ひとつだけ用意した方が分かりやすい気がしますが。

230:デフォルトの名無しさん
11/02/06 20:10:10
全然違うがな

231:デフォルトの名無しさん
11/02/06 20:50:03
違うんですか・・・。
もう少し勉強してみます。

232:デフォルトの名無しさん
11/02/06 21:37:36
どこの情報にまったく同じなんて解説があるんだろう

入力ストリームと出力ストリームの位置が混在したら困るやん

233:デフォルトの名無しさん
11/02/07 17:11:59
C++初心者です。
Cで構造体変数を初期化する際によくmemsetで全てのメンバ変数をまとめてゼロクリアしていたのですが
C++でクラスを利用する場合はコンストラクタでメンバ変数一つ一つに初期値を代入する以外に、よく使われる便利な方法というものは無いものでしょうか?

メンバ変数が多いクラスを初期化する際にコンストラクタが長ったらしくなったり、
メンバ追加の度にコンストラクタにも初期化処理を追加しなければないのに慣れず
初期化し忘れたりしないか、とか考えると何か他に便利な方法とか用意されてないのかな?と気になりまして質問させていただきました。

234:デフォルトの名無しさん
11/02/07 17:41:44
>>229
そういう意味か
例えばifstreamではseekpとseekgは事実上同じ意味
しかしstringstreamは実際プログラムを書いてみればわかるが、seekpとseekgは
それぞれ違うポインタを指している
継承上の問題だと思うよ

235:デフォルトの名無しさん
11/02/07 19:39:09
>>233
外部で構造体を初期化するのと、クラスのコンストラクタで自分自身を
初期化するのでは意味が違うような気もするけれど、コンストラクタでなにもしないで、
C風の使い方をすることは出来ます。
コンストラクタ内での定義については、まじめに定義して下さい。

なお、new されたオブジェクトだけなら、operator new を
override してクリアするという手段は(一般的とは言えませんが)あります。

236:229
11/02/07 23:36:13
>>234
ありがとうございます。

seekpとseekgはfstreamだけのものでなくて、
同じくiostreamを継承しているstringstreamなどでも定義されている、
ということを知らなかったのが混乱の原因だったようですね。

基本的には入力ストリームの出力ストリームの位置は異なるけど、
fstreamの場合はそれらはファイルポインタを表しており、
ファイルポインタは1つしかないので、
たまたま常に同じ場所を指すことになっている、
ということでしょうか。

237:デフォルトの名無しさん
11/02/08 00:31:57
>>236
ifstream、istringstreamにはseekpはない
ofstream、ostringstreamにはseekgはない

fstreamにはseekp、seekgの両方があるので混乱してるのでしょう
ご存じの通りファイルポインタは1つしかないのでseekpもseekgも同じ意味になります

ところがstringstreamは読み込みと書き込みを別々に行っているため、seekpとseekgは
使い分けなければなりません

238:デフォルトの名無しさん
11/02/08 00:41:09
URLリンク(ideone.com)
csvファイルをコマンドラインから読み込んで、構造体に入れ、表示させたいのですが、文字化けしてしまいます。
ミスがあったら訂正願います。

読み込むcsvファイル↓

01A,aさん,f,1.1,1.1,1111
02B,bさん,m,2.2,2.2,2222
03C,cさん,f,3.3,3.3,3333
04D,dさん,m,4.4,4.4,4444
05E,eさん,f,5.5,5.5,5555
06F,fさん,m,6.6,6.6,6666

239:229
11/02/08 02:35:44
>>237
ご丁寧にありがとうございます。
疑問が解消しました。

質問に答えてくださった他の皆様も本当にありがとうございました。
とても勉強になりました。

240:デフォルトの名無しさん
11/02/08 03:57:54
>>238
先ずは警告が出ている113行から直そうか。

241:デフォルトの名無しさん
11/02/08 04:04:35
>>238
25行目 return 0; 追加
27行目 for(~) ;  このセミコロン不要
113行目 C==EOF
For(~){ } の位置関係訂正

URLリンク(ideone.com)
一応訂正しておいた。見てくれ。

242:デフォルトの名無しさん
11/02/08 19:43:08
>>240 >>241
丁寧にありがとうございます!おかげさまでうまくいきました!

243:デフォルトの名無しさん
11/02/08 21:08:19
int a;
int main()
{
return 0;
}
このaは
スタック領域ですか?
静的領域ですか?
コンパイラ依存ですか?

244:デフォルトの名無しさん
11/02/08 23:30:33
グローバル性的領域でしたっけ

245:デフォルトの名無しさん
11/02/09 00:26:21
スタックじゃない。データ領域。
mainが実行される前に確保される領域。

たとえば、
struct SomeClass
{
SomeClass()//コンストラクタ
{
>>breadpointB
}
}

SomeClass a;
int main()
{
>>breakpointA.
}
としてデバッグ起動すると、SomeClassのコンストラクタ
がmainよりも前に実行されることが確認できる。

246:243
11/02/09 00:55:24
>>245
ありがとうございます
データ領域は、スタックともヒープとも静的領域とも違うのですか?

247:デフォルトの名無しさん
11/02/09 01:13:51
ああ、静的領域と呼ぶのが普通ですね。
訂正します。

248:243
11/02/09 01:24:34
>>247
ありがとうございました

249:デフォルトの名無しさん
11/02/09 03:31:55
スタック・ヒープってややこしい言葉だよな

メモリ領域としてのスタックとヒープ
データ構造としてのスタックとヒープ

前者のスタックは後者の構造をしているけど
ヒープは前者と後者で全く異なる概念だし

250:デフォルトの名無しさん
11/02/09 04:41:49
if(){処理1}
else if(){処理2}
else{処理3}
のようにした時、処理1と処理2がそれぞれ終わった後、処理3に飛んでほしい場合は
どうすればよいのでしょうか?

251:デフォルトの名無しさん
11/02/09 04:43:38
最後のelse書かなきゃいいじゃん

252:デフォルトの名無しさん
11/02/09 04:58:20
for(;;){
 if(){処理1}
 else if(){処理2}
 else break;
 処理3
 break;
}
こっちでない

253:デフォルトの名無しさん
11/02/09 08:35:14
>>250
どうなって欲しいのか条件を真理値表に纏めろ。先ずはそれからだ。
例えば、>250のコードだとこうなる。
文面に従えば、処理3は処理3'のようになって欲しいのか? それなら>251だが。
条件1 条件2 処理1 処理2 処理3 処理3'
 真   真   ○   ×   ×   ○
 真   偽   ○   ×   ×   ○
 偽   真   ×   ○   ×   ○
 偽   偽   ×   ×   ○   ○

254:デフォルトの名無しさん
11/02/09 08:39:55
>253の伝でいけば、>252はこうなるね。
条件1 条件2 処理1 処理2 処理3
 真   真   ○   ×   ○
 真   偽   ○   ×   ○
 偽   真   ×   ○   ○
 偽   偽   ×   ×   ×
これだったら意味不明な無限ループなんて書かずに
if (条件1 || 条件2) {
if (条件1) 処理1;
else 処理2;
処理3;
}
でいいじゃん。

255:デフォルトの名無しさん
11/02/09 08:47:49
if(){処理1処理3}
else if(){処理2処理3}


256:デフォルトの名無しさん
11/02/09 08:51:19
処理3が関数でインライン展開され得るならそれがベストかも知らん。

257:デフォルトの名無しさん
11/02/09 09:05:24
crc32 の値が 0 になることってありますか?

258:デフォルトの名無しさん
11/02/09 11:25:10
FizzBuzz問題もそうだけど、
案外>>255みたいに同じコード(ここでは処理3)を2度書くケースって多いんだよね^^

259:デフォルトの名無しさん
11/02/09 11:28:08
^^

260:デフォルトの名無しさん
11/02/09 14:49:11
>>254
それ条件1が2回評価されるで

261:デフォルトの名無しさん
11/02/09 15:06:33
そんなもん目的次第でどうにでもできるわ

262:デフォルトの名無しさん
11/02/09 16:03:57
イテレーターペアーを入力とする関数の出力をイテレーターに
したいのだが
template<typename A.typename B,typename C >
void a(A abeg,A aEnd,B bbeg ,B bend,C cbeg,C cend ){
....
}
入力が a,bで出力がcとしてこれでいいのか?

263:デフォルトの名無しさん
11/02/09 16:17:06
コンテナを操作するアルゴリズムで迷ったときは
STLで似通ったアルゴリズムのインタフェースを参照してみるとよいでしょう。
たとえばtransformは二つの範囲から一つの範囲へ出力する機能を提供します。

264:デフォルトの名無しさん
11/02/09 16:51:27
std::transformはオーバーロードされてて2種類あるな

265:デフォルトの名無しさん
11/02/11 00:27:10
out:; って何ですか?

266:デフォルトの名無しさん
11/02/11 00:31:36
ラベル

267:デフォルトの名無しさん
11/02/11 05:00:59
if(条件1) 処理1
else if(条件2) 処理2
else goto Label;
処理3
Label:;
でいいのにgoto絶対禁止教って大変だな

268:デフォルトの名無しさん
11/02/11 11:08:44
gotoは便利だからって素人が使うとスパゲッティになっちゃうからな

269:デフォルトの名無しさん
11/02/11 11:22:33
do {
if(条件1) 処理1;
else if(条件2) 処理2;
else break;
処理3;
} while(0);

270:デフォルトの名無しさん
11/02/11 18:34:43
>>267
小さいプログラムしか組まない素人にはgotoは便利だな。
まあ、がんばれw

271:デフォルトの名無しさん
11/02/11 18:49:56
自称大きいブログラムを作ってる人は言うことが違いますね^^

272:デフォルトの名無しさん
11/02/12 00:12:47
当然だ! そんなことも分からないのか

273:デフォルトの名無しさん
11/02/12 08:58:41
>>270
構造化例外が無い時代には、エラー処理をgotoで書くと便利だったのは認めるけどな。

274:デフォルトの名無しさん
11/02/12 11:58:40
>>273
例外関係なく、遙か昔にしかgoto使ったことないわ

275:デフォルトの名無しさん
11/02/12 14:12:45
>>267>>269ってコンパイルしたら同じになる?

276:デフォルトの名無しさん
11/02/14 10:57:38
>>275
これをコンパイルしてみた。
--
URLリンク(codepad.org)
--
$ gcc -S foo.c -DTYPE=0 -o foo.0.s

$ gcc -S foo.c -DTYPE=1 -o foo.1.s

$ diff -uw foo.?.s
--- foo.0.s 2011-02-14 10:54:09.562500000 +0900
+++ foo.1.s 2011-02-14 10:54:18.421875000 +0900
@@ -18,7 +18,6 @@
call _proc2
L3:
call _proc3
-L4:
L5:
leave
ret

$ gcc --version
gcc (GCC) 4.3.4 20090804 (release) 1
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


$
--
つまり、事実上全く一緒。

277:デフォルトの名無しさん
11/02/15 06:24:21
低レベルで書いてた人ほどgotoには拒否感がないような気がする

278:デフォルトの名無しさん
11/02/15 07:22:52
いずれにしても絶対否定は愚かしい

279:デフォルトの名無しさん
11/02/15 20:38:36
プログラム何て組んだことがない、ソフトを起動させた事もない人間なんだが
C++でプログラム(主にゲームになるんじゃないか)組むには何をしたらいい?
参考文献を買う?サイト巡って「入門編」みたいのやっていく?
お前ら一番初め何やった

280:デフォルトの名無しさん
11/02/15 22:58:52
ゲーム作るならHSPでいいんじゃないか?
昔みたいにアセンブラじゃなきゃ処理速度おっつかないみたいな世界じゃなくなったし。

281:デフォルトの名無しさん
11/02/16 14:02:17
>>279
プログラミングの基礎は置いといて
ゲームを作るとなると主に画像の表示と音楽の再生が辛いところなんだが、
Dxlibっていうライブラリがあるからそれを使うのがとても楽な道。
Dxlibは使用者も多く、作者もかなり活動的だからサンプルもかなり多いし、初心者向けの質問掲示板もあったりする。
主に2Dゲーム用だが3Dも普通にいける。
ただ完全に3D用ならもっといいライブラリがあると思うけども。

282:デフォルトの名無しさん
11/02/16 16:45:16
Basicにアセンブラまじぇまじぇしてた時代、何もかも皆懐かしい

283:デフォルトの名無しさん
11/02/16 20:08:35
#include <stdio.h>
struct data{
int menba1;
char menba2[];
}hensu,mozi;

int dainyu(struct data *);
char moziretu(struct data *);
int main()
{
dainyu(&hensu);
printf("変数の値は%d\n",hensu.menba1);
moziretu(&mozi);
printf("文字列は%s\n",mozi.menba2);
return 0;
}
int dainyu(struct data *p)
{
printf("変数--");
scanf("%d",&p->menba1);
return 0;
}
char moziretu(struct data *m)
{
printf("文字列--");
gets(m->menba2);
return 0;
}
変数は上手くいくんですけど文字列が入力できなくて失敗してしまいます
結果 文字列--文字列は
どうか教えてください。

284:デフォルトの名無しさん
11/02/16 20:16:43
menba2の配列の大きさは?

285:デフォルトの名無しさん
11/02/16 20:33:02
指定していませんでしたけど、試しに[32]にしましたが結果は同じでした

286:デフォルトの名無しさん
11/02/16 20:52:52
scanf("%d\n",&p->menba1);
かな。


287:デフォルトの名無しさん
11/02/16 21:04:02
試してから言えw

288:デフォルトの名無しさん
11/02/16 21:10:13
#include <stdio.h>

struct data{
char menba2[];
}mozi;

char moziretu(struct data *);
int main()
{
moziretu(&mozi);
printf("文字列は%s\n",mozi.menba2);
return 0;
}
char moziretu(struct data *m)
{
printf("文字列--");
gets(m->menba2);
return 0;
}
moziretu関数に問題があるんだと思って文字だけにしたんですけどそしたら上手くできました
>>286
中でhensuへの命令と混じってしまったんでしょうか?(イメージですけど)
正直どこがどう間違ってるのかよくわからないんですけど教えて頂けないでしょうか?

289:デフォルトの名無しさん
11/02/16 21:24:15
scanf()で整数を読み込むとバッファに改行文字が残る
その後に文字や文字列を読み込むと、その改行文字を読み込む

290:デフォルトの名無しさん
11/02/16 21:38:44
>>287
お前にはわからないからそう言ったのだろうが、scanfを見ればだいたいわかる。
他の部分に問題が無い事までは目を通さなかったので、「かな」をつけた。

まあ、精進したまえ。

291:デフォルトの名無しさん
11/02/16 21:45:38
>>289
ありがとうございます、関数の仕組みを理解してませんでした…
moziretu(&mozi);
printf("文字列は%s\n",mozi.menba2);
dainyu(&hensu);
printf("変数の値は%d\n",hensu.menba1); と書き換えたら成功しました

重ね重ね質問ばかりで恐縮ですが、関数を一つに纏めても成功したんですけど
int型で宣言した関数なのになぜgetsとか入れても正常に働くんでしょうか?
int dainyu(struct data *p)
{
printf("文字列--");
gets(p->menba2);
printf("変数--");
scanf("%d",&p->menba1);
return 0;
}
>>290
287は自分じゃないです

292:デフォルトの名無しさん
11/02/16 21:59:24
>>290
>scanf("%d\n",&p->menba1);
これだと>>283が望むような実行結果にならないって言ってんだよ、バカがw

293:デフォルトの名無しさん
11/02/16 22:37:49
可哀想に

294:デフォルトの名無しさん
11/02/16 22:47:40
>>283のscanf("%d",&p->menba1);をscanf("%d\n",&p->menba1);にするとどうなるか

変数-- と表示される
数字入力してエンターを押す→何も表示されない
もう一度エンターを押してみる→何も表示されない
何度エンターを押しても何も表示されないので仕方ないから文字列を入力してエンターを押す
→変数の値は~
文字列--文字列は~
と表示される

295:デフォルトの名無しさん
11/02/16 23:00:34
>>292
なるよ。バカ。



296:283
11/02/16 23:16:48
>>294
バッファについて参考書読み直してるとこですが
283で何も文字を入力してないのに実行されたのはscanfで数字入力した後に押したエンターで
改行文字(NL)を取り込んだということですね
>>289さんが既にいってますけど

297:デフォルトの名無しさん
11/02/17 04:31:27
C++ソースのASTを取得したいのですが、
どういった方法、ツールがあるのでしょうか?
また、実際に試された方っていらっしゃいますか?

あと、GCCでは完全なAST情報を
取得できないようになっているそうなのですが、
本当でしょうか?また、どの程度の情報までなら得られるのでしょうか?

ここ数年気になっていた内容です、よろしくおねがいします。

298:デフォルトの名無しさん
11/02/17 04:51:45
アスパラギン酸アミノ基転移酵素がどうかしたのか?

299:デフォルトの名無しさん
11/02/17 10:34:57
はい、C++ソースさんに黄疸が出ていて、
肝臓が悪いんじゃないかと思うので検査してあげたいのです。
ってちがいます。↓こっちです。
URLリンク(ja.wikipedia.org)
よろしくおねがいします。

300:デフォルトの名無しさん
11/02/17 12:56:11
web制作の人はC++やCを学習することは無駄になりますか?
Javaを覚えればTomcatでjsp出来ますし・・C#ならasp.netでMVCでWEBサイト構築できますし

301:デフォルトの名無しさん
11/02/17 13:54:22
勉強自体が無駄になることはないだろうけど
WebアプリをCやC++で書くことは多分ない。非効率だから。

302:デフォルトの名無しさん
11/02/17 17:30:50
とても似ているとはいえ、やはり細かいところで違うので、Cじゃなくて素直にphpやれという気はする。
サーバー側のコードはC++で書いたことがあるが、確かにあまりないかもね。

303:デフォルトの名無しさん
11/02/18 04:02:15
俺は恋文をC++で書ける

304:デフォルトの名無しさん
11/02/18 15:29:12
std::cout << "セクロスしたい" << std::endl;

305:デフォルトの名無しさん
11/02/18 16:38:26
if ( !you->canAccept(me) )
delete me;

306:デフォルトの名無しさん
11/02/18 17:58:56
else
goto hotel;

307:デフォルトの名無しさん
11/02/18 21:20:41
hotel:
if ( you->age < 18 )
{
police.arrest(me);
return -1;
}

308:デフォルトの名無しさん
11/02/18 22:18:22
class police
{
public:
void arrest(Porson& P)
{
P.parent.call();
}
}

309:デフォルトの名無しさん
11/02/19 00:06:24
これがオブジェクト指向(キリ

310:デフォルトの名無しさん
11/02/19 02:43:07
>>300
2chの鯖の負荷が大きくなったとき、一部をCに変えたはず。
そんな訳で、負荷が大きいサーバのクリティカルな部分の移植とかならありえるかも…
まぁ、めったに無いと思うけどね。

311:デフォルトの名無しさん
11/02/26 15:51:03.14
ある既存のクラスAを引数にして処理する関数funcがあるとして、
クラスAにメンバ変数xを1つだけ追加したクラスBも同じfunc関数で扱わせたい場合、
普通にBがAを継承しても、当たり前かもしれませんがfuncはxを処理してくれません。
B用のfuncを別に用意せず、funcの少しの改変で(テンプレート等で)xを処理するように解決する方法がありますか?

312:デフォルトの名無しさん
11/02/26 15:59:33.89
func(A* p)
じゃダメなの?

313:デフォルトの名無しさん
11/02/26 16:09:41.52
OOPの原則に立ち返れば
クラスAとクラスBはそれぞれfunc関数を
メンバに持つべきようなきもするけど。

そうしておかないと
処理対象が増殖していったとき
すぐにハッテン^h^h^h^hハタンする。

314:311
11/02/26 17:46:50.70
>>312
それだとxが無いよとコンパイラに叱られます。
>>313
funcが細分化しにくい長い処理で、保守性のため(コピペせずに)使いまわしたいという状況があります。
できる人が見たら設計が悪いと指摘されるかもしれませんが・・・
設計を見直さず、デザパタ等でさくっとその場しのぎができないかと思いまして。

315:デフォルトの名無しさん
11/02/26 17:52:21.15
テンプレートメソッドでいいんじゃねーの?
どんなことしたいのか知らんけどこれが分かりやすいと思う。

316:311
11/02/26 17:56:47.98
class A {
public:
 void f(int) {}
};
class B : public A {
public:
 int x;
 void f(int _x) { x = _x; }
};
void func(A* p, int x) {
 p->f(x);
}
int main() {
 A a;
 B b;
 func(&a, 1);
 func(&b, 2);
 return 0;
}
↑こんなその場しのぎでコンパイル通ったのですが、これでいいのでしょうか・・・?
>>315
テンプレートメソッドですか。調べてみます。ありがとうございます。

317:デフォルトの名無しさん
11/02/26 18:06:30.63
>>316
virtual付けてないからどちらもAのfuncが呼ばれるぞ

318:311
11/02/26 18:12:43.52
>>317
ぎゃっほんとだ・・・とんでもないミスを。
あとこの方法だとクラスAにも無駄なメンバを追加する必要がありますね。
わざわざ仮想関数持つのも微妙な感じですね。(速度的には問題ない?)

319:デフォルトの名無しさん
11/02/26 18:20:21.70
そもそもfuncの中でxを呼び出すのが無駄なきがする
同じ処理なんだからx弄る必要なんてないだろ

320:311
11/02/26 18:33:33.67
>>319
説明不足ですみません。原則はAとBで同じ処理、Bの時はx弄る処理を途中に追加、をfuncで実現したいです。
どちみち仮想関数持つことになるなら、グローバルな関数funcをやめてテンプレートメソッドでやってみたいと思います。

321:デフォルトの名無しさん
11/02/26 21:45:11.63
つRTTI

322:デフォルトの名無しさん
11/02/27 12:59:01.64
>>321
if文を重ねるのは御法度だろ
仮想関数で出来る物はするべき

323:デフォルトの名無しさん
11/02/27 20:24:40.56
つfuncが細分化しにくい長い処理で、保守性のため(コピペせずに)使いまわしたいという状況

324:デフォルトの名無しさん
11/02/28 13:44:49.55
関数の定義をヘッダーに書くとmultiple defineとかでるんですけど、
これって普通ですか?

325:デフォルトの名無しさん
11/02/28 14:06:13.38
普通ではありません、エラーです

326:デフォルトの名無しさん
11/02/28 14:14:45.70
インクルードガード?

327:デフォルトの名無しさん
11/02/28 14:48:55.38
インクルードガードはもちろんつけてありますよ。
たぶん、別々のオブジェクトファイルに同じ定義があるといけないんじゃないんですか?

328:デフォルトの名無しさん
11/02/28 15:36:05.83
>>324
いつエラーが出るのか書け
コンパイルの時なのか、リンク時なのか

329:デフォルトの名無しさん
11/02/28 15:44:12.06
inlineつけりゃおk

330:デフォルトの名無しさん
11/03/03 01:01:29.02
>>297
GCC-XMLとか。あとclangにもそういう機能があるらしい。
すまん、どっちも自身が使ったことはない。

331:デフォルトの名無しさん
11/03/03 17:42:55.74
struct hoge
{
int foo;
};
hoge h;
#define bar foo
h.bar = 100;
#undef bar

上のように一時的に別名でアクセスしたいんだけど
マクロは使いたくない、よけいなコストも掛けたくない場合になにか手はありますか?

332:デフォルトの名無しさん
11/03/03 17:58:14.38
c++なら参照とか?
hoge h;
int &bar = h.foo;
bar = 100;

一時的でなくともよいなら
struct hoge
{
int foo;
int &bar = foo;
};
かな

333:デフォルトの名無しさん
11/03/03 18:45:28.51
参照は実行時はポインタと同じだよね。
>331は「よけいなコスト」だと思いそう。

一時的でなくていいならunionでしょ。初期化なしで済む。

334:デフォルトの名無しさん
11/03/04 06:37:31.11
参照はポインタとは違うぞ?

335:デフォルトの名無しさん
11/03/04 08:46:34.37
ポインターだと間接参照のコードが最適化できないことがあるけど、
参照なら最適化されるからね。
参照がポインターと同等なのは引き数の場合でしょ

336:デフォルトの名無しさん
11/03/06 00:01:41.77
1+5*(7-2)=
↑の文字列をdllに渡すと計算結果が返ってきて、もし文字列が式ではないならエラーが帰ってくるdllを作りたいのですが
秀丸のマクロで利用できるものをお願いします

337:デフォルトの名無しさん
11/03/06 00:03:38.98
自分で作りたいのに
何をお願いするんだ?

338:デフォルトの名無しさん
11/03/06 00:14:27.60
秀丸のマクロで利用できるものって?

339:デフォルトの名無しさん
11/03/06 00:15:25.46
秀丸のマクロからよべるDLLって意味か。

340:デフォルトの名無しさん
11/03/06 01:56:28.74
秀まるおに有償で依頼すればいい。

341:デフォルトの名無しさん
11/03/06 02:02:33.14
DLLを作ってメインプログラムにlibファイルを追加したんだけど、
DLL内の関数を普通に呼び出してビルドすると以下の様なエラーになります。
どなたかわかる方いませんか?
test2.obj : error LNK2019: 未解決の外部シンボル "int __cdecl makehook(struct HWND__ *,int,unsigned int)" (?makehook@@YAHPAUHWND__@@HI@Z) が関数 "void __cdecl WM_Paint(void)" (?WM_Paint@@YAXXZ) で参照されました。


342:デフォルトの名無しさん
11/03/06 02:07:11.90
ここにいます。

343:341
11/03/06 02:35:43.86
解決方法を教えてください。よろしくお願いします。

344:デフォルトの名無しさん
11/03/06 03:44:32.23
extern "C"しろ

345:デフォルトの名無しさん
11/03/06 14:12:45.34
リンクエラーも解決できんのにフックとな

346:336
11/03/06 14:13:49.50
本当お願いします!
助けてください神様

347:デフォルトの名無しさん
11/03/06 14:18:15.02
秀丸のスレで聞けばいいんじゃね

348:デフォルトの名無しさん
11/03/06 14:29:33.98
>>346
ここは作ってクレという板じゃないんだよ。有償なら作ってもやるけど。
判ったら去れ。

349:336
11/03/06 14:36:02.78
わかりました!
では優勝でお願いします!
何日で出来ますか?

350:デフォルトの名無しさん
11/03/06 14:42:19.66
秀丸のスレで聞けばいいんじゃね

351:336
11/03/06 16:11:23.63
そうですね秀丸のスレ行って見ます

352:デフォルトの名無しさん
11/03/06 17:52:59.71
好きな方を使え

h = 0;
r = 乱数( 0, 99 );
for (i = 0; i < 3; i++) {
  h = h + 確率[i];
  if (r < h) {
    return 中身[i];
  }
}

t = 99;
for (i = 0; i < 3; i++) {
  if ( 乱数( 0, t ) < 確率[i] ) {
    return 中身[i];
  }
  t = t - 確率[i];
}

353:デフォルトの名無しさん
11/03/06 17:55:02.98
誤爆った…orz

354:336
11/03/06 18:26:36.96
やっぱりここじゃダメですか?
なんかサンプルが載ってるって言われたんですけど
サンプルからdllの作り方もわからないです
伝説の神様おねがいします><

355:デフォルトの名無しさん
11/03/06 18:29:29.28
>>354
こいつに解決して貰え
そうすれば、いろいろなことに決着がつく
スレリンク(tech板)

356:336
11/03/06 18:31:31.22
ちょっと待って

357:デフォルトの名無しさん
11/03/06 18:38:27.51
とっとと出ていけ。二度と来るな。

358:デフォルトの名無しさん
11/03/06 18:41:28.09
Void_No2様の発言はどれ?
くさかべさまの発言はどれ?

359:デフォルトの名無しさん
11/03/06 18:43:28.24
はあ?

360:デフォルトの名無しさん
11/03/06 18:49:09.00
こういうバカにはマルウェア仕込んでやるのが良いと思う。

361:336
11/03/06 19:00:06.69
やっぱだめだ
Pythonでdll作れるのかと思ったけど無理だった
本当お願いしますよ神様

362:デフォルトの名無しさん
11/03/06 19:44:16.67
納期1ヶ月、20万で。
ただし、式ではないものの定義はそっちもち。

363:デフォルトの名無しさん
11/03/06 19:52:41.27
秀丸よく知らんけど、>>336の式のパースくらいならDLLにしなくても、
秀丸マクロで書けるんじゃないの。

364:デフォルトの名無しさん
11/03/06 19:57:57.26
>>363
良く知らないものに関して、そのマクロで書けそうって、予言者でつか?

365:デフォルトの名無しさん
11/03/06 20:05:54.65
「こういう言葉でググったらいいんじゃないの」とか
「こういう方向性でも解決できるんじゃないの」みたいに
ヒントを出すと、いい加減なこというなみたいに噛み付いてくるやつって
いるけど、最初から他人にやらせるしか頭にないからそういう
反応になるんだろうな。

366:デフォルトの名無しさん
11/03/06 20:31:32.86
触ってあげるなよ可愛そうな人なんだから

367:デフォルトの名無しさん
11/03/06 20:47:57.63
>>362
15分で終わる作業で1ヶ月も掛かるとか初心者かよ

368:デフォルトの名無しさん
11/03/06 21:17:12.83
>>367
じゃあ君がやってあげたまえ。

369:デフォルトの名無しさん
11/03/06 21:22:58.83
>>368
20万はらってくれたら。

370:デフォルトの名無しさん
11/03/06 21:58:49.67
>>367
とりあえず、吹っかけるのがこの業界のデフォルト。

371:デフォルトの名無しさん
11/03/06 22:47:02.71
class A{
public:
int* p;
A(){ p = new int(); }
~A(){ delete p; }
};

A func0(){ A a; *a.p = 1; return a; }

void func1( A& a ){ ... }

void main(){
func1( func0() );
};

こうすると、func0()の戻り値のA::pがfunc1に渡される前に
deleteされてしまうんですが、deleteされずfunc1へ渡す方法を教えてください。

372:デフォルトの名無しさん
11/03/06 22:50:56.82
void func1( A a )
でおk

373:デフォルトの名無しさん
11/03/06 23:11:44.94
>>372
こういうことがしたいんです。

A func0( A a ){
A b;
b = x(a); // aをいろいろ加工してbへ
return b; }

void main() {
A a;
func1( func0(a) ); // aをfunc0()で加工してfunc1に渡す
}

374:デフォルトの名無しさん
11/03/06 23:17:30.05
コピーコンストラクタをつくりなさい話はそれからです

375:デフォルトの名無しさん
11/03/06 23:20:06.89
じゃあ
A& func(A& a)で

376:デフォルトの名無しさん
11/03/06 23:34:24.98
コピーコンストラクタを作ったらうまくいきました。
ありがとうございました。

377:デフォルトの名無しさん
11/03/07 00:46:19.18
アライメントって重要ですか?



378:デフォルトの名無しさん
11/03/07 00:59:16.78
unionするとき重要。
通信系のデータマッピングに重要。
その他、データマッピングにも重要。
SSEするときに重要。
スピード狂するときも重要。

379:デフォルトの名無しさん
11/03/07 01:09:45.95
2番目辺りにライブラリとリンクする時も入れて

380:デフォルトの名無しさん
11/03/07 01:17:57.54
>>378,379
ありがとうございます



381:デフォルトの名無しさん
11/03/07 05:58:02.17
日本語を含むパスを格納してる文字列の
ローマ字だけを大文字に変換したいのですが、
それに適したライブラリや処理法ってあるでしょうか

382:381
11/03/07 06:02:48.93
すいません、解決しました

383:デフォルトの名無しさん
11/03/07 08:04:22.80
ライブラリとリンクする場合は、ライブラリが提供しているヘッダを使うから
気にする必要は無い。ライブラリ作成者は気にしなければいけない。

384:デフォルトの名無しさん
11/03/08 11:23:21.92
ソート済データからの値の検索の場合
常にfindよりlower_bound使う方がいい?

385:デフォルトの名無しさん
11/03/08 12:50:24.25
そもそも使い道が違う
findはその値をもつ要素を探す
lower_boundはその値以上の要素を探す
Aをさがすつもりでlower_boundしてAがなかったら全く違うBやCといった要素が返ってくることになる
素直にfindを使うんだ

386:デフォルトの名無しさん
11/03/08 12:54:32.71
俺は誰かがDLL作ってくれるまで諦めませんよ
物事が完成するまで何事まで諦めない若者に優しい手を差し伸べてくれてもいいじゃないケチ

387:デフォルトの名無しさん
11/03/08 13:41:13.44
計算式が四則演算でいいなら、20万円で作ってやるよ。

388:デフォルトの名無しさん
11/03/08 14:00:32.04
>>385
なるほど、値がない場合のことを考えてなかった
値が存在する前提ならO(N)のfindよりO(logN)のほうが良いかなと思ったから

389:デフォルトの名無しさん
11/03/08 14:18:10.69
メンバのfind使え

390:デフォルトの名無しさん
11/03/09 11:49:22.82
もういいや俺は自分でDLL作ることにしましたので(キリ
分からない事をここで聞く事に方向転換しましたよ

391:デフォルトの名無しさん
11/03/09 13:44:03.42
それはとても良いかんがえ

392:デフォルトの名無しさん
11/03/09 14:04:16.47
DLLを作るための環境を教えてください
出来れば秀丸で書きたいのでVC以外で必要なソフトを教えてください
ノートブックなので容量ないのですよ

393:デフォルトの名無しさん
11/03/09 14:05:57.90
秀丸とVC++でおk

394:デフォルトの名無しさん
11/03/09 14:13:44.27
VC 以外なら
Windows SDK のコンパイラを使うか
Borland C++ Compiler を使うか
MinGW の gcc を使うか
ってところ?

395:デフォルトの名無しさん
11/03/09 15:17:00.51
394さん
その3つではどれが一番初心者に向いてますか?


396:デフォルトの名無しさん
11/03/09 15:20:57.02
秀丸SDKが対応してるコンパイラ。多分VCだろう。

397:デフォルトの名無しさん
11/03/09 19:07:46.21
すみません。
メモ帳などに書かれた、プログラムコードらしき物(メンバ関数を呼び引数もセットしてるなど)を
読み込んでプログラム内に取り込んで実行する なんて真似はできるものなのでしょうか?

単に文字列を判定し処理を切り替えた擬似的なもの に過ぎなかったのでしょうか。

398:デフォルトの名無しさん
11/03/09 19:13:53.31
インタープリターパターンといいます

399:デフォルトの名無しさん
11/03/09 19:18:48.35
>>397
動的にコンパイルして、動的にリンクすればできるけど、
大変だと思うよ

400:デフォルトの名無しさん
11/03/09 19:22:02.85
早くしろよ!

401:デフォルトの名無しさん
11/03/09 19:35:34.28
いまやってる!

402:397
11/03/09 21:02:49.41
>>398 >>399
ありがとうございます。インタープリターパターンという物が有ったのですね。
インタプリタ言語を再現したかのような形式になるのですね。
ちょっと自分には敷居が高そうですが、やっと数日間の疑問が払拭できました。 ありがとうございました。

403:デフォルトの名無しさん
11/03/09 21:13:52.61
早くしろよ!!!!!!進まないっ!!!!!!!!

404:デフォルトの名無しさん
11/03/10 01:17:39.06
if((t%320)/80==1){~~}
if((t%320)/80==3){~~}



if((t%320)/80==1){~~}
else if((t%320)/80==3){~~}

ではどっちが早いんですの? 極わずかな違いだろうけど。
((t%320)/80==1)が正の時は((t%320)/80==3)の計算しなくて済むけど、
elseでぶっ飛ぶこと自体めんどくさいのかなって。

405:デフォルトの名無しさん
11/03/10 01:20:57.02
後者。

406:デフォルトの名無しさん
11/03/10 01:23:04.58
オケーイ。ありがとぅー

407:デフォルトの名無しさん
11/03/10 04:19:17.77
>>404
tの型によっては、(t%320)/80の結果を一時変数に入れた方が速くなるかもしれない。
整数型ならコンパイラが何とかするだろうけど。

408:デフォルトの名無しさん
11/03/10 07:09:05.14
質問です。
C言語の数値配列はなぜscanfのときは&がいるのに
printfのときは&がいらないんですか?

409:デフォルトの名無しさん
11/03/10 07:26:25.93
>>408
まずその疑問に至ったソースを出しなさい。基本的なことを誤解している。
例)
int hoge[10];

hoge[0] これは、int型データー。

&hoge[0] これは、hoge[0]のアドレスを指す。

hoge  これも、hoge[0]のアドレスを指す。

だから、 hoge と &hoge「0」 は同じものだ。

410:デフォルトの名無しさん
11/03/10 07:39:04.04
×だから、 hoge と &hoge「0」 は同じものだ。
○だから、 hoge と &hoge[0] は同じものだ。

411:デフォルトの名無しさん
11/03/10 07:40:39.16
>>409
見当違いだ。

用意されている関数とは別に、自作関数fを考えたとき
引数xの値を書き換えるにはどうすれば出来るか考えろ。


412:デフォルトの名無しさん
11/03/10 07:43:04.24
値の更新したいとき。
int f(int x) では値の更新できないだろ。
だからアドレス渡しのint f(int *x)にする必要がある。
printfに&xを渡しても動くがそのときはメモリのアドレスが出てくるだけ。


413:デフォルトの名無しさん
11/03/10 07:58:49.67
すまん
そもそも数値配列だったか



414:デフォルトの名無しさん
11/03/10 10:14:09.75
CでDLL作るのとC++でDLL作るのはどちらが簡単ですか?
速度はどっちが速いですか?

415:デフォルトの名無しさん
11/03/10 10:32:58.60
C
C

416:デフォルトの名無しさん
11/03/10 11:21:55.29
すいません、質問です。

ShowDialog()ではフォームが開くのですが、
Show()に変えると開かなくなってしまいました。

エラーにもならないので原因がわからずこまっています。


417:デフォルトの名無しさん
11/03/10 13:01:29.83
Show()に変えなければいいだけ
Showもないことを聞くな

418:デフォルトの名無しさん
11/03/10 19:49:47.68
>>414
CもC++もこれから学ぶのなら絶対C++。
C++を便利なCとして使うのが楽。オート変数の取り扱いだけでも。

419:デフォルトの名無しさん
11/03/10 21:33:53.23
複雑なことするのでなければCでいいよ

420:デフォルトの名無しさん
11/03/10 21:35:10.16
オート変数の扱いがなんだって?

421:デフォルトの名無しさん
11/03/10 21:37:00.00
C厨 vs C++厨

422:デフォルトの名無しさん
11/03/10 23:20:01.18
C++ を便利な C として使うと言ってる人は、
C++ や C をキチンと使いこなせてるのかな?

423:デフォルトの名無しさん
11/03/10 23:54:34.29
better Cとして使ってもいいって普通に言われてないか?

424:デフォルトの名無しさん
11/03/11 00:01:58.32
使ってもいいとはよく言うけど勿体無いなぁと思う

425:デフォルトの名無しさん
11/03/11 00:14:01.88
>>423
それは better C が便利だから言われてるのではなく、
C++ プログラマが自由に C++ を使いたくて、C の制限を
排除する為の方便として言われてるだけ。

実際は C プログラマにとってデメリットはあれど、大した
メリットはない。

426:デフォルトの名無しさん
11/03/11 00:33:46.14
C++はCを由来とする言語だがCとはおおよそ異なる言語に進化している。
初学者必読の書、Effective C++を読むだけでも、
Better Cなどという使い方はありえないと教わる。
実際にCライクな泥臭いプログラムが必要となる場面があるのは事実だが。

CにはCの、C++にはC++の利点があり、
双方の利点は競合している。

427:デフォルトの名無しさん
11/03/11 01:12:03.09
ベターCいいと思うけどね
関数ローカルで可変長のバッファがほしいなーとか思ったときに
vectorでササッとやっつけしちゃったり
その程度でも十分役に立つし

428:デフォルトの名無しさん
11/03/11 01:19:51.86
それは C プログラマが alloca() でササッとやっつけるのとどう違うの?
もちろん malloc/free でも良いよ

429:デフォルトの名無しさん
11/03/11 01:27:43.01
>>428
なんかエラーでたときとかRAIIで楽だしコードもすっきりするじゃん

430:デフォルトの名無しさん
11/03/11 01:31:14.68
>>429
で、それは alloca() で関数を抜ける時にバッファが解放されるのとどう違うの?

431:デフォルトの名無しさん
11/03/11 01:37:21.50
allocaは関数を抜けるときに開放してくれるとは限らないよ

432:デフォルトの名無しさん
11/03/11 01:40:03.00
>>431
それはどんな時?

433:デフォルトの名無しさん
11/03/11 01:42:08.48
ライブラリで実装の時とか

434:デフォルトの名無しさん
11/03/11 01:58:46.11
>>433
つ 無理筋

もしそんな物が今の時代に生き延びているとして、そんなコンパイラを使う方が悪い

435:デフォルトの名無しさん
11/03/11 02:03:30.81
建前:

「Better C として使うと便利だよ~」

本音:

「俺が後で C++ から使い易い様に、お前も C++ で書いとけ」

436:デフォルトの名無しさん
11/03/11 02:10:27.58
中途半端な知識で書かれたC++コードなら純Cのがまだマシ

437:デフォルトの名無しさん
11/03/11 02:12:23.02
完全無欠なる知識でC++のコードを書けるのは、この世界で一人だけ

438:デフォルトの名無しさん
11/03/11 02:21:28.78
allocaって標準入りしたの?
C99で可変長配列が採用されたから今後も予定はないって聞いてたけど

439:デフォルトの名無しさん
11/03/11 02:31:30.81
>>438
入ってない。可変長配列でオケ。

440:デフォルトの名無しさん
11/03/11 02:35:59.83
>>436
リーナストーバルズちゃんもそう言ってたな。
実際、Cの流儀で書かれたC++コードほど迷惑なものはない。

441:デフォルトの名無しさん
11/03/11 02:41:28.45
結局、ベターCって誰得?

442:408
11/03/11 03:52:59.23
>>409さん
たとえば
    int data[10];
int i;

for (i = 0;i < 10;i++) {
printf("%d 番目の数値を入力して下さい:",i);
scanf("%d",&data[i]);
}

for (i = 9;i >= 0;i--) {
printf("%d ",data[i]);
}
printf("\n");
なぜこのプログラムではprintfのときに配列個々に&をつけていないのでしょうか。
配列の名前は配列の先頭のアドレスを表すつまり、このプログラムなら
data=&data[0]なのはわかりますが、なぜほかの要素に&をつけていないのに
データが参照されているかということがわからないのです。

443:デフォルトの名無しさん
11/03/11 04:01:33.33
scanfが要求するのはポインタ、printfが要求するのは値。
単にこれだけの違い。

void f( int ); と void f( int * ); の違いみたいなもんですね。
パラメータ型が違うんだから、与える引数の型も変わって当然。

444:デフォルトの名無しさん
11/03/11 06:56:05.10
>>441
俺がbetter Cとして使うときは、C + ネームスペース&クラス位しか使わんが
俺様プログラムを作るときは、コメント省略しても実害なく作れるので、無茶苦茶便利
合わない人と組んでやるときは、誰の特にもならない

445:デフォルトの名無しさん
11/03/11 07:55:56.16
BetterCとして作るときって言うと、構造体に演算子オーバロードはよく使うな。自分用ツールなら他人が読めるかは余り気にせずできるし。
それでも流石にDoxygenコメント位入れるけど。

446:デフォルトの名無しさん
11/03/11 08:30:07.62
>>444
ネームスペースに頼った命名法ってgrepで検索といった古典的な手法が使えないよね。
IDE必須になるのが嫌だな。

447:デフォルトの名無しさん
11/03/11 08:42:24.51
>>444
クラスを使ったら、それはもうベターCじゃなくC++だと思うんだが・・・
元々がC with Classな訳だし

448:デフォルトの名無しさん
11/03/11 08:58:28.54
>>447
そう?
俺の中では、class + コンストラクタ + デストラクタ + コピーコンストラクタ までは
ちょっと便利な構造体だけどな?
継承とか演算子のオーバーロードがあるとC++って感じになる
と言いつつ、クラスの性質に合わせて両方とも使ってるけどね

449:デフォルトの名無しさん
11/03/11 10:15:11.38
DLLを作るとき1+2=3みたいに計算させる場合はCとC++どっちがいいのか聞いておるのだ

450:デフォルトの名無しさん
11/03/11 10:32:20.70
どっちでもいいよ。

451:デフォルトの名無しさん
11/03/11 10:55:27.62
Cで作ることにしました

452:デフォルトの名無しさん
11/03/11 10:56:10.21
勉強熱心な若者はCでアイフォンアプリもアンドロイドアプリも作れることを学習したんですよ

453:デフォルトの名無しさん
11/03/11 11:02:28.87
至急!!!!!コンパイラが見つかりません!どこにありますか?
URLリンク(www.embarcadero.com)

454:デフォルトの名無しさん
11/03/11 11:27:06.71
目が悪いのか?Downloadって...

455:デフォルトの名無しさん
11/03/11 11:31:37.36
スルーしないと永遠に付きまとわれるぞ

456:デフォルトの名無しさん
11/03/11 12:35:41.62
何故若者のやる気をなくす事を言うか?

457:デフォルトの名無しさん
11/03/11 12:40:32.02
出る杭は打たれるよ

458:デフォルトの名無しさん
11/03/11 13:04:40.16
それは457が陰湿なだけでしょ

459:デフォルトの名無しさん
11/03/11 13:40:46.46
出てねーし
めり込んだ杭をどうしろと


460:デフォルトの名無しさん
11/03/11 23:16:01.68
っ全然関係ねーけど、
町田市ようやく電気回復したよ。
9時間C++で遊べず^^;

461:デフォルトの名無しさん
11/03/11 23:43:36.66
それは喜ばしいが小田急とJRが止まってるから町田に帰れない><

462:デフォルトの名無しさん
11/03/12 00:20:57.01
今回は被災しなかった地域だけど
俺はオフィスに自転車おいてるから電車が止まってもなんとか帰れる
お前らも折り畳み自転車くらい持っとけば?

463:デフォルトの名無しさん
11/03/12 00:45:03.54
>>448
もちろん STL も使うでしょ?

そこから分かる事は、ベターCというのは人に依って範囲が全然違うから
具体的な実態を持たない、気をつけるべき用語だと言う事だね。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch