スレを勃てるまでもないC/C++の質問はここで 20

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2011/09/15(木) 16:27:52.49
3デフォルトの名無しさん:2011/09/15(木) 17:05:51.53
Cはヨーグルトの味がしますか?
4デフォルトの名無しさん:2011/09/16(金) 00:22:38.87
Cは醍醐味
5デフォルトの名無しさん:2011/09/16(金) 05:25:30.11
白かよ、青かよ、ウォッシュかよ?
6デフォルトの名無しさん:2011/09/16(金) 07:26:08.22
>>5
喰える、喰えない、割と好き
7デフォルトの名無しさん:2011/09/17(土) 11:39:07.68
ちょっと和んだw
8デフォルトの名無しさん:2011/09/21(水) 08:06:04.88
質問です。VC++ 2008 Express で
ttp://k3tec.net/neko_wiki/index.php?C%2FC%2B%2B%A5%BD%A5%B1%A5%C3%A5%C8%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%C2%E8%B0%EC%B2%F3
を参考にサーバ・クライアントプログラムを作っているのですが、実行すると
server.exe の 0x85c7ec4d でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x85c7ec4d を読み込み中にアクセス違反が発生しました。
というエラーが出て困っています。Segmentation Fault だと思うのですが、簡単なテストプログラムではエラーが出ないので原因がよくわかりません。
対処方法がわかる方いましたらご教示ください。
以下、ソース
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
using namespace std;
enum COMMAND { CMD_NOP, CMD_LOGIN, ....... };
9つづき:2011/09/21(水) 08:06:20.37
class Message {
SOCKET _dst_socket;
COMMAND _command;
public:
// コンストラクタ、デストラクタ、セッタ、ゲッタ
...
virtual int sizeOf() cosnt { return sizeof( *this ); }
};

class TextMessage : public Message {
char _text[ 16 ];
public:
// コンストラクタ、デストラクタ、セッタ、ゲッタ
...
virtual int sizeOf() const { return sizeof( *this ) }
};

class Server{ ... };
bool Server::send( SOCKET dst_socket, const Message& msg ) {
if( ::send( dst_socket, (char*) &msg, msg.sizeOf(), 0 ) != SOCKET_ERROR ) // このへんで sizeOf() を呼ぶとエラー。sizeof( TextMessage ) とかだとOK
}

class Tester {
public:
static void test( const Message& msg ) { cout << msg.sizeOf() << endl; }
};

int main() {
TextMessage tmsg;
Tester::test( tmsg ); // これはOK
...
}
10デフォルトの名無しさん:2011/09/21(水) 08:12:50.28
sizeOf()を呼ぶとエラーじゃなくて、sizeOf()を呼んだ後の次のsizeOf()で死ぬんだろ。
それなら原因は想定できた。
11デフォルトの名無しさん:2011/09/21(水) 08:15:04.46
こいつはくせえーッ!Java厨のにおいがプンプンするぜッーーーッ!
128:2011/09/21(水) 09:06:04.18
>>10 ヒントだけでもお願いします。
ついでにJava厨臭くない方法があったら教えて下さい。
13デフォルトの名無しさん:2011/09/21(水) 09:34:10.54
>>9
それが>10の言いたいことかどうかは知らんが、(char *) & msgはsend()に渡すべき場所を指しているかデバッガでよく見てみたら?
つーか、Cスタイルキャストは使うなや。
14デフォルトの名無しさん:2011/09/21(水) 14:24:19.16
広域の::send()関数の引数に、Messageクラスのポインタを(char*)にキャストして
渡してまともに動作するものなのか?
TextMessageの場合は、たまたまクラスの銭湯に_test[16]があれば動作するかも知れないが…
158:2011/09/21(水) 14:27:30.20
自己解決しました。
クライアントから送られてきたデータをそのまま流用しようとしたため sizeOf のアドレスが異なっていたようです。
char data[ SIZE ];
recv( src_socket, data, _countof( data ), 0 );
TextMessage tmp, msg;
memcpy_s( &tmp, sizeof( TextMessage ), data, sizeof( TextMessage ) );
msg = tmp;
server.send( dst_socket, msg );
としたらうまくいきました。
情報不足の質問をしてすみませんでした。アドバイスくださった方、ありがとうございました。
168:2011/09/21(水) 14:35:44.97
あ、sizeOf のアドレスじゃないや。まあいいや
17デフォルトの名無しさん:2011/09/22(木) 00:48:42.18
アドバイスを受けて事故解決かよ。おめでてーな。
18デフォルトの名無しさん:2011/09/22(木) 11:31:13.74
以下のような宣言に対して…

template< class T1 >
class CHoge
{
void f1();
template< class T2 > void f2();
};

f1(),f2()の定義を宣言と分けて書きたい場合,f1()は,
template< class T1 > void CHoge< T1 >::f1(){ ... }
と書きますが,
f2()の実装はどのように書けばよいのでしょうか?
19デフォルトの名無しさん:2011/09/22(木) 14:27:06.20
template <class T1> template <class T2> void CHoge<T1>::f1<T2>() { ... }
20デフォルトの名無しさん:2011/09/22(木) 14:36:30.97
エラーが出ます

template <class T1>
class CHoge {
T1 t;
void f1();
template <class T2> void f2();
public:
CHoge(T1 x) : t(x) {}
};

template <class T1>
void CHoge<T1>::f1() {
std::cout << t << std::endl;
}

template <class T1>
template <class T2>
void CHoge<T1>::f2<T2>() {
std::cout << static_cast<T2>(t) << std::endl;
}

error: function template partial specialization 'f2<T2>' is not allowed
21デフォルトの名無しさん:2011/09/22(木) 14:39:24.95
template <class T1> template <class T2> void CHoge<T1>::template f2<T2>() { ... }
22デフォルトの名無しさん:2011/09/22(木) 14:43:18.70
>>21
>>20と同じエラーが出ます
23デフォルトの名無しさん:2011/09/22(木) 14:55:45.20
template <class T1> template <class T2> void CHoge<T1>::template f2() { ... }
24デフォルトの名無しさん:2011/09/22(木) 15:00:15.12
>>23
ありがとうございます

template <class T1>
class CHoge {
T1 t;
public:
void f1();
template <class T2> void f2();
CHoge(T1 x) : t(x) {}
};

template <class T1>
void CHoge<T1>::f1() {
std::cout << t << std::endl;
}

template <class T1>
template <class T2>
void CHoge<T1>::f2() {
std::cout << static_cast<T2>(t) + 0.5 << std::endl;
}

int main()
{
CHoge<int> c(1);

c.f1();
c.f2<double>();
}
2518:2011/09/22(木) 15:49:42.60
>>19〜24 感謝.
26デフォルトの名無しさん:2011/09/22(木) 19:13:14.04
計算式の入った文字列("1+2*3"など)を用意しておいて、その計算結果(先程の例では7)を変数に代入するみたいなことって出来ますか?
27デフォルトの名無しさん:2011/09/22(木) 19:32:01.78
>>26
自分でパーサー書けば出来る
28デフォルトの名無しさん:2011/09/22(木) 19:59:16.78
>>26
Lua使えば1分でそういうコードが書けるよ
29デフォルトの名無しさん:2011/09/23(金) 01:57:41.81
boostでなかったっけ
30デフォルトの名無しさん:2011/09/26(月) 13:40:15.69
L"abc"のLって何ですか?
一文字なのでぐぐれなくて困っています。
31デフォルトの名無しさん:2011/09/26(月) 13:44:45.38
>>30
ワイド文字
32デフォルトの名無しさん:2011/09/26(月) 18:51:14.14
「C言語 文字列 L」でぐぐったら一発だったが
33デフォルトの名無しさん:2011/09/26(月) 19:17:29.98
X a(),b(),c(),d();

if(is_true) return;

Y e();
} → if(!is_true)e.~e();→ d.~d();→ c.~c();→ b.~b();→ a.~a();

RAIIは開放の順番は規定されてるの?
それとも順不同?
34デフォルトの名無しさん:2011/09/26(月) 19:59:55.36
>>33
X a()は返却値X型で引数をとらない関数aの宣言で解放もなにもないし
変数の構築と破棄の順序関係はRAIIなんかとは直接関係ない変数に関する普通の話だしでつっこみどころしかない。
最低限の知識が正しく身についてない人にはそれより先は教えようがないぞ。
35デフォルトの名無しさん:2011/09/26(月) 20:13:36.69
>>33
規定されてるよ

>>34
struct A{};
A a();
36デフォルトの名無しさん:2011/09/26(月) 21:54:42.25
デストラクタコール記述のつもりだろうが変数名でデストラクタ書いてるwwから
生兵法君が鼻息荒げて訳判らん(キリッしちゃったんだろうな
37デフォルトの名無しさん:2011/09/27(火) 21:03:18.94
もう何度も質問されていると思いますので簡潔にでいいのでお答えいただけないでしょうか?
PHPやJavaScriptは習得しているのですが、ちょっとC系が必要になりそうなのです
その際、C -> C++と学習したほうがやはりいいのでしょうか?
CはC++に吸収済みとか言う人もいるようですが
オブジェクト指向に関しましてはまぁ少々は慣れていると思います
やはりC++をいきなりというのはつまずく点が多いのでしょうか?
また、CとC++はオブジェクト指向以外にも違いはあるのでしょうか?
Webで調べたのですがいまいち分かりませんでした
38デフォルトの名無しさん:2011/09/27(火) 21:15:01.97
>>37
必要な言語を学習したんでいい。C++が必要なら最初からそっちでおk
Cにオブジェクト指向とテンプレート(ジェネリックプログラミング)、例外を加えたのがC++だな
39デフォルトの名無しさん:2011/09/27(火) 21:25:22.74
ご回答ありがとうございます
>必要な言語を学習したんでいい
とはPHP等のオブジェクト指向を学習しているので、そのままC++にいってもいいという意味でしょうか?
Cで出来ることはC++で出来ると聞いていますので、C++に行こうかと思いました
40デフォルトの名無しさん:2011/09/27(火) 21:59:07.32
>>39
仕事でも趣味でも受験でも、目的があるならそれに沿った言語を選択して学習すればいい。
学習そのものが目的なら自分で調べて悩んで下さい。学習になります。
41デフォルトの名無しさん:2011/09/27(火) 22:22:48.68
>>37
CとC++の肝はメモリー管理。
どちらからやっても同程度に壁になる
42デフォルトの名無しさん:2011/09/27(火) 23:08:30.45
日頃C++をバリバリ使ってると、Cの仕事は苦痛。
日頃Cをバリバリ使ってると、C++の仕事は苦痛。

その程度には違うので、C系なんてごまかしてないで、
プロジェクトに必要な方をやるべし。両方必要なら迷わずC++。
43デフォルトの名無しさん:2011/09/28(水) 10:13:54.66
設計がしっかりしてればどっちでやっても大差ない
44デフォルトの名無しさん:2011/09/28(水) 13:08:19.61
アルゴリズムの話なのですが、
手続き型言語でコールバックは悪ってのは何故なんでしょうか。
45デフォルトの名無しさん:2011/09/28(水) 13:10:23.06
悪じゃないです
46デフォルトの名無しさん:2011/09/28(水) 13:44:47.44
純粋な手続き型ではA-B-C-D-Eという流れなら毎回A-B-C-D-Eの順で処理が進んでいくけど
コールバックが入るとA(ハンドラ登録)-コールバック-B-C-D-Eだったり
A(ハンドラ登録)-B-C-D-E-コールバックだったりと処理の順序関係が安定しなくなる、
あるいは順序を安定させようとするとマルチプロセス化や待機状態を作るなどの
純粋な手続き型と比べると余計なコストがかかるなどで相性が悪いから。
4744:2011/09/28(水) 18:57:01.56
>>46
なるほど、ありがとうございました。
48デフォルトの名無しさん:2011/09/28(水) 19:37:53.90
assertってやめたほうが良くないですか?
デバッグ時に発生しなかったバグケースがリリース時に出たら困りますよね
49デフォルトの名無しさん:2011/09/28(水) 19:49:24.57
>>48
assert使った事ないの?
50デフォルトの名無しさん:2011/09/28(水) 19:51:34.90
>>49
リリース時に例外を投げるassertもどきなら使ってます
ボトルネックでは仕方ないからassertですが…
51デフォルトの名無しさん:2011/09/28(水) 19:53:58.32
リリースビルドの意味わからなかったり直接呼んだりしてるなら
ディスパッチャーの中で発生させるアラートや事後アラートがバレると
IQの低さを悟られてしまうから止めといたほうがイイとおもうよ
52デフォルトの名無しさん:2011/09/28(水) 19:58:18.01
煽りはレスしなくて結構です
53デフォルトの名無しさん:2011/09/29(木) 00:38:50.35
すでにある構造体(コンストラクタなしの型)のテンポラリオブジェクトを無駄なく構築するにはどうすればいい?
func(hoge(1, 2));
というふうな書き方ができないから
{ hoge h(1, 2); func(h); }
と書いてるんだけど、ダサすぎて困る
54デフォルトの名無しさん:2011/09/29(木) 00:46:48.17
>>53
C++ならコンストラクタを書く
CならC99のコンパウンドリテラルを使う
C89はどうしようもない
55デフォルトの名無しさん:2011/10/01(土) 17:55:42.79
printf("%s %d", "hoge", x);
な所が
printf("hoge", "hoge", x);
こうなるケースがあっても問題ない?
56デフォルトの名無しさん:2011/10/01(土) 18:03:28.62
初心者には意味不明な質問だな
57デフォルトの名無しさん:2011/10/01(土) 18:36:14.12
多いのは問題あるが少ないのは問題ない
58デフォルトの名無しさん:2011/10/01(土) 19:08:08.85
ファイルから文字列を読み込んで,その文字列を名前にもつ関数を呼び出す事ってC,もしくはC++で可能なんでしょうか
例えば func,100 とだけ書かれたファイルを読み込んで,func(100)という風に呼び出したいのです
59デフォルトの名無しさん:2011/10/01(土) 19:19:48.85
if(strcmp(str, "func") == 0)
{
  func(num);
}
60デフォルトの名無しさん:2011/10/01(土) 19:38:38.90
void hoge(void) { std::cout << "hoge" << std::endl; }
void fuga(void) { std::cout << "fuga" << std::endl; }

map<string, void (*)(void)> m;
m["hoge"] = hoge;
m["fuga"] = fuga;

string s;
cin >> s;

map<string, void (*)(void)>::iterator i(m.find(s));
if(i != m.end()) { (*i)(); }
61デフォルトの名無しさん:2011/10/01(土) 19:42:25.38
あらかじめ用意した関数しか呼び出せねえのかこの糞ゲーは
62デフォルトの名無しさん:2011/10/01(土) 19:46:40.08
用意してないものを利用できると思うほうがおかしい
63デフォルトの名無しさん:2011/10/01(土) 20:00:11.71
>>59
ありがとうございます
たぶん,これでもやろうとしてることは出来ないことはないんですが
全部の関数でそれをするのはちょっと辛いなあと思ってたんです
言葉足らずですいません

>>60
C++はまだ勉強中なのでよくわからないのですが,おそらくイメージしてたのはこれです
mapとか言うのを調べればよさそうな感じですね
勉強になりました

お二方,ありがとうございました
64デフォルトの名無しさん:2011/10/03(月) 22:58:54.79
以下のプログラムで実行結果を「ABC」にしたいのですが「ABCBCC」になってしまいます
どうすればいいですかね・・・

#include<stdio.h>
int main()
{
int i;
char c[100]={'A','B','C'};

for(i=0;i<3;i++)
printf("%s",&c[i]);

printf("\n");
}
65デフォルトの名無しさん:2011/10/03(月) 23:02:34.67
%sを%cにする?
66デフォルトの名無しさん:2011/10/03(月) 23:05:19.91
s->c
67デフォルトの名無しさん:2011/10/03(月) 23:11:29.79
>>65
%cにしたら出力が「???」になりました
68デフォルトの名無しさん:2011/10/03(月) 23:14:04.75
printf("%c",c[i]);
69デフォルトの名無しさん:2011/10/03(月) 23:15:41.95
プリントは&いらん
70デフォルトの名無しさん:2011/10/03(月) 23:16:03.02
>>67
申し訳ない
>>68が正解だな
71デフォルトの名無しさん:2011/10/03(月) 23:17:43.86
>>68-69
できました!ありがとうございます
&はscanfと混同してました・・・初歩的なミスでしたね^^;
72デフォルトの名無しさん:2011/10/04(火) 18:16:34.85
Boost pythonを使用しようとして
http://d.hatena.ne.jp/moriyoshi/20091214/1260779899
を参考にしているのですが、vector<int>からpythonのリストへの変換例のコードの意味がわかりません。
参考URL中の

.def("__getitem__", (int const&(foo::int_vector::*)(foo::int_vector::size_type) const)&foo::int_vector::at)

の中で(int const&以下が何をやっているのでしょうか。さっぱり理解できません。
73デフォルトの名無しさん:2011/10/04(火) 19:56:17.57
>>72
foo::int_vector::at へのメンバ関数ポインタを取得するために、
返却値型 int const & で引数は一つで型は foo::int_vector::size_type で const 修飾されてる foo::int_vector のメンバ関数の
メンバ関数ポインタ型へ明示的なキャストをしてる。
74デフォルトの名無しさん:2011/10/04(火) 20:22:34.44
>>73
ありがとうございます。
関数キャストは
(返却値型 (ポインタ型)(引数リスト) )
の形式で行うということですね。
75デフォルトの名無しさん:2011/10/04(火) 21:16:27.46
なんか正しくわかってないような?
・メンバ関数ポインタ
・オーバーロードされてる(メンバ)関数への(メンバ)関数ポインタの取得
についてわかってるならそれでいいよ
76デフォルトの名無しさん:2011/10/06(木) 01:12:52.40
vectorの各要素を<algorithm>を使って3乗するとして、

案1
class MyPow {
pulic:
  double operator() (double value){return pow(value, a_)
  MyPow(double a):a_(a)
private:
  double a_;
}

transform(vec.begin(), vec.end(), vec.begin(), MyPow(3.0));


案2
class MyPow: public binary_func<double, double, double> {
  double operator() (double value, double a) {return pow(value,a);}
}

transform(vec.begin(), vec.end(), vec,begin(), bind2nd(MyPow(), 3.0))

どちらの方が好ましいのでしょうか。どちらでもOK?
77デフォルトの名無しさん:2011/10/06(木) 01:15:48.59
>>76
どちらも単なる関数オブジェクトだから大差ないんじゃね?
強いて言えば案1の方が3.0を内部状態として持つのでそれだけ引数の
受け渡しが減る
78デフォルトの名無しさん:2011/10/06(木) 01:48:04.60
const int n = 10;

int main()
{
std::vector<double> vec;

for (int i = 0; i < n; i++)
vec.push_back(std::rand() % 100);

std::copy(vec.begin(), vec.end(), std::ostream_iterator<double>(std::cout, " "));
std::cout << std::endl;

std::transform(vec.begin(), vec.end(), vec.begin(), [](double& x) { return std::pow(x, 3.0); });

std::copy(vec.begin(), vec.end(), std::ostream_iterator<double>(std::cout, " "));
std::cout << std::endl;
}
79デフォルトの名無しさん:2011/10/06(木) 02:04:54.23
やっぱりラムダ入ったのは大きいよなぁ
80デフォルトの名無しさん:2011/10/06(木) 02:19:35.41
mem_fun_ref(笑)
81デフォルトの名無しさん:2011/10/06(木) 02:23:32.07
-> を使えば一発
82デフォルトの名無しさん:2011/10/06(木) 09:00:52.21
やはりここはptr_funの出番d・・・
transform(vec.begin(), vec.end(), vec.begin(), bind2nd(ptr_fun<double, double, double>(pow), 3.0));
83デフォルトの名無しさん:2011/10/08(土) 21:10:35.55
もっとクールな方法でパブリックメンバ変数を外から見たらconstに中から見たら非constにできる?
struct hoge
{
int const x;
hoge(void) : x(0) { }
hoge(int x) : x(x) { }
hoge & operator = (hoge const & h) { const_cast<int &>(x) = h.x; return *this; }
void inc(void) { const_cast<int &>(x) += 1; }
void dec(void) { const_cast<int &>(x) -= 1; }
};
84デフォルトの名無しさん:2011/10/08(土) 22:12:54.93
publicなメンバ変数という設計を捨てる
85デフォルトの名無しさん:2011/10/09(日) 01:07:01.67
void君と名付けよう
86デフォルトの名無しさん:2011/10/09(日) 09:26:21.88
ファイルを適当な変数の配列にファイルサイズ分一気に読み込みたいんですが、
どうすればできますか?
今はこんな風にして凌いでるけど、どう考えても馬鹿らしすぎる


std::string buf;
std::string DataStr;
while(FileStream&&getline(FileStream,buf))DataStr+=buf;
char *src=new char [DataStr.size()];
memcpy((void *)src,DataStr.c_str(),DataStr.size());
87デフォルトの名無しさん:2011/10/09(日) 10:18:33.83
std::ifstream ifs("test.txt", std::ios::in|std::ios::binary);
ifs.seekg(0, std::ios::end );
size_t size = ifs.tellg();
ifs.seekg(0, std::ios::beg );
char *buff = new char[size+1];
ifs.read(buff, size);
buff[size] = '\0';
// ...
delete[] buff;
88デフォルトの名無しさん:2011/10/09(日) 10:54:32.05
#include <exception>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
template <class A> void readAllAtOnce(char const * path, std::vector<char, A> & data) {
std::fstream file;
file.exceptions(std::ios::badbit | std::ios::eofbit | std::ios::failbit);
file.open(path, std::ios::in | std::ios::binary);
file.seekg(0, std::ios::end);
std::ios::pos_type end(file.tellg());
file.seekg(0, std::ios::beg);
std::ios::pos_type beg(file.tellg());
std::ios::off_type off(end - beg);
if(data.max_size() < off) throw std::exception();
data.resize(off);
file.read(&data[0], off);
file.close(); }
int main(void) {
try {
std::vector<char> buf;
readAllAtOnce("test.txt", buf);
std::string str(buf.begin(), buf.end());
std::cout << str << std::endl; }
catch(...) { std::cout << "err" << std::endl; }
return 0; }
89デフォルトの名無しさん:2011/10/09(日) 23:12:40.33
窓板の質問スレでたずねたんだけど、返答がないようなのでこっちでも聞かせてください。

C++でWinXPでネットワーク接続を表示したときに表示される「LANおよび高速インターネット」を
表示するexeを作成したいですが、ネットワーク名なんかはレジストリから取得できました。
しかし、切断したネットワーク名まで表示される状態で上記の内容とはずれてしまっています。
レジストリに保管されているネットワークから現在接続されているネットワークだけ表示したいんですけど、
何をフラグとしてしているのかがわかりません。

どなたかご教授お願いします。
90デフォルトの名無しさん:2011/10/10(月) 01:12:36.92
http://blogs.msdn.com/b/jpwdkblog/archive/2009/09/29/9900575.aspx
devcon status =net
でdisabled/runningの判別がつくけど他にいい方法があるかもしれん
91デフォルトの名無しさん:2011/10/10(月) 01:19:16.35
>>87-88
ありがとう、seekgを使うのがポイントなのね
92デフォルトの名無しさん:2011/10/10(月) 03:43:03.15
イテレータってインクリメントやデクリメントだけでなく、+1や-1でも前後の要素にアクセスできる?
93デフォルトの名無しさん:2011/10/10(月) 09:19:56.59
自分で試したほうが早かった。できた
94デフォルトの名無しさん:2011/10/10(月) 09:38:55.18
浮動小数点数をバイナリで保存するにはどうすれば?
95デフォルトの名無しさん:2011/10/10(月) 10:44:11.90
fwrite
ofstream::write
96デフォルトの名無しさん:2011/10/10(月) 11:18:44.56
>>90
ありがとう。
devconは知らなかった。試してみる。
97デフォルトの名無しさん:2011/10/10(月) 23:31:47.94
ローベルのC++入門講座をお持ちの方にお聞きしたいのですが、
P308の演算子オーバーロードの流れがよくわかりません。

> delete[] m_array;
> m_array = array;
deleteしたにも関わらず直後にdeleteしたものを使っていて混乱しています。
98デフォルトの名無しさん:2011/10/10(月) 23:35:20.40
ロベールの翻訳は分かりやすい
99デフォルトの名無しさん:2011/10/10(月) 23:36:11.26
その2行だと。
deleteしたのは、m_arrayのポインタが指す領域。
m_arrayはまだ残っている。
そこに、arrayのエリアのポインタを再設定しただけ。
100デフォルトの名無しさん:2011/10/10(月) 23:37:57.79
×そこに、arrayのエリアのポインタを再設定しただけ。
○そこに、arrayの中にあるポインタを再設定しただけ。

101デフォルトの名無しさん:2011/10/10(月) 23:40:21.83
m_array→[a][a][a][a][a][a]
array→[b][b][b][b][b][b][b][b][b][b]

↓delete [] m_array

m_array→???
array→[b][b][b][b][b][b][b][b][b][b]

↓m_array=array

m_array--↓
 array→[b][b][b][b][b][b][b][b][b][b]
102デフォルトの名無しさん:2011/10/10(月) 23:52:41.43
>>99-101
よくわかりました。ありがとうございます!
103デフォルトの名無しさん:2011/10/11(火) 05:52:14.38
あるクラスのポインタ型の代入演算を定義したいと思っています。
つまり、
Hoge *a,*b;
a=new Hoge;
b=new Hoge;
a=b;<-この部分

この部分の代入演算子を定義するために以下のように書きましたが
チェック用の文字列が出力されません。(コンパイルは通ります)
class Hoge{
public:
Hoge(){}
Hoge* operator=(Hoge& *hoge){cout<<"Check!"<<endl;return this;}
};

どなたか申し訳ないのですがご教示願えないでしょうか。
104デフォルトの名無しさん:2011/10/11(火) 07:28:56.83
>>103

その代入演算子は、
Hoge a;
Hoge b;
...
a = &b;
としたとき、&a を返す演算子だから呼ばれてない。
105デフォルトの名無しさん:2011/10/11(火) 07:36:40.08
>>103
これをやろうとすると、ポインタ型のグローバルな代入演算子をオーバーロードすることになるけれど、
C++では、その操作は許されていない。つまり、できない。
どうしてもというなら、copy()メソッドのようなものを作るしかない。
106デフォルトの名無しさん:2011/10/11(火) 10:46:38.24
template<typename T>struct ptrh{T*const operator=(T*p){return h=p;}ptrh(T*p):h(p){}T*h;};
template<typename T>ptrh<T> ptrh_cast(T*a){return ptrh<T>(a);}

ptrh_cast<hoge>(a)=b;
107デフォルトの名無しさん:2011/10/11(火) 10:53:41.09
それ挙動確認して無いだろ
参照つけないとダメだな
108デフォルトの名無しさん:2011/10/11(火) 13:51:34.26
STLのコンテナやイテレーターが満たさないといけない要件をわかりやすくまとめたサイトや書籍は有りますか?
109デフォルトの名無しさん:2011/10/11(火) 16:22:01.56
久々に実行したら

Setting Default Parameters...
Parsing Configfile encoder.cfgCannot open configuration file encoder.cfg.
続行するには何かキーを押してください . . .

ってでて動きません。
環境変数とかはいじってないはずなんですけど・・・
解決方法がわかる人がいれば教えてください!
110デフォルトの名無しさん:2011/10/12(水) 01:16:57.92
struct CUSTOMVERTEX2
{
FLOAT x, y, z,h;
DWORD color;
float u,v;
};

CUSTOMVERTEX2* vertices;
vertices=new CUSTOMVERTEX2[kakuKosu*2+2];

verticesを静的に初期化したらうまくいったのですが、
newを使って初期化したら何も表示されなくなりました。
newの書き方が変なのでしょうか。
111デフォルトの名無しさん:2011/10/12(水) 01:35:29.79
あなたの求める挙動による
112デフォルトの名無しさん:2011/10/12(水) 01:55:27.49
>>111
CUSTOMVERTEX2* vertices;
vertices=new CUSTOMVERTEX2[20];

CUSTOMVERTEX2 vertices[20];
で挙動の違いがあるんですか?

ちなみに
VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
return;
memcpy( pVertices, vertices, sizeof(vertices) );
g_pVB->Unlock();

verticesの中身は上記のような感じでバッファーに渡しています。
113デフォルトの名無しさん:2011/10/12(水) 02:06:05.32
そもそもそれじゃ静的な初期化にもなってないが、
上と下でsizeofが何を返してくるかprintfで確かめたら直ぐに原因は分かる
114デフォルトの名無しさん:2011/10/12(水) 02:07:00.46
>>112
sizeofの結果が変わってくる
sizeof(vertices[0])*20にすればおk
115デフォルトの名無しさん:2011/10/12(水) 10:28:00.33
>>113-114
ありがとうございます。
できました。
116デフォルトの名無しさん:2011/10/13(木) 00:09:58.48
初歩的な質問なのですが、エラー処理のあたりがよくわかりません。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 char *str;
 int num, i;

 printf("表示するaの個数を入力\n");
 scanf("%d", &num);

 str = (char *) malloc (sizeof (char) * (num +1));
 if(!str){                  ←【Q1.この!strの意味は何でしょう?】
  printf("メモリが確保できませんでした。\n");
  return 1;                ←【Q2.return 0;ではないのは何故ですか?】
 }
 for (i=0; i<num; i++){
  *(str+i) = 'a';
 }
 *(str+num) = '\0';
 printf("%s\n", str);
 return 0;
}
117デフォルトの名無しさん:2011/10/13(木) 00:30:21.08
> if(!str){                  ←【Q1.この!strの意味は何でしょう?】
メモリー確保ができなかった場合rtn=0になる。その確認
>  return 1;                ←【Q2.return 0;ではないのは何故ですか?】
プログラムが終了したとこのコードを1(エラー)として0(正常)特別している。
118デフォルトの名無しさん:2011/10/13(木) 00:31:51.37
×特別している。
○と区別している。
119デフォルトの名無しさん:2011/10/13(木) 01:07:29.45
A1.malloc()は必要なメモリの確保に失敗するとNULLを返すのでそれをチェックしている
A2.普通main()は成功時に0、失敗時に非0を返す。そのためのマクロEXIT_SUCCESSと
EXIT_FAILUREも定義されている
120デフォルトの名無しさん:2011/10/13(木) 03:12:37.85
>>117>>118>>119
ありがとうございます。理解できました。
論理演算子とNULL値をよく理解していませんでした。
121デフォルトの名無しさん:2011/10/13(木) 07:06:25.03
C++を勉強しようと思ってるんだけど
練習問題がついた良いサイトありませんか?

http://www.geocities.jp/ky_webid/ProgrammingPlacePlus/c/index.html
こんなサイトのC++版があれば理想的なんだけど
122デフォルトの名無しさん:2011/10/13(木) 08:52:06.18
>>121
C++はCと違ってそのボリュームは生半可じゃないぞ
独習C++でも買え
123デフォルトの名無しさん:2011/10/13(木) 11:17:11.22
Cの生みの親が死んじゃった・・・・・・
124デフォルトの名無しさん:2011/10/13(木) 14:14:16.82
独学ですがC言語をマスターした後は何を勉強すればいいですか
125デフォルトの名無しさん:2011/10/13(木) 14:39:55.46
何がしたいのかによる。
126デフォルトの名無しさん:2011/10/13(木) 14:56:23.02
>>124
基本情報を取りましょう
127デフォルトの名無しさん:2011/10/14(金) 12:57:00.56

C言語の課題なんだが 、五つの数字足したあとに平均だす方法がわからん。
教えてください
128デフォルトの名無しさん:2011/10/14(金) 13:11:34.53
ans = ( a + b + c + d) / 5;
129デフォルトの名無しさん:2011/10/14(金) 13:12:48.93
ans = ( a + b + c + d + e) / 5; // 1こ足りんかった
130デフォルトの名無しさん:2011/10/14(金) 13:18:31.86
<<127
すまない、補足なんだがC++だ
131デフォルトの名無しさん:2011/10/14(金) 15:16:10.61
平均の出し方も分からない奴がプログラミングをやる時代か……
132デフォルトの名無しさん:2011/10/14(金) 15:58:18.97
平均の求め方をやるのは小6だ
あとはわかるな?
133デフォルトの名無しさん:2011/10/14(金) 16:10:02.03
最近の小学生はプログラミングなんかやってるのか
134デフォルトの名無しさん:2011/10/14(金) 16:15:21.83
まあ小6っつったらいろいろ背伸びしたくなる時期なんだろうな
135デフォルトの名無しさん:2011/10/14(金) 16:19:22.80
後で平均する数を増やすかもしれないのか、小数点以下をどうするのか、そもそも5つの値をどのように与え、どのように出力したいのか
136デフォルトの名無しさん:2011/10/14(金) 16:24:40.12
小学生とか
俺がお年玉でVB4.0を買った頃じゃないか
結局ろくなもん作れなかったけど
137片山博文MZ:2011/10/14(金) 17:10:05.90
int *p = new int[0]; // OK or NG?
138デフォルトの名無しさん:2011/10/14(金) 19:05:53.66
>>137
OK
ついでに言うと自分でnewをオーバーロードするときもサイズ0に対応できるように書かなければならない

139デフォルトの名無しさん:2011/10/14(金) 21:12:05.51
>>130

俺と同じ悩み持っててワロタ

#include <stdio.h>
int main()
{
int a, b, c, d, e;
int f=5;

puts("一つ目の数を入力");
scanf("%d", &a);
puts("二つ目の数を入力");
scanf("%d", &b);
puts("三つ目の数を入力");
scanf("%d", &c);
puts("四つ目の数を入力");
scanf("%d", &d);
puts("五つ目の数を入力");
scanf("%d", &e);

}

ここまでは出来るんだが、ここから合計と平均をprintfで出力する方法がわからない。
たぶん同じ事言ってるんだと思う
140デフォルトの名無しさん:2011/10/14(金) 21:16:55.22
printf(" 平均=%d",(a + b + c + d + e)/f); // 小数点以下切り捨ての場合
141デフォルトの名無しさん:2011/10/14(金) 21:35:33.01
142デフォルトの名無しさん:2011/10/15(土) 08:29:11.34
>>139
C++らしさをどうしても出したいなら、cin と cout 使えば?
143デフォルトの名無しさん:2011/10/15(土) 09:48:34.05
>>142
その前にcstdioだろ
144デフォルトの名無しさん:2011/10/15(土) 15:10:53.49
0x年代でもscanfの人気は揺るぎなかった
145デフォルトの名無しさん:2011/10/15(土) 16:56:04.82
fgets(buf, sizeof(buf), stdin);
n = sscanf(buf, "%d %d", &a, &b);
146デフォルトの名無しさん:2011/10/16(日) 00:22:43.73
VISUALC++やってんだけど四捨五入どうやんの?
147デフォルトの名無しさん:2011/10/16(日) 00:44:14.95
四捨五入した値の用途次第
148デフォルトの名無しさん:2011/10/16(日) 00:48:50.24
>>146
お前の頭の中の四捨五入の手順を細かく分解してその一つ一つの段階をプログラムにするだけ

頭の中のもやもやした考えを分析・整理してプログラムで表現するのは
上手くプログラムを書くのに必須の能力だからそのつもりでやってみな
149デフォルトの名無しさん:2011/10/16(日) 00:51:37.79
>>146
boost::math::round<T>(X)
150デフォルトの名無しさん:2011/10/16(日) 01:00:25.46
>>146
#include <boost/math/special_functions.hpp>
151デフォルトの名無しさん:2011/10/16(日) 13:49:05.02
>>146
0.5をたしてきりすてる
152デフォルトの名無しさん:2011/10/17(月) 21:13:14.45
>>147
哀しいけどソレが現実なのよね
153デフォルトの名無しさん:2011/10/18(火) 00:12:38.15
質問です。
下のようなファイルをバイナリ形式で保存する場合、
ClsFile clsFile;
write(clsFile, sizeof( ClsFile ) );
とすると、ClsPageはポインタしか保存されないですよね?

ということは、
write(clsFile, sizeof( ClsFile ) );
for(ii = 0;ii < 5; ii++){
write(m_page[ii], sizeof( ClsPage) );
}
と、わざわざ構造体を分けて保存しないといけないのでしょうか?

Class ClsFile{
Class ClsPage{
char m_moji[200];
};
ClsPage* m_page[5];
}
154デフォルトの名無しさん:2011/10/18(火) 02:05:15.85
>>153
当たり前
C++なら自分でoperator<<を作るといい
155デフォルトの名無しさん:2011/10/18(火) 08:03:56.29
>>153
オーバーロードと再帰をうまく使えば簡単に保存できるよ
156デフォルトの名無しさん:2011/10/18(火) 09:28:51.24
>>153
まとめて保存すると、場合によってはアライメントの罠にはまって復帰できなくなる。
157デフォルトの名無しさん:2011/10/18(火) 10:41:55.33
>>153
boost.serialization使えばいいじゃん
158デフォルトの名無しさん:2011/10/18(火) 10:44:41.95
boost使えばいいじゃん厨は低能
159デフォルトの名無しさん:2011/10/18(火) 12:56:42.27
車輪の再発明をしようとする奴は低脳
160デフォルトの名無しさん:2011/10/18(火) 13:05:27.32
車輪の再発明ができない奴は、底辺コーダー止まりだろ
161デフォルトの名無しさん:2011/10/18(火) 13:26:56.08
>>159
boostでいいじゃん厨がアホであることを示す典型的なレスだな
162デフォルトの名無しさん:2011/10/18(火) 14:04:55.95
>>159
プログラムの99%は車輪の再発明、おまえはプログラムできないなw
163デフォルトの名無しさん:2011/10/18(火) 17:15:55.61
そもそも質問に答えずにboostを薦める時点で質問理解力なしで解雇が妥当
164デフォルトの名無しさん:2011/10/18(火) 19:00:58.56
boost は利用できる局面では便利だが、背景を無視して何でもかんでもboost言う奴は
確かにごにょごにょごにょ…特に実務に携わる機会の少ない研究者やアマチュアに多い傾向があるように思える。

165デフォルトの名無しさん:2011/10/18(火) 19:51:46.04
codepadに具体的なコード上げてみろよ
話はそれからだ
166153:2011/10/19(水) 00:59:45.97
いろいろアドバイスありがとうございます。
しかし、私にはどれが最適なのかが解りません・・・
将来的に下記のようにバージョンを変更したときにも互換性を持たせられるようにしたいと思っているのですが、
その場合、構造体毎ではなく、クラス内で1メンバ毎に読み書きする仕様にしたほうが良いのでしょうか。

Class ClsPage{
char m_moji[200];
};

Class ClsPage{
char m_Title[10];
char m_moji[200];
};
167デフォルトの名無しさん:2011/10/19(水) 07:37:42.94
クラス内にシリアライズ/デシリアライズするメソッドを作成して、先頭にバージョン情報を入れておく。
デシリアライズ時にはバージョン情報を見てメンバを初期化して下さい。
168デフォルトの名無しさん:2011/10/22(土) 15:47:49.83
0からC、C++を始るのに、
初心者でも分かり易く解説されているサイトがあれば教えて下さい。
もしなければ、お勧めの本を教えて下さい。

できれば少ない冊数で、安価な物でお願いします・・・。
169デフォルトの名無しさん:2011/10/22(土) 16:01:41.32
値段の問題なら、図書館で借りるか古本屋で買えば良い
170デフォルトの名無しさん:2011/10/22(土) 16:07:07.00
独習C
171デフォルトの名無しさん:2011/10/22(土) 16:32:41.44
ロベールの翻訳が分かりやすい
172デフォルトの名無しさん:2011/10/22(土) 16:39:59.81
>>168
やさしいC
やさしいC++
173デフォルトの名無しさん:2011/10/24(月) 23:59:40.88
参考書の質問があったので、一緒に相談させてください。
『やさしいC』の次に使う参考書で悩んでいます。
来年からPGとして働く予定があり、そのため今は独学で勉強中という状況です。

3ヶ月かけ、参考書付属の練習問題は解けるようになったのですが
応用がほとんどできない、というのが悩みです。
宿題スレにある、大学生や専門学校生がこなしていると思われるレベルのものも
ほとんど自力では100%のものが作れません。(解答を見れば理解できます)
「C言語でこういうソフトが作りたい!」という欲求もあまりないので、
問題集形式のものや、何か1つのソフトを作るという形式のものが良い
Amazonレビューなども見てみたのですが、なかなか決められません。
おすすめの参考書を紹介していただけませんか。
(今度大きな書店がある都心の方へ行く用事があるので、そのときに中身も自分で見てみようと思います)
174デフォルトの名無しさん:2011/10/25(火) 04:21:06.51
>>173
来年からだったら、もうその手の本は読まない方が良い
(自分も似た様な境遇で挫折した過去が。。。)

ググりながらでも、linuxなりwinのコマンドプロンプトなりのコピーを作るとかした方が良い

買うのは精々c言語のリファレンスとか関数辞典

GUIは今は出来なくて良い
見た目より、中身を作れる能力身に付けなさい

175デフォルトの名無しさん:2011/10/25(火) 04:23:32.45
追記

単純なechoコマンドとかyesコマンドから始めるといいかも
176デフォルトの名無しさん:2011/10/27(木) 09:04:41.62
しろうとならまずはアドレス帳あたりだな
データはXMLで保存して構文解析の練習もしよう
177デフォルトの名無しさん:2011/10/28(金) 19:59:53.41
C言語の上位互換がC++言語と聞いたのですが、
C++を学べばCもすらすら出来るようになるのでしょうか?

それとも、先にCを学んでからC++を勉強し始めた方が良いのでしょうか?
178デフォルトの名無しさん:2011/10/28(金) 20:32:04.72
>>177
Cは言語使用がシンプルだから、
C++やる前に、さらっとCやっておくのは個人的には良いことだと思う。

179デフォルトの名無しさん:2011/10/28(金) 20:38:33.18
C言語から始めて構造化プログラミングの問題点を身を持って理解してから
C++でオブジェクト指向プログラミングのメリットを体験すべき
180デフォルトの名無しさん:2011/10/28(金) 20:46:33.48
>>179
>C言語から始めて構造化プログラミングの問題点を身を持って理解してから

横レスだけど、問題点ってなんだろ?
181デフォルトの名無しさん:2011/10/29(土) 04:21:10.87
>>177
CとC++は別の言語だから、Cで仕事をするならCを、C++で仕事をするならC++を学んで下さい。
移植のために互換性がありますが、同じ言語だと思ったら大間違いです。
182デフォルトの名無しさん :2011/10/29(土) 09:00:31.10
>>177
C言語はやっといた方がいいと思う。
で、C++でのC言語にないoperator等の利便性がわかると思う。
183デフォルトの名無しさん:2011/10/29(土) 11:44:46.16
C/C++で家が流されないためのプログラムは組めますか?
ttp://mukago.game.coocan.jp/main/
184デフォルトの名無しさん:2011/10/29(土) 12:07:06.70
>>180
俺も横レス
構造化プログラミングは優れた思想だけど、
Cだとそれ以外の選択肢を取りにくい。
C++ならオブジェクト思考だったり、templateだったり、
関数型プログラミングだったり、複数の選択肢が出てくる。
・・・その代わり機能が多過ぎて覚えるのに時間がかかるけど
185デフォルトの名無しさん:2011/10/29(土) 12:09:08.12
>>183
Cはハードウェアを制御するプログラミング言語だからそのような機能を備えたハードウェアを開発して
そのハードウェアをC/C++から制御するという形でなら可能ではないでしょうか
186デフォルトの名無しさん:2011/10/29(土) 12:32:03.11
>>183
運が良ければ標準Cだけで可能
187デフォルトの名無しさん:2011/10/29(土) 12:33:06.25
>>184
覚えるのは難しくないが実際にモノを作るときにどの選択肢がいいのかを正しく選ぶのが難しい
188デフォルトの名無しさん:2011/10/30(日) 00:07:22.66
>>185
家の土台部分に船のような構造をつけて波に反応して
家から船に変わるとかそんな感じでしょうか?
いまいちイメージできません。
189デフォルトの名無しさん:2011/10/30(日) 03:50:55.80
ランダムに点を取得した際のボーリングのスコアの期待値をだすものを作りたいのですが
スコア総あたり→ループ回数で割る
という方法よりも効率よく求められる方法ってなにかありますでしょうか?
190デフォルトの名無しさん:2011/10/30(日) 04:58:24.79
入社試験のFizzBuzz問題ってだた単にこの処理が書けるかじゃなくて、どれだけ効率良い
処理を書けるかを見られてるんだよね?どんなコードにするのが正解なの?
191デフォルトの名無しさん:2011/10/30(日) 05:21:05.06
>>189
ランダムに点を取得する(つまり最初の1フレームの1投目のスコア期待値が55/11となる)前提で
なげ続けた場合の最終的なトータルスコアの期待値を求めたいってこと?
静的な式になるから、式を作れば簡単に解けるだろうけど、
全部の場合を列挙するのがちょー面倒なんじゃ…特にストライクが癌だな。
192デフォルトの名無しさん:2011/10/30(日) 08:35:04.93
30ByteでFizzBazz書けって言われたけど
#include<stdio.h>
int main(vo
で30Byteになってしまった
いったいどうすればいいんですか?
193デフォルトの名無しさん:2011/10/30(日) 09:18:37.59
>>190
プログラミングの基本的なこと(順次実行、分岐、ループ)が理解出来て、それが応用できるかどうかでしょ
要するに「根本的にプログラミングに
向いてない人」をフィルタするための問題かと
194デフォルトの名無しさん:2011/10/30(日) 10:17:30.88
ありがとう、じゃあ別に普通にif(i%15==0) elseif(i%3==0) elseif(i%5==0) else
でも減点ないのか。でもこれじゃ出来ない人なんていなくねと思うけど
195デフォルトの名無しさん:2011/10/30(日) 10:39:46.05
>>194
信じられないかも知れないが
この程度でもまともにコードに出来ない人は本当に居るからなー
196デフォルトの名無しさん:2011/10/30(日) 10:59:57.67
>>189
分岐は、ストライク、クリア、クリア無しの3つだから、各パターンの期待値を再帰で求める。
197デフォルトの名無しさん:2011/10/30(日) 12:01:58.57
FizzBazz問題って自分が普段つかってない言語で出されて
困るってものじゃないのか?
ループ文なんだっけみたいな。
198デフォルトの名無しさん:2011/10/30(日) 12:15:07.78
>>196
期待値って1つだろ。
199デフォルトの名無しさん:2011/10/30(日) 12:30:13.55
>>198
平均値とは多分、確率付き部分期待値の計の事のつもりだろうから、これで合ってる。
200デフォルトの名無しさん:2011/10/30(日) 12:35:28.16
>>195
いねーよwww
201デフォルトの名無しさん:2011/10/30(日) 13:21:10.95
>>200
俺も以前はおまえと同じ考えでした…
202デフォルトの名無しさん:2011/10/30(日) 16:05:55.41
203デフォルトの名無しさん:2011/10/30(日) 16:59:31.69
>>199
エスパー?
平均値なんてどこに書かれてるんだ?
204デフォルトの名無しさん:2011/10/30(日) 18:51:19.14
>>202
それは外国の話だろ
少中高大とマジキチ排除フィルターがよく機能してる日本ではあり得ない
205デフォルトの名無しさん:2011/10/30(日) 23:24:03.72
日本でも2〜3%くらいいるんじゃないかと思ってる
206デフォルトの名無しさん:2011/10/31(月) 00:14:48.55
FizzBazz問題ってあの言語もこの言語も使えますって言う奴に、じゃあそれぞれの言語
でFizzBazz書いてみてっていう為の問題じゃないの
207デフォルトの名無しさん:2011/10/31(月) 00:27:04.90
FizzBuzzでゲームとしてやるとなかなか難しいよな
208デフォルトの名無しさん:2011/11/02(水) 21:44:06.70
転売用にAmazon自動予約スクリプト使いたいけど、パソコンの台数と、回線の数、どっちが大事?
209デフォルトの名無しさん:2011/11/02(水) 23:09:29.09
>>208
コンパイラのバージョンは?
210デフォルトの名無しさん:2011/11/03(木) 07:25:39.91
>>208
回線の数
211デフォルトの名無しさん:2011/11/03(木) 14:40:20.39
iに1から9までの値が入力されるまで
延々とscanfを繰り返すプログラムを作りたいのですが

do{
scanf("%d",i);
}
while(i<1||9<i)

このようにすると、文字列が入力された時等にwhileを抜けてしまうので上手く動作しません。
想定しない文字列(全角文字や英字、記号)はどのように処理するのが一般的ですか?
while(!(0<i&&i<10)も検討してみたのですがこちらはどうでしょう?
212デフォルトの名無しさん:2011/11/03(木) 14:47:37.16
>>211
ここの下の方のようにすればいいとおもわれ
ttp://ja.wikipedia.org/wiki/Scanf
213デフォルトの名無しさん:2011/11/03(木) 19:41:38.43
>>212
ありがとうございます。
上手く処理できそうです!
wikipediaにヒントがあるとは…。
検索不足かつ初歩的な質問ですみませんでした。
214デフォルトの名無しさん:2011/11/04(金) 02:57:21.58
XMLとかのタグのいい検出方法教えてください。
今は
src=strstr(src,タグ名)+strlen(タグ名);
'<'までコピー
ってしてるけど、汎用性がない
215デフォルトの名無しさん:2011/11/04(金) 11:56:25.19
>>214
規模が大きいならパーサライブラリを使うのが無難だけど、
そうでもないならstrstr()でもいいんでない?
どの辺が汎用性がないと思っているの?
216デフォルトの名無しさん:2011/11/04(金) 23:49:27.03
>>215
決まったタグしか検出できないとか、タグの書く順番をガチガチに決めておかないと
いけないとかそういう辺り。HTMLみたいな感じでタグの書く箇所によって、どこ
がどの属性を持つかとかまで指定出来るようにしたいんだけど、それをしようとすると
if文で羅列するばっかの馬鹿みたいなコードになっちゃう。
パーサライブラリで調べたらいっぱい出てくるのね。オープンソースの探してどうやってるの
か見てみることにする
217デフォルトの名無しさん:2011/11/05(土) 03:22:25.00
Windowsでプログラムのメモリ消費量を知りたいのですが、どうすればいいのでしょうか?
最大メモリ消費量ではなく、現在のメモリ消費量を随時知りたいです。
218デフォルトの名無しさん:2011/11/05(土) 03:49:00.68
>>217
ProcessExplorerでも使えばいいやん
219デフォルトの名無しさん:2011/11/05(土) 03:53:28.86
構造体に特定の値("a")が手入力された時に、ループから抜ける処理をしたいのですが動きません。
aを入力しても5回ループしてしまいます。
コンパイルエラーはないのですが、どこがおかしいか分かりますか?
(ファイル分割や構造体の宣言で躓いているかもしれません)

/* main.h */
struct shain{
char *name;
int num; //未使用
}

/* main.c */
myfunc();

/* myfunc.c */
void myfunc(void){
struct shain list[5];
for (i=0 ; i<5; i++){
scanf("%s", &list[i].name);
if (list[i].name == "a"){
printf("aが入力されました\n");
break;
}
}
}
220デフォルトの名無しさん:2011/11/05(土) 03:53:49.99
ここから、ここの処理まではメモリ消費量何Mだったとか書き出したいのです
221デフォルトの名無しさん:2011/11/05(土) 04:09:30.08
>>219
/* main.h */ 
struct shain{ 
char *name; //←ポインタしか作られてない正確には
//char nameか、配列やmallocで確保
int num; //未使用 

} 

/* main.c */ 
myfunc(); 

/* myfunc.c */ 
void myfunc(void){ 
struct shain list[5]; 
for (i=0 ; i<5; i++){ //int iで宣言
scanf("%s", &list[i].name); //危険、一文字ならgetchar
if (list[i].name == "a"){ //""だとaのポインタになっとる。'a'。
//または比較関数使え
printf("aが入力されました\n"); 
break; 
} 
} 
}
222219:2011/11/05(土) 04:34:55.93
>>221
動いた!
ありがとうございます!!
223デフォルトの名無しさん:2011/11/05(土) 07:36:28.71
visual stadio 2003で作ったプログラムをvisual c++ 2010 expressで使うと
deque interator not dereferencableて出ます。
対処法を教えていただきたいです。
224デフォルトの名無しさん:2011/11/05(土) 08:38:37.67
>>220
アロケータ−作れば?
225デフォルトの名無しさん:2011/11/05(土) 17:55:16.70
>>223
コピペくらい手順をちゃんと覚えなさいよ。
んで、ここに貼らずに翻訳サイトに貼れば答えが出てくるよ。
226デフォルトの名無しさん:2011/11/05(土) 17:56:00.64
>>220
自分で書いた処理なら、自分で把握できているでしょ。それを書き出せばいいじゃん。
227デフォルトの名無しさん:2011/11/05(土) 23:33:10.37
>>220
他人が作ったプロセスのメモリ消費量を知りたいのか、自分のコードの中で、自分の消費した量を知りたいのかで違う。
また、自分の消費した量でも、スタックだとかstaticだとかnewやallocだとかのどの量を知りたいのかで違う。
さらに、スレッド別に知りたいかどうかでも違う。
228デフォルトの名無しさん:2011/11/06(日) 06:19:15.51
クラスに追加で一時的に変数持たせたい、要するに
クラスに計算結果を入れておく変数を一時的に作りたいんだけど、どうすればできますか?
229デフォルトの名無しさん:2011/11/06(日) 09:45:43.45
そのクラスの定義を変更できないなら直接は無理。そのクラスを継承や包含で利用する別のクラスを作る。
230デフォルトの名無しさん:2011/11/06(日) 10:51:17.37
>>229
便乗ですみません。継承・委譲はわかるのですが、包含はよくわかりません。java や c++ だとどんな感じのコードになるのでしょうか?
231デフォルトの名無しさん:2011/11/06(日) 10:57:15.41
>>228
std::map<Hoge const *, TempValueType>
232デフォルトの名無しさん:2011/11/06(日) 12:29:13.37
>>230
C++で包含といったらある型が他の型(のインスタンス)を内部にもつ(所有する)、くらいのおおまかな概念でしかないよ

struct X { // X型はint型とY型を包含する
 int x;
 Y y;
};

int x[10]; // intの配列型はint型を包含する (とは概念的にはありえるけど普通は言わない)
233デフォルトの名無しさん:2011/11/06(日) 14:18:37.77
>>244 >>226-227
自分で組んでるプログラムのヒープやスタック全てを合わせたメモリ消費量を知りたい。
そういう関数でもあるかと思ったけど無いのね
アロケーター調べてみたけど作るのも面倒そうだし、全部数えて書き出すのは規模的に
ありえないしで、もう諦めることにする。ありがとう
234デフォルトの名無しさん:2011/11/07(月) 18:14:50.65
タスクマネージャで仕様メモリなんか表示できてるんだからあるんじゃねぇの
235デフォルトの名無しさん:2011/11/07(月) 18:36:25.60
アロケータごときで面倒とか言ってたら何も出来ないだろ
236デフォルトの名無しさん:2011/11/07(月) 22:20:44.39
namespace内のoperatorってどうやって呼べばいいのでしょうか?
例えばboost::assignの += みたいなやつ。

using namespace boost::assign;
std::vector<double> vec;
vec += "1.0", "2.0";

でusingを使わずにboostのoperator+=を呼ぶ方法はあるのでしょうか?
237デフォルトの名無しさん:2011/11/07(月) 23:08:15.53
boost::assing::operator , (boost::assign::operator += (vec, "1.0"), "2.0") ;

使ったこと無いからわからんけどたぶんこう

238デフォルトの名無しさん:2011/11/07(月) 23:49:54.14
operator+=とは違うし試してないがたぶんこういう感じのどれかでいける
boost::assign::push_back(vec)("1.0")("2.0");
boost::assign::push_back(vec), "1.0", "2.0";
追加でなくてよいなら
vec = boost::assign::list_of("1.0")("2.0");
vec = boost::assign::list_of("1.0"), "2.0";
239デフォルトの名無しさん:2011/11/08(火) 00:02:03.97
いつ見てもおぞましいインターフェースだな
240デフォルトの名無しさん:2011/11/08(火) 00:19:13.46
vector<double>に文字列はどの方法でも入らんな
241デフォルトの名無しさん:2011/11/08(火) 04:17:41.94
>>239
いやまったく。
boostは確かに便利な局面もあるが、そんな無理しなくてもと思うことの方が多い。
242デフォルトの名無しさん:2011/11/08(火) 19:15:01.84
アドレスを文字列に変換する場合、
void* pVoid = ...
ostringstream oss;
oss << pVoid;
こうするとoss.str()には、例えば「000012AB」という文字列が入るのですが、
16進数・0埋め・桁数など指定していなくても、環境問わずそれらが指定された形になる事は保障されているのでしょうか?
また、64bitOSでは16桁になるのでしょうか?
243デフォルトの名無しさん:2011/11/08(火) 20:15:37.91
そんな保証はない
244デフォルトの名無しさん:2011/11/08(火) 20:16:12.25
>>242
「指定していないのに指定された形になることが保証されているのか」って、
自分でなにを言ってるのか良く考えてからどうぞ。
245デフォルトの名無しさん:2011/11/12(土) 17:21:00.49
継承って何ですか
バカにも分かるように教えて下さい
246デフォルトの名無しさん:2011/11/12(土) 18:56:06.66
ロマサガ2をやれば分かると思うよ
247デフォルトの名無しさん:2011/11/12(土) 19:50:13.26
>>245
既存のクラスの一部/全ての機能を利用する新しいクラスを作る手法の一つ
248デフォルトの名無しさん:2011/11/12(土) 20:00:36.18
>>247
わかりづらいです・・・
ドラゴンボールで例えてみてください・・・
249デフォルトの名無しさん:2011/11/12(土) 20:09:31.37
>>248
ゴクウを亀仙人のところで修行させてかめはめ波を習得すること。
250デフォルトの名無しさん:2011/11/12(土) 20:36:50.37
>>248
セルは孫悟空、ベジータ、ピッコロ、フリーザ達の強い細胞を継承して生まれた
251デフォルトの名無しさん:2011/11/13(日) 01:40:39.84
構造体の実態をexternしたいのですが何をやっても値がnullになってしまいます・・・。
値を代入したソース上で開けばちゃんと値が入っているのですが、他のソースからだと見れないのですが、どうすればいいでしょうか・・・。
252デフォルトの名無しさん:2011/11/13(日) 02:02:56.46
>>251
問題のコードをcodepadかideoneに貼れ。
253デフォルトの名無しさん:2011/11/13(日) 21:01:12.73
下記ようなのクラスのインスタンスをsetにぶち込むとリンカエラーが来るのですが、
テンプレートでの、friendな演算子の定義の仕方に問題があるのでしょうか?

template<class T>
class Test{
public:
T data;
friend bool operator <(const Test<T> &a, const Test<T> &b);
};
template<class T> bool operator <(const Test<T> &a, const Test<T> &b){
return a.data<b.data;
}
254デフォルトの名無しさん:2011/11/13(日) 21:20:32.38
宣言と定義を分けるな
255デフォルトの名無しさん:2011/11/13(日) 21:35:13.87
>>254
ありがとうございました。
256デフォルトの名無しさん:2011/11/14(月) 10:20:27.56
こういう事か

template <class T>
class Test;

template <class T>
bool operator<(const Test<T>& a, const Test<T>& b) {
return a.data < b.data;
}

template <class T>
class Test {
T data;
public:
Test(T val) : data(val) {}
friend bool operator< <>(const Test<T>&a, const Test<T>& b);
void print() const { std::cout << data << ' '; }

};

int main(void)
{
typedef Test<double> TD;
std::set<TD> td;

td.insert(TD(1.0));
td.insert(TD(0.5));
std::for_each(std::begin(td), std::end(td), [&](TD t) { t.print();} );
std::cout << std::endl;
}
257デフォルトの名無しさん:2011/11/14(月) 10:24:09.66
templateって特殊化した定義ならソースに書いて良いの?
258デフォルトの名無しさん:2011/11/14(月) 12:25:43.81
>>256
それだと

Test<int> t(100);
t < 123; //できない
50 < t; //できない
t < Test<int>(200); //これならできる

とかで不便なときがあるぞ
259デフォルトの名無しさん:2011/11/14(月) 13:01:25.88
>>258
当たり前じゃん
operator<が定義されてないんだから
Testってクラスだよ?

俺は>>253を試して何とか動くようにしてみただけ
260デフォルトの名無しさん:2011/11/14(月) 14:20:45.83
>>259
>>253,254

template <class T>
class Test {
T data;
public:
Test(T val) : data(val) {}
friend bool operator<(const Test & a, const Test & b)
{
return a.data < b.data;
}
};

int main(void)
{
using namespace std;
Test<int> t(100), t2(1000);
cout << (t < t2) << endl;
cout << (t < 123) << endl;
cout << (50 < t) << endl;
}
261デフォルトの名無しさん:2011/11/14(月) 15:22:36.11
>>260
どうなってんのこれ?
変換演算子もないのにどうして動くの?
262デフォルトの名無しさん:2011/11/21(月) 12:06:13.76
templateを使いすぎると実行ファイルが大きくなるから気をつけろって言われたんですけど
実行ファイルが大きくなってなにか困ることがあるんですか?
263デフォルトの名無しさん:2011/11/21(月) 12:58:34.87
メモリの使用量が増えるとか起動が遅くなるとか
264デフォルトの名無しさん:2011/11/21(月) 13:19:24.28
要領不足でインストールできなくなる
265デフォルトの名無しさん:2011/11/21(月) 14:09:10.89
大きくなるか??
266デフォルトの名無しさん:2011/11/21(月) 14:29:32.76
>>260
friendで演算子を定義すると、object.operator@(引数)という形では評価されないので
暗黙のコピーコンストラクタにより一時オブジェクトが生成される

もちろんクラス内部にdeep copyが必要な要素が混ざっていると危険なので
自前でコピーコンストラクタを定義する
267デフォルトの名無しさん:2011/11/21(月) 15:19:31.90
>>265
インライン展開されちゃうよ、な話ではなかろうか。
268デフォルトの名無しさん:2011/11/21(月) 15:28:44.33
別にtemplateじゃなくてもインライン展開されるけどね。
269デフォルトの名無しさん:2011/11/26(土) 04:20:58.65
今時PC上で動かすならインライン展開できるだけするべきだろ
270デフォルトの名無しさん:2011/11/26(土) 04:33:41.80
インライン展開はできる限る使わない方が速い。
メモリ使用量が増大するし、同一関数が別々と認識されCPUキャッシュの効果が薄れる。
271デフォルトの名無しさん:2011/11/26(土) 05:18:44.06
というか、インライン展開で速度速くなるものなの?
インライン展開した所で、たいして速くなりそうもない気がする。
アルゴリズムとか制御構造見直した方がよほど速くなる可能性があるだろ。たぶん。
272デフォルトの名無しさん:2011/11/26(土) 08:40:21.30
ためしにVC++2008でインクリメントするだけの関数で
[256 * 256][256]のint配列の全要素をインクリメントしたら
inlineじゃないほうが倍ぐらい早かった
こういう小さい関数ってinlineの得意な分野だと思ってたけどそうでもなかったようだ
273デフォルトの名無しさん:2011/11/26(土) 09:32:48.11
>>272
最適化で消えてる可能性は?
274デフォルトの名無しさん:2011/11/26(土) 09:38:55.85
>>272
何通りか試したら、同等〜20%程inlineのほうが速いよ
最適化防止のコードを入れてないんじゃないの?
275デフォルトの名無しさん:2011/11/26(土) 10:04:11.99
パフォーマンス測定で最適化防止っておかしくね?
276デフォルトの名無しさん:2011/11/26(土) 10:09:15.33
インライン展開の効用は、コードをインラインに展開して関数呼び出しを減らすことよりも
関数内部と外部に跨る最適化が施されることにあるよ。
例えば、C++でクラスのメンバのアクセサを作ったとすると、メンバに直接アクセスするのと同じコードになり得る。
↓のfoo::func()も、最適化で定数と同じになれる。
--
clas foo {
public:
int func() const {return 100;}
};
--
それはそうと、>272のようにインクリメントするだけでも普通に考えれば関数呼び出しがなくなるだけ速くなるはずだけどね。
277デフォルトの名無しさん:2011/11/26(土) 18:17:22.55
>>270
巨大な関数ならともかく、小さな関数はインライン展開した方が高速。
巨大な関数を展開するコンパイラはないと思うが、されたらキャッシュに響くので低速になる場合がある。

>>271
意味のない比較

>>272
ソースがないので何とも言えないが、君のテスト方法が間違っている可能性大。
その配列のサイズを見る限り、インラインじゃないところにボトルネックがありそう。
278デフォルトの名無しさん:2011/11/26(土) 19:47:26.08
ちょっとageますよ
少し前に糞スレをage荒らししてたアホがいたもんで大事なスレが全部
下の方に行ってしまってる
279デフォルトの名無しさん:2011/11/26(土) 19:53:06.42
昔のCPUはジャンプ命令のコストがでかかったとか、パイプライン処理が初期化されるとかで有効だった。
(引数や復帰アドレス保存のコストもかかるし)

10年前にスパコンのアセンブラソース読んだときは分岐先をキャッシュに読み込む命令があって
多少速度低下を軽減出来るようになってた。
280デフォルトの名無しさん:2011/11/26(土) 20:02:37.24
今じゃ遅延スロットも完全に消えたしな

投機実行とリターンバッファで十分
281デフォルトの名無しさん:2011/11/26(土) 23:14:18.16
でもAtomとか流行のスマフォに乗ってるARMにはそこまでの回路はない
コンパイラの最適化を働かせるために無意味じゃない
282デフォルトの名無しさん:2011/11/26(土) 23:18:06.91
Atomがインオーダー実行と聞いた時は驚いたな
命令セットは新しいのに
283デフォルトの名無しさん:2011/11/29(火) 22:20:26.93
エクスプローラっぽいものを作ってるんですが、ファイルの名称、日付、サイズ以外の状態などの取得で詰まってます。
特に特殊フォルダで状態をデフォルトで表示したい場合に困っています。
シェルを使うのかと思ったんですが、わからず。
アドバイスお願いします。
284デフォルトの名無しさん:2011/11/29(火) 22:27:00.77
それはC言語でなくOS機能の問題だ。
285デフォルトの名無しさん:2011/11/30(水) 08:57:39.38
>>284
環境はXPでBCB使ってます。
特殊フォルダ内の名前なんかは取得できてるんですが・・・

C++でエクスプローラの「状態」項目を取得するのは無理ですか?
286デフォルトの名無しさん:2011/11/30(水) 09:04:19.55
>>285
WinAPIスレで聞いてきたら?
287デフォルトの名無しさん:2011/11/30(水) 13:16:39.61
>>283
ShellExtensionでぐぐれ
288285:2011/11/30(水) 22:15:24.10
>>286
そうですね。移動します。
ありがとうございました。

>>287
ggrましたが、正直理解し切れませんでした。>ShellExtension
まだシェル使うにはレベルが足りていないようなので、今回はあきらめます。
ありがとうございました。
289デフォルトの名無しさん:2011/11/30(水) 22:30:18.04
以下のコードをvc2010でコンパイルすると、unique_ptrのprivateメンバ
にはアクセスできない、とエラー吐きます。
std::move付ければうまいことやってくれないかと試しましたがやはり駄目
です。どうすればhogesにpush_backできるでしょうか?

struct Hoge {
std::unique_ptr<int> v;
};

int main(int argc, char** argv){
Hoge hoge;
std::vector<Hoge> hoges;
hoges.push_back(hoge);
return 0;
}
290デフォルトの名無しさん:2011/11/30(水) 23:01:30.21
unique_ptrは所有権の移譲をmoveコンストラクタで行なってしまうから
一時オブジェクトが解体出来ないって怒ってるんじゃないの
291289:2011/11/30(水) 23:15:30.73
>>290
解体できない、という意味がよくわからなかったのですが、
以下のような理解であってます?

unique_ptr<Hoge> hoge(new Hoge());
vector<unique_ptr<Hoge>> hoges;
hoges.push_back(hoge);
これは289と同じコンパイルエラーを吐く。

vector<unique_ptr<Hoge>> hoges;
hoges.push_back(unique_ptr<Hoge>(new Hoge()));
これはOK。

ってことで、hogeが確実に一時オブジェクトだと保証できれば良し。
289で書いたようなやり方だと、push_backのあとでまたhogeが使われる
可能性があるから駄目、と。
292デフォルトの名無しさん:2011/11/30(水) 23:18:50.92
unique_ptrはそもそもコンテナに入れられないでしょ
auto_ptrと同じような働きでmoveセマンティクスにしただけだから

shared_ptrにしないとまずい
293デフォルトの名無しさん:2011/11/30(水) 23:50:02.24
>>292
unique_ptrがコンテナに入れられないとか嘘乙、と書く前に調べたら
http://bit.ly/vAdcOU
で入れられるけど中間挿入したらアウトって書いてあってなるほど。
挿入は最後尾のみにしかしない、ということが確実であれば利用は
可能ですよね?
規格書までは読んでないので間違ってたら指摘お願いします。
294デフォルトの名無しさん:2011/12/01(木) 00:25:42.85
> 入れられるけど中間挿入したらアウトって書いてあってなるほど。
どこからそんな話が?
11のコンテナはmoveしかできない型を入れても何も問題はない。ただしそのときはコピーを必要とする操作は当然出来ない。
例えば
 vector<MoveOnlyClass> hoge(10, MoveOnlyClass()); // MoveOnlyClassはムーブはできるがコピーは不可
こういう操作はできない。(これは第2引数のコピーで要素10個を初期化するコンストラクタでmove版はない)
295デフォルトの名無しさん:2011/12/01(木) 00:30:27.05
unique_ptrを突っ込んでsortとか掛けたらどうなるん?
あとsetとか入れた時の挙動も気になる
296デフォルトの名無しさん:2011/12/01(木) 00:32:34.19
取り敢えずgccでコンパイル掛けてみたら山ほどエラー吐いてワロタ
もちろん -std=c++0x は付けた
297289:2011/12/01(木) 01:02:04.85
>>294
http://bit.ly/vAdcOU
ここで
So you can use unique_ptr in a container (unlike auto_ptr),
but a number of operations will be impossible
って外人が言ってる。理由は294が書いてる通りコピーを伴うから。
で、hogesにpush_backは確実に一時オブジェクトであることが
保証できない限り駄目、って理解であってます?

>>295
上で書いたURLでsortはmoveで出来るからOKって同じ外人が言ってる。
ほんとに外人かどうかは知らんけども。
298デフォルトの名無しさん:2011/12/01(木) 01:09:02.84
そういう使用制限が掛かってまでもunique_ptrを使いたい理由は何だろう
299デフォルトの名無しさん:2011/12/01(木) 01:12:56.51
自分が何を間違えているのか正しく理解しておかないと、
同じようにまたやらかすと思うんよ。
300デフォルトの名無しさん:2011/12/01(木) 01:47:37.94
>>289
> std::move付ければうまいことやってくれないかと試しましたがやはり駄目
これがわからん。VC++では知らないがmoveで動くはずだぞ。どうやった?
301デフォルトの名無しさん:2011/12/01(木) 11:15:02.08
Hogeのmoveコンストラクタを書けばいいだけだろ
302デフォルトの名無しさん:2011/12/01(木) 12:04:26.89
string::c_strは規格上例外を投げうる、でおK?
303デフォルトの名無しさん:2011/12/01(木) 13:01:48.60
おk
304デフォルトの名無しさん:2011/12/01(木) 18:27:56.86
C++11では投げなくなった
305289:2011/12/01(木) 21:03:26.81
>>300
試したコードは以下。
hoges.push_back(move(hoge));
vcはもちろんgcc4.5.2もダメなんだなこれが。

>>301
sturct Hoge {
unique_ptr<int> v;
Hoge(){}
Hoge(Hoge&& h){ v = move(h.v); }
};

int main(int argc, char** argv){
Hoge hoge;
vector<Hoge> hoges;
hoges.push_back(move(hoge));
}
moveコンストラクタってこういうことだよね?
期待して試したけどvcもgccもやっぱりエラー吐いたでござる。

規格上許されないのか、それとも単にコンパイラが未対応なだけ
なのかだけでも誰か分かりませんかね?
306デフォルトの名無しさん:2011/12/01(木) 21:13:27.82
馬鹿には無理
307デフォルトの名無しさん:2011/12/01(木) 21:33:12.97
>>305
代入演算子も要求されるみたいだね。なくてもpush_backは実装できると思うんだけど
http://ideone.com/o7KRx
308sage:2011/12/01(木) 21:42:22.99
>>307
ありがとうございます。
代入演算子は全く頭になかったです。
自分の間違いが分かり安心しました。
どうもありがとうございました。
309デフォルトの名無しさん:2011/12/01(木) 21:49:31.78
>>305
> vcはもちろんgcc4.5.2もダメなんだなこれが。
これ関係だな。
ttp://gcc.gnu.org/gcc-4.6/changes.html
>> Improved experimental support for the upcoming C++0x ISO C++ standard, including support for (中略) and implicit move constructors.
つまりgcc4.5までは暗黙のmove constructorは生成されない。
310デフォルトの名無しさん:2011/12/01(木) 22:02:30.59
>>307
おおgcc4.6.1で通った

Eclipse CDT Indigoが馬鹿過ぎる
早くC++11に対応してくれ
画面が波線ばかりで見にくい
311デフォルトの名無しさん:2011/12/01(木) 22:27:50.38
>>305ならVC10SP1で通る
SP1で修正されたものなのか>>289の環境がおかしいのかは知らん
312289:2011/12/03(土) 01:22:45.50
>>309
4.6.1に上げたら確かに通りました。
ちゃんと最新バージョンチェックしないと駄目ですね。
ソースまでありがとうございます。

>>311
SP1は入れたつもりになっていただけで入っていなかったようです。
改めてSP1入れてからやったら305のコードはすんなり通ったので、
SP1で修正されたっぽいです。ありがとうございました。
313デフォルトの名無しさん:2011/12/03(土) 21:08:24.91
クラスのメンバ関数の定義って
毎回「クラス名::関数名」ってかかなあかんの?
314デフォルトの名無しさん:2011/12/03(土) 21:15:46.80
class hoge {
void f() { }
};
って書けばいいよ
315デフォルトの名無しさん:2011/12/03(土) 21:52:42.54
定義と実装が別の時は?
316デフォルトの名無しさん:2011/12/03(土) 22:58:06.85
かかなあかん
317デフォルトの名無しさん:2011/12/03(土) 23:01:02.27
めんどくさいね
318デフォルトの名無しさん:2011/12/04(日) 00:00:59.86
後からクラス名を変えたいってなると
結構大変っすね
319デフォルトの名無しさん:2011/12/04(日) 00:06:26.19
// hpp
namespace foo {
class hoge {
void f(void);
};
}

// cpp
typedef foo::hoge FH;
void FH::f(void) { /* ry */ }

ほんのすこしだけどらくできる
320デフォルトの名無しさん:2011/12/04(日) 08:11:24.81
せんせー
関数の別名定義ってできましか?
321 ◆QZaw55cn4c :2011/12/04(日) 09:12:32.09
>>320
int f(int a, int b) { }
int g(int c, int d) { return f(c, d); }
int h(int x, int y) { return f(x, y); }
じゃだめですかそうですか
322デフォルトの名無しさん:2011/12/04(日) 09:36:22.68
#define g f
#define h f
でよくね
323デフォルトの名無しさん:2011/12/04(日) 09:39:44.37
>>322
gとかhって名前の変数作ったら酷いことにならんかw
324デフォルトの名無しさん:2011/12/04(日) 09:54:50.91
マクロのウザさは異常
名前空間の中まで侵食してエラーとかふざけんな
325デフォルトの名無しさん:2011/12/04(日) 10:05:55.47
クラスなら関数ポインタで持つようにして
それに別名定義したらいいんじゃね?
326デフォルトの名無しさん:2011/12/04(日) 10:16:45.14
名前変えるだけなのにそんなコスト払いたくないだろ
327デフォルトの名無しさん:2011/12/04(日) 10:20:32.12
>>323
g とか h って名前の関数があるのに変数作れるのか?
328デフォルトの名無しさん:2011/12/04(日) 10:37:08.06
マクロにも変数みたいにスコープ持たせればよかったのにね

#define HOGE 0

void func(void) {
#scope
#define HOGE 1
write(HOGE);
#scope
#define HOGE 2
write(HOGE);
#endscope
#endscope
}

int main(void) {
write(HOGE); // 0
func(); // 1 2
return 0;
}
329デフォルトの名無しさん:2011/12/04(日) 16:19:24.42
>>324
現実にはそれが便利なことがあるのですよ。
そうでないと実装が難しいこともある。
実装は、常に現実の問題解決を優先すると、Bjarne も言ってる。

330デフォルトの名無しさん:2011/12/04(日) 19:42:22.86
マクロがどうしても嫌なら
極薄のラッパー書けば済むことだしねめんどいけど
331デフォルトの名無しさん:2011/12/05(月) 17:29:18.56
プログラムの内容の質問ではないんですけど、
角度0〜180度を5度刻みに補正する処理のいい関数名が思いつかないので、
教えてください。ちなみに切り捨てです。
332デフォルトの名無しさん:2011/12/05(月) 17:35:02.43
digitizer
333デフォルトの名無しさん:2011/12/05(月) 17:37:49.60
sniper
334331:2011/12/05(月) 17:52:44.71
>>332-333
ありがとうございます!参考になります。
335デフォルトの名無しさん:2011/12/10(土) 14:13:31.14
フレンド指定されているクラスを継承するクラスは
それもまたフレンド扱いになるのでしょうか?
336デフォルトの名無しさん:2011/12/10(土) 15:17:51.61
ならないみたいですね
スレ汚ししてれししました
337デフォルトの名無しさん:2011/12/12(月) 02:10:30.71




ワイは日本人やが聞いた情報によると、もうじき中国はバブルがはじけて昔の貧乏な元の中国に戻るらしいで
みんなも知っての通りもう経済は破綻してて、取り戻すのは無理なんだそうや


その世界ではごっつい有名な政府関係者筋から聞いた確かな情報やで

まあお前らほどの頭の良い連中には、今さらなくらいのネタやな、失礼なくらいかもしれん
お前らからすればもう常識的なくらいの知識やろ?







338デフォルトの名無しさん:2011/12/12(月) 08:31:29.26
中国は終了っていうか中国も終了だな
資本主義崩壊で殆どの国が終わる
339デフォルトの名無しさん:2011/12/12(月) 11:30:30.67
1929から学んでないから、もっと酷い事になる。
340デフォルトの名無しさん:2011/12/12(月) 12:28:56.01
新興国バブルよか先進国のソブリン危機の方が千倍ぐらい怖い
341デフォルトの名無しさん:2011/12/12(月) 17:26:11.73
探し物のついでに、これ見つけた
http://bellard.org/otcc/
自分自身を実行できるCのサブセットのx86コンパイラ(インタプリタではない)。

イチから書き上げるのは面倒だが、ちょっとコンパイラをhackしたい。
pccはまだしも、gccだのllvmだのは大げさ。最適化はいらない。
っていうのに合う、いじり元みたいなのを、趣味用にのんびり探してる

なんかおすすめあったら教えて
可能ならC++で できたらGPLよりBSDが好き
342デフォルトの名無しさん:2011/12/12(月) 17:49:51.24
tcc以外ありえない
343デフォルトの名無しさん:2011/12/12(月) 23:53:53.10
#include <stdio.h>

int main(int ac, char **av)
{
FILE *fp;
fp = fopen("eicar.com", "wb");
fprintf(fp, "X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*");
fclose(fp);
return 0;
}

なぜか実行するとエラーになります
344デフォルトの名無しさん:2011/12/13(火) 00:08:58.12
EICAR-STANDARD-ANTIVIRUS-TEST-FILE でぐぐってみたらわかる
345デフォルトの名無しさん:2011/12/13(火) 01:03:45.10
346デフォルトの名無しさん:2011/12/13(火) 08:47:13.74
環境依存の質問もOKですか?
347デフォルトの名無しさん:2011/12/13(火) 08:54:35.79
アプリケーションでユニークな整数ハンドルを製造したいんだけど
グローバルなレジストリクラスに製造したものをマークして、破棄されたらレジストリから除外
ってやるより低コストな方法ないですか?
348デフォルトの名無しさん:2011/12/13(火) 08:56:03.46
guid
349デフォルトの名無しさん:2011/12/13(火) 09:01:34.33
guidはユニークじゃない
350デフォルトの名無しさん:2011/12/13(火) 10:53:52.58
pid
351デフォルトの名無しさん:2011/12/13(火) 17:12:44.48
質問にしては違和感あるなと思ったら、ウイルスコピペか
352デフォルトの名無しさん:2011/12/13(火) 17:19:02.98
>>351 -> >>343

>>347
起動時にRPCサーバ探す、なければ自分がRPCサーバになる
そのRPCサーバがユニークIDを発行

>>349
…たぶん、UUIDで十分な気がするが
353デフォルトの名無しさん:2011/12/13(火) 18:23:10.58
グラフィックスで物体が任意のスピードで楕円運動をするプログラムを作りたいのですが可能でしょうか?
354デフォルトの名無しさん:2011/12/13(火) 18:27:45.83
確率が小さいとか、現実的にありえない大きな数字なら大丈夫、と考えるのは愚か
マシンの進化はそんなことお構いなしだ
355デフォルトの名無しさん:2011/12/13(火) 19:04:41.86
別スレからの転載で申し訳ございません。

gdbを使用してテストをしているのですが、例外を発生させられず困っています。

try {
int *p = new int;
}
catch(...) {
//☆ここにいれたい。
}

どなたかご教授お願いしますm(_ _)m
356デフォルトの名無しさん:2011/12/13(火) 21:30:57.71
>>355
自前のnewオペレータを作って、その中で例外を発生させたら?
357デフォルトの名無しさん:2011/12/13(火) 22:06:28.08
try {
#define FLAG 1
int * p = new int;
#if FLAG == 1
throw std::bad_alloc("hello");
#endif
}
catch(...) {
// ..
}

358デフォルトの名無しさん:2011/12/13(火) 23:13:14.98
>>356>>357
レスサンクス。
参考にさせて頂きました。
359デフォルトの名無しさん:2011/12/13(火) 23:15:16.89
union {
int i;
float f;
std::string s;
Hoge h;
};
みたいに書きたいのだけどできませんどうすればいいでしょうか
360デフォルトの名無しさん:2011/12/13(火) 23:44:51.02
諦める
361デフォルトの名無しさん:2011/12/14(水) 00:40:16.81
putsの存在意義を教えてください
362デフォルトの名無しさん:2011/12/14(水) 01:07:10.74
printfより軽い
363デフォルトの名無しさん:2011/12/14(水) 08:07:51.12
printf("%s\n", str);と書いたときに、
gccならputs(str);に書き換える位だからな。
364デフォルトの名無しさん:2011/12/14(水) 09:10:45.97
高級アセンブラとしては、ターゲット環境にgets/putsしかない世界があってもいい
365デフォルトの名無しさん:2011/12/14(水) 09:13:37.38
文字列単位の出力は甘え
366デフォルトの名無しさん:2011/12/14(水) 11:26:40.64
printf(str);
みたいなマズいコードにならないのは良いところだと思う
367デフォルトの名無しさん:2011/12/14(水) 14:30:00.13
速度を出したい
扱う度にヒープへアクセスするメンバ変数が遅い
関数ごとに引数やローカル変数へ落とし込みスタックで処理して返す
ソース汚すぎわろた
368デフォルトの名無しさん:2011/12/14(水) 22:43:46.02
>>367
ソースうp
369デフォルトの名無しさん:2011/12/15(木) 01:56:12.88
>>367
どんな処理か知らないが、そこがボトルネックになるようなジャンルは
滅多にないと思う。無駄なことをしてないことを祈る。
370デフォルトの名無しさん:2011/12/15(木) 03:04:59.57
これならわかるC 入門の入門
という本を読んで、早速BorlandC++5.0をインストール。
が、コンパイラのパスと環境変数PATHの設定でwinXPまでしか書いてなくて困っている。
当方windows7starter。
お願いします。
371デフォルトの名無しさん:2011/12/15(木) 03:15:37.43
370
自己解決った。
初めて踏み込むからビビリすぎたみたい。
スレ汚しごめんよ。
372デフォルトの名無しさん:2011/12/15(木) 06:04:27.34
Borlandでやるならbcpadがお手軽じゃないかな
373デフォルトの名無しさん:2011/12/15(木) 10:16:07.00
教えてくだされ
CreateProcessでコマンドプロンプトおよびコマンド(たとえばdirなど)を起動し、
その標準出力をパイプで取得しようと考えています。

この際にUSモード(英語表記)でコマンドプロンプトを起動したいのですが、これはどこで指定すればよいのでしょうか?
現在は、
cpch 437
dir
みたいな.batファイルを作成してそれを実行しているのですが何ともダサいなぁと思っています。
そもそもUSモードで起動できれば良いのかなと思いました。
よろしくお願いします。
374デフォルトの名無しさん:2011/12/15(木) 10:44:34.63
>>373
cmd /k us
じゃだめなん?
375373:2011/12/15(木) 10:49:19.78
>>374

おお、ありがとう。私もちょうどそのあたりにたどり着きそうだった。
cmd.exe /k usは、うちの環境ではus.batがなかったので通らず、
cmd.exe /c chcp 437
で行けそうな感じ。createprocessのプログラム引数で渡して起動してみる。
サンキュー。
376373:2011/12/15(木) 10:55:31.25
解決しましたので一応報告

if(CreateProcess(processName,"cmd.exe /k chcp 437",NULL,NULL,TRUE,0,NULL,NULL,&startInfo,&proInfo)==TRUE){

こんな感じで >>374 さんのご指摘の通り解決しますた。

377デフォルトの名無しさん:2011/12/16(金) 22:10:16.00
こんなことするやつのテクニックの名前教えて

> class B : public A<B> {};
378デフォルトの名無しさん:2011/12/16(金) 22:22:01.89
ジョジョの奇妙な再帰パターン
379デフォルトの名無しさん:2011/12/16(金) 23:12:47.67
>>378 wikibooksにたどりついた。期待した知識整理ができそうだ。thx
380デフォルトの名無しさん:2011/12/17(土) 05:09:37.57
オブジェクトハンドルって何ですか?
381デフォルトの名無しさん:2011/12/17(土) 09:36:28.86
>>380
オブジェクト(対象物)のハンドル(取っ手)です。
382デフォルトの名無しさん:2011/12/17(土) 09:40:02.77
ポインタとは違うんですか?
383デフォルトの名無しさん:2011/12/17(土) 12:17:05.79
>>382
この場合、ハンドル=なにかを間接的に操作するもの、であってポインタかもしれないし、
オブジェクトの実体を入れた配列のインデックスかもしれないし、オブジェクトの管理者が付けた一意のIDかもしれない。
384デフォルトの名無しさん:2011/12/17(土) 14:32:52.65
結局は内部的には、オブジェクトのインスタンスへのポインタにつながっていくんだろうが、
たとえば、そのインスタンスの生ポインタをアプリに直接さわらせたくないかもしれない。
385デフォルトの名無しさん:2011/12/18(日) 09:48:15.75
ハンドルを整数にする利点って?
スマポに入れにくいし、不透明ポインタでいいじゃん
386デフォルトの名無しさん:2011/12/18(日) 09:58:17.86
>>385
例えばWindowsのウィンドウハンドル(hWnd)は(事実上)整数。
387デフォルトの名無しさん:2011/12/18(日) 10:21:27.99
一々専用の不完全書くのが面倒
388デフォルトの名無しさん:2011/12/18(日) 10:35:50.49
>>386
windowsの話はいいから利点を教えて
389デフォルトの名無しさん:2011/12/18(日) 10:39:08.53
無効になったオブジェクトを指すポインタ(メモリ領域)は容易に再利用されるから。
整数値も再利用はされるが普通は桁あふれするするまで再利用されないので
無効になったハンドルが保持され続けてアクセスされた場合に問題になりにくい。
390デフォルトの名無しさん:2011/12/18(日) 11:05:49.62
>>385
ハンドルは異なるアドレス空間でも共有できる。

391デフォルトの名無しさん:2011/12/18(日) 11:27:42.30
なんだ、ハンドルが実数じゃダメなの?って質問かと思ったわ
392デフォルトの名無しさん:2011/12/18(日) 14:34:18.25
実数だと == で比較出来なくなるだろ馬鹿
393デフォルトの名無しさん:2011/12/18(日) 15:08:00.68
プログラミング入門としてよくC言語が挙げられますが、今の時代にC言語ってどういう場面に使われているんでしょうか?
時代遅れという意見もよく聞きますので・・・
394デフォルトの名無しさん:2011/12/18(日) 15:09:57.93
パチンコ
395デフォルトの名無しさん:2011/12/18(日) 15:10:43.15
家電製品 

スペースシャトル 

電気自動車 
396デフォルトの名無しさん:2011/12/18(日) 15:14:12.79
>>394-395
重要な部分で使われているのですね
学習意欲がアップしました。ありがとうございます
397デフォルトの名無しさん:2011/12/19(月) 00:25:47.35
C言語知ってると他の言語に移行しやすいよね
そして、他の言語はC言語よりもずっと多機能で扱いやすい代わりに、
実行速度が異様に遅いことに愕然としてみたり・3・;
398デフォルトの名無しさん:2011/12/19(月) 01:52:19.88
そういえば。Cの習得に時間がかかりすぎて、
C++を含む他言語のライブラリ習得が難しくなってしまった

アタマが硬くなってしまったらしい
そういや、昔のコードを見返すと、汚かったが、賢かったような気がする

プログラミングはアマでやってるので、仕事に影響はないようなもんだが、
硬くなってしまったアタマは仕事に影響があり、プログラミングを通して、
アタマをやわらかくしたい。

いい方法はないか。ネタ、マジレス両方で。
399デフォルトの名無しさん:2011/12/19(月) 05:11:08.91
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|
400デフォルトの名無しさん:2011/12/19(月) 18:22:56.19
>>398
スポーツすると頭に酸素がよく回って活発になるよ
401デフォルトの名無しさん:2011/12/19(月) 23:03:50.86
よこからだけど
いいこときいた
ありがとう
402デフォルトの名無しさん:2011/12/20(火) 00:14:04.66
>>398
・楽しめる部分を見つける。
見つからなければ、状況を楽しんでみる。
・苦痛を感じる手前で一旦休憩して再度トライする。
403デフォルトの名無しさん:2011/12/20(火) 00:54:10.94
頭が硬いとか柔らかいとか都市伝説だから心配すんなw
新しい言語の学習がうまくいかないのは、大抵、
1.それが必要じゃないから真剣味が足りない
2.単に経年等で知能が衰えた(ため相対的にそんな気分がする)
のどちらかで、大抵は1だから、仕事にすればすぐ出来るようになる。

404デフォルトの名無しさん:2011/12/20(火) 01:23:26.84
プリプロセッサがうまく動かないのですが、どこの記述がおかしいでしょうか?

↓正常にファイルが削除される
#include <stdio.h>
int main(){
if (remove("C:\\Documents and Settings\\user1\\hoge.dat") == 0)
 printf("削除成功");
else
 perror("削除失敗");
return 0;
}

↓ファイルが削除されない
#include <stdio.h>
#define HOGEFILE "C:\\Documents and Settings\\user1\\hoge.dat"
int main(){
if (remove(HOGEFILE) == 0)
 printf("削除成功");
else
 perror("削除失敗");
return 0;
}
405デフォルトの名無しさん:2011/12/20(火) 01:35:38.00
C++は何故、オブジェクト指向言語だと思われてるんだろう?
Stroustrup自身は、マルチパラダイム言語or効率的なライブラリ構築用言語だと表明してるのに。
406 ◆QZaw55cn4c :2011/12/20(火) 01:47:49.75
>>404
こっちではうまくいった。
http://codepad.org/f1VObYKz
407デフォルトの名無しさん:2011/12/20(火) 01:51:53.23
ポインタを含む構造体の配列を動的につくりたいんですが、
構造体の配列が静的にしか作れません。
中身のポインタは、要素ごとにmallocできるんですが、、、
作り方教えてください
408デフォルトの名無しさん:2011/12/20(火) 01:56:19.16
>>406
ありがとうございます!
プリプロセッサの使い方が間違っているのかどうか自信がなかったのですが、
貼る過程で省略した部分のどこかが原因のようなので
もう一度自分で考えてみます。
409デフォルトの名無しさん:2011/12/20(火) 04:41:36.15
>>405
心配するな、誰もそんなことを思っていない。オブジェクト指向でもコードが書けるCだと思ってる。
大体STLを始めとするテンプレートライブラリなんて、オブジェクト指向の真逆を突き進んでる。
410デフォルトの名無しさん:2011/12/20(火) 05:30:32.49
STLを完成させるために、C++のオブジェクト指向( クラス、テンプレート)などが整備されたんだろ。
411デフォルトの名無しさん:2011/12/20(火) 05:42:27.19
STLが先か、C++が先なのか1979年の同年でよくわからん。たぶんSTLが先でその実現のC++が整備されたと思うが。




STLのアーキテクチャの多くはアレクサンドル・ステパノフという一人の人物の手によって作られた。
1979年に彼はジェネリックプログラミングの初期アイデアを練り始め、そしてソフトウェア開発に革命をもたらす可能性を探究し始めた。
当時はジェネリックプログラミングを実際にサポートしているプログラミング言語がまだなかった。
ジェネリックプログラミングに基づくコンポーネントライブラリの包括的なアーキテクチャを開発するためには、十分な研究と実験が必要であった。
Standard Template Library - Wikipedia


ストロヴストルップはC with Classesの開発を1979年に開始した。
これらの事情を鑑みて、ストロヴストルップは当時既に汎用的な言語であったC言語にSimulaの特徴を取り入れることを試みた。
最初はクラスと派生クラス、型検査機構の強化、インライン関数、デフォルト引数の機能を、Cfrontを介してC言語に追加した。
1985年10月に最初の商用リリースがなされた[1]。1983年にはC with ClassesからC++に名称を変更した。
C++ - Wikipedia
412デフォルトの名無しさん:2011/12/20(火) 10:22:36.07
いろいろ書けるCなんだろうが実際の開発だと矛盾したスタイルが混在して困る。
言語仕様を選択できるようなビルドオプションを仕様化してくれないかな・・・
413デフォルトの名無しさん:2011/12/20(火) 12:27:04.18
>>407

int t;
int len = 100;

struct HOGE{
int *a;
} *b = (struct HOGE*)malloc(len * sizeof(struct HOGE));

for(t = 0; t < len; ++t){
b[t].a = (int*)malloc(sizeof(int));
}
414398:2011/12/20(火) 14:17:13.99
>>400-403
ありがとう、ちょっと元気出た
415デフォルトの名無しさん:2011/12/20(火) 18:41:02.33
>>400-403
ありがとう、ちょっと精液出た
416デフォルトの名無しさん:2011/12/21(水) 07:51:43.03
>>413
ありがとうございます。できました。
417デフォルトの名無しさん:2011/12/21(水) 13:49:27.00
sizeof(int)で4がでてきた場合、intの大きさは4バイトという認識であってますか?
418デフォルトの名無しさん:2011/12/21(水) 14:16:08.27
はい
419デフォルトの名無しさん:2011/12/21(水) 14:22:37.56
>>418
ありがとうございます
本には「大きさ」としかかかれてなかったもので
420デフォルトの名無しさん:2011/12/21(水) 15:40:29.84
#define alert() (putchar('\a'))

これは「引数のない関数形式マクロ」と解説されているのですけど、オブジェクト形式マクロとの違いがわかりません
これをオブジェクト形式マクロと解釈するのは間違っているのでしょうか?
421デフォルトの名無しさん:2011/12/21(水) 15:51:02.25
変数と、引数のない関数の違いみたいなもんじゃね
422デフォルトの名無しさん:2011/12/21(水) 16:45:08.48
#define alert() (putchar('\a'))
alert(); → (putchar('\a'));
#define alert (putchar('\a'))
alert(); → (putchar('\a'))();
423デフォルトの名無しさん:2011/12/21(水) 17:32:57.47
オブジェクトの集約をする時にはprivate継承してメンバ関数をusingするのと、メンバに持たせてメンバ関数を移譲するのどっちが一般的なんですか?
やっぱり実行時コストの掛からない前者ですかね?
424デフォルトの名無しさん:2011/12/21(水) 17:39:20.04
宣言と定義を一緒に書けば普通インライン展開されるからコスト的にそこまで差があるかは微妙
425デフォルトの名無しさん:2011/12/21(水) 23:08:23.34
どなたかお願いします。
C言語でファイルをオープンして
while(fscanf(fp,"%s",word)!=EOF){
array[i][LENGTH]=word;
printf("%s",array[i][LENGTH]);
printf("%s\n",array[i-1][LENGTH]);
i++;
}
とやったんですが、array[i][LENGTH]とarray[i-1][LENGTH]がファイルから読み込むたびに同じになってしまします。
array[0][LENGTH]=aiueo,array[1][LENGTH]=kakikukekoというように入れるにはどうしたらいいのでしょうか・・・
426デフォルトの名無しさん:2011/12/21(水) 23:12:57.12
>>425
arrayの型も書かずに質問かよ。
まぁどうせ、ポインタを代入しているってことはarray[][]がポインタなのだろうけど。
どっち途、文字列操作を勉強しなおすことをお勧めする。
427デフォルトの名無しさん:2011/12/21(水) 23:21:54.55
>>426
ありがとうございます。

char *array[i][100]としてます。
うーん、ちょっと文字列操作について調べてみます・・・
428デフォルトの名無しさん:2011/12/21(水) 23:52:55.42
>>425,427
#include <stdio.h>
#include <string.h>
#define LENGTH 100

int main(){
FILE *fp;
char array[1000][LENGTH];
char word[LENGTH];
int i = 0;

fp = fopen("a.c", "r");
while (fscanf(fp, "%s", word) != EOF) {
/* array[i][LENGTH] = word; */
strcpy(array[i], word);
/* printf("%d %s¥n", i, array[i]); */
printf("%d %s¥n", i - 1, array[i - 1]);
i++;
}

return 0;
}
429デフォルトの名無しさん:2011/12/22(木) 00:13:11.04
>>428
ありがとございます!できました。
ポインタについてかなり詳しく勉強しないと・・・ってことがわかりました><
またお願いします!
430デフォルトの名無しさん:2011/12/22(木) 00:15:10.04
配列に、文字列自体を入れてる、つもり、だよな
だが、そうはなっていない。
代わりに入っているのは…。

もし、それっぽい素養があれば、
printf("%x",array[i][LENGTH]);
printf("%X\n",array[i-1][LENGTH]);
と書けば、何かに気づくかも。
431デフォルトの名無しさん:2011/12/23(金) 15:12:10.83
アドレス代入で文字列コピーしようとする人は、他言語から来た人なのかな
432デフォルトの名無しさん:2011/12/23(金) 18:17:16.33
こんにちは。
C++とDXライブラリでちょっとしたゲームを作り始めたんですが、
vectorにキャラクターを入れて、アルゴリズムのsortでキャラクターの素早さ順に並び替える時に、
素早さの値が同じだった場合、1/2の確率で順番が逆転するようにしたいんですが、sortでは無理でしょうか?

キャラクタ1 素早さ8
キャラクタ2 素早さ8
キャラクタ3 素早さ10

↑のような場合、普通にやると

キャラクタ3、キャラクタ1、キャラクタ2の順番でソートされると思いますが、どうにか50%の確率で
キャラクタ3、キャラクタ2、キャラクタ1の順番にもソートされるようにしたいのです。

sortじゃなくてもなにか方法があれば是非教えてください。
433デフォルトの名無しさん:2011/12/23(金) 18:55:55.91
sortに渡す比較関数に乱数をもたせる

class CompSpeed {
public:
CompSpeed(unsigned long seed) : mRandom(seed) { }
bool operator () (Chara const & lhs, Chara const & rhs) const {
if(lsh.speed == rhs.speed) { return mRandom() % 2; } // 同じなら1/2で真、1/2で偽
else { lhs.speed > rhs.speed; } // それ以外はスピードで大なり比較
}
private:
Random mRandom;
};

sort(characters.begin(), characters.end(), CompSpeed(GetTime()) ;
434デフォルトの名無しさん:2011/12/23(金) 18:56:03.59
if(wParam(:_;) >= 0x60 && wPanda <= 0x69(^_^))
435デフォルトの名無しさん:2011/12/23(金) 19:06:03.83
MSはソートの比較関数に乱数を使う、という失敗をした事がある。
436デフォルトの名無しさん:2011/12/23(金) 19:09:48.93
一旦普通に並び替えて
同じ値の範囲を探してランダム並び替え
437デフォルトの名無しさん:2011/12/23(金) 20:14:06.92
>>433
ソートが終わらなくなる、とかいう危険はないよね?
438デフォルトの名無しさん:2011/12/23(金) 20:47:41.72
>>437
> ソートが終わらなくなる、とかいう危険はないよね?
sortのアルゴリズムと運によってはある。だから>>436の方向が無難
439432:2011/12/23(金) 21:23:10.08
アドバイスありがとうございます。
>>433の方法試してみたら、invalid operator< のエラーが出てしまいました。
原因が分からないので、>>436でやってみようと思います。
440デフォルトの名無しさん:2011/12/23(金) 22:02:14.62
{素早さ}<<4 | {0-15の乱数} でソートはどう
441デフォルトの名無しさん:2011/12/24(土) 03:07:02.28
CまたはC++でFlashみたいなヌルヌルアニメーションするグラフィカルなGUIソフトを
作りたいんですが、何を使えば楽に作製できますか?
今はC++とWin32APIで作ってるけど、どうも古臭い見た目になってしまう
442デフォルトの名無しさん:2011/12/24(土) 04:59:37.81
C++ DirectX
443デフォルトの名無しさん:2011/12/24(土) 07:45:30.21
ある意味ズルだが、.NET併用
詳しくないんで雑談としてだが、今風のUIコンポーネントのライブラリは多少充実してるらしい
444デフォルトの名無しさん:2011/12/24(土) 08:22:36.72
スキンはプロクラムと別。小説の挿絵に小説家と別人がかいてたりする。
445デフォルトの名無しさん:2011/12/25(日) 01:20:49.67
>>441-442
ありがとう、DirectXか.NETか。
DirectXは本1冊だけだけど読んだから、やりたい処理を組む際の必要な勉強量は少ない
だろうけど、組むのが面倒そうだなと思っちゃう。
一度機能毎に細かく分けて作っておけばそうでもないんだろうけど。
.NETは触ったことも無いんだけど、開発効率よさそうだね。ちょっと.NET調べてみる
>>444
そうなんだろうけど、一人で全部やらなきゃいけないのよ
研究展示で人に触って貰えるように、GUIで操作できるようにしているんだけど
どうせならかっこいいインターフェースの方が受けいいし
中身はデータベース処理なんだけど、この結果を視覚的に表現したい
ここでヌルヌルアニメーションしたいんだよね。
例えるならスパイシーっぽい感じだけど、そんなに凝る気もなくある程度簡素なのを
446デフォルトの名無しさん:2011/12/25(日) 06:12:25.79
スパイシーwwwwwwwwwwwww
447デフォルトの名無しさん:2011/12/25(日) 07:16:57.66
スパイシーって韓国料理みたいな意味か
タイ料理ならまだかっこいいが
448デフォルトの名無しさん:2011/12/25(日) 09:46:41.54
ああ、デプロイを考えなくていいプロジェクトなのね
案外、HTML5で書いたほうがさくさくUIいけるかもねー。

ターゲットとUIのisolationにもなる。

C++でhttp鯖か串をビルドして、CGIでターゲット?に生命令を送ったらどうか
俺はいじり慣れてるからprivoxyを薦めるが、要するに、そんなのだ
449デフォルトの名無しさん:2011/12/25(日) 09:48:03.76
ああごめん、DBって書いてた
ターゲット(ボード)っていうより、core process か。
450デフォルトの名無しさん:2011/12/25(日) 13:59:56.65
>>448-4449
ありがとう、ユーザーインターフェイス面はHTML5で作成してブラウザで賄うってことか
それはかなり便利そう。だけど来月中旬には完成させたいので今からHTML5勉強して
実用域までもっていくのは辛いです。
.NETも調べてみたらこの目的だと辛そうだし、やっぱDirectXまたはOpenGLで作ってみる
ことにします。後々のAndroidへの移植も考えてOpenGLでいこうかな
451デフォルトの名無しさん:2011/12/25(日) 20:15:58.75
>>450
来月中旬までなら、丸々一週間は勉強する時間があるじゃないか。
452デフォルトの名無しさん:2011/12/25(日) 23:38:46.40
HTML5は最たるものだが、legalにパクってこれるものは、パクっていい。
よさげなUIがあって、それが誰でも使っていいライブラリの仕事だったら、
あなたが使ってもいい。

DX/GLに、そんなパクりやすいライブラリあるのかな、と思うが、あるのかもしらん
453デフォルトの名無しさん:2011/12/28(水) 20:02:39.02
スマポ(あるいは薄いラッパー系やプロクシ)作るときにoperator &はどう作るのが一般的なんだろうか
ラップしてる方のアドレスか、中身のアドレスか
454デフォルトの名無しさん:2011/12/28(水) 20:19:14.58
すまぽを自作しようなんて思うなってばっちゃんが言ってた

# 覚悟を決めて、「車輪は一度は作って壊してみるもの」をやってみる。
455デフォルトの名無しさん:2011/12/28(水) 23:30:42.65
>>454
確かに、研究や腕試しなら作ってみるのもいいけど実用ならそれなりにメジャーな出来合いのものを使うべきだな。


>>453
> スマポ(あるいは薄いラッパー系やプロクシ)作るときにoperator &はどう作るのが一般的なんだろうか
> ラップしてる方のアドレスか、中身のアドレスか
独自には作らずそのままスマポ自体のインスタンスのアドレスを取得させるのが普通。
456デフォルトの名無しさん:2011/12/29(木) 15:55:45.10
int a[N] = { 1, 5, 0 , 3, ... } ;

//A
vecor<int> v(a, a + N);

//B
vector<int> v;
v.reserve(N);
v.assign(a, a + N);


AとBってどっちが速いですかね?
457デフォルトの名無しさん:2011/12/29(木) 15:57:24.46
つ[実測]
458デフォルトの名無しさん:2011/12/29(木) 16:06:46.17
普通に考えたらAのほうがいいしBのreserveは不要
でもパフォーマンス問題は実測が基本
459デフォルトの名無しさん:2012/01/02(月) 10:28:21.99
初心者本読んでてわからない事が出たんで教えてくらはい

const char* name = GetOldMonthName(int month); //昔の月の名前で表示する関数。前の方で定義済み。
cout << name << endl;
ってのがあるんですが、表示されるのはポインタnameに格納されてるアドレスではないのですか?
実際やって見ると参照先が表示されます
cout << *nameに変えると何も表示されませんでした。

int a = 10;
int* p = &a;
cout << p << endl;
とした場合にはpにあるアドレスが表示されるので
どこで違いがあるのかがわかりません
460デフォルトの名無しさん:2012/01/02(月) 10:36:50.65
int a[10]とchar a[10]でも違うだろ。
文字列型だけ特別扱いされて、アドレス渡すと中身が表示される。
461デフォルトの名無しさん:2012/01/02(月) 10:39:27.10
cout << (int)name << endl;

cout << *(int*)name << endl;

にしたら何か数字出る。
462デフォルトの名無しさん:2012/01/02(月) 10:48:58.27
ありがとうございます。
>>460
そういう事でしたか。
文字列のところとcoutのところもう一度読み直しておきます。
>>461
両方数字が出ました。下はマイナスで上より桁が大きかったです。
キャストってやつなのかな。これも読んでおきます。
463デフォルトの名無しさん:2012/01/04(水) 17:09:57.78
派生クラスでメンバ関数を呼び出したらすべての基底クラスの同名同シグネチャのメンバ関数をすべて呼び出す
みたいなコードはちまちま手書きで書かないと作れない?
デストラクタみたいに勝手にやってくれると楽なんだけど
464デフォルトの名無しさん:2012/01/04(水) 18:09:05.38
たいていそういうのに限って、関数によって、少しずつ、後先が違ってないか
465デフォルトの名無しさん:2012/01/04(水) 18:18:38.26
違う分だけ書き足すってのがふつうじゃないか
466デフォルトの名無しさん:2012/01/04(水) 21:39:42.10
前関数を呼ぶ位置の後先が、全部同じなのか?たいてい、少しずつ、、
467デフォルトの名無しさん:2012/01/16(月) 09:27:53.08
10件のデータを読込み、最大、最小値を求め表示するプログラムなのですが
ここでは体重にしました。よく分からないので教えていただけないでしょうか。
参考書を読みながら書いてみましたがfor以降がイマイチ分かりません。

#include<stdio.h>
int main(void)
{
float w_max,w_min,weight;
int i;
for(i=0;i<10;i++){
scanf("%f",weight[i]);
if(w_max < weight[i])
w_max = weight[i];
if(w_min > weight[i])
w_min = weight[i];
}

for(i=0;i<10;i++){

//不明
}


printf("i= %d w_max=%f w_min= %f\n", i, w_max, w_min);

return 0;
}
468デフォルトの名無しさん:2012/01/16(月) 10:40:07.17
内容的に宿題スレですね
すいませんでした。
469デフォルトの名無しさん:2012/01/16(月) 11:29:40.25
>>467
その条件だけなら、二番目のループ自体不要だろ。
ついでに言えば、その後のiの出力も意味がない。
470デフォルトの名無しさん:2012/01/16(月) 17:06:06.20
Cの宿題なら、「該当行で出力されるiの値はいくらか。」って聞かれてもいいな
471デフォルトの名無しさん:2012/01/18(水) 23:25:45.05
こんにちは。C++とDXライブラリでしょぼいけどゲーム作っています。質問させてください。

二次元ベクタにキャラクターを入れて、その全てを描画する方法として、例えば、

vector<vector<Character>> Chara;
for(int y=0;y<Chara.size();y++)
for(int x=0;x<Chara[y].size();x++)
Chara[y][x].Draw();

という方法があると思います。
また、例えば、キャラクターのHPが0になっている者を探し、
そのHPを回復させるとしたら、

for(int y=0;y<Chara.size();y++)
for(int x=0;x<Chara[y].size();x++)
if(Chara[y][x].HP==0)Chara[y][x].HP+=100;

みたいな感じになると思うんですが、
for文で回しているところが、重複して無駄な感じがするので、
テンプレート関数とかを使って、何か上手く出来ないかと悩んでいます。

AllDo(Chara,Draw());
AllDo(Chara,Recover()); ←みたいに出来ればすっきりするんですが・・・。
どう書いたらいいのか頭がこんがらがってしまって(汗)
どなたかご教授下さい。よろしくお願いします。
472デフォルトの名無しさん:2012/01/19(木) 00:36:26.93
0x使ってもよさ気だから、forを関数にして中身をラムダで書けばいい
473デフォルトの名無しさん:2012/01/19(木) 01:13:26.33
template<class F>
void AllDo(vector< vector<Character> > & v, F f)
{
for(int y(0); y < v.size(); ++y)
for(int x(0); x < v[y].size(); ++x)
f(v[y][x]);
}
474デフォルトの名無しさん:2012/01/19(木) 01:15:39.75
イテレーターを作ってstd::for_eachだろ
475471:2012/01/19(木) 05:27:53.71
ラムダ式すっごい楽です!
まだC++始めて日が浅いのでこの機能は知りませんでした!
>>472-474
教えてくださった皆さんありがとうございました。
476デフォルトの名無しさん:2012/01/20(金) 17:08:39.53
Windows7 64bit版のポインタのサイズって64bitで合ってる?
477デフォルトの名無しさん:2012/01/20(金) 17:11:41.59
いいえ
478デフォルトの名無しさん:2012/01/20(金) 17:23:09.98
てことは、64bit版もポインタのサイズは32bitなのか
ありがとう
479デフォルトの名無しさん:2012/01/20(金) 17:36:37.31
てことは
はどこに掛かってるんですか
480デフォルトの名無しさん:2012/01/20(金) 17:50:36.19
いいえ
481デフォルトの名無しさん:2012/01/20(金) 17:54:12.44
言い得て事は
482デフォルトの名無しさん:2012/01/20(金) 18:00:41.14
>>476
16bitは動かないから、32bitまたは64bitじゃないかな
483デフォルトの名無しさん:2012/01/20(金) 18:04:16.54
なんでポインタのサイズなんて気にするの?
実質ただの整数なんだから32でも64でも大差ないでしょ
484デフォルトの名無しさん:2012/01/20(金) 18:10:11.41
>>476
VCならばこのあたりに注意すれば十分かと
ttp://msdn.microsoft.com/ja-jp/library/3b2e7499.aspx
485デフォルトの名無しさん:2012/01/20(金) 18:18:18.31
わかんなかったら全部64bit整数でショリすれば問題ない
486デフォルトの名無しさん:2012/01/20(金) 18:21:09.88
そんなコード書いてて128bit時代が来たらどうするの?
487デフォルトの名無しさん:2012/01/20(金) 18:25:58.21
全部128bit整数にすれば問題ないよ?
typedef一発だよ
488デフォルトの名無しさん:2012/01/20(金) 18:29:13.02
typedef int32_t oreint_t;
typedef int64_t oreint_t;
typedef int128_t oreint_t;
void oreint_chk(void) {
if (sizeof(oreint_t) != sizeof(void *))
abort(); // 無理です
}
何も問題ない
489デフォルトの名無しさん:2012/01/20(金) 18:32:58.92
DWORDとDWORD_PTRの大きさ違うとか
いちいち問題にする事自体が時間の無駄
490デフォルトの名無しさん:2012/01/20(金) 22:08:26.58
たぶん、そんなあなたに:intptr_t
491デフォルトの名無しさん:2012/01/21(土) 02:09:08.83
それで思い出したけど、_t の t って何の略?
size_tのおかげで、しれっと使ってるけど、良く考えたら何の略か知らなかったので、
この際教えて欲ください。
492デフォルトの名無しさん:2012/01/21(土) 02:16:15.68
何かの略というより、お墓ね
493デフォルトの名無しさん:2012/01/21(土) 02:51:54.94
typedef
494デフォルトの名無しさん:2012/01/21(土) 02:54:28.66
type
495デフォルトの名無しさん:2012/01/21(土) 09:39:30.24
size_tとかSizeTypeみたいな後ろにくっついてる型を意味するサフィックスは
大抵の場合変数名とかぶるのが気持ち悪いというだけの理由で付けられたものだよ
496デフォルトの名無しさん:2012/01/21(土) 23:18:35.97
>>495
ソース

// C/C++の薀蓄もきちんと知りたい年頃。
// 納得はしている。
497デフォルトの名無しさん:2012/01/22(日) 16:44:34.75
ひょっとして仮想関数を利用したポリモーフィックなクラス階層構造以外で継承することってあまり無いんですか?
今まで継承していたクラスをメンバに持たせて関数を呼び出すだけのinlineメンバ関数を定義するするほうが複雑なコードを組みやすい気がするんですけど
498デフォルトの名無しさん:2012/01/22(日) 16:51:24.82
ひょっとしてはどこに掛かってるんですか
499デフォルトの名無しさん:2012/01/23(月) 11:59:33.25
なんでC++はポインタと参照を違うインターフェースで扱うんですか?
Javaみたいに全部.でやったほうがクールだと思います
500デフォルトの名無しさん:2012/01/23(月) 14:34:16.26
Javaを意識したら、Oracleがアップをはじめるからだめです(w


Javaを意識して、極力参照で書くようにポリシを決めることはできる
君が自由人(個人開発者)なら、まったく君の自由だ

C/C++には、壊れてたり、nullだったりするポインタ型の値を扱う「資格」があるんだよ
C系のみとは言わないが、そこには誇りすらある

# 休憩しにきた
501デフォルトの名無しさん:2012/01/24(火) 11:35:16.68
C#でおk
502デフォルトの名無しさん:2012/01/25(水) 20:19:38.03
“Javaには無い”演算子オペレーターを効率よく実装するためだったような
もう忘れた
503デフォルトの名無しさん:2012/01/25(水) 20:54:01.80
Handle-Bodyを使えば見た目が参照っぽいスマートポインタになってJava厨も安心する
504デフォルトの名無しさん:2012/01/25(水) 21:53:31.45
enum をインクリメントして巡回したいんだけど安全で汎用的な方法はある?
enumの型ごとに値の遷移テーブル(それかswitchで次を見つけるだけの関数)を作るみたいな、地道な作業するしかないかな?
505デフォルトの名無しさん:2012/01/25(水) 22:18:47.13
汎用的かどうかなんてその時個々人の主観が伴うから
好きにしたらいいよ
506デフォルトの名無しさん:2012/01/25(水) 22:55:00.76
enumがアップル=1、オレンチ=3、ピーチ=7だったら

num[]={1,3,7}; とsize=3を別に持っとけ。

このデータを前処理で自動生成してもよい。
507デフォルトの名無しさん:2012/01/25(水) 23:15:40.86
地道な作業を、PCにやらせるようにするのが古典的だが手っ取り早い
508デフォルトの名無しさん:2012/01/25(水) 23:17:53.77
そうだな生成プログラムでも書いた方がらしいな
509デフォルトの名無しさん:2012/01/26(木) 18:00:43.29
Visual Studio2003です。
.cファイルを右クリックしてコンパイルすると.objファイルができるじゃないですか。
このできた.objファイルを他のプロジェクトで使いたいんですよ、javaの.classファイルみたいなイメージで。
でもソリューションエクスプローラには「ソースファイル」「ヘッダーファイル」「リソースファイル」とあるんですが、どこに置いてどうincludeすれば使えるようになるんですか?
510デフォルトの名無しさん:2012/01/26(木) 18:21:54.58
・.objはリンカが扱う。
・ただし、リンカコメントというのをソースに埋め込むと、.cで.objを引っ張り込むことを記述できる。
511デフォルトの名無しさん:2012/01/26(木) 19:57:25.12
>>510
リンカコメントですね、ググってみます。
ありがとうございます。
512デフォルトの名無しさん:2012/01/26(木) 20:22:45.05
うん、ぐぐったらなんかわかるだろ。
と思ってたら、通称だったかも。うまく出せない。

> #pragma comment(linker, "...")

こういうのなので、ぐぐってみそ。

で、そんなことをするうちに、include 的に記述するより、
プロジェクト設定みたいので指定するのが自然ってのがわかると思う
513デフォルトの名無しさん:2012/01/26(木) 20:49:19.22
Makefileに変換してnmake使うことできないの?
後々そっちの方がいいよ
514デフォルトの名無しさん:2012/01/27(金) 09:03:21.79
>>512
ありがとうございます。色々試してみます。
>>513
nmakeって元から入ってるのならいけると思います。
自分のバソコンじゃないのでインストールとかはできないです。
515デフォルトの名無しさん:2012/01/28(土) 14:49:21.25
ナマポとスマポどっちもぶち込めるコンテナってどう書くんですか?
516デフォルトの名無しさん:2012/01/28(土) 23:43:59.13
スマポのナマポをぶちこんどけばおk
517デフォルトの名無しさん:2012/01/29(日) 07:35:41.50
WindowsのC/C++のUNICODE両対応アプリのソースって、
文字定数と文字列定数はいちいち_T()で囲わないとダメですか?
一部をANSIで扱うことってありえますか?
518デフォルトの名無しさん:2012/01/29(日) 08:09:51.62
今の流行はAPIに食わせる場合は_T()
食わせない場合はUTF-8として扱う
かな
519デフォルトの名無しさん:2012/01/29(日) 22:37:04.75
WindowsはAPIにAやWがついてるやつを使えば
_T使わなくても平気じゃないかな
520デフォルトの名無しさん:2012/01/29(日) 22:53:52.30
CString使えばいいよ
521デフォルトの名無しさん:2012/01/29(日) 22:56:40.08
時刻を管理するクラスTimeのメンバ関数として、
分を返す
int Time::min( ) const
を用意したのですが、
VC++ 2010だと、windows.hをインクルードした際に
マクロmin(a,b)(((a)<(b))?(a):(b)) と解釈されてしまい
引数が足りないというコンパイルエラーになります。
このコンパイルエラーを回避するためには
min()の名前を変更する以外に方法は無いのでしょうか?

よろしくお願い致します。
522デフォルトの名無しさん:2012/01/29(日) 23:22:39.49
#define NOMINMAX か (t.min)();
523デフォルトの名無しさん:2012/01/29(日) 23:23:52.48
>>521
includeした後にundefする。でも衝突しそうな名前は初めから避けるべき
524デフォルトの名無しさん:2012/01/30(月) 00:39:48.02
ファイル名やフォルダ関係はUNICODEで統一しといた方がいいかも
ファイルの中身は知らん
525521:2012/01/30(月) 09:55:06.10
>>522
>>523
ありがとうございます。
526デフォルトの名無しさん:2012/01/30(月) 10:10:56.90
stdと衝突するあたりM$の頭の悪さが露呈してるよなぁ
527デフォルトの名無しさん:2012/01/30(月) 14:50:02.33
maxマクロを書いたMSのプログラマは絶対に許さない。絶対にだ
528デフォルトの名無しさん:2012/01/30(月) 22:38:39.10
>>526
windows.hって相当昔からあるから、STLが規格に入る以前に作られてたとか
529デフォルトの名無しさん:2012/02/03(金) 00:18:22.76
C++の大規模ソースをソーストレースするときのおすすめツールを教えてください。
ある関数の宣言もとや使用箇所を手早く探せるようにしたいです。


以下、今まで使ってたもの。

 ctags     :同じ名前の関数(オーバーライドされてる関数)があるとき、
          候補をリスト表示できない。
          関数やメンバを使用している箇所を表示できない。

 GNU Global :構造体のメンバを検索したり、
          関数定義もとを探すときに見つからないことがある。


Windows 、Linux のどちらかで使えれば良いです。
530デフォルトの名無しさん:2012/02/03(金) 00:31:09.18
grepや全文検索。
コンパイラ提供のインクルードパスをgrepかけることあるがそれほど時間掛からん。
531デフォルトの名無しさん:2012/02/03(金) 10:17:31.94
ビルド環境さえ用意できるならなにもなくてもなんとかなるね
grep,ファイラー,テキストエディタはさすがに用意できるだろうし
532デフォルトの名無しさん:2012/02/03(金) 13:40:47.76
ソースを全文検索対象にして、indexつくらせちゃう
まったくのベタだが、結局これがいちばん早かった
533デフォルトの名無しさん:2012/02/05(日) 15:08:59.03
class c_A、class c_Bがあって、


〜〜ヘッダファイル内〜〜
#include "c_B.h"

class c_A
{
c_B hoge;

};
〜〜〜〜〜〜〜〜〜〜〜
でインスタンス生成できちゃうんですか
534デフォルトの名無しさん:2012/02/05(日) 15:46:32.64
>>529
つ[Doxygen]

>>533
できない。
535デフォルトの名無しさん:2012/02/05(日) 18:41:28.49
C++の規格上vector.end()をインクリメントすると何が帰ってくるか未定義?
だとすると内部で+=や++オペレータを呼ぶだけのadvanceは終わりをチェックしてくれていないの?
536デフォルトの名無しさん:2012/02/05(日) 18:43:48.01
はい
537533:2012/02/05(日) 19:56:00.52
すいません、c_Aのインスタンスを生成したときに、内部に持っているc_Bの
インスタンスも生成されるのでしょうか?
という質問でした
538デフォルトの名無しさん:2012/02/05(日) 19:59:31.87
はい
539デフォルトの名無しさん:2012/02/05(日) 20:44:34.41
それで納得したならそれでいいし、
それで何か困るなら、ラッパクラスを作ってもいい
540デフォルトの名無しさん:2012/02/05(日) 21:03:30.46
>>536
ohそうなのか。ありがとう
規格上どのコンテナのイテレータでもそうなってる訳?
541デフォルトの名無しさん:2012/02/05(日) 21:05:46.99
はい
542デフォルトの名無しさん:2012/02/05(日) 23:09:47.26
ほんとにちょっとした質問なんですけど、

ifstream ifs("csvファイル.csv");
string line;
getline(ifs,line);
//※ここで、別のファイルを開きたくなったので、
ifs.open("別のファイル.csv");
ってやった場合、マズかったりしますか?
それとも、ifsは「別のファイル.csv」をちゃんと頭から読み込んでくれますでしょうか?
543デフォルトの名無しさん:2012/02/05(日) 23:16:38.66
はい
544デフォルトの名無しさん:2012/02/05(日) 23:19:07.66
マズかったりします
545デフォルトの名無しさん:2012/02/06(月) 01:10:08.63
>>541
thx!
だとイテレータ使ったループって使いにくくない?
Cだとfor(i=0;i<10;i+=2);で偶数飛ばせるけどイテレータはいつもend()になったかどうか
チェックしないといけない。ぶっちゃけ改悪なのでは?
546デフォルトの名無しさん:2012/02/06(月) 01:35:42.46
listなどの実装を考えると一般的にイテレーターがi<Nと書けない(非常にコストが掛かる)ことに気がつく
547デフォルトの名無しさん:2012/02/06(月) 07:56:49.62
コンティナーのせっかく抽象化したい照れーたをインクリメイツ
って発想が
キモイと思うのだが
片リストを逆から辿ろうとしたら
「このコードはバヤイ!リバースコピーをいテレータ用に確保なう!」
「もっといい方法があるのにp」
と忠告してくれるコンパイラーがあるといい
548デフォルトの名無しさん:2012/02/06(月) 08:07:20.64
>>546
大概の実装はlistのsizeは定数時間になっていると思うが
549デフォルトの名無しさん:2012/02/06(月) 11:33:49.80
>>548
それとこれとは関係ない。
550デフォルトの名無しさん:2012/02/07(火) 16:30:45.59
while(true){
int a = 1;
cout << a << endl;
a = 2;
}

whileブロック内で変数を定義したらどんなもんかとこれを試してみたら
無限に1が出力されました。初期化って一度だけかな?と思ったけど
この結果ということは、これは一回のループごとに毎回変数が定義されてる
ということですか?auto変数の確保→破棄を延々と繰り返すみたいな。
だとするとwhileブロックの外で定義した場合に比べて効率が悪いのですか?
551デフォルトの名無しさん:2012/02/07(火) 16:33:50.32
>>550
気にするほどの差はないだろ。最適化される。
使うときに明示的に定義した方が速いこともある。
長期間使用され続ける物は、CPUキャッシュに入りにくくなる可能性がある。
552デフォルトの名無しさん:2012/02/07(火) 16:39:03.86
レスどうもです。
たいした差はないということですが、プログラミング作法としても
whileブロック内での変数定義ってあたりまえのように使われるの
でしょうか(初期化のあるなしに関わらず)。
553デフォルトの名無しさん:2012/02/07(火) 16:45:50.33
あたりまえのように使われる
554デフォルトの名無しさん:2012/02/07(火) 16:46:57.81
そうですか、ありがとうございました。
555デフォルトの名無しさん:2012/02/07(火) 19:00:20.48
while(true)
{
 std::vector<int> tmp(1000);
}
とかなら考え直したほうがいいな
556デフォルトの名無しさん:2012/02/07(火) 19:06:36.55
while(true) {
static std::vector<int> tmp(1000);
}

つまりこういうことですね?
557デフォルトの名無しさん:2012/02/07(火) 23:25:52.31
変数の生存が長く使われないほど
CPUキャッシュ ⇒ メモリ ⇒ HDD と配置が格下げされる。
HDDまでいったら値を読み込むのに時間食う。
新規に生成したほうが得。
メモリにあったとしてもそれを読み込むよりL1キャッシュに新規に生成した方が速いだろう。
558デフォルトの名無しさん:2012/02/08(水) 01:45:33.96
>>557
キャッシュミスより生成コストのが普通に高いと思うけど、
そんな事ありえるの?
559デフォルトの名無しさん:2012/02/08(水) 03:11:26.31
プリフェッチも考慮するとキャッシュミス自体それほど起こるかどうか
560デフォルトの名無しさん:2012/02/08(水) 08:25:58.69
そもそも、ローカル変数なら同じコードに落ちる可能性が高い。
つまり、関数突入時にスタックポインタを移動するだけ。
561デフォルトの名無しさん:2012/02/08(水) 08:58:10.22
そういうくだらない最適化は最後の最後にしろ
562デフォルトの名無しさん:2012/02/12(日) 18:45:29.51
クラスメンバ関数の宣言と定義を分けるときにinline化したい場合は
宣言か定義のどちらかにinlineが入っていればOKですか?
それとも両方書かないとだめですか?
563デフォルトの名無しさん:2012/02/12(日) 22:11:37.43
int a[4];
があったとして、
もしa[0],a[1],a[2],a[3]全てが0だったら、という条件式は
if(a[0]=0 && a[1]=0 &&a[2]=0 &&a[3]=0)
以外に表せますか?
なんかもっとスマートに書けたりできますか?
564デフォルトの名無しさん:2012/02/12(日) 22:22:55.93
if(a[0]|a[1]|a[2]|a[3])
スマートかどうかは知らん
565デフォルトの名無しさん:2012/02/12(日) 22:25:24.66
そもそもそれ代入やん
566デフォルトの名無しさん:2012/02/12(日) 22:27:17.51
ひっかけ乙だったのかw > 565
567デフォルトの名無しさん:2012/02/12(日) 22:37:50.98
if(a[0]=a[1]=a[2]=a[3]==0)
とかだめだったっけ
568デフォルトの名無しさん:2012/02/12(日) 22:52:52.39
中身ぶっこわしてもいいのならアリ・・・か?
569デフォルトの名無しさん:2012/02/12(日) 23:27:14.24
>>563
int i;
for(i=0; i<4; i++) if(a[i] != 0) break;
if(i == 4) {
    //全て0のときの処理
}
570デフォルトの名無しさん:2012/02/13(月) 00:26:09.73
intが32bitで128bitレジスタがあったら
if (*(int128*)a != 0)
571デフォルトの名無しさん:2012/02/13(月) 08:16:17.69
if( a[0]*a[0] + a[1]*a[1] + a[2]*a[2] + a[3]*a[3] == 0 )
572デフォルトの名無しさん:2012/02/13(月) 08:23:37.82
if(a[0] || a[1] || a[2] || a[3]) {
; /* なにもしない */
} else {

}
573デフォルトの名無しさん:2012/02/13(月) 12:38:17.22
>>562
宣言にinlineは、書いても書かなくてもinlineじゃないか?

定義はinlineにしたいならヘッダに書くべきだし、
ヘッダに書くとして複数includeする場合は、
inlineを書かないといけない。

1ファイルでしか使わない場合はシラネ
574デフォルトの名無しさん:2012/02/13(月) 14:12:45.40
テンプレート関数xxxにfuncを渡すときには自動的にTとUが設定されるのに
テンプレートクラスyyyにfuncを渡すときには、自分でTとUを指定しなければなりません。
この違いはなんなのでしょうか?
環境は gcc version 4.6.1 です。


template<class T, class U>
void xxx( T (*func)(U) )
{ }


template<class T, class U>
class yyy
{
 private:
  T (*f_)(U);
 public:
  yyy( T (*f)(U) ): f_(f){ }
};


double func( int v ){ return (double)v*0.1; }

int main( )
{
 xxx( func );
 //yyy obj( &func ); //templateの型を指定しないとコンパイルエラー
 yyy<double,int> obj;

return 0;
}
575デフォルトの名無しさん:2012/02/13(月) 18:30:09.86
>>574
関数は型推論してくれるが、クラスはしてくれない決まりだから
576574:2012/02/13(月) 22:46:09.01
>>575
ありがとうございます。

std::mem_fun_refとその内部で呼んでいるstd::mem_fun_ref_t
との関係がイマイチわからなかったので色々試していたところでした。
テンプレート関数のstd::mem_fun_refで型推論して、
テンプレートクラスのstd::mem_fun_ref_tに伝えているのですね。
577デフォルトの名無しさん:2012/02/15(水) 12:40:26.78
こういう命名ってC++では合法ですか?

namespace _hoge {
struct _fuga {
void _func(void);
};
}
578デフォルトの名無しさん:2012/02/15(水) 13:02:26.24
>>577
×namespace _hoge {
○struct _fuga {
○void _func(void);
先頭にアンダースコアはオススメしない
579デフォルトの名無しさん:2012/02/15(水) 19:47:17.24
これってどういう意味でだめなんだっけ?
> ×namespace _hoge {

ネームスペース名って先頭アンダースコアだめなんだっけ?
580デフォルトの名無しさん:2012/02/15(水) 20:04:49.94
>>579
グローバルスコープが禁止
581デフォルトの名無しさん:2012/02/15(水) 20:43:27.29
どうもです。
じゃあ入れ子になってれば可能なんですな。
582デフォルトの名無しさん:2012/02/21(火) 12:57:48.48
文字列の配列を10個用意して最初の文字列にstrcpyでデータをコピーしたいのですがエラーになってしまいます

char* p[10];
p[0] = "Spring";
strcpy(p[0],"Summer");

一体どこをどう直せばよいのでしょうか?
583デフォルトの名無しさん:2012/02/21(火) 13:03:26.26
std::string p[10];

p[0] = "Spring";
p[0] = "Summer";
584582:2012/02/21(火) 13:45:23.18
ありがとうございます、string型でやってみます。
ちなみにstrcpyを使うのは間違いなのでしょうか?
何が間違いなのかよく分からないのです

585デフォルトの名無しさん:2012/02/21(火) 13:51:30.39
メモリについてもう少し勉強しなさい
586582:2012/02/21(火) 13:55:37.67
分かりました、もう少し勉強します
587デフォルトの名無しさん:2012/02/21(火) 15:28:01.01
浮動小数の比較で

a=1.0;
b=1.0;
if ( a <= b )

みたいにするのは、やめたほうがいいですか?
a=1.0 とすると実際は a=1.00000000001 みたいになってて <= の評価が
うまくいかない可能性を危惧しています。とりあえず今のところ問題なさそうなんですが。
Fortranやってたときは、よくこんなふうにやってました。

eps=1e-30;
a=1.0-eps;
b=1.0;
if ( a <= b )
588デフォルトの名無しさん:2012/02/21(火) 15:30:17.33
場合による
589デフォルトの名無しさん:2012/02/21(火) 15:45:14.64
問題出るまでそのまま使っとけ。
問題あったら任意精度や整数計算へおきかえればいい。
精度が64、128ビットと固定されていればどれだけビット数上げても誤差が出る。
その初めに引いとくのは駄目だろ。もしaが負の方向へ小さかったら間違える。
590デフォルトの名無しさん:2012/02/21(火) 23:19:04.96
一致じゃなくて大小関係なんだろ?
単に if( b > a) でいいのでは…
一致が必要なときは、確かに、EPSILON系の定数を使うけど。
591デフォルトの名無しさん:2012/02/21(火) 23:29:00.68
厳密には大小でもダメだよ
計算機上の値では0 < xが真になる場合でも真値では0 < xが成立しない事は普通にある
592デフォルトの名無しさん:2012/02/25(土) 17:10:03.20
vector<bool>に限らず特殊化されたテンプレートクラスを
特殊化しないで使いたい場合はどうすればいいんですか?
593デフォルトの名無しさん:2012/02/25(土) 17:36:17.81
そんなことはできない
594デフォルトの名無しさん:2012/02/26(日) 03:37:46.38
具体的に何がしたいんだろう、ちょっと読めない
595デフォルトの名無しさん:2012/02/26(日) 05:19:34.45
hoge<bool> という特殊化されたオリジナルのテンプレートがあって、
それを、hoge<int>でも使いたいとか、そういうことかな?

他はまったく思いつかない。
596デフォルトの名無しさん:2012/02/26(日) 07:25:45.13
何でそうしたいか理由が全く分からん。やるならメンバにboolだけ持たせた構造体を定義してそれを渡すとか?
597デフォルトの名無しさん:2012/02/26(日) 13:27:55.80
最適化などのために特殊化されてるけど
他のコードと互換性がなくて仕方なく非特殊化バージョンを使いたいなーということはあるでしょ
bool参照しか受け取らない関数にvector<bool>の要素渡せないとか
598デフォルトの名無しさん:2012/02/26(日) 16:53:20.32
質問させていただきます。PGを書く問題ではないのですが、
「ソートプログラムとデータ構造について
具体的なソートプログラムの名前をあげ、
とのようなデータ構造(配列、単方向リスト、双方向リスト、循環リストなど)が
なぜ適しているか述べろ。

が分かりません!教えてください
599デフォルトの名無しさん:2012/02/26(日) 17:39:01.94
丸投げは宿題スレ行け
600デフォルトの名無しさん:2012/02/27(月) 00:31:23.68
これは簡単なようでいて、こういうのに強くないと解けない 宿題スレが適当
601デフォルトの名無しさん:2012/02/27(月) 10:11:12.67
宿題スレでも扱いが酷いな。テンプレ無視だからしょうがないけど

まずソートの種類を調べるくらいは自分で出来るんじゃない?
それからそのソートに適したデータ構造と理由を聞けば…

ところで循環リストが適してるソートなんてあったっけ?
602デフォルトの名無しさん:2012/02/27(月) 11:07:15.84
循環ソート
603デフォルトの名無しさん:2012/03/16(金) 00:20:56.14
c++ってchar使うの?
文字列はstringを必ず使うべきなの?
604デフォルトの名無しさん:2012/03/16(金) 00:33:04.28
stringはcharがもとになっている。資源の無駄を減らすならchar
605デフォルトの名無しさん:2012/03/16(金) 07:49:56.89
純粋に高級言語として使うなら「1文字の文字」を扱うときぐらいだが
C++には高級アセンブラたるC言語の後継としての役割もあるから無いと困る
組み込み系はもちろんだし、そうでなくてもAPIとかはchar[]ベースだったりする
606デフォルトの名無しさん:2012/03/17(土) 12:18:11.06
charを要求するライブラリを呼ぶ限り、charは不滅
もちろん、charを極力廃すような書き方をすることは可能だろう
607デフォルトの名無しさん:2012/03/18(日) 20:24:47.88
C++のステートパターンの骨組みというか
サンプルプログラムを教えてください。
608デフォルトの名無しさん:2012/03/18(日) 23:02:30.36
609デフォルトの名無しさん:2012/03/19(月) 00:00:49.96
struct A{
  int a;
  struct B{
    static int& a;
  };
  int f(){
    a = 10;
    B::a = a;
  }
};
int main(void){
  A a;
  a.f();
}
で,
undefined reference to `A::B::a'
とエラーが出ます.
どうやって回避すればいいのでしょうか.
610デフォルトの名無しさん:2012/03/19(月) 00:08:44.64
>>609
そもそも、なんで構造体の中から外を知ることができると思い込んだの?
611デフォルトの名無しさん:2012/03/19(月) 00:27:02.08
>>610
確かに言われて見れば・・・
とりあえず構造体のネストを消すように作り直してみます.
612デフォルトの名無しさん:2012/03/19(月) 01:24:49.10
>>609
参照は定義時に初期化しなければならない。まあやりたかったこととは違うだろうが。

struct A {
 int a;
 struct B {
  static int& a;
 };
 int f(){
  a = 10;
  B::a = a;
  return 0;
 }
};

A x;
int & A::B::a = x.a;

int main(void){
 A a;
 a.f();
}
613デフォルトの名無しさん:2012/03/19(月) 21:24:25.17
C++のステートパターンの骨組みというか
サンプルプログラムを教えてください。
614デフォルトの名無しさん:2012/03/19(月) 21:26:51.56
615デフォルトの名無しさん:2012/03/19(月) 22:15:48.44
>>613
ttp://codepad.org/zJKMXKy9
概念を理解できてれば多言語のソースでもなんとなく読めるはずだがな
616デフォルトの名無しさん:2012/03/19(月) 22:48:35.81
>>615
本質的なところじゃないけど、deleteしようぜ
617デフォルトの名無しさん:2012/03/24(土) 13:51:17.47
構造体内部に関数って入れられるんだっけ?
618デフォルトの名無しさん:2012/03/24(土) 14:14:55.96
C++だからstructで定義するものもクラス
619デフォルトの名無しさん:2012/03/26(月) 20:12:58.72
C++だとunionもクラスなの?
620デフォルトの名無しさん:2012/03/26(月) 20:42:27.78
ポリモルフィズムの概念がない
ポインターについて質問です。

*p++

>この文では最初にp をインクリメントし、次に新しいメモリアドレスにある
>値を得ます。

と、いう説明がありますが、"次に新しいメモリアドレスにある値" の意味が
わかりません。 仮にp に格納されているアドレスが100番地 だったとすると、
それが+1(char の場合) されて101 となるだけではないのでしょうか。
>>621
いいえ違います
>"次に新しいメモリアドレスにある値"
その例では、101にある値。
>>622
ではどういう動作をするのでしょうか。詳しくお願いします。
>>623
なんとなくわかりましたが、101番地にある値が"得られる" というのが
いまいちしっくり来ません。 ひょっとしてこれは、ポインターが+1 されて、
それ以降、そのポインターを使ったときは、101 番地のデータが読める、
という意味で"得られる" と書かれたものだと解釈してよいでしょうか。
>>625
演算子の優先順位が
 後置インクリメント(++) >> 前置インクリメント(++) >> 間接参照(*) >> 乗算(*)

この場合は
 *p++ = *(p++)

メモリ内容が以下だとすると
ADDRESS VALUE
0x00401000 0x0123
0x00401004 0x0456
0x00401008 0x0789
0x0040100C 0x0ABC

DWORD* p
p = 0x00401004   *p は 0x0456
p++
p = 0x00401008   *p は 0x0789
あ、最後のp = 0x00401008
の "=" は代入じゃなくて p が指す物を示す
>>626
具体的な例を挙げてくださり、ありがとうございます。
演算子の優先順位を忘れていました。カッコをつけるとわかりやすいですね。

ただ、残念ながらおっしゃっている事がまだ理解できません。
*p++ ・・・この文が、何かの変数や関数への代入文に使われているのなら、
「ポインターを+1 されたアドレスのデータを何かに代入しているんだな」 と
思えるのですが、参照している教科書には *p++ とだけしか書かれておらず、
何かに代入しているわけではないのです。
だったら * は不要で、 p++ だけでいいのでは? と思います。

ど素人の低レベルな質問で意味不明かもしれませんが、なにかヒントを下さい。
>>628
前後のコードもしくは文章plz
>>629
独習C から、該当部分を引用します。

>ポインタそのものに対してだけでなく、ポインタが指しているオブジェクトに
>対してもインクリメント演算子やデクリメント演算子を使用する事ができます。
>しかし、ポインタが指しているオブジェクトをインクリメントしようとするときには
>注意してください。 例えば、値1 の整数を指しているp があるとします。
>次の文を実行するとどうなるでしょうか。
>
> *p++
>
>予想は当たったでしょうか。この文では最初にp をインクリメントし、次に
>新しいメモリアドレスにある値を得ます。ポインタが指しているものを
>インクリメントするためには、次のような式を使わなければなりません。
>
> (*p)++
>
>かっこをこのように使うことによってp が指している値をインクリメントすることが
>できます。
>また、関係演算子を用いれば、2つのポインタの値を比較する事ができます。
>もちろん、ポインタの比較は、それが相互に関連している、つまり、同じ型の
>オブジェクトを指しているような場合に、初めて意味を持ちます。

以上該当部分です。何か重要な情報がありますでしょうか。
>>630
書いてるまんまだろ

参照先をインクリメントしたいときは (*p)++ と書け
*p++ と書いたらポインタ自体をインクリメントすることになる
って言ってるだけ

*p++ のコード自体に筆者の言いたい意味があるわけじゃない
>>631
>*p++ のコード自体に筆者の言いたい意味があるわけじゃない

なるほど。ここまで読み進めてきて、はしょった表現がなかったものですから、
勘違いしていたようです。 どうもありがとうございました。
*p++ って、もはや定型的な書き方なのさ。
>>630
>> *p++
>>
>>予想は当たったでしょうか。この文では最初にp をインクリメントし、次に
>>新しいメモリアドレスにある値を得ます。

「インクリメント前のメモリアドレスにある値を得た後、pをインクリメントする。」だろ?
なんだか勘違いしそうな説明が続いてるなw

例えば、
int a[4] = { 0,1,2,3 };
int* p = a;

int n = *p++;
int m = *(p++);

ってすると、n = 0, m = 1 になるんだぜ。
上の説明だけでは納得できないだろ?w

>>635
いや、大体わかったつもりです。

int n = *p++
// 配列a の先頭番地のデータ(0) をn に代入し、その後インクリメントされる。

int m = *(p++)
// p は+2 されているので、データ(1) がm に代入され、その後インクリメント。

これらの文が処理された後、p はデータ(2) の番地を指している。

・・こういう解釈であっていますよね。
>>636
nもmも式評価のときは*pで++は*よりも優先順位が高いから
結合するのはどちらもpだけってことだろ?
>637
すいません、本当に素人で、釣りをしているわけではありません。
直球ど真ん中のマジレスでお願いします。
そこであえて質問ですが、"結合" とは、この場合どういう意味でしょうか。
疑問に思ったところは6章のポインタで
>>636のいいたいインクリメントについては2章制御文その1でやってるから大丈夫だろ
ってかインデックス見ようと翔泳社見たら独習C絶版なのな
独習C++ってC読んでること前提で書かれてなかったっけ?
>>638
その演算子がある項に作用すること

後置インクリメント++の場合、単項演算子で結合性は右から左
また優先順位は参照演算子*よりも高いので
この場合(*p++)は++の左にある単項、pに作用する
後置インクリメントは評価後にインクリメントされるので
この式(*p++)自体の結果は*p

これでいい?
641営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 20:49:01.75
>>640
160km/h のストライク。よくわかりました。今後ともよろしくお願いします。
>>639
いや、絶版じゃないだろう・・・・・第3版のことか?
http://books.shoeisha.co.jp/book/b72093.html

独習C++が独習Cを読んでいる(C言語は既習である)ことを前提に書かれているのはその通り。
>>642
おおスマン
見落としていた
昨日からC言語始めたプログラム初心者です

四捨五入のプログラムで
例えば1.666を第3位で四捨五入すると1.670000って表示されるんだけど
これを1.67と表示させるにはどうやったらできますか?
printf("%.2f",1.67);
>>645
サンクス
>>644
つ[ "%g"]
CLRのコンソールのメイン関数って、Microsoft独自のモノですか?
それとも、C++の新規格のメイン関数なのですか?

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
return 0;
}
>>648
該当スレできけば?
くだすれC++/CLI(初心者用)part2
http://toro.2ch.net/test/read.cgi/tech/1268613679/
>>648
そもそもnamespace Systemなんて標準のC++にはないよ。
CLIで探せばよかったのですね。Thanx!
c++簡易ブラウザーを作りたい
boost::asioでソケット周りできた。クッキーも仕様書みながらある程度できた。
javascriptはECMAScriptと戦わないとだめなのか?
モジラやググールのを使え
V8が面白そうだ。先は長いな…
DOMをやるのかやらないのかでだいぶ違う
ブラウザの進化の過程をたどるか、あるいは新発想のアーキテクチャでいくか。
ある程度の完成物を狙うなら、いったん、V8なり、JSCなりを呼ぶ実装がいい
そもそも、JavaScriptエンジンのインタフェース自体から、学ぶ点がある
657デフォルトの名無しさん:2012/04/14(土) 15:40:27.10
int a=ランダム値;
bool flag;
if(a==1 || a==42 || a==145)flag=true;

↑こんな感じのことをやりたいんですが、
(a==1 || a==42 || a==145) ←ここのとこを簡単に書く方法ってないですかね?
例えば
(a==(1 || 42 || 145)) みたいな。(これじゃ当然無理ですけど)

何か方法があれば教えて下さい。よろしくお願いします。
658デフォルトの名無しさん:2012/04/14(土) 15:46:14.83
bool check(int const a)
{
static const int checkers[] = {1, 42, 145};
for (int ic = 0; ic < sizeof(checkers) ? sizeof(* checkers); ++ic) {
if (a == checkers[ic]) return true;
}
return false;
}

bool flag = check(a);
659デフォルトの名無しさん:2012/04/14(土) 22:09:09.10
最終的に吐き出されるバイナリが、結局、
(a==1 || a==42 || a==145) みたいなことになるんだろうから、
(a==1 || a==42 || a==145) で十分に簡潔と言えるんじゃなかろうか。

もちろん、そんなクジみたいな抽選をやたらとあちこちで実行してるなら、
全体的に読みやすいように、書き様はあると思うが。マクロとかで。
660デフォルトの名無しさん:2012/04/14(土) 22:10:54.95
こうなら書けるな 発想の転換の一助になれば。

flag=false;
select(i){
case 1: case 42: case 145: flag=true;
}
661デフォルトの名無しさん:2012/04/14(土) 22:25:07.23
<< とか使う
662デフォルトの名無しさん:2012/04/14(土) 23:48:08.59
bool operator,(〜)とか使う
663デフォルトの名無しさん:2012/04/15(日) 00:10:01.79
bool f(int a){
struct ck{ck(int a):v(a),t(false){}ck&operator,(int a){t=t||a==v;return*this;}operator bool(){return t;}int v;bool t;};

return ck(a),1,25,142; }
664デフォルトの名無しさん:2012/04/15(日) 00:23:45.95
可変長引数でチェック関数作るとか
665デフォルトの名無しさん:2012/04/15(日) 08:09:44.01
flag = (a==1 || a==42 || a==145);
が、一番シンプルに見えるわけだがw
666デフォルトの名無しさん:2012/04/15(日) 14:31:40.48
Perl6のJunctions風の何かを作るといいのかな
667デフォルトの名無しさん:2012/04/15(日) 21:22:35.70
D言語のlazy 相当の機能が有ればなあ
668543:2012/04/18(水) 22:11:53.62
0〜999の番号を10000の要素にランダムに割り当てるときに
各番号が10回ずつ(各番号が同じ回数という意味で)出てくるように割り振りたいのですが
なにかいい方法ありませんか?
669デフォルトの名無しさん:2012/04/18(水) 22:16:13.58
vectorに突っ込んでrandom_shuffle
670デフォルトの名無しさん:2012/04/18(水) 22:20:46.95
>>669
そのような関数があったんですね。勉強になります!
ありがとうございました。
671デフォルトの名無しさん:2012/04/18(水) 22:28:39.71
質問です
C言語でマイクから入力した音声を送信する方法
もしくはマイクから入力された音声がどこに保存されているかを教えてください
672デフォルトの名無しさん:2012/04/18(水) 22:43:31.86
環境も書かずになんて間抜けな質問を……
673デフォルトの名無しさん:2012/04/18(水) 23:00:22.03
失礼しました
環境はbcpadです
674デフォルトの名無しさん:2012/04/19(木) 00:00:32.77
WindowsならmmsystemだからWin32APIスレで聞いた方がいいだろ
675デフォルトの名無しさん:2012/04/19(木) 06:51:33.03
>>674
情報ありがとうございます!
676デフォルトの名無しさん:2012/04/19(木) 14:52:44.05
コマンド・ライン引数でargc と argv というのが伝統的に使われている
そうですが、それぞれの語源(何の略) か、教えてください。
677デフォルトの名無しさん:2012/04/19(木) 15:05:36.01
argument count value
678デフォルトの名無しさん:2012/04/19(木) 15:26:44.81
>>677
ありがとうございます!
679デフォルトの名無しさん:2012/04/19(木) 21:37:51.52
VC++をつかってC言語でLifeGameを書こうとしてみたのですが、
680デフォルトの名無しさん:2012/04/20(金) 01:33:52.49
セルがモニタから飛び出して勝手に増殖し出してしまって、
681デフォルトの名無しさん:2012/04/20(金) 02:54:49.21
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|
682デフォルトの名無しさん:2012/04/20(金) 03:00:54.75
罠を張って待っていることも知らずに、

↑なーんてなことを書き出してしまって、
683デフォルトの名無しさん:2012/04/20(金) 04:06:50.55
【そりゃないよドコモさん】ドコモが日本通信に提訴された経緯
http://weekly.ascii.jp/elem/000/000/084/84599/
 ドコモは「必要な費用」と説明したとのことですが、その費用はそもそも算定式に含まれているはず、
というのが日本通信側の主張です。
 このため日本通信が差額の支払いを一時停止したところ、ドコモ側は「接続を切断する」と回答。
結果、ユーザーへの影響を考慮して、日本通信側はドコモ側の要求どおりの支払いを続けている、
というのが今の状況です。
684デフォルトの名無しさん:2012/04/24(火) 06:23:00.54
宿題で出されたこの問題が分からないのですが、誰か教えてくれませんか。

1〜9までの連続する数字の間に和・差・積の演算子(+, -, *)を適当に入れて、
式の値がちょうど 100 となる例を挙げよ(10とおりだけ書け)。

たとえば、
 1 + 2 * 3 * 4 * 5 + 6 * 7 - 8 * 9 = 91
というような計算をする。ただし、この例では式の値が91となるので答えではない。
685デフォルトの名無しさん:2012/04/24(火) 06:33:39.44
このスレに何の関係が
686デフォルトの名無しさん:2012/04/24(火) 06:35:50.34
ごめんなさい、宿題スレに書き直してくるので無視してください
687デフォルトの名無しさん:2012/04/24(火) 06:55:17.27
eval() を実装しろという問題だな

webサービスを呼ぶ、でもいい
688デフォルトの名無しさん:2012/04/25(水) 00:26:53.55
csvのデータを読み込み、このデータセットの平均値Ave を求めて
標準出力するCプログラムを書きたいのですがどうすればいいですか?
689デフォルトの名無しさん:2012/04/25(水) 00:36:54.63
まず深呼吸します
690デフォルトの名無しさん:2012/04/25(水) 07:58:46.21
宿題レベルの質問に見えるが、csvに何が詰まってるかによるな(22,2Cの扱い)。

出題者が、データはこれな。って言ってきてないか。
691デフォルトの名無しさん:2012/04/25(水) 14:26:18.67
図書館でプログラミング作法を借りてくる
692デフォルトの名無しさん:2012/04/25(水) 16:16:06.77
C言語で、できるだけ簡単な文法だけを用いて、「ある数列から重複している値があれば取り出す」という関数を作りたいのですが、どうすればいいのですか?
693デフォルトの名無しさん:2012/04/25(水) 16:36:07.14
>>692
数列は長いか?(数万件)
数値範囲が予測できるか?
範囲が狭いか?(1~10など)
小数点以下も必要か?
で方法が違う。
694デフォルトの名無しさん:2012/04/25(水) 16:38:59.09
>>692
CSTLのsetを使う
695デフォルトの名無しさん:2012/04/25(水) 16:52:07.30
回答ありがとうございます。

数列は、int型で自由に入力したものになるので、長くなる可能性があります。
値の範囲は予測できません。
小数点は利用しません。
696デフォルトの名無しさん:2012/04/25(水) 17:24:24.59
要はエスパー待ちて事だな。
697デフォルトの名無しさん:2012/04/25(水) 17:26:40.06
>>692
「重複している値があれば取り出す」とあるが、例えば「1,1,1,1,1」という数列があったとき、
1は1回だけ取り出されるのか、それとも4回取り出されるのか。
698デフォルトの名無しさん:2012/04/25(水) 18:08:25.02
どっちでもいいじゃん

for (i=0; i<N; ++i) {
IntSet_insert(tmp, data[i], &success);
if (!success) {
IntSet_insert(s, data[i], NULL); //1回だけの場合
IntList_push_back(l, data[i]); //複数回の場合
}
}
699デフォルトの名無しさん:2012/04/25(水) 18:21:15.51
取り出すってどういうことを言ってるんだろうか
700デフォルトの名無しさん:2012/04/25(水) 18:33:23.57
>>699
日本語の問題だな。
取り出す→Action
抽出、除外→Process
701デフォルトの名無しさん:2012/04/25(水) 18:46:10.92
配列から取り出して元の配列の要素数を減らすのか、取り出したものを別の配列に入れて再利用するのか
702デフォルトの名無しさん:2012/04/27(金) 04:00:59.03
set<int>にinsertしていって、戻り値でカウントするのが一番簡単だろ。
で、値をキーとしたmap<int value,int count> あたりに保存しておけば、
後はどんな要求にでも応えられるだろ。
703デフォルトの名無しさん:2012/04/27(金) 10:38:56.91
> 数列は、int型で自由に入力したものになるので、長くなる可能性があります
これはバッファオーバーランしてくださいって言ってるようなもので、
出てきた数値を逐一記憶するタイプの解法ではどんな巨大なメモリとディスク搭載したマシンでも仕様を満たせない。
唯一の可能性は重複する数値だけで構成される数列を生成する数式を見つけること。
704デフォルトの名無しさん:2012/04/27(金) 14:39:07.54
計算したデータをテキストファイルに出力するプログラムを作っています。
出力する行数が多い場合のやり方として、常套手段があれば、教えてください。

一行文字列を作ったら、ファイル書き込みか、
全行文字列を作ったら、一気にファイル書き込み。

メモリーが気になるので、前者で行いたいのですが、
計算途中でも出力する文字列があるので、迷っています。


705デフォルトの名無しさん:2012/04/27(金) 14:46:47.66
速度だったら256、512Kくらいずつ書き出すのが速い。バッファ。
多くしすぎてもかわらない。
706デフォルトの名無しさん:2012/04/27(金) 14:51:50.24
およそこんな風だ。これだとバッファの残りが出力されないから、クラス化してデストラクタ使うと良い。

lineout( string str) {
string buf;
if( buf.size()+str.size() > 256*1024) { buf、str出力; buf.resize(0); return; }
buf+=str;
}
707デフォルトの名無しさん:2012/04/27(金) 14:53:29.15
こうだな。これをクラス化。

lineout( string str) {
static string buf;
if( buf.size()+str.size() > 256*1024) { buf、str出力; buf.resize(0); return; }
buf += str + (string)"\n"; }
708デフォルトの名無しさん:2012/04/27(金) 15:00:20.54
>>704
昔のVBとかだったら1文字ずつ書き出すとそのたびにディスクアクセスしてたりするが、
OSやライブラリによっては自分でバッファ持って適当にまとめて書き込んだりするし、
今どきの1GBや2GBがデフォのPCではテキストがどれだけ膨れ上がろうが気にならない。

一番プログラム書きやすい形でやるのが常套手段ともいえる。
709デフォルトの名無しさん:2012/04/27(金) 15:07:00.96
WindowsXPだとまとめて書き出す方が速い。OSのバッファを使ったとしても。
OSが優れていればこのようなツールはいらない。


FastCopy
H.Shirouzu(白水啓章)
特徴:
Windows系最速のファイルコピー&削除ツールです。
Read/Write も、OS のキャッシュを全く使わないため、他のプロセス(アプリケーション)が重くなりにくくなっています。
可能な限り大きな単位で Read/Write するため、デバイスの限界に近いパフォーマンスが出ます。
MFC 等のフレームワークを使わず、Win32API だけで作っていますので、軽量&コンパクト&軽快に動作します。
全ソースコードは BSD ライセンスで公開していますので、VC++ 等をお持ちであれば、ご自由にカスタマイズしてのご利用も可能です。
710デフォルトの名無しさん:2012/04/27(金) 15:10:21.23
>>709
有意な差があるのか?
711デフォルトの名無しさん:2012/04/27(金) 15:12:19.05
宣伝かよ作者うぜえな
712デフォルトの名無しさん:2012/04/27(金) 15:28:55.51
>速度だったら256、512Kくらいずつ書き出すのが速い。バッファ。
なるほどです。これだと、ファイルを意識しなくてもスムーズに
出力できます。ありがとうございました。
713デフォルトの名無しさん:2012/04/27(金) 15:42:03.21
>>710
自分は安定性がいいので使っているが、調べると速度も良いらしい。


ファイルのコピー&削除が抜群に速い---「FastCopy」:PC Online
http://pc.nikkeibp.co.jp/article/special/20081114/1009723/


手間というほどのことはないのに、どうしてわざわざツールを開発する必要があったのか。
そんな疑問を抱きながら、家族旅行のときに撮影した映像(動画)ファイルをコピーしてみた。
ファイルの容量は、440メガバイト。
普通にエクスプローラでCからDドライブへコピーしたところ、40秒かかった。
ところが「FastCopy」を使ってみると、なんとたったの16秒で終わってしまった。2倍以上の速さでコピーできたわけだ。
714デフォルトの名無しさん:2012/04/27(金) 15:51:10.84
>>713
勉強になったわ。
ありがとう。
715デフォルトの名無しさん:2012/04/30(月) 03:37:10.46
実際どんなのが作れるの?
716デフォルトの名無しさん:2012/04/30(月) 06:47:09.53
WindowsもLinuxもつくれます。なんでもつくれます
717デフォルトの名無しさん:2012/04/30(月) 07:35:03.89
ハードは作れまい。と言いたい所だが、
SystemCだのいって、ハードもCもどきで書いちゃうし、
シミュレータもたぶんC(こいつは根拠なし)。

いたるところ、地味にCでできてます
718デフォルトの名無しさん:2012/04/30(月) 10:44:50.70
afxinetを使って通信部分のプログラムを書いているのですが、
クッキー関連がどうもうまくいきません。

m_pFile->AddRequestHeaders(_T("Connection: Keep-Alive"), HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD );
m_pFile->AddRequestHeaders(_T("User-Agent: TestAgent"), HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD );
m_pFile->AddRequestHeaders(_T("Cookie: visited=100"), HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD );

と設定後にSendRequestして、HTTP_QUERY_FLAG_REQUEST_HEADERSでQueryInfoしたところ、
上2つはきちんとヘッダに記述されているのですが、Cookieは書かれていませんでした。
クッキーは何か特別なんでしょうか?
OSはWindows7で、IEのVerはIE9ですが、もしかしてIEの保護云々の問題?
なにか知っている点があれば教えていただきたいです。
719デフォルトの名無しさん:2012/04/30(月) 10:57:17.49
curlつかっとけ。マルチプラットホームだしPHPの通信機能でも使われ信頼性もある。
720デフォルトの名無しさん:2012/04/30(月) 10:59:05.14
クッキーは自前でハンドルする的なオプションが必要
721デフォルトの名無しさん:2012/04/30(月) 11:41:55.93
void (*ptr)();

これって何をしてるんですか?
void型のポインタ変数を宣言してるんだと思うんですけど

なんで*ptrが()にはいってるのか、その後に()ついてるのかがわかりません。
*ptrの括弧をとると以下のエラーがでて
030.c:10:9: error: lvalue required as left operand of assignment

後ろの括弧をとると以下のエラーがでました。
030.c:11:6: warning: dereferencing ‘void *’ pointer [enabled by default]
030.c:11:11: error: called object ‘*ptr’ is not a function
722デフォルトの名無しさん:2012/04/30(月) 11:43:11.39
関数ポインタってやつです
ぐぐれば詳しい説明がどっかにあるだろう
723デフォルトの名無しさん:2012/04/30(月) 12:04:53.25
>void型のポインタ変数を宣言してるんだと思うんですけど

違う
724デフォルトの名無しさん:2012/04/30(月) 12:07:26.43
voidを返す(=値を返さない)、引き数を明示しない、関数へのポインタ、ptrの宣言。
725デフォルトの名無しさん:2012/04/30(月) 12:35:36.80
関数ポインタみてきました。ありがとう。
726デフォルトの名無しさん:2012/04/30(月) 12:36:43.01
よく訊かれる質問、 特に、主として C 言語を利用しているプログラマの方からの質問なのですが、
「C# は初入門の言語として適切か」と言うものを受けることがあります。

多いのは、 「C 言語 → C++ というように段階を経て学んでいくべきなのではないか」という意見です。
「Java や C# だと、class や static など、最初に説明しないといけない“おまじない”が多いし・・・」とか、
「Java や C# などのオブジェクト指向言語を学ぶにしても、 その基本は構造化プログラミング言語だし」というのが、
これらの意見の理由です。

この質問に対する(僕個人の私的な)答えですが、 結論から言うと、初めから C# を学ぶ方がいいと思います。

例えば、C 言語なら最初から理解するのが難しい“おまじない”の部分がないかと言うとそんなはずもなく、
#include などはやはり“おまじない”ですし、 Java や C# などの新参の言語は、
構造化プログラミング言語としても見た場合でもかなり優秀な言語です。

むしろ、C 言語など、長い歴史を持つ言語は、 昔からの悪習を引きずっていて、
下手に学ぶと悪い癖が付いたまま抜けなくなる危険性の方が高いです。
727デフォルトの名無しさん:2012/04/30(月) 12:44:12.48
そうですね
728 ◆QZaw55cn4c :2012/04/30(月) 13:01:39.12
>>726
C の悪臭もとい悪習ってなんでしょうね。ちょっと興味深い。
729デフォルトの名無しさん:2012/04/30(月) 13:21:12.54




ネット掲示板で無関係の人の実名をあげた数名が訴えられたぞww


http://hayabusa.2ch.net/test/read.cgi/news4vip/1335714960/230



お前等、IP確認しとけよwwwwww





730デフォルトの名無しさん:2012/04/30(月) 18:25:31.83
ありがとうございました!

>>719
ちょっとググってみたらcurlってCでも使えるんですね。
昔Linuxで見たことがあったので勘違いしてました。
詳細調べてみます。

>>720
なるほど、どこかでそのオプションを設定する場所があって
それを行わないと上書きされないってことですね。
そちらもちょっと調べてみます。
731デフォルトの名無しさん:2012/04/30(月) 20:59:53.95
>>726
CもC#もやればいい ただ、「付いてくる」ライブラリが全然違うわけで、
たぶん、両方やってると、「…ああー。それでC#かー」って悟りが開けるんだろうか

どとねと系は食わず嫌い。やっぱ、自称C厨の俺がやるんなら、C++/CLIかなあ。
732デフォルトの名無しさん:2012/04/30(月) 21:07:59.73
つ IronPython
733デフォルトの名無しさん:2012/04/30(月) 21:50:36.49
Javascriptが世界を支配する日 - DQNEO起業日記
http://dqn.sakusakutto.jp/2012/04/javascript_14.html

もう氏ねよこいつら。最近のウェブ屋ども頭おかしいわマジで。

JavaScriptのVMは何の言語で書かれてるの?
てめえの使ってるブラウザは何の言語で書かれてるの?
てめえの使ってるOSは、デバイスドライバは、何の言語で書かれてるの?
JavaScriptで書かれてる業務系や基幹システムどれだけあんだよ?小数点切り捨てたら0%じゃねえの?
科学技術計算は?ゲームプログラムは?コンピュータグラフィックスは?
734デフォルトの名無しさん:2012/04/30(月) 22:11:52.59
それをいうなら、これだけJScript(VM)が洗練されてるのに、
なにかというとスクリプト部分はVBSで書いてくるMSに何か言ってやってくれw

Write once, run anywhere の理想に近づいてるのは、いまやJSと。
そしてもちろん、その屋台骨を支えてるのはC/C++と。

両方制覇しちゃえばいいのだ。
735デフォルトの名無しさん:2012/05/03(木) 19:30:49.58
学校でcプログラミングを習い始めたのですが、家でもやりたいなぁと思いました

なにか初心者におすすめのソフトウェア(テキストエディタ?コンパイラ?みたいなやつ)ありますか?
736デフォルトの名無しさん:2012/05/03(木) 19:33:59.27
gcc
737デフォルトの名無しさん:2012/05/03(木) 19:34:32.87
winならVC++がメジャーかと
738デフォルトの名無しさん:2012/05/03(木) 19:38:25.88
eclipse+cdt
739デフォルトの名無しさん:2012/05/03(木) 20:02:41.68
mac
740デフォルトの名無しさん:2012/05/03(木) 20:12:18.27
VC2010EE
741デフォルトの名無しさん:2012/05/03(木) 20:14:09.35
LSI C-86 w
742デフォルトの名無しさん:2012/05/03(木) 22:05:34.77
結局これだけいろいろあるので、習ってるときに使ってるのと同じにすればいい

C でありがちな、「そのコンパイルエラーどっから来てる?」の癖も掴みづらいし
743デフォルトの名無しさん:2012/05/03(木) 22:33:38.69
変な癖つけると、その環境で一生過ごすことになる
744デフォルトの名無しさん:2012/05/03(木) 22:37:31.66
mingwのccを気軽に差し替えられる野良Clangがあればいいんだけどねー
745デフォルトの名無しさん:2012/05/04(金) 02:59:09.38
なぜビットフィールドは構造体でしか使えないのでしょうか?
普通の変数と同じように宣言(例えば"unsigned bool :1;"など)と
することは出来ないのでしょうか?
746デフォルトの名無しさん:2012/05/04(金) 03:43:37.68
>>745
ビットフィールドを構造体で使っているのではなく、
構造体の書式構造をビットフィールドの表記に流用しているだけです。
つまり、structと書いてあっても厳密な意味での構造体とは違います。
747デフォルトの名無しさん:2012/05/04(金) 10:36:43.68
厳密な構造体の厳密な意味を教えてくれ
748745:2012/05/04(金) 11:35:55.39
>>746
ありがとうございます!少し分かってきた様な気がするのですが、まだいまいち分かりません・・・。
例えば以下のコードはビットフィールドと厳密な意味での構造体どちらになるのでしょうか?
struct {
unsgined char byte0;
unsigned char byte1;
unsigned bit: 0;
} test;
また「厳密な意味での構造体」の定義などについて詳しく教えて頂けると嬉しいです _ _
749デフォルトの名無しさん:2012/05/04(金) 12:44:30.66
「構造体のメンバーに対してビットフィールドを使用できる」と理解してた
750デフォルトの名無しさん:2012/05/04(金) 12:53:57.31
ビットフィールドは環境依存する。不便でもビット操作にしとけ。
何バイト確保されるかで大きく差が出る。
751735:2012/05/04(金) 12:57:27.14
家のはwindowsで、学校ではLinuxを使ってます

いろいろありますね・・・
最初なんで、学校で使ってるEmacsか
メジャーらしいVC++か、ですかね
752デフォルトの名無しさん:2012/05/04(金) 13:02:06.15
LSI-Cとかいう8か16ビットのヘボじゃないければなんでもいい。
753デフォルトの名無しさん:2012/05/04(金) 13:21:46.31
>>752
森 公一郎さんにあやまれ
754デフォルトの名無しさん:2012/05/04(金) 14:43:09.47
寧ろpnoriさんに謝るべきかも。
755デフォルトの名無しさん:2012/05/04(金) 14:43:38.53
>>751
てかマルチやめろ
756デフォルトの名無しさん:2012/05/05(土) 17:48:15.54
スレ違いだったらごめん。
C++とDirectXを使ってアプリ作るのが最終目標なんですけど、以前誰かにC++やるならC覚えてからにしろって言われて
ずっとCの勉強をチマチマしてるんですけど
実際C++を勉強する上でCの知識って重要ですか?
どこまでCの勉強して、いつからC++に入ればいいのやら・・・
757片山博文MZボット ◆0lBZNi.Q7evd :2012/05/05(土) 17:53:34.44
>>756
C言語の関数とポインタと構造体が完全に理解できる
ようになったら、C++に進んでいい。
758デフォルトの名無しさん:2012/05/05(土) 20:18:50.07
我流なら、とにかくC++を【要求する】APIを使っていくことじゃないかな
そしてときどき、Cの教科書を読み返すと、知識が整理されていく

リアの後輩なら、そこで悩む前に、x86の汗の主な命令を覚える気でいろと言いたい
逆汗を読解できる水準で十分だし、必要ならそこからいくらでも伸びていく
759デフォルトの名無しさん:2012/05/05(土) 22:10:47.54
>>756
実はC++の表っ面だけならCを知らなくてもいいんだが
C++である程度踏み込むと結局Cの知識も要るし
何よりC++向けの資料はほとんどがCも習得してることを要求する
760756:2012/05/06(日) 11:16:06.68
ありがとうございます。
ポインタ…C++になっても必要なんですね。関数と構造体は普段Javaでやってる分理解は早いかも
自分のイメージではJavaのオブジェクトと構造体って変わらないイメージがあります。
761デフォルトの名無しさん:2012/05/06(日) 11:20:49.82
構造体の機能は、すべてクラスで実現できるから、構造体に詳しくなる必要なし。
ほぼ同じだし、クラスがわかれば構造体もわかる。
762デフォルトの名無しさん:2012/05/06(日) 11:27:41.27
c++の機能はどなくてもプログラムかけるから基本いらない
他人と開発するときに必要になったものを理解していけばいい
763デフォルトの名無しさん:2012/05/06(日) 11:36:27.14
C++不要説だったら、C言語不要説も成り立つわけだが。
そしたらアセンブラも不要説も成り立って、ビット列でプログラム書くのが一番という説になるな。
764デフォルトの名無しさん:2012/05/06(日) 18:36:28.36
まぁ、AltairとかTK-80があるくらいだからな。C/C++とか
あんなの飾りです。偉い人にはそれがわからんのですよ。
765デフォルトの名無しさん:2012/05/06(日) 20:58:21.68
ポインタをうまく扱うことに、C++を使ってもいいんだ

C++は究極的にはC/汗に落とし込めるわけだから、
C++などなくても、プログラミングができるというのは正しい

C++を使う理由は、C++を使うとスマートに書ける場面のあること、
あと、C++を要求するAPIの存在。


まあいいんだよ、まずは我流でいいから覚えちまえ
766デフォルトの名無しさん:2012/05/10(木) 10:46:14.63
/*/ hogehoge /*/
としたコメントアウトを目にしましたが、これはどういう意味があるのでしょうか?
767デフォルトの名無しさん:2012/05/10(木) 11:14:32.36
>>766
書いた奴に聞け。
何かツールで必要とする書式か、さもなきゃ検索用のおまじないだろ。
768デフォルトの名無しさん:2012/05/10(木) 12:24:13.87
コメント内に/*があるのはよくない
769デフォルトの名無しさん:2012/05/10(木) 12:32:56.38
かっこいいと思って書いてるような気がする
ツールで必要とするとしてもこんな間抜けな書式はあり得ないと思う
770デフォルトの名無しさん:2012/05/10(木) 12:46:39.78
文法上問題無いだろ。
/* と */の間は何でもコメント。/が入ってもコメント。
771デフォルトの名無しさん:2012/05/10(木) 12:54:10.28
ヒント:
コメントをネスとしてしまうコンパイラも在る。
772デフォルトの名無しさん:2012/05/10(木) 12:54:30.45
s/ネスと/ネスト/
773デフォルトの名無しさん:2012/05/10(木) 13:13:12.79
>>770
コメントのネストを許すか許さないかで状況が変わってしまうような
書式を使用する時点で間抜けな書式なんだよ
774デフォルトの名無しさん:2012/05/10(木) 13:17:39.98
#if endifをコメントに使うと便利。/* */は複数回使うと意図しない動作になる。
775デフォルトの名無しさん:2012/05/10(木) 15:49:36.70
// /*
処理
// */

も最初の//をつけ外しすれば便利。

JSで多用してる。
776デフォルトの名無しさん:2012/05/10(木) 16:11:39.25
素直に
// 処理
の付け外しでいいよ
777デフォルトの名無しさん:2012/05/10(木) 17:34:18.04
if(0){ }
778デフォルトの名無しさん:2012/05/10(木) 18:00:18.54
いや、省略したが処理が20行くらいあるんだわ
779デフォルトの名無しさん:2012/05/10(木) 18:17:15.17
20行くらいエディタのマクロであっという間
780デフォルトの名無しさん:2012/05/10(木) 18:50:53.61
つーか、そういうときこそ
#if 0
#endif
で囲めよ。ちなみに、C#なら#if falseな。
781デフォルトの名無しさん:2012/05/10(木) 19:26:54.62
>>766
その文をコメントアウトしている現状ではその前後の文を実行するが
その文を実行したいときにはその前後の文を実行したくないのでは?
まあ、もしそうならプリプロセサ使ったほうが良いとは思うけど…
782デフォルトの名無しさん:2012/05/10(木) 19:47:10.68
>>780
何これ便利すぎwwワロタwww
783デフォルトの名無しさん:2012/05/10(木) 22:10:07.83
#オープンソースのコードを見て勉強しています。

// こちら自分のコード。ターゲットウインドウにキーメッセージを送る。ターゲットに届いてることはデバッガで確認済み。
void KeyEventDown(BYTE key,double wait){
::SendMessage(targetWnd,WM_KEYDOWN,key,NULL);
Sleep(wait);
};
void KeyEventUp(BYTE key,double wait)
{
::SendMessage(targetWnd,WM_KEYUP,key,NULL);
Sleep(wait);
}
784デフォルトの名無しさん:2012/05/10(木) 22:10:35.88
//こちら、他人様の書いたコード(ターゲット側)
// ウインドウプロシージャ内の抜粋
case WM_KEYDOWN:
case WM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
{
ProcessKeyEvent((int) wParam, (DWORD) lParam);
}
// ここまでプロシージャ抜粋

// プロシージャで呼ばれている関数(ここがよく分からない)
inline void ProcessKeyEvent(int virtKey, DWORD keyData)
{
bool down = ((keyData & 0x80000000l) == 0);
:
}

というような形になっています。
785デフォルトの名無しさん:2012/05/10(木) 22:10:57.93
僕は、SendMessage()でWM_KEYDOWN/WM_KEYUPのときはlParamはNULLで送ればいいと思っているのですが
間違っていれば教えてください。
ターゲット側がlParamにビット演算?を使ってwParamのキーが押されたのか、離されたのかを判断しているようです。
このせいで、WM_KEYDOWNもWM_KEYUPも、ターゲット側で「押された」として判断されているような??
どのように送ってあげれば正しくターゲット側が解釈してくれますでしょうか?
(ターゲットはできれば弄らずに・・・)
よろしくお願いいたします。
786デフォルトの名無しさん:2012/05/10(木) 22:16:55.73
SendInput
787783:2012/05/10(木) 22:39:47.01
SendInputを調べてみましたが、ターゲット側をフォアグラウンドにしないといけないのでしょうか?
事情によりそれは困ります。
ターゲット側を書き換えて、WM_KEYDOWN/UPによってdownの値を変えてみようかと思いますが、
けっこうコード量が多く複雑なので、関連する部分で不具合が出ないか心配です。。。
(ビット演算でやっている意味や、SendMessage()のlParamにXXを指定すれば通る、みたいな回答が欲しかったり・・・)
788デフォルトの名無しさん:2012/05/10(木) 23:22:42.98
keyDataに何が入ってるか調べた?
789デフォルトの名無しさん:2012/05/10(木) 23:54:07.49
>>785
> 僕は、SendMessage()でWM_KEYDOWN/WM_KEYUPのときはlParamはNULLで送ればいいと思っているのですが
> 間違っていれば教えてください。
間違ってるだろ
ttp://msdn.microsoft.com/en-us/library/windows/desktop/ms646280
ttp://msdn.microsoft.com/en-us/library/windows/desktop/ms646281
結果的に0でいいならそれでいいけど状態に合わせて適切なlParamを設定する必要がある
790783:2012/05/11(金) 12:29:58.06
>>789
貴重な情報ソースありがとうございます。
「受け取り側は基本的に無視していい」とあるので、ネットのSendMessageの
サンプルのほとんどがlParamにNULLを渡していたのだと思います。(それで僕は、lParamは常にNULLで構わないと誤解した)
今回は受け取り側が"正しい"処理をしているので、きちんとlParamを作らないといけないのですね。
791783:2012/05/11(金) 12:37:30.18
追加の質問です。
第一ビットを立てるには、lParam|=0x02 でOKでしょうか?
自分にとってはビット演算は可読性が悪く、まとめてやりたいので、
「boolは1ビット」ということを利用して、
struct BITS{
bool bit1;
bool bit2;
:
}
を用意して、それぞれbitXにtrueを代入して、lPalam=(LPARAM)bits などとしても問題ないでしょうか?
アラインというのを聞いたことあるので、BITSはバイト単位にそろえてBITS8、BITS16などにすれば安全でしょうか?
よろしくお願いいたします><
792デフォルトの名無しさん:2012/05/11(金) 12:42:12.55
>boolは1ビット
どこでこんなアホな考えを教え込まれたんだ
>それぞれbitXにtrueを代入して、lPalam=(LPARAM)bits などとしても問題ないでしょうか?
問題大ありだ
sizeof BITSしてみろ
793783:2012/05/11(金) 13:07:16.09
>>792
調べてみたら、環境によってsizeof(bool)==sizeof(int)となるようですね。(bool使うほうがメモリの節約になると盲信していたので自分としては衝撃)
ちなみにVC2010ではsizeof(bool)は1でしたが、
考えを改めて、素直にビット演算を勉強します><

>Visual C++ ver4.2 では int 型と等しい、つまり sizeof(bool)==4 として扱われていました。しかし、最新の Visual C++ ver6 では、sizeof(bool)==1 として扱われ
ttp://seclan.dll.jp/dtdiary/1999/dt19990929.htm
794デフォルトの名無しさん:2012/05/11(金) 13:43:15.88
sizeofはビット数じゃなくてバイト数だってことを理解してるかどうかもあやしい
795783:2012/05/11(金) 18:25:24.04
何度もすいません><
WM_KEYDOWNのlParamをNULLでなくちゃんと作ることにしました。
仮想キーからスキャンコードの取得はAPIがありましたが、
拡張キーかどうかの判断は自前でしょうか?
コンテキストコード、変換状態フラグは「WM_KEYDOWNのときは常に0」とありましたが、
WM_KEYUPのときはどうすればよいのでしょう?
796デフォルトの名無しさん:2012/05/11(金) 18:27:53.50
拡張キーのときはWM_KEYDOWNじゃなくて他のメッセージじゃなかったか
797783:2012/05/11(金) 19:32:53.90
Spy++で確認したところ、
PostMessage()のWM_KEYDOWNメッセージで届いており、
十字キーの右を押したときは、lParamの拡張キーフラグが立っていました。
'a'や'b'では拡張キーフラグなしです。
798783:2012/05/11(金) 19:43:01.19
初めてのビット演算(のテスト、右キー固定で拡張キーフラグ固定)やってみました。
WM_KEYDOWNはうまくいったと思いますが、WM_KEYUPのlParamがおかしいので教えてください

#自分で作ったlParamの値をデバッガからコピペしてWindowsの電卓で16進に直して、
#Spy++のログにあるlParamと同じか比較しています。
「0xC14D0001」が欲しいのに、「0xFFFFFFFFC14D0001」と出てきます。
おかしい部分を教えてください><

LPARAM lParam = 0;

bool repeatCount = true;
UINT scanCode = 0x4d; // 右キー固定
bool extend = true; // 拡張キー固定
bool contextCode = false;
bool repeat = 1;
bool stat = true;

lParam = repeatCount;
lParam |= (scanCode<<16);
lParam |= (extend<<24);
//lParam |= (contextCode<<29);
lParam |= (repeat<<30);
lParam |= (stat<<31);
799デフォルトの名無しさん:2012/05/11(金) 20:16:42.77
lParam |= (LPARAM)stat<<31;
800デフォルトの名無しさん:2012/05/11(金) 20:22:52.32
lParam=(DWORD)lParam;
801783:2012/05/11(金) 20:30:22.56
すいません、どちらも変わりませんでした><
ちなみに、OSは64bit(Win7)でVCではWin32アプリを作る設定(のつもり)にしてるのですが関係ありますでしょうか?

電卓がおかしいだけで、SendMessage()で送っちゃっていいのでしょうか?
802デフォルトの名無しさん:2012/05/11(金) 21:00:41.79
関係ないね
803デフォルトの名無しさん:2012/05/11(金) 21:43:47.04
UINTのサイズは?
804783:2012/05/11(金) 22:02:25.35
>>803
sizeof(UINT)==4でした。

「lParam |= (stat<<31); 」の代わりに、
「lParam |= 0x80000000;」ならいけるかと思って試しましたが、
結果は同じでした・・・。

#ちなみにWM_KEYDOWNのとき用のlParamは、32ビット目が0固定なので、
#処理しなくていいと思って「lParam |= (stat<<31)」をコメントアウトしています。
805783:2012/05/11(金) 22:23:09.50
すいません、オオボケかましてました。
最初の「LPARAM lParam = 0;」が間違えですね。
「DWORD wLow = 0;」で作っておいて、ビット演算してから
最後に「LPARAM lParam = MAKE_LPARAM(0,wLow);」かな・・・。
806デフォルトの名無しさん:2012/05/12(土) 00:26:11.63
下記のようなコードがたくさんあるので、マクロで楽をしたいです。

static ImageStruct *hogeButtonImage = NULL;
if(!hogeButtonImage){
hogeButtonImage = LoadImage("hogeButtonImage.png");
}

↓これではうまくいきませんでした。

#define DEF_IMG(name) static ImageStruct *name = NULL; if(!name){ name = LoadImage("name.png"); };

DEF_IMAGE(hogeButtonImage)
hogeButtonImage->hoge();
807デフォルトの名無しさん:2012/05/12(土) 00:34:31.07
そんなことにマクロ使うな
808デフォルトの名無しさん:2012/05/12(土) 00:34:36.64
#define文のスペース大杉
DEF_IMGなのにDEF_IMAGEとか。。
809デフォルトの名無しさん:2012/05/12(土) 00:34:55.90
ImageStructをラップするクラスを作ればいい
static ImageStruct hogeButtonImage("hogeButtonImage.png");
810デフォルトの名無しさん:2012/05/12(土) 12:46:05.55
クラスのメンバ変数にRECT構造体もたせて、コンストラクタの初期化子リストを使って
0で初期化したいのですが、pointer(NULL)はできてもrect{0}はできないようですね。
素直にコンストラクタ内で、rect.top=0;・・・などと書かないといけないのでしょうか?
811デフォルトの名無しさん:2012/05/12(土) 12:58:45.67
11ならできる
812810:2012/05/12(土) 13:34:00.22
11じゃなくても動くコードにしたいですね・・・。
RECTを拡張して
struct RECT_EX:public RECT{
RECT_EX(){ top = 0: ....};
};
のようなコンストラクタ付きにした場合、
キャストしてWindowsAPIのGetWindowRect()に渡すのは危険でしょうか?
RECTの配列を渡すなら絶対危険だと思うのですが、1つだけならよい??
813デフォルトの名無しさん:2012/05/12(土) 13:48:27.83
やってることは0クリアとほぼ同じなんだから構造体コピすればいい
struct X{
X():a(a0){}
RECT a;
static RECT a0; };
static RECT X::a0={0};
814デフォルトの名無しさん:2012/05/12(土) 18:54:09.56
>>810
メンバ初期化子リストにrect()で0初期化できる

struct RECT
{
int x, y, w, h;
};

struct hoge
{
RECT rect;
hoge() : rect() {}
};
815デフォルトの名無しさん:2012/05/12(土) 21:53:49.35
try catchされない例外がthrowされた際に、
terminate()呼ぶ前に情報出力したいのですが、できますか?
816デフォルトの名無しさん:2012/05/12(土) 22:38:17.45
SetUnhandledExceptionHandler() かな
自分では使ったことない、全部デバッガに押し付けてる
817デフォルトの名無しさん:2012/05/12(土) 23:43:25.28
typedef void (*terminate_handler)();

のterminate_handlerと同じシグネチャの関数を作って

terminate_handler set_terminate(terminate_handler f) throw(); // 98
terminate_handler set_terminate(terminate_handler f) noexcept; // 11

で差し替えだな
set_terminateの返却値(前のハンドラ)を保存しといて新しいハンドラの最後で前のハンドラを呼び出すのが定番かな
818815:2012/05/13(日) 02:00:53.36
レスありがとうございます。

>>816
構造化例外(win専用?)と標準例外があるんですね。

>>817
visual c++ で以下の関数で渡したコールバックが呼ばれないっす。
std::set_unexpected()
std::set_terminate()
819デフォルトの名無しさん:2012/05/13(日) 05:58:30.02
SEHなら、DIV0なりSFなりもつかまる C++例外だとわかれば、最外側に(ry
820デフォルトの名無しさん:2012/05/13(日) 10:26:16.99
>>818
> visual c++ で以下の関数で渡したコールバックが呼ばれないっす。
> std::set_unexpected()
> std::set_terminate()
vcでは必要なヘッダが標準と違うのとデバッガ有効だと機能しないぞ
ttp://msdn.microsoft.com/en-us/library/t6fk7h29.aspx
821 ◆qr00w3BQO6 :2012/05/14(月) 12:36:17.99
char test[20]="0123456789ABCDEF";
int data1,data2,data3;
このような変数から

data1==012
data2==3456789
data3==ABC

というように一部抽出して変数に格納したいのですがどうしたらいいでしょうか?
testの値は固定長ですが中身はrandomです.
822片山博文MZボット ◆0lBZNi.Q7evd :2012/05/14(月) 12:44:59.26
>>821 memcpyを使え。
823デフォルトの名無しさん:2012/05/14(月) 13:29:05.93
/* >>821 */
#define DATA_SIZE 20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
  char data1[ DATA_SIZE + 1 ], data2[ DATA_SIZE + 1 ], data3[ DATA_SIZE + 1 ];
  char test[] = "0123456789ABCDEF";
  int split1 = 3;
  int split2 = 10;
  int body_size;

  strncpy(data1, &test[0], split1);
  data1[split1] = '\0';
  body_size = split2 - split1;
  
  strncpy(data2, &test[split1], body_size);
  data2[body_size] = '\0';

  strcpy(data3, &test[split2]);

  printf("%s\n%s\n%s\n", data1, data2, data3);
  return 0;
}
824デフォルトの名無しさん:2012/05/14(月) 13:44:54.54
>>823
dataはintだぞw
825デフォルトの名無しさん:2012/05/14(月) 15:36:23.56
16進数なのか?
826 ◆qr00w3BQO6 :2012/05/14(月) 18:18:58.55
16進数です
827デフォルトの名無しさん:2012/05/14(月) 18:22:19.14
char test[20]="0123456789ABCDEF";
int data1,data2,data3;
scanf(test, "%3x%7x%3x", & data1, & data2, & data3);
828デフォルトの名無しさん:2012/05/14(月) 18:29:17.62
sssssssscanf
829 ◆qr00w3BQO6 :2012/05/14(月) 21:45:27.50
>>827
コピペして実行しましたが,ビルドは出来てsscanf()で止まってしまいます.
理由わかりますか? 構文的にはあってるみたいなんですが,,,
=は全角から半角に修正しました.
830 ◆qr00w3BQO6 :2012/05/14(月) 21:49:04.98
あ,sssssssssssscanfの意味が分かりましたw
831デフォルトの名無しさん:2012/05/14(月) 21:58:12.68
てかsprintfでおk
832デフォルトの名無しさん:2012/05/14(月) 22:02:34.64
忘れてくれ
833デフォルトの名無しさん:2012/05/15(火) 10:51:07.98
メソッド内で次のようなコードを呼んだ場合、
loadMyString()はhogeの初期化のときだけ呼ばれるのでしょうか?
それともこの行を含んだメソッドが呼ばれるたびに呼び出す(=メモリリークする)のでしょうか?

static MyString* hoge = ReadFileBuffer("hoge.txt");


834デフォルトの名無しさん:2012/05/15(火) 11:13:28.78
そのloadMyString()とやらは一体全体どこにあるのかね。
835デフォルトの名無しさん:2012/05/15(火) 11:24:59.16
ReadFileBufferは一度だけ呼ばれる
836デフォルトの名無しさん:2012/05/15(火) 12:11:11.91
別解: 論より証拠、みてみればいいじゃないか。っていう発想とゆとりをもとう。
マシンに近い言語だからこそ、挙動は実際にいくらでも確認できる

ReadFileBuffer() にデバッガをかけるもよし、
hoge がころころかわらないのを確認するもよし。

そうやって、体がCを覚えていく。
837デフォルトの名無しさん:2012/05/15(火) 15:23:30.03
開発環境:Microsoft Visual C++ 2010 Express (SP1)
実行環境:Microsoft Windows XP Home Edition (SP3)
プロジェクトの種類:Win32 コンソール アプリケーション

・質問
C言語で
wchar_t awcStr[] = L"ABCあいう\u2665\n";
というUnicode文字列をコンソール出力し、ファイルにもリダイレクトできるように
するにはどうすればいいでしょうか?

ttp://www32.atwiki.jp/sampleisbest/pages/44.html
自分なりに試しましたが煮詰まってしまいました
宜しくお願いします
838デフォルトの名無しさん:2012/05/15(火) 15:39:31.34
標準出力とファイルの両方に出力するだけだろ
839デフォルトの名無しさん:2012/05/15(火) 15:53:54.07
char型配列に格納された16進数文字列をそのまま数値に直し配列に格納するにはどうしたら良いですか?
文字列 488→int 0x488
840デフォルトの名無しさん:2012/05/15(火) 16:00:07.02
1文字ずつ処理すれば?
841デフォルトの名無しさん:2012/05/15(火) 16:00:22.62
strtol
842デフォルトの名無しさん:2012/05/15(火) 16:12:53.21
>>837
#include <io.h>
#include <fcntl.h>

_setmode(_fileno(stdout), _O_WTEXT);
wprintf(awcStr);
843デフォルトの名無しさん:2012/05/15(火) 16:28:47.40
>>842
圧倒的感謝・・・!
以下のソースにてコンソール出力、ファイルへのリダイレクトが正常に行われることを確認致しました

#include <fcntl.h>
#include <io.h>
#include <stdio.h>
void main()
{
wchar_t awcStr[] = L"ABCあいう\u2665\n";

_setmode(_fileno(stdout), _O_WTEXT);
wprintf(L"%s", awcStr);
}
844デフォルトの名無しさん:2012/05/15(火) 16:50:11.36
・補足
リダイレクトしたファイルを調べてみたらBOMなしのUTF-16LEでしたので一応注意
845デフォルトの名無しさん:2012/05/15(火) 17:02:41.65
UTF-16LEはwindowsの内部コード
846デフォルトの名無しさん:2012/05/15(火) 17:30:22.14
UTF-8の場合
_setmode(_fileno(stdout), _O_U8TEXT);
847デフォルトの名無しさん:2012/05/15(火) 19:10:03.40
>>842
//char buffに16進数のデータが格納されている

FILE *file
file open("buffer_export.dat","wb");
fwrite(&buffer,256,1,file);
fclose(file);

char &endp
n=strtol(buffer,&endp,16)
printf("n: %x\n",n);
printf("&endp: %d\n",endp);



//実行結果
n: 0
endp: 31f998

string.exeというバイナリエディタでbuffer_export.datを参照すると
FF EE AE 55 56 00 C3 00 00 FF 53 00 D7 00 00 FF
4D 00 D7 00 00 FF 57 00 D7 00 00 FF 50 00 C3 00....
一致しないのはなんででしょう?
string.exeはこちらが意図しているデータなので(データのヘッダーがかけているが)
そちらが間違っているということはないはずなんですが,ASCIIが悪さしているんですか?
848デフォルトの名無しさん:2012/05/15(火) 19:16:12.89
>>847
ソースを全部まるごと晴れ
問題はあんたが隠してるところにある
849デフォルトの名無しさん:2012/05/15(火) 19:25:20.52
>>839
>>847
質問の意図が分かりまえん

「char型配列に格納された16進数文字列をそのまま数値に直す」
は分かるけど、その後の「配列に格納する」は元のchar型配列なんだろうか?
850デフォルトの名無しさん:2012/05/15(火) 19:36:07.88
なんで
>printf("&endp: %d\n",endp);
で出力が
>endp: 31f998
になるのか誰か教えてくれ
851デフォルトの名無しさん:2012/05/15(火) 19:42:29.77
>>848
書き込め切れなかったので斧にあげました.

http://www1.axfc.net/uploader/Sc/so/345966.zip
pass 847

お願いします.
852デフォルトの名無しさん:2012/05/15(火) 19:46:33.65
めんどくさいやつだなぁ。ideoneかcodepadに貼れよ。
853デフォルトの名無しさん:2012/05/15(火) 19:47:52.71
>>849
char型配列に格納された16進数文字列から一部抜き出し,その値を計算することが目的です.
そのためにint等の配列に格納したいです.

>>850
すいません%dです 打ち間違えていました.
854デフォルトの名無しさん:2012/05/15(火) 19:51:56.99
>>852
こんな便利なサイトがあるんですね.
windows SDKがないので走らないですが...
http://codepad.org/s9STeC0Q
855デフォルトの名無しさん:2012/05/15(火) 20:05:36.32
Z80のアセンブラをちょっと勉強した程度のレベルなのですが、
自分で書いたC++コードのアセンブル結果を読んで自分で最適化できるようになりたいです。
(具体的には、キャストで何をしてるか、継承した時の関数テーブルがどうなってるか、
関数・メソッド呼び出しのコールスタックがどうなってるかなど)
分かりやすいサイトや、便利なツールなどあれば教えてください。
856デフォルトの名無しさん:2012/05/15(火) 20:10:55.13
#include <stdio.h>
#include <stdlib.h>
int main(void) {
  char *p;
  char c[] = "488h";
  int i;

  i = (int)strtol(c, &p, 16);
  printf("%x\n%s\n", i, p);
  return 0;
}
857デフォルトの名無しさん:2012/05/15(火) 20:13:42.43
エッ?(°∀°;)
C++コンパイラが吐いたx86とかx64のアセンブリを手で最適化?
アラインメントとかずれると速度が落ちるし(他のCPUではバスエラーを吐くのが多いからまだましだけど)
大きなソースで特にC++の演算子のオーバーロードを使って抽象化されてしまった機械語や
継承時のメモリ配置を手でいじるのか?

Inside the C++ Object Modelのような本はあるけど、読んでみればわかるけど8bitのZ80と
32/64bitのCPUじゃ桁が違うぞ
早晩発狂するかもな
858デフォルトの名無しさん:2012/05/15(火) 20:15:19.91
やめとけ
C++のコードを最適化すれ
859デフォルトの名無しさん:2012/05/15(火) 20:16:32.61
>>851
酷いソースだな
ソケット通信使ってるって最初に言えよ
UDP使うなよ 訳も分からずに使ってるんだろうけど
クライアントのソースどこよ
クライアントがおかしなデータ送ってるから分割できないんだろ
通信はTCPを使ったものに書き直せ
860デフォルトの名無しさん:2012/05/15(火) 20:20:46.86
C++の最適コードは、アセンブラの最適コードと大差なし。
念入りにC++コードを最適する。


C++ - Wikipedia
C++は、汎用プログラミング言語の一つである。
高度な機能を使用してもプログラムの実行性能が低下しすぎないように、言語仕様・ライブラリに様々な工夫が施されている。



861デフォルトの名無しさん:2012/05/15(火) 20:33:24.34

http://www.isus.jp/article/introduction-to-x64-assembly/

Microsoft Visual Studio C/C++ は、x64 バージョンではインライン ・アセンブリーがサポートされません。
個別のアセンブリー・ファイルと外部アセンブラーを使用するか、または組込み関数を使用しなければなりません。

組込み関数を使用する理由:
x64 でインライン ・アセンブリーがサポートされていない
使いやすさ: 手動でレジスターの割り当てを行う代わりに、変数名を使用できる
アセンブリーよりもクロスプラットフォーム: コンパイラーの開発元は各種アーキテクチャーに組込み関数を移植することができる
組込み関数のほうがオプティマイザーが効率良く動作する
862デフォルトの名無しさん:2012/05/15(火) 20:35:52.64
米国務省「韓国に戦術核必要なし」 下院可決受け

アメリカの下院軍事委員会が先週、北朝鮮の脅威に備えるため、韓国などを
念頭に戦術核兵器を配備すべきとした法案を可決しましたが、国務省は「必要ない」と明確に否定しました。
ヌーランド報道官:「我々は核のない朝鮮半島を支持していて、その方針を変えない。
戦術核兵器を韓国に置く必要はないし、配備する計画も意図もない」
ヌーランド報道官は、オバマ政権が一貫して目指す核のない朝鮮半島の方針に変わりはないと強調しました。
TV朝日 (05/15 12:35)
http://www.tv-asahi.co.jp/ann/news/web/html/220515020.html

日米同盟強化へ 米は9条改憲歓迎 「反対まったくない」

憲法第9条に基づき、日本は集団的自衛権を行使できないとの解釈が
日米同盟強化への大きな障害になるとする認識はいま米側で広範に強まり、
米国では、現在党派を問わず反対はなく、むしろ暗に歓迎するという姿勢が大勢となった。
92年にはヘリテージ財団が「米国は非公式に日本に改憲を促すべきだ」とする政策提言を発表した。
先代ブッシュ大統領も公式会見で、日本が改憲を求めるならば問題はないと言明した。
民主党リベラル派のトム・ラントス下院外交委員長は「日本が安全保障でも大国にふさわしい役割を
果たすために憲法を改正しようとすることを強く支持する」と述べた。

東京都の石原慎太郎知事が16日にワシントンでの討論会で憲法破棄を提唱したとき、
米側の討論者のリチャード・ローレス元国防副次官は「日本の憲法は確かに米軍占領時代の遺物であり、
日本はそれを変える権利も自由も有している」と述べ、日本の憲法改正にいまの米側には抵抗がないことを明示した。
sankei.jp.msn.com/politics/news/120425/plc12042507090004-n1.htm

米国から提唱する「日本の核武装」
日本が唯一の核兵器被爆国として過去、自国の核武装に強く抵抗する理由は明白だったが、常軌を逸した隣国が
核兵器保有を公式宣言するに至った今、再考が必要になった
sankei.jp.msn.com/politics/news/111009/plc11100920310007-n3.htm
863デフォルトの名無しさん:2012/05/15(火) 20:46:18.13
>>854
ttp://codepad.org/j75dwTJT
質問の意図をできるだけ解釈し、ソースの要点を抜き出してみた
864デフォルトの名無しさん:2012/05/15(火) 20:53:19.73
>>863
蔵から送信されたデータが既におかしいから
865デフォルトの名無しさん:2012/05/15(火) 21:10:39.80
>>855
C++のコードを最適化する為にアセンブリ出力を読むのはお勧め。
但し、他でも言われているけどz80の知識だけではなんともならないと思う。
取り敢えず、アセンブリ出力を眺めてみたら?
866デフォルトの名無しさん:2012/05/15(火) 21:25:45.73
>>859 >>864
説明不足ですいません.
リアルタイム性を重視する計測機器の情報なのでUDPが使われています.これは仕様なのでTCPに変えられません.
クライアント側は計測結果をリトルエンディアンで特定のバイトに入れて送信しているので,
そのデータを抜き出してchar型から計算可能な(三角関数などを使います)int型に変換したいのです.
867デフォルトの名無しさん:2012/05/15(火) 21:29:38.21
Z80と全然違うから勉強し直しと言っていい
868デフォルトの名無しさん:2012/05/15(火) 22:26:48.29
C言語について質問です。
リストってポインタが使えないと作れないデータ構造ですか?
869855:2012/05/15(火) 22:32:06.47
誤解させてしまったようですいません。
アセンブラを自分で修正するのではなくて、
「C++コードを書く→アセンブラを見てみる→
C++コードを修正してみる→アセンブラがどう変わったか見てみる」
というようなことをやりたいのです。
(頭では仮想関数テーブルやswitch文の最適化などイメージできてるつもりだけど、
実際には見ていないのに分かったつもりになってる。)

Z80ではSSEも出ないですから現状はぜんぜん別世界ですよね・・・。
今回のやりたいことにマッチする、参考になるサイトがあれば教えてください!
870デフォルトの名無しさん:2012/05/15(火) 22:45:25.51
>>868
だね

>>869
IDEを使うといいよ
871デフォルトの名無しさん:2012/05/15(火) 22:48:18.50
>>869
>865
872デフォルトの名無しさん:2012/05/15(火) 23:07:45.65
>>868
一応「値」と「次要素の添字」の組を一要素とした配列を使えば
擬似的なモノは出来なくもないが…それは擬似リストとでも呼ぶべきかもな
873デフォルトの名無しさん:2012/05/15(火) 23:15:04.78
>>869
逆汗使う(有償・無償のものがある)
デバッガ使う(有償・無償のものがあるが、ntsdで十分)
コンパイラにアセンブラのリスト出力をさせられるので、それを使う

3番目は一番近いようで難しい
ディレクティブがごちゃごちゃ入るので、ちょっと覗くにはしんどい


ptr/offset, mov/lea にきおつけろ
874デフォルトの名無しさん:2012/05/15(火) 23:24:03.71
>>872
データ構造としては普通にリスト構造といっていいんじゃないか
875デフォルトの名無しさん:2012/05/15(火) 23:30:22.89
http://codepad.org/H070XnDA
だれかこのコードを簡略化というか最適化してください(´・ω・`)
一部分抜き出しただけで意味わからないだろうけど
if文が勿体無い(´・ω・`)
876デフォルトの名無しさん:2012/05/15(火) 23:38:41.83
オプティマイザに任せとけ
877デフォルトの名無しさん:2012/05/15(火) 23:40:03.44
double atn = atan2(-(double)(Y1-Y2),(double)(X1-X2));
double hoge = fabs((double)Angle - atn);
if( hoge >= PI/2) hoge = PI*2 - hoge;
878デフォルトの名無しさん:2012/05/15(火) 23:41:42.86
double hoge = fabs((double)Angle - atan2(-(double)(Y1-Y2),(double)(X1-X2)));
if(hoge >= PI/2){
hoge = PI*2 - hoge;
}
879デフォルトの名無しさん:2012/05/16(水) 00:26:05.59
>>878
thx
880デフォルトの名無しさん:2012/05/16(水) 09:04:49.71
主婦の7割「韓流が嫌い」 韓流ブームは日韓メディアが作り上げた虚像だったのか - ガジェット通信
http://getnews.jp/archives/212560

共立総合研究所が3月6日に発表した「韓流消費に関するアンケート」結果がインターネット上で関心を集めている。
調査によれば、日本の主婦の7割が「韓流好きではない」と回答しており、日韓両国のネット上では
「韓流ブームはメディアのステマ」などメディアを批判する声が上がった。

■日韓ネットユーザーは自国メディアを批判
日本のインターネット上ではアンケート結果を受けて、韓流ブームをあおったメディアを批判するコメントが殺到した。
「ステマ大失敗。またテレビのウソが明らかにw」
「世界中で大人気だったんじゃないのか?www」
「大金つぎ込んでステマ仕掛けたけども失敗した典型例」などと批判し、中には
「むしろ悪印象を根付かせる最悪の結果になったかなと」とメディアの韓流ごり押しが返って韓国の印象を悪くしたとの意見もあった。

また、調査結果は韓国メディア「マネートゥデイ」も報道。日本の韓流ブームが韓国で報じられているほど浸透していないことが分かると、
韓国のネットユーザーたちは自国メディアを批判するコメントを書き込んだ。
「正直、韓国の報道機関はみんな仮想ばかりだからね」
「歌を歌えばすぐにチャート1位。こんなのバブルでしょ。反省してほしい」
「韓流?そんなのは韓国メディアが作り上げたもの。日本のメディアは
取り上げないけど、今韓国では日流ブームが到来しているんだよ。街を見てくださいよ」
「私はヨーロッパ在住だけどこっちは日流。韓流より多い」
「正直言って韓流はメディアのやらせ」
「私も韓流なんて興味ない。みんな顔を作り直しているし」
「K-POPは一回性の音楽です」
「韓流の世界の認知度は、ポケットモンスターの足下にも及ばない」
「バブルってのは事実だと思う。韓国がIT以外に自慢できるものって何がある?」
「韓流ブームが過ぎ去る前に独島をなんとかしたい」

メディアのごり押しで嫌気がさしている人も多い。韓流ブームというバブルが弾けた後に、
日本国民全体に反韓感情だけが残るという事態にならなければいいが…。
881デフォルトの名無しさん:2012/05/16(水) 12:02:22.75
韓流ブームの真骨頂は…ってム板じゃねえかよ、なんでここにまで
882デフォルトの名無しさん:2012/05/16(水) 23:25:04.69
// optimize.hpp
#pragma once

template<class Solution>
class OptBench{
public:
double (*costFunction)(Solution sol);
Solution bestSol;
virtual void update() = 0;
};

template<class Solution>
class OptDescent : public OptBench<Solution>{
public:
void update();
};

// optimize.cpp
#include "optimize.hpp"

template<class Solution>
void OptDescent<Solution>::update(){
int a = 0;
cout << a;
}

という感じでファイル分けて書いてるんですが、リンカでupdate()が未解決と怒られます
メンバ関数がテンプレート関数の時は仮想関数作れないのは調べてわかったのですが、
テンプレートクラスの普通のメンバ関数を仮想関数にしてはいけないのでしょうか。
883デフォルトの名無しさん:2012/05/16(水) 23:45:28.37
export template に対応してるコンパイラがほとんどないから同じヘッダに全部
書いた方がいいんじゃないのか

他のファイルからupdate()を参照しようとするとリンカエラーになるんだろ?
884デフォルトの名無しさん:2012/05/17(木) 00:15:09.80
>>883
テンプレートって基本ファイル分割できないんですね…
参照しなくてもダメでした
cppファイルをincludeして無理やり解決しました
ありがとうございます
885uy:2012/05/17(木) 14:49:47.79
なぜ初心者はCとかC++から入って
そこで何年も止まるのだろう
886デフォルトの名無しさん:2012/05/17(木) 14:57:16.34
高級アセンブラだからさ
887デフォルトの名無しさん:2012/05/17(木) 16:07:09.98
>>885
仕事に使ってないから
趣味程度ではなかなか上達しないよ
でもあるレベルを超えると急に理解度が増すという事はある
888デフォルトの名無しさん:2012/05/17(木) 17:17:06.90
>>887
いってること本質的におんなじだとおもうけど、
「C/C++でもやるか」ではじめる奴って、実際に何か実装する動機が弱いんだと思う
趣味ででも何か作ろうってなると、伸びる
889デフォルトの名無しさん:2012/05/17(木) 18:14:35.44
フリーウェア位作れば仕事をしているのと大して変わらないからな
890デフォルトの名無しさん:2012/05/24(木) 10:10:45.20
libjpegを使ったソフトを作ろうと思うんですけど、
ライセンスの表記ってどこで出せばいいんでしょうか?

ソースの中?
ヘルプの中?
891デフォルトの名無しさん:2012/05/24(木) 12:17:35.23
書ける場所に全部書いておけ
892デフォルトの名無しさん:2012/05/24(木) 13:09:07.24
>>890
そのソフトウェアの配布ページにでも書いておけばいいよ
893デフォルトの名無しさん:2012/05/24(木) 16:47:28.12
とりあえず: 弁護士集団を擁している、あのMSの製品を真似ておけば。 > 表記
894デフォルトの名無しさん:2012/05/26(土) 22:23:34.13
本格的に勉強するときって参考書買ったほうがいいかな?
ちなみにQTやろうと思ってるんだけど
895894:2012/05/26(土) 22:24:37.49
すまん。ここと間違えた
http://toro.2ch.net/test/read.cgi/tech/1337067149/
896デフォルトの名無しさん:2012/05/27(日) 06:27:36.05
if ((lockdes = open(_PATH_LOCKFILE, O_WRONLY | O_CREAT, 0600)) < 0)
という処理なのですが、
これって、ロックファイル(_PATH_LOCKFILE)がすでに有った場合は、
openに失敗しますか?
897デフォルトの名無しさん:2012/05/27(日) 06:31:29.88
しません
898デフォルトの名無しさん:2012/05/27(日) 06:33:12.68
します
899デフォルトの名無しさん:2012/05/27(日) 06:56:42.25
どっちやねん!
900デフォルトの名無しさん:2012/05/27(日) 07:24:50.95
しますん
901デフォルトの名無しさん:2012/05/27(日) 08:22:07.95
試せば分かるだろ馬鹿

クイズでもやってるのかよ
902デフォルトの名無しさん:2012/05/27(日) 09:09:38.64
試してみました。
そすると、lockファイルがあっても無くても、open出来てしまいました。
あれ?「ロックファイルの意味ないじゃん」と思っていたら、
fcntl(lockdes, F_SETLKW, &lock);
と言う処理が書いてありました。
ロックファイルは有っても無くてもopen出来るけれど、
実際の排他処理はfcntlでやってたんですね。
勉強になりました。
903デフォルトの名無しさん:2012/05/27(日) 09:14:01.58
openとfcntlの間に他の処理が割り込むから排他になってない
904デフォルトの名無しさん:2012/05/27(日) 10:13:46.82
すいません。
ちゃんとシグナル処理は書いてありました...
905デフォルトの名無しさん:2012/06/01(金) 05:35:16.38
webkitのビルドがなかなか終わらないんですがどうしたらいいですか?
906デフォルトの名無しさん:2012/06/01(金) 06:11:17.03
辞める
907デフォルトの名無しさん:2012/06/01(金) 08:52:27.44
だいぶ前にビルドしたときは、まずIDLファイルが大量で案外時間かかって、
本体はプリコンパイルヘッダ使わない(強制してみたが、使えなかった)から、すごく遅い
そして最後に、リリースビルドはリンクが/GLだから、延々時間かかる

いいビルドマシン買え、って声が、そのとき俺の中で聞こえた気がした

ま、今もそんなにかわらんだろ。よく知らんけど。
908デフォルトの名無しさん:2012/06/04(月) 21:09:11.61
すごく初歩的な質問かもしれませんが、

#include<stdio.h>
int g_i=1;
int g_j=1;
void test(int,int,int,int);

int main(){
int x = 3;
int y = 3;

test (g_i,g_j,x,y);

printf("%d %d",g_i,g_j);
};

void test(int g_i,int g_j,int x,int y){
g_i = x;
g_j = y;
};

これがなぜ「3,3」と表示されず、「1,1」と表示されるのかがわかりません。
test関数でx,yの値(3)を受け取ってグローバル変数のg_i,g_jに代入してるから値が変わるんじゃないかと
思ってしまうんですが、そうならないのは何故ですか?
909デフォルトの名無しさん:2012/06/04(月) 21:13:11.42
test(変数){} がローカル変数だから。
910デフォルトの名無しさん:2012/06/04(月) 21:31:09.06

testの(int g_i,int 〜)の所でg_i,g_jがローカル変数として宣言されてしまって
その関数の中ではグローバル変数として扱えなくなっているということですか?
911デフォルトの名無しさん:2012/06/04(月) 22:34:37.54
>>910
グローバル変数として扱えなくなっているというより
そもそもグローバル変数でない別のものにアクセスしちゃう形

変数名を書かれたとき、コンパイラはスコープの近いものから順に探すので
近いところにg_iやg_j(これらはグローバルのg_iやg_jとは別の変数)を見付けた時点で「ああこれね」となり
グローバル変数があるかどうかなんて別に気にも留めないままコンパイルすることになる
そんなワケでローカルのg_iやg_jに値を代入し、それは使われないまま捨てられる
…てな感じで考えたほうがいいかな
912デフォルトの名無しさん:2012/06/04(月) 22:41:14.97
>>911
ほう。
わかりやすく説明してくださってありがとうございました
たすかりました!
913デフォルトの名無しさん:2012/06/04(月) 23:07:41.30
同名のローカル変数を作るとグローバル関数を隠蔽してしまう
914デフォルトの名無しさん:2012/06/05(火) 08:40:51.91
>>908
こうすれば、実行結果は3,3になる。
#include<stdio.h>
int g_i=1;
int g_j=1;
void test(int*,int*,int,int);

int main()
{
int x = 3;
int y = 3;

test (&g_i,&g_j,x,y);

printf("%d %d",g_i,g_j);
};

void test(int* g_i,int* g_j,int x,int y)
{
*g_i = x;
*g_j = y;
};
915デフォルトの名無しさん:2012/06/07(木) 23:38:56.68

class Charactor{
public:
void update();
private:
Posx,Posy;
};

Charactor* my = new Charactor();
Charactor* enemy = new Charactor();

とするとmyのupdate()の中でenemyのPosx,Posyの情報を取得する方法はありますか?
916デフォルトの名無しさん:2012/06/08(金) 00:04:53.05
>>915
void update(Charactor * other)にしてmy->update(enemy)とかすればother->Posxで取得できる
917デフォルトの名無しさん:2012/06/08(金) 01:01:01.06
>>916
返答ありがとうございます!
ということはさらにCharactor* bossをnewしたりすると
引数はもっと増えていってしまうのですね
918デフォルトの名無しさん:2012/06/08(金) 01:27:51.48
>>917
> ということはさらにCharactor* bossをnewしたりすると
> 引数はもっと増えていってしまうのですね

一つずつ渡していくならそうなる
void update(vector<Charactor*> const & v)とかにしてまとめて渡すようにすれば直接の引数は一つだけのままにできる
919デフォルトの名無しさん:2012/06/08(金) 01:41:57.19
>>918
まとめる方法もあったんですね
vectorも最近学んでいたのでこの機会に使いこなせるようがんばってみます
返答ありがとうございました!
920デフォルトの名無しさん:2012/06/08(金) 23:30:17.68
コンストラクタの初期化子リストをコンストラクタの引数で初期化するとき、
初期化対象と引数が同じ名前のときはどう書くのが良いのですか
例:
class Foo {
 const int bar;
public:
 Foo(int bar) : bar(bar) { } // <--これは規格上合法?
};

現状このような時だけメンバの方にm_をつけてm_barとするとか、
あるいは引数の方をbar_とかして区別できるようにしていますがいい加減嫌気がさしてきたOTL
921デフォルトの名無しさん:2012/06/09(土) 00:09:31.91
引数なんて「a b c」にしとけ
ちなみにメンバは「x y z」な
922デフォルトの名無しさん:2012/06/09(土) 02:17:49.68
>>920
規格ではエラーにはならないから合法
…ってそういうことを聞きたいんじゃないよなw

コンストラクタの中で宣言した引数やローカル変数の名前は
その外のスコープの名前(クラスのメンバ変数の名前も含む)を隠蔽する
ttp://codepad.org/92RJuiOS
引数の名前で隠蔽した場合は注意が必要 ↑の例だとh.yの値はh.xの3倍ではないぞ
923デフォルトの名無しさん:2012/06/10(日) 08:28:14.42
C99から配列のサイズを実行時に指定できるようになりましたが、この配列に対してsizeofが可能なのはどういった仕組みなのでしょうか。
size_t foo(int size)
{
  int array[size];
  return sizeof(array);
}
単にコンパイル時にsize*sizeof(int)相当のコードに置きかえているのでしょうか。
924デフォルトの名無しさん:2012/06/10(日) 08:52:19.59
>>923
C99の規格書に当たったわけではないからその点割り引いて聞いて欲しいが、
C99の可変長配列は関数の引数としても渡せるから、
配列自体にサイズ情報が保持されている必要があり、
コンパイル時にsize*sizeof(int)相当のコードに置きかえるという>923方式一辺倒では破綻する
(※ >923のような他の関数に渡さない特定の場合に最適化によってそのようなコードが生成されることは考えられる)

可変長配列をスタック上にしか取れない(自動変数としてのみ可能)という制限から察するに、
alloca()と同じような内部メカニズムなのではないか
925デフォルトの名無しさん:2012/06/10(日) 09:50:27.40
>>924
あーそうらしいね
規格票を "variable length array" で検索してみると分かるけど、多次元配列を
動的に確保出来るのと、sizeof演算子が適用出来るという点は素晴らしいと思う

多次元配列ならalloca()の構文糖と解釈する事も出来るが、sizeofが使えると
なると俄然意味合いが違ってくる

ただし他の型とsizeof演算子の内部メカニズムが異なるらしく、他の固定型はコンパイル
時にサイズが決定しているが、variable length arrayは実行時にサイズを評価している
コンパウンドリテラルの中にvariable length arrayがあるような場合も同じ
926デフォルトの名無しさん:2012/06/10(日) 19:46:27.65
自分で渡したサイズを配列から求めなおす必要があるのってどんな場合?
927デフォルトの名無しさん:2012/06/10(日) 20:23:56.19
>>926
呼び出す度に異なるサイズの可変長配列を確保するような場合じゃね
928デフォルトの名無しさん:2012/06/11(月) 02:51:37.41
Microsoft Visual C++ 2008 です

#pragma once
#include <exception>
class MyException : public std::exception {
public:
EMemberMaxException(const char *msg) {
std::exception(msg); // <- この行で「error C2082: 仮パラメータ 'msg' が再定義されました。」というエラーが出ます
}
};

何故再定義とみなされてしまうのでしょうか?
私のstd::exceptionの継承の仕方がマズいのでしょうか?
929デフォルトの名無しさん:2012/06/11(月) 10:50:58.52
>>928
そのソースどおりならEMemberMaxExceptionの返却値型がなくメンバ関数の定義になってないから
930デフォルトの名無しさん:2012/06/11(月) 11:11:46.78
>>929
ごめんなさいよく見たらコンストラクタ名直すの忘れてました…
ええと、本来ならクラス名と同じ名前なんです…
931デフォルトの名無しさん:2012/06/11(月) 21:39:04.71
>>928,930
exceptionにはconst char *をとるコンストラクタはない
そのため
exception(msg);
は一時変数の生成でなく
exception msg;
という変数宣言と解釈されるから

参考 ttp://codepad.org/aDURxBwF 変数の宣言時に変数名は括弧で囲える
932デフォルトの名無しさん:2012/06/11(月) 22:43:22.25
もしかして:
EMemberMaxException(const char *msg)
:std::exception(msg){
}
933デフォルトの名無しさん:2012/06/11(月) 23:13:30.44
>>931
コンストラクタは関係ない
宣言と解釈できるものは宣言と解釈するルールのせい

まあ>>928がやりたかったのは>>932だろうな
934933:2012/06/11(月) 23:37:34.32
それとやりたかったことが>>932でも
> exceptionにはconst char *をとるコンストラクタはない
は正しいのでコンパイルエラーになるのは変わらない
935デフォルトの名無しさん:2012/06/12(火) 08:09:16.96
>>931-934
ありがとうございます
C++の場合、コンストラクタの継承ってこう書くんですね…
変数宣言が括弧で括れることも知らなかったです、併せて覚えておきます
936デフォルトの名無しさん:2012/06/12(火) 16:32:28.78
内部クラスの前方宣言って無理なん?

class A;
class A::B; <- コンパイルエラー
937デフォルトの名無しさん:2012/06/12(火) 23:57:10.01
無理
938デフォルトの名無しさん:2012/06/12(火) 23:58:20.27
extern "C" { void foo( ); }
のとき、C++風にfoo( void )なのと、C風にfoo( ... )なののどっちに解釈されるの?
939デフォルトの名無しさん:2012/06/13(水) 08:42:54.16
>>937
無理かあ
んじゃ名前空間でも作ってそこに両方置いてみる、ありがと
940デフォルトの名無しさん:2012/06/13(水) 12:46:35.22
template<class _A> class B: _A{};
class A{};
template class B<A>;

extern "C"は構文をC++からCにするという意味ではない。
941デフォルトの名無しさん:2012/06/17(日) 10:34:55.60
キャメルケースによる命名は特にJava系言語で隆盛だと思うのですが
大文字のみの略語が含まれる場合どうするべきなのですか
 例: EUCEncoding v.s. EucEncoding

また、どっちにせよ大文字のみの略語が来ると
アッパーキャメルケース (UCC)(またはパスカルキャメルケース)をクラス名に使い、
ローワーキャメルケース (LCC)をメンバやインスタンスの名前に使うという使い分けをしたい場合
区別がつかなくなると思うのですがソフトウェア工学的にはどうするのが正しいのですか
942941:2012/06/17(日) 10:38:20.37
↓こっちと間違えて誤爆いたしましたすみませんorz
[スレ立てるまでもない質問はここで 119匹目]
http://toro.2ch.net/test/read.cgi/tech/1337067149/l50

でもま、実際私自身のターゲット言語は本当はC/C++なのでこちらにて回答いただこうかと
943デフォルトの名無しさん:2012/06/17(日) 11:11:00.95
どう書いてもソフトウェア工学的な正しさなんかない
プロジェクト内での命名ルールが統一されてればどうでもいい
944デフォルトの名無しさん:2012/06/17(日) 11:33:14.98
そういう時は悪しきハンガリアン記法を借りてくればいいじゃないか。
クラス名にはCEUCEncoding、そのオブジェクトはcEUCEncoding、データメンバならm_EUCEncodeType。
関数は動詞から始まるから問題の埒外。

っていうか>>943で正解。
945デフォルトの名無しさん:2012/06/17(日) 16:05:13.06
質問です。ガチ初心者で変なこと聞いてるかもしれませんが

C++であるシステムを作ろうとした時、
メインのソースファイル(main.cpp)があって、ヘッダーファイル(main.h)に
インクルードや定数の定義、宣言などをすると思うんですが

例えば、このヘッダーファイル(main.h)がインクルードするヘッダーファイル郡に
全ての処理が記述されていて(そのヘッダーファイル郡がさらに新たなインクルードをするなどで)、
メインのソースファイル(main.c)では、極端に言えば「関数を1つ呼び出すだけでOK」
という状態が、オブジェクト指向というものの理想なのでしょうか?

まだまだ初心者でいろいろと練習していきたいのですが
そういったところを意識して丁寧にやっていくか、ただがむしゃらに数をこなしていこうかどうかという方針が定まらないです
946デフォルトの名無しさん:2012/06/17(日) 17:07:13.86
めくるめくC++の世界へのエントリポイントとしてのmain() なら、
main() 自体は数行ってことはあるよ

OOPのひとつの書き方として、実装のあらかたがクラス定義におさまる書き方はある。
947デフォルトの名無しさん:2012/06/17(日) 17:18:59.18
>>945
知らんが、オブジェクト指向は関数型言語的性格(オブジェクトを生成するだけで変えない)と、
命令言語型的性格(生成したオブジェクトの状態を変える(破壊的代入))のミックスしたもので
数学的モデルが定まっていない
ゆえに、系の原始オブジェクトが何であるべきか、について統一した見解など今のところ無い

【派閥1】一般的に言って、モデルとビューとコントロールは分けたほうがあとあと使い勝手が良いし、
問題の適度な一般化をも意味するから分けて考えることでかえって設計しやすい
ということはこれら3オブジェクトの生成ぐらいはmain()にあっても良いんジャマイカ、
(これらの生成を1つのクラス内で行うか、main()の中で行うかは本質的な違いとは言えない

【派閥2】普通UIはプログラム1本につき1つだから、プログラムを特徴付けるオブジェクトとして
main()ではビューに相当するオブジェクトを1個生成し、ビューのコンストラクタかLoad()イベントで
モデルとコントロールを生成さす

【派閥3】まずコントロールを(以下略
948デフォルトの名無しさん:2012/06/17(日) 21:50:37.76
MFCなんかmyAppっていうグローバルなクラスオブジェクトの中にありとあらゆるものがぶっこまれてるからなぁ。
main関数なんてほとんどからっぷでもいいレベル。
949デフォルトの名無しさん:2012/06/17(日) 22:37:56.71
>>946-948
ありがとうございます。
これだけ自由度の高い分野だと「コレ」と決めてしまうことによる弊害の方が多いのでしょうね
コーディング規約などにおいてもガッチリ決まってるモノもないようなので
今はとにかくクラスの概念に慣れることに専念しようと思います
950デフォルトの名無しさん:2012/06/18(月) 00:20:21.67
俺もMFCを例示しようと思ってた

クラスの設計はいろいろで、性格というか考え方が現れる

ソースを見せるのが恥ずかしい原因の一つでもある
951デフォルトの名無しさん:2012/06/18(月) 23:38:09.83
>>950
ソースに愚痴を書く奴がいたっけw
952デフォルトの名無しさん:2012/06/18(月) 23:59:32.46
前任者のボヤキがw
953デフォルトの名無しさん:2012/06/20(水) 06:41:49.04
ワザワザアプリケーション固有の動作を書いたクラス作って
mainをほぼ空にするのは個人的にナンセンスだと思うな。
アプリケーション固有の動作なんて、main関数内にできるだけ
納めておいたほうがいいし、クラスを作るより先に、オブジェクトを
組み合わせて新しい動作を定義するよう心がけたほうがいいと思う。
トップレベルのウィンドウなんかは他で共有しないんだから
main(WinMain)の中で構築したって困らないし。
954uy:2012/06/20(水) 06:54:43.40
俺はゴミカスだがエリートゴミカスだ
お前らのような下級ゴミカスとは格が違う
955デフォルトの名無しさん:2012/06/20(水) 08:08:28.99
>>953
CUIとしても動作させる可能性があったり、他のプログラムからの起動もあったりするから、
main()の中が見通しがいい方が融通は利くよ。
まぁ、そういうプログラミングをしないのならナンセンスに思えるのは判るけどね。
956デフォルトの名無しさん:2012/06/20(水) 22:03:23.02
>>953
沢山の関数に分離したり、クラスにしたりとやり方は様々だけど
main()に限らず一関数に長々突っ込むのだけは流石にマズいと思うよ
957デフォルトの名無しさん:2012/06/27(水) 17:31:42.44
CとC++両方できる人に聞きたいんだけど、
プログラムの開発でC++でなく純粋なCで書くメリットってある?
958デフォルトの名無しさん:2012/06/27(水) 17:43:39.02
純粋なCってのがあいまいすぎる
959デフォルトの名無しさん:2012/06/27(水) 18:06:03.51
あいまい・・か?
ではC++固有の機能を使わない、C言語の規格に則ったプログラム開発と訂正しておく。

最近C++始めたんだが、その高機能な言語仕様の前にCの存在価値がほぼ無いように感じる。
組み込み系とかは別だが。
960デフォルトの名無しさん:2012/06/27(水) 18:12:21.99
書く人によるけどCの方が高速なものが作れたりバイナリが小さくなったりというメリットはある
961デフォルトの名無しさん:2012/06/27(水) 18:17:34.56
DLL作るときもインターフェース部分はCにしておくことが多い
962デフォルトの名無しさん:2012/06/27(水) 18:53:50.58
C++の方ができる実行ファイルが大きい環境がある
例えばmainがほぼ空でも
Cだと24KB
C++だと500KB
963デフォルトの名無しさん:2012/06/27(水) 21:49:52.62
restrictとかC側にしかない機能も一応挙げてやれよ
964デフォルトの名無しさん:2012/06/28(木) 20:34:06.37
c99の機能を積極的に使いたいときもCだな。
まぁ、大抵C++で書いているね。
965デフォルトの名無しさん:2012/06/28(木) 21:15:28.88
Cで書きゃ移植性は抜群。Javaより動作環境は多い。
なので、新しいプラットフォームによく移る場合は、
Cで資産蓄えることになるわな。
携帯電話のドライバーまわりやら、HPC、ネットワーク機器関連とかは
Cが多いだろ。突っ込まれる前に書くがHPCに関しては、C++に比べればという話で
FORTRANの方が圧倒的に需要がある。
966デフォルトの名無しさん :2012/07/08(日) 07:31:30.81
for(i=0;i<2;i++){
for(j=0;j<4;j++){
if((i==j) || (i==3-j) ){
v=a[i][j];
a[i][j]=a[3-i][3-j];
a[3-i][3-j]=v;
}
}
}
4次魔方陣
label1に表示するにはどうしたら良い?
967デフォルトの名無しさん:2012/07/08(日) 08:25:34.17
label1.SetWindowText() に文字列化して突っ込め、とかか?
そうだとすると、\tが効果を発揮するように組めよ

てかもっとlabel1のほうのヒントよこせ
968デフォルトの名無しさん:2012/07/08(日) 11:42:53.95
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
char i;
char j;
String^ w="";

for(i=0;i<4;i++){
for(j=0;j<4;j++){
a[i][j]=4*i+j+1;
if(a[i][j]<10)w=w+L"0"+(a[i][j]).ToString()+L" ";
if(a[i][j]>=10)w=w+(a[i][j]).ToString()+L" ";
}
w=w+L"\n";
}
label1->Text=w;
}


こんな感じに表示したい
969デフォルトの名無しさん:2012/07/08(日) 12:08:49.58
すればいい
970デフォルトの名無しさん:2012/07/08(日) 14:39:52.44
FortranのプログラムをCに組み込む方法教えてください
DLLを作るんですか?
971デフォルトの名無しさん:2012/07/08(日) 16:32:45.88
作ればいい
972デフォルトの名無しさん:2012/07/08(日) 23:33:12.26
>>967
なぜCでもないのにlabel.SetText();
じゃないのかイラッとするな

>>970
gcc Cのソース.c Fortranのソース.f

この時、Fortran側に外部関数の呼び出し書いとけば行ける
973デフォルトの名無しさん:2012/07/09(月) 16:42:42.10
label.SetText(); はjava?

Visual C++なんだけど
974デフォルトの名無しさん:2012/07/09(月) 19:09:10.03
label1という名前にセンスがない
975デフォルトの名無しさん:2012/07/09(月) 20:08:17.49
visual studio 2010 のデフォルトそのままなんだがw
976デフォルトの名無しさん:2012/07/09(月) 20:09:35.53
じゃlabel2にしとけ
977デフォルトの名無しさん:2012/07/09(月) 21:33:30.89
>>973
VIsual C++じゃなくて、MFCの問題だろ
ATLやら他のライブラリ使ってみろよ
978デフォルトの名無しさん:2012/07/09(月) 22:36:43.58
>>968だと
01 02 03 04
05 06 07 08
09 10 11 12
13 14 15 16

と表示される

>>966で↓の値が出てるから空いたマスに上の値を入れて表示したいんだが。
16 13
11 10
07 06
04 01


16 02 03 13
05 11 10 08
09 07 06 12
04 14 15 01


C++はじめて1週間くらいだから他のライブラリとか分からん
979デフォルトの名無しさん:2012/07/09(月) 22:51:17.99
C++/CLIじゃねーか
980デフォルトの名無しさん:2012/07/09(月) 23:02:08.57
>>979
おー、そうだw
981デフォルトの名無しさん:2012/07/10(火) 00:46:07.61
>>978
なんで>968じゃいかんの?
C++はじめて一週間かどうかよりも、日本語をもう少し何とかしてくれないと。
少なくとも、他人に判るように説明する訓練くらいはしておいてくれ。
982デフォルトの名無しさん:2012/07/10(火) 06:45:02.61
>>981

>>968は4次魔方陣 じゃないだろ

>>978の下の図が4次魔方陣だし

>>966で4次魔方陣に必要な対角線上の入れ替えを行ってる

お前日本語分からんのか?
4次魔方陣も知らんのだろ
983デフォルトの名無しさん:2012/07/10(火) 07:35:30.98
説明不足
コメントくらい書けゴミカス
984デフォルトの名無しさん:2012/07/10(火) 08:21:29.87
>>982
いやだから、魔方陣の表示は>968でいいんじゃねぇかと。
応用できないの? 馬鹿なの?
985デフォルトの名無しさん:2012/07/10(火) 09:12:06.12
表示したい

こんな風に表示したい

そのやり方でいいじゃん

それは4次魔方陣じゃねーよ

ライブラリが…ってレベルじゃないよね
986デフォルトの名無しさん:2012/07/10(火) 12:54:42.24
4次魔方陣なら入れ替える必要がない

ゴミカスはさっさと消えろ
987デフォルトの名無しさん:2012/07/10(火) 15:25:43.46
C++の推薦図書でよく見る「詳説C++ 第2版」。
凄い面倒な言い回しだったり、
重要な部分をさらっと書いて終わってたり・・・。
内容は濃いのかもしれんが著者の文が突っ走りだったり図が大変理解しがたく、
100ページを完全理解するのに数日もかかっていて苦労しています・・・。

そこで本を変えようと思っての質問です。
内容が濃く、文章や図が理解し易いC++入門書でおすすめがあったら教えてください。
望洋?ロベール?あたりですかね?
今までCで書いて公開してたソフトをC++でフルスクラッチするのが目的です。

古い1998しか知らないので「2003」をまず勉強したい。
2003の理由は使ってる環境がVS2005だからです。
988デフォルトの名無しさん:2012/07/10(火) 17:31:39.01
あきれるバカだな

本当に4次魔方陣知らんのだな

どうせ答えられんのだから黙っとけやカス

まだパン君の方が日本語理解出来るな死ねカスごみ

989デフォルトの名無しさん:2012/07/10(火) 17:32:55.15
お前みたいなのがいるから過疎スレになるんだよ

ヲタニートクソwwwwwwwwww
990デフォルトの名無しさん:2012/07/10(火) 17:35:37.83
                                            (  (
                 ,,.r'' ゛~~` ''ッ,,                    )   )
               、 ゛  ,,,,,,,,,,,,,,,,,,,,, ヾ.                ,.、   / /
                ミ   ミ゛,へ.__, ,_ノヽ i.                .| |l   l ,´
              ミ    ミ, ( ・) {・フ 〉 ミ.          _-、i::| |ニニii '
          、,,,,ツi:     ミ,`~´ ヽ~〈  .ミ        /,‐ヽヽ`、||
        、シ``   i:      ,ゞ  'n.inヽ. .ミ          ( .〉〉/
       シ  //      ミ`    l.l ヽ"、         /  ノ
      ミ/ シ           彡 ,=こ二=.{ ミ,,      ,r'´ ,,、'゛
      ミi. /  /       ' ! w、`~^' vwv '、   ミ      〃 .ミ
     .ミ /     i:  /      `^^     \ ."   〃  ミ
    .ミ.:/ / / i:      v    !  ,,   \ 、 〃  ミ   知ったかも疲れるんだぜwww
    :i;     .i:   w      !!   ミ!:   ミ \\( ⌒ヽ      
    :i;  /   i:      !!       .ミ キ    , ⌒`、_  )  )
    :il     .i:    !    w!    ミ .:i.   (_ (  _,ノ  ) ,
   :il   !  i:           ! ,〃゛  キ    ゞ、 __,  ノ ,
   .:il !   /~~````` " '''' = ‐- 、ミ  _,,,,_ミ,  il `  ー ´
   :il   ´ ―  ̄ - ,,. -‐‐-、、 ヽ. ヾ、  ゞ、 `  〃
   ゝ、wx.mn.!!++ナ'~      ヾ~ヽ、 ヽ、 ,, ~^^}´
      彡   〃  〃     }} /〉.〉〉〉i''"   〃
       彡、     {{     〃,__!////l |    〃
         X,,    》.   ≪.__`‐'.' '´,Uwwvw'、...,,,___
          ^^^^ !wニこ)こ)二)`) (_,,,..- 、...二⊃_).).
991デフォルトの名無しさん:2012/07/10(火) 17:40:04.63
C++98とC++03ってほとんど変わらなくね
992デフォルトの名無しさん:2012/07/10(火) 17:40:52.97
過疎らないように上げておこう
993デフォルトの名無しさん:2012/07/10(火) 17:54:12.57
更に上げとこう
994デフォルトの名無しさん:2012/07/10(火) 17:55:44.67
    ∧_∧  / ̄ ̄ ̄ ̄
  ∧( ´∀`)< あげ
 ( ⊂    ⊃ \____
 ( つ ノ ノ
 |(__)_)
 (__)_)
995デフォルトの名無しさん:2012/07/10(火) 18:08:25.20
漏れら極悪非道のageブラザーズ!
今日もネタもないのにageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧   ∧_∧    age
 (・∀・∩)(∩・∀・)    age
 (つ  丿 (   ⊂) age
  ( ヽノ   ヽ/  )   age
  し(_)   (_)J
996デフォルトの名無しさん:2012/07/10(火) 18:09:00.95
僕たち純真無垢なsageブラザーズ!
人目につかないようにsageてあげるよ!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ∧_∧     ∧_∧    sage
   (・∀・ )    ( ・∀・)    sage
   /    \    /   \ sage
  ⊂(  ヽノ つ ⊂ヽ/  ) つ  sage
    し(_)     (_)J
997デフォルトの名無しさん:2012/07/10(火) 18:13:34.89
>>986 魔方陣分かってねーな
グルグルじゃねーぞ(笑)
998デフォルトの名無しさん:2012/07/10(火) 18:36:34.59
うめようず
999デフォルトの名無しさん:2012/07/10(火) 18:37:46.56
↓↓↓こいつ童貞↓↓↓
1000デフォルトの名無しさん:2012/07/10(火) 18:38:41.26
1000なら一生童貞
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。