11/09/15 00:17:43.25
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
過去ログ
01 スレリンク(tech板)
02 スレリンク(tech板)
03 スレリンク(tech板)
04
スレリンク(tech板)
05 スレリンク(tech板)
06 スレリンク(tech板)
07 スレリンク(tech板)
08 スレリンク(tech板)
09 スレリンク(tech板)
10 スレリンク(tech板)
11 スレリンク(tech板)
12 スレリンク(tech板)
13 スレリンク(tech板)
14 スレリンク(tech板)
15 スレリンク(tech板)
16 スレリンク(tech板)
17 スレリンク(tech板)
18 スレリンク(tech板)
19
スレリンク(tech板)
2:デフォルトの名無しさん
11/09/15 16:27:52.49
乙
3:デフォルトの名無しさん
11/09/15 17:05:51.53
Cはヨーグルトの味がしますか?
4:デフォルトの名無しさん
11/09/16 00:22:38.87
Cは醍醐味
5:デフォルトの名無しさん
11/09/16 05:25:30.11
白かよ、青かよ、ウォッシュかよ?
6:デフォルトの名無しさん
11/09/16 07:26:08.22
>>5
喰える、喰えない、割と好き
7:デフォルトの名無しさん
11/09/17 11:39:07.68
ちょっと和んだw
8:デフォルトの名無しさん
11/09/21 08:06:04.88
質問です。VC++ 2008 Express で
URLリンク(k3tec.net)
を参考にサーバ・クライアントプログラムを作っているのですが、実行すると
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:つづき
11/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:デフォルトの名無しさん
11/09/21 08:12:50.28
sizeOf()を呼ぶとエラーじゃなくて、sizeOf()を呼んだ後の次のsizeOf()で死ぬんだろ。
それなら原因は想定できた。
11:デフォルトの名無しさん
11/09/21 08:15:04.46
こいつはくせえーッ!Java厨のにおいがプンプンするぜッーーーッ!
12:8
11/09/21 09:06:04.18
>>10 ヒントだけでもお願いします。
ついでにJava厨臭くない方法があったら教えて下さい。
13:デフォルトの名無しさん
11/09/21 09:34:10.54
>>9
それが>10の言いたいことかどうかは知らんが、(char *) & msgはsend()に渡すべき場所を指しているかデバッガでよく見てみたら?
つーか、Cスタイルキャストは使うなや。
14:デフォルトの名無しさん
11/09/21 14:24:19.16
広域の::send()関数の引数に、Messageクラスのポインタを(char*)にキャストして
渡してまともに動作するものなのか?
TextMessageの場合は、たまたまクラスの銭湯に_test[16]があれば動作するかも知れないが…
15:8
11/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 );
としたらうまくいきました。
情報不足の質問をしてすみませんでした。アドバイスくださった方、ありがとうございました。
16:8
11/09/21 14:35:44.97
あ、sizeOf のアドレスじゃないや。まあいいや
17:デフォルトの名無しさん
11/09/22 00:48:42.18
アドバイスを受けて事故解決かよ。おめでてーな。
18:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/09/22 14:27:06.20
template <class T1> template <class T2> void CHoge<T1>::f1<T2>() { ... }
20:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/09/22 14:39:24.95
template <class T1> template <class T2> void CHoge<T1>::template f2<T2>() { ... }
22:デフォルトの名無しさん
11/09/22 14:43:18.70
>>21
>>20と同じエラーが出ます
23:デフォルトの名無しさん
11/09/22 14:55:45.20
template <class T1> template <class T2> void CHoge<T1>::template f2() { ... }
24:デフォルトの名無しさん
11/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>();
}
25:18
11/09/22 15:49:42.60
>>19~24 感謝.
26:デフォルトの名無しさん
11/09/22 19:13:14.04
計算式の入った文字列("1+2*3"など)を用意しておいて、その計算結果(先程の例では7)を変数に代入するみたいなことって出来ますか?
27:デフォルトの名無しさん
11/09/22 19:32:01.78
>>26
自分でパーサー書けば出来る
28:デフォルトの名無しさん
11/09/22 19:59:16.78
>>26
Lua使えば1分でそういうコードが書けるよ
29:デフォルトの名無しさん
11/09/23 01:57:41.81
boostでなかったっけ
30:デフォルトの名無しさん
11/09/26 13:40:15.69
L"abc"のLって何ですか?
一文字なのでぐぐれなくて困っています。
31:デフォルトの名無しさん
11/09/26 13:44:45.38
>>30
ワイド文字
32:デフォルトの名無しさん
11/09/26 18:51:14.14
「C言語 文字列 L」でぐぐったら一発だったが
33:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/09/26 19:59:55.36
>>33
X a()は返却値X型で引数をとらない関数aの宣言で解放もなにもないし
変数の構築と破棄の順序関係はRAIIなんかとは直接関係ない変数に関する普通の話だしでつっこみどころしかない。
最低限の知識が正しく身についてない人にはそれより先は教えようがないぞ。
35:デフォルトの名無しさん
11/09/26 20:13:36.69
>>33
規定されてるよ
>>34
struct A{};
A a();
36:デフォルトの名無しさん
11/09/26 21:54:42.25
デストラクタコール記述のつもりだろうが変数名でデストラクタ書いてるwwから
生兵法君が鼻息荒げて訳判らん(キリッしちゃったんだろうな
37:デフォルトの名無しさん
11/09/27 21:03:18.94
もう何度も質問されていると思いますので簡潔にでいいのでお答えいただけないでしょうか?
PHPやJavaScriptは習得しているのですが、ちょっとC系が必要になりそうなのです
その際、C -> C++と学習したほうがやはりいいのでしょうか?
CはC++に吸収済みとか言う人もいるようですが
オブジェクト指向に関しましてはまぁ少々は慣れていると思います
やはりC++をいきなりというのはつまずく点が多いのでしょうか?
また、CとC++はオブジェクト指向以外にも違いはあるのでしょうか?
Webで調べたのですがいまいち分かりませんでした
38:デフォルトの名無しさん
11/09/27 21:15:01.97
>>37
必要な言語を学習したんでいい。C++が必要なら最初からそっちでおk
Cにオブジェクト指向とテンプレート(ジェネリックプログラミング)、例外を加えたのがC++だな
39:デフォルトの名無しさん
11/09/27 21:25:22.74
ご回答ありがとうございます
>必要な言語を学習したんでいい
とはPHP等のオブジェクト指向を学習しているので、そのままC++にいってもいいという意味でしょうか?
Cで出来ることはC++で出来ると聞いていますので、C++に行こうかと思いました
40:デフォルトの名無しさん
11/09/27 21:59:07.32
>>39
仕事でも趣味でも受験でも、目的があるならそれに沿った言語を選択して学習すればいい。
学習そのものが目的なら自分で調べて悩んで下さい。学習になります。
41:デフォルトの名無しさん
11/09/27 22:22:48.68
>>37
CとC++の肝はメモリー管理。
どちらからやっても同程度に壁になる
42:デフォルトの名無しさん
11/09/27 23:08:30.45
日頃C++をバリバリ使ってると、Cの仕事は苦痛。
日頃Cをバリバリ使ってると、C++の仕事は苦痛。
その程度には違うので、C系なんてごまかしてないで、
プロジェクトに必要な方をやるべし。両方必要なら迷わずC++。
43:デフォルトの名無しさん
11/09/28 10:13:54.66
設計がしっかりしてればどっちでやっても大差ない
44:デフォルトの名無しさん
11/09/28 13:08:19.61
アルゴリズムの話なのですが、
手続き型言語でコールバックは悪ってのは何故なんでしょうか。
45:デフォルトの名無しさん
11/09/28 13:10:23.06
悪じゃないです
46:デフォルトの名無しさん
11/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-コールバックだったりと処理の順序関係が安定しなくなる、
あるいは順序を安定させようとするとマルチプロセス化や待機状態を作るなどの
純粋な手続き型と比べると余計なコストがかかるなどで相性が悪いから。
47:44
11/09/28 18:57:01.56
>>46
なるほど、ありがとうございました。
48:デフォルトの名無しさん
11/09/28 19:37:53.90
assertってやめたほうが良くないですか?
デバッグ時に発生しなかったバグケースがリリース時に出たら困りますよね
49:デフォルトの名無しさん
11/09/28 19:49:24.57
>>48
assert使った事ないの?
50:デフォルトの名無しさん
11/09/28 19:51:34.90
>>49
リリース時に例外を投げるassertもどきなら使ってます
ボトルネックでは仕方ないからassertですが…
51:デフォルトの名無しさん
11/09/28 19:53:58.32
リリースビルドの意味わからなかったり直接呼んだりしてるなら
ディスパッチャーの中で発生させるアラートや事後アラートがバレると
IQの低さを悟られてしまうから止めといたほうがイイとおもうよ
52:デフォルトの名無しさん
11/09/28 19:58:18.01
煽りはレスしなくて結構です
53:デフォルトの名無しさん
11/09/29 00:38:50.35
すでにある構造体(コンストラクタなしの型)のテンポラリオブジェクトを無駄なく構築するにはどうすればいい?
func(hoge(1, 2));
というふうな書き方ができないから
{ hoge h(1, 2); func(h); }
と書いてるんだけど、ダサすぎて困る
54:デフォルトの名無しさん
11/09/29 00:46:48.17
>>53
C++ならコンストラクタを書く
CならC99のコンパウンドリテラルを使う
C89はどうしようもない
55:デフォルトの名無しさん
11/10/01 17:55:42.79
printf("%s %d", "hoge", x);
な所が
printf("hoge", "hoge", x);
こうなるケースがあっても問題ない?
56:デフォルトの名無しさん
11/10/01 18:03:28.62
初心者には意味不明な質問だな
57:デフォルトの名無しさん
11/10/01 18:36:14.12
多いのは問題あるが少ないのは問題ない
58:デフォルトの名無しさん
11/10/01 19:08:08.85
ファイルから文字列を読み込んで,その文字列を名前にもつ関数を呼び出す事ってC,もしくはC++で可能なんでしょうか
例えば func,100 とだけ書かれたファイルを読み込んで,func(100)という風に呼び出したいのです
59:デフォルトの名無しさん
11/10/01 19:19:48.85
if(strcmp(str, "func") == 0)
{
func(num);
}
60:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/01 19:42:25.38
あらかじめ用意した関数しか呼び出せねえのかこの糞ゲーは
62:デフォルトの名無しさん
11/10/01 19:46:40.08
用意してないものを利用できると思うほうがおかしい
63:デフォルトの名無しさん
11/10/01 20:00:11.71
>>59
ありがとうございます
たぶん,これでもやろうとしてることは出来ないことはないんですが
全部の関数でそれをするのはちょっと辛いなあと思ってたんです
言葉足らずですいません
>>60
C++はまだ勉強中なのでよくわからないのですが,おそらくイメージしてたのはこれです
mapとか言うのを調べればよさそうな感じですね
勉強になりました
お二方,ありがとうございました
64:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/03 23:02:34.67
%sを%cにする?
66:デフォルトの名無しさん
11/10/03 23:05:19.91
s->c
67:デフォルトの名無しさん
11/10/03 23:11:29.79
>>65
%cにしたら出力が「???」になりました
68:デフォルトの名無しさん
11/10/03 23:14:04.75
printf("%c",c[i]);
69:デフォルトの名無しさん
11/10/03 23:15:41.95
プリントは&いらん
70:デフォルトの名無しさん
11/10/03 23:16:03.02
>>67
申し訳ない
>>68が正解だな
71:デフォルトの名無しさん
11/10/03 23:17:43.86
>>68-69
できました!ありがとうございます
&はscanfと混同してました・・・初歩的なミスでしたね^^;
72:デフォルトの名無しさん
11/10/04 18:16:34.85
Boost pythonを使用しようとして
URLリンク(d.hatena.ne.jp)
を参考にしているのですが、vector<int>からpythonのリストへの変換例のコードの意味がわかりません。
参考URL中の
.def("__getitem__", (int const&(foo::int_vector::*)(foo::int_vector::size_type) const)&foo::int_vector::at)
の中で(int const&以下が何をやっているのでしょうか。さっぱり理解できません。
73:デフォルトの名無しさん
11/10/04 19:56:17.57
>>72
foo::int_vector::at へのメンバ関数ポインタを取得するために、
返却値型 int const & で引数は一つで型は foo::int_vector::size_type で const 修飾されてる foo::int_vector のメンバ関数の
メンバ関数ポインタ型へ明示的なキャストをしてる。
74:デフォルトの名無しさん
11/10/04 20:22:34.44
>>73
ありがとうございます。
関数キャストは
(返却値型 (ポインタ型)(引数リスト) )
の形式で行うということですね。
75:デフォルトの名無しさん
11/10/04 21:16:27.46
なんか正しくわかってないような?
・メンバ関数ポインタ
・オーバーロードされてる(メンバ)関数への(メンバ)関数ポインタの取得
についてわかってるならそれでいいよ
76:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/06 01:15:48.59
>>76
どちらも単なる関数オブジェクトだから大差ないんじゃね?
強いて言えば案1の方が3.0を内部状態として持つのでそれだけ引数の
受け渡しが減る
78:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/06 02:04:54.23
やっぱりラムダ入ったのは大きいよなぁ
80:デフォルトの名無しさん
11/10/06 02:19:35.41
mem_fun_ref(笑)
81:デフォルトの名無しさん
11/10/06 02:23:32.07
-> を使えば一発
82:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/08 22:12:54.93
publicなメンバ変数という設計を捨てる
85:デフォルトの名無しさん
11/10/09 01:07:01.67
void君と名付けよう
86:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/09 23:12:40.33
窓板の質問スレでたずねたんだけど、返答がないようなのでこっちでも聞かせてください。
C++でWinXPでネットワーク接続を表示したときに表示される「LANおよび高速インターネット」を
表示するexeを作成したいですが、ネットワーク名なんかはレジストリから取得できました。
しかし、切断したネットワーク名まで表示される状態で上記の内容とはずれてしまっています。
レジストリに保管されているネットワークから現在接続されているネットワークだけ表示したいんですけど、
何をフラグとしてしているのかがわかりません。
どなたかご教授お願いします。
90:デフォルトの名無しさん
11/10/10 01:12:36.92
URLリンク(blogs.msdn.com)
devcon status =net
でdisabled/runningの判別がつくけど他にいい方法があるかもしれん
91:デフォルトの名無しさん
11/10/10 01:19:16.35
>>87-88
ありがとう、seekgを使うのがポイントなのね
92:デフォルトの名無しさん
11/10/10 03:43:03.15
イテレータってインクリメントやデクリメントだけでなく、+1や-1でも前後の要素にアクセスできる?
93:デフォルトの名無しさん
11/10/10 09:19:56.59
自分で試したほうが早かった。できた
94:デフォルトの名無しさん
11/10/10 09:38:55.18
浮動小数点数をバイナリで保存するにはどうすれば?
95:デフォルトの名無しさん
11/10/10 10:44:11.90
fwrite
ofstream::write
96:デフォルトの名無しさん
11/10/10 11:18:44.56
>>90
ありがとう。
devconは知らなかった。試してみる。
97:デフォルトの名無しさん
11/10/10 23:31:47.94
ローベルのC++入門講座をお持ちの方にお聞きしたいのですが、
P308の演算子オーバーロードの流れがよくわかりません。
> delete[] m_array;
> m_array = array;
deleteしたにも関わらず直後にdeleteしたものを使っていて混乱しています。
98:デフォルトの名無しさん
11/10/10 23:35:20.40
ロベールの翻訳は分かりやすい
99:デフォルトの名無しさん
11/10/10 23:36:11.26
その2行だと。
deleteしたのは、m_arrayのポインタが指す領域。
m_arrayはまだ残っている。
そこに、arrayのエリアのポインタを再設定しただけ。
100:デフォルトの名無しさん
11/10/10 23:37:57.79
×そこに、arrayのエリアのポインタを再設定しただけ。
○そこに、arrayの中にあるポインタを再設定しただけ。
101:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/10 23:52:41.43
>>99-101
よくわかりました。ありがとうございます!
103:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/11 07:28:56.83
>>103
その代入演算子は、
Hoge a;
Hoge b;
...
a = &b;
としたとき、&a を返す演算子だから呼ばれてない。
105:デフォルトの名無しさん
11/10/11 07:36:40.08
>>103
これをやろうとすると、ポインタ型のグローバルな代入演算子をオーバーロードすることになるけれど、
C++では、その操作は許されていない。つまり、できない。
どうしてもというなら、copy()メソッドのようなものを作るしかない。
106:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/11 10:53:41.09
それ挙動確認して無いだろ
参照つけないとダメだな
108:デフォルトの名無しさん
11/10/11 13:51:34.26
STLのコンテナやイテレーターが満たさないといけない要件をわかりやすくまとめたサイトや書籍は有りますか?
109:デフォルトの名無しさん
11/10/11 16:22:01.56
久々に実行したら
Setting Default Parameters...
Parsing Configfile encoder.cfgCannot open configuration file encoder.cfg.
続行するには何かキーを押してください . . .
ってでて動きません。
環境変数とかはいじってないはずなんですけど・・・
解決方法がわかる人がいれば教えてください!
110:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/12 01:35:29.79
あなたの求める挙動による
112:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/12 02:06:05.32
そもそもそれじゃ静的な初期化にもなってないが、
上と下でsizeofが何を返してくるかprintfで確かめたら直ぐに原因は分かる
114:デフォルトの名無しさん
11/10/12 02:07:00.46
>>112
sizeofの結果が変わってくる
sizeof(vertices[0])*20にすればおk
115:デフォルトの名無しさん
11/10/12 10:28:00.33
>>113-114
ありがとうございます。
できました。
116:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/13 00:30:21.08
> if(!str){ ←【Q1.この!strの意味は何でしょう?】
メモリー確保ができなかった場合rtn=0になる。その確認
> return 1; ←【Q2.return 0;ではないのは何故ですか?】
プログラムが終了したとこのコードを1(エラー)として0(正常)特別している。
118:デフォルトの名無しさん
11/10/13 00:31:51.37
×特別している。
○と区別している。
119:デフォルトの名無しさん
11/10/13 01:07:29.45
A1.malloc()は必要なメモリの確保に失敗するとNULLを返すのでそれをチェックしている
A2.普通main()は成功時に0、失敗時に非0を返す。そのためのマクロEXIT_SUCCESSと
EXIT_FAILUREも定義されている
120:デフォルトの名無しさん
11/10/13 03:12:37.85
>>117>>118>>119
ありがとうございます。理解できました。
論理演算子とNULL値をよく理解していませんでした。
121:デフォルトの名無しさん
11/10/13 07:06:25.03
C++を勉強しようと思ってるんだけど
練習問題がついた良いサイトありませんか?
URLリンク(www.geocities.jp)
こんなサイトのC++版があれば理想的なんだけど
122:デフォルトの名無しさん
11/10/13 08:52:06.18
>>121
C++はCと違ってそのボリュームは生半可じゃないぞ
独習C++でも買え
123:デフォルトの名無しさん
11/10/13 11:17:11.22
Cの生みの親が死んじゃった・・・・・・
124:デフォルトの名無しさん
11/10/13 14:14:16.82
独学ですがC言語をマスターした後は何を勉強すればいいですか
125:デフォルトの名無しさん
11/10/13 14:39:55.46
何がしたいのかによる。
126:デフォルトの名無しさん
11/10/13 14:56:23.02
>>124
基本情報を取りましょう
127:デフォルトの名無しさん
11/10/14 12:57:00.56
C言語の課題なんだが 、五つの数字足したあとに平均だす方法がわからん。
教えてください
128:デフォルトの名無しさん
11/10/14 13:11:34.53
ans = ( a + b + c + d) / 5;
129:デフォルトの名無しさん
11/10/14 13:12:48.93
ans = ( a + b + c + d + e) / 5; // 1こ足りんかった
130:デフォルトの名無しさん
11/10/14 13:18:31.86
<<127
すまない、補足なんだがC++だ
131:デフォルトの名無しさん
11/10/14 15:16:10.61
平均の出し方も分からない奴がプログラミングをやる時代か……
132:デフォルトの名無しさん
11/10/14 15:58:18.97
平均の求め方をやるのは小6だ
あとはわかるな?
133:デフォルトの名無しさん
11/10/14 16:10:02.03
最近の小学生はプログラミングなんかやってるのか
134:デフォルトの名無しさん
11/10/14 16:15:21.83
まあ小6っつったらいろいろ背伸びしたくなる時期なんだろうな
135:デフォルトの名無しさん
11/10/14 16:19:22.80
後で平均する数を増やすかもしれないのか、小数点以下をどうするのか、そもそも5つの値をどのように与え、どのように出力したいのか
136:デフォルトの名無しさん
11/10/14 16:24:40.12
小学生とか
俺がお年玉でVB4.0を買った頃じゃないか
結局ろくなもん作れなかったけど
137:片山博文MZ
11/10/14 17:10:05.90
int *p = new int[0]; // OK or NG?
138:デフォルトの名無しさん
11/10/14 19:05:53.66
>>137
OK
ついでに言うと自分でnewをオーバーロードするときもサイズ0に対応できるように書かなければならない
139:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/14 21:16:55.22
printf(" 平均=%d",(a + b + c + d + e)/f); // 小数点以下切り捨ての場合
141:デフォルトの名無しさん
11/10/14 21:35:33.01
URLリンク(codepad.org)
142:デフォルトの名無しさん
11/10/15 08:29:11.34
>>139
C++らしさをどうしても出したいなら、cin と cout 使えば?
143:デフォルトの名無しさん
11/10/15 09:48:34.05
>>142
その前にcstdioだろ
144:デフォルトの名無しさん
11/10/15 15:10:53.49
0x年代でもscanfの人気は揺るぎなかった
145:デフォルトの名無しさん
11/10/15 16:56:04.82
fgets(buf, sizeof(buf), stdin);
n = sscanf(buf, "%d %d", &a, &b);
146:デフォルトの名無しさん
11/10/16 00:22:43.73
VISUALC++やってんだけど四捨五入どうやんの?
147:デフォルトの名無しさん
11/10/16 00:44:14.95
四捨五入した値の用途次第
148:デフォルトの名無しさん
11/10/16 00:48:50.24
>>146
お前の頭の中の四捨五入の手順を細かく分解してその一つ一つの段階をプログラムにするだけ
頭の中のもやもやした考えを分析・整理してプログラムで表現するのは
上手くプログラムを書くのに必須の能力だからそのつもりでやってみな
149:デフォルトの名無しさん
11/10/16 00:51:37.79
>>146
boost::math::round<T>(X)
150:デフォルトの名無しさん
11/10/16 01:00:25.46
>>146
#include <boost/math/special_functions.hpp>
151:デフォルトの名無しさん
11/10/16 13:49:05.02
>>146
0.5をたしてきりすてる
152:デフォルトの名無しさん
11/10/17 21:13:14.45
>>147
哀しいけどソレが現実なのよね
153:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/10/18 02:05:15.85
>>153
当たり前
C++なら自分でoperator<<を作るといい
155:デフォルトの名無しさん
11/10/18 08:03:56.29
>>153
オーバーロードと再帰をうまく使えば簡単に保存できるよ
156:デフォルトの名無しさん
11/10/18 09:28:51.24
>>153
まとめて保存すると、場合によってはアライメントの罠にはまって復帰できなくなる。
157:デフォルトの名無しさん
11/10/18 10:41:55.33
>>153
boost.serialization使えばいいじゃん
158:デフォルトの名無しさん
11/10/18 10:44:41.95
boost使えばいいじゃん厨は低能
159:デフォルトの名無しさん
11/10/18 12:56:42.27
車輪の再発明をしようとする奴は低脳
160:デフォルトの名無しさん
11/10/18 13:05:27.32
車輪の再発明ができない奴は、底辺コーダー止まりだろ
161:デフォルトの名無しさん
11/10/18 13:26:56.08
>>159
boostでいいじゃん厨がアホであることを示す典型的なレスだな
162:デフォルトの名無しさん
11/10/18 14:04:55.95
>>159
プログラムの99%は車輪の再発明、おまえはプログラムできないなw
163:デフォルトの名無しさん
11/10/18 17:15:55.61
そもそも質問に答えずにboostを薦める時点で質問理解力なしで解雇が妥当
164:デフォルトの名無しさん
11/10/18 19:00:58.56
boost は利用できる局面では便利だが、背景を無視して何でもかんでもboost言う奴は
確かにごにょごにょごにょ…特に実務に携わる機会の少ない研究者やアマチュアに多い傾向があるように思える。
165:デフォルトの名無しさん
11/10/18 19:51:46.04
codepadに具体的なコード上げてみろよ
話はそれからだ
166:153
11/10/19 00:59:45.97
いろいろアドバイスありがとうございます。
しかし、私にはどれが最適なのかが解りません・・・
将来的に下記のようにバージョンを変更したときにも互換性を持たせられるようにしたいと思っているのですが、
その場合、構造体毎ではなく、クラス内で1メンバ毎に読み書きする仕様にしたほうが良いのでしょうか。
Class ClsPage{
char m_moji[200];
};
を
Class ClsPage{
char m_Title[10];
char m_moji[200];
};
167:デフォルトの名無しさん
11/10/19 07:37:42.94
クラス内にシリアライズ/デシリアライズするメソッドを作成して、先頭にバージョン情報を入れておく。
デシリアライズ時にはバージョン情報を見てメンバを初期化して下さい。
168:デフォルトの名無しさん
11/10/22 15:47:49.83
0からC、C++を始るのに、
初心者でも分かり易く解説されているサイトがあれば教えて下さい。
もしなければ、お勧めの本を教えて下さい。
できれば少ない冊数で、安価な物でお願いします・・・。
169:デフォルトの名無しさん
11/10/22 16:01:41.32
値段の問題なら、図書館で借りるか古本屋で買えば良い
170:デフォルトの名無しさん
11/10/22 16:07:07.00
独習C
171:デフォルトの名無しさん
11/10/22 16:32:41.44
ロベールの翻訳が分かりやすい
172:デフォルトの名無しさん
11/10/22 16:39:59.81
>>168
やさしいC
やさしいC++
173:デフォルトの名無しさん
11/10/24 23:59:40.88
参考書の質問があったので、一緒に相談させてください。
『やさしいC』の次に使う参考書で悩んでいます。
来年からPGとして働く予定があり、そのため今は独学で勉強中という状況です。
3ヶ月かけ、参考書付属の練習問題は解けるようになったのですが
応用がほとんどできない、というのが悩みです。
宿題スレにある、大学生や専門学校生がこなしていると思われるレベルのものも
ほとんど自力では100%のものが作れません。(解答を見れば理解できます)
「C言語でこういうソフトが作りたい!」という欲求もあまりないので、
問題集形式のものや、何か1つのソフトを作るという形式のものが良い
Amazonレビューなども見てみたのですが、なかなか決められません。
おすすめの参考書を紹介していただけませんか。
(今度大きな書店がある都心の方へ行く用事があるので、そのときに中身も自分で見てみようと思います)
174:デフォルトの名無しさん
11/10/25 04:21:06.51
>>173
来年からだったら、もうその手の本は読まない方が良い
(自分も似た様な境遇で挫折した過去が。。。)
ググりながらでも、linuxなりwinのコマンドプロンプトなりのコピーを作るとかした方が良い
買うのは精々c言語のリファレンスとか関数辞典
GUIは今は出来なくて良い
見た目より、中身を作れる能力身に付けなさい
175:デフォルトの名無しさん
11/10/25 04:23:32.45
追記
単純なechoコマンドとかyesコマンドから始めるといいかも
176:デフォルトの名無しさん
11/10/27 09:04:41.62
しろうとならまずはアドレス帳あたりだな
データはXMLで保存して構文解析の練習もしよう
177:デフォルトの名無しさん
11/10/28 19:59:53.41
C言語の上位互換がC++言語と聞いたのですが、
C++を学べばCもすらすら出来るようになるのでしょうか?
それとも、先にCを学んでからC++を勉強し始めた方が良いのでしょうか?
178:デフォルトの名無しさん
11/10/28 20:32:04.72
>>177
Cは言語使用がシンプルだから、
C++やる前に、さらっとCやっておくのは個人的には良いことだと思う。
179:デフォルトの名無しさん
11/10/28 20:38:33.18
C言語から始めて構造化プログラミングの問題点を身を持って理解してから
C++でオブジェクト指向プログラミングのメリットを体験すべき
180:デフォルトの名無しさん
11/10/28 20:46:33.48
>>179
>C言語から始めて構造化プログラミングの問題点を身を持って理解してから
横レスだけど、問題点ってなんだろ?
181:デフォルトの名無しさん
11/10/29 04:21:10.87
>>177
CとC++は別の言語だから、Cで仕事をするならCを、C++で仕事をするならC++を学んで下さい。
移植のために互換性がありますが、同じ言語だと思ったら大間違いです。
182:デフォルトの名無しさん
11/10/29 09:00:31.10
>>177
C言語はやっといた方がいいと思う。
で、C++でのC言語にないoperator等の利便性がわかると思う。
183:デフォルトの名無しさん
11/10/29 11:44:46.16
C/C++で家が流されないためのプログラムは組めますか?
URLリンク(mukago.game.coocan.jp)
184:デフォルトの名無しさん
11/10/29 12:07:06.70
>>180
俺も横レス
構造化プログラミングは優れた思想だけど、
Cだとそれ以外の選択肢を取りにくい。
C++ならオブジェクト思考だったり、templateだったり、
関数型プログラミングだったり、複数の選択肢が出てくる。
・・・その代わり機能が多過ぎて覚えるのに時間がかかるけど
185:デフォルトの名無しさん
11/10/29 12:09:08.12
>>183
Cはハードウェアを制御するプログラミング言語だからそのような機能を備えたハードウェアを開発して
そのハードウェアをC/C++から制御するという形でなら可能ではないでしょうか
186:デフォルトの名無しさん
11/10/29 12:32:03.11
>>183
運が良ければ標準Cだけで可能
187:デフォルトの名無しさん
11/10/29 12:33:06.25
>>184
覚えるのは難しくないが実際にモノを作るときにどの選択肢がいいのかを正しく選ぶのが難しい
188:デフォルトの名無しさん
11/10/30 00:07:22.66
>>185
家の土台部分に船のような構造をつけて波に反応して
家から船に変わるとかそんな感じでしょうか?
いまいちイメージできません。
189:デフォルトの名無しさん
11/10/30 03:50:55.80
ランダムに点を取得した際のボーリングのスコアの期待値をだすものを作りたいのですが
スコア総あたり→ループ回数で割る
という方法よりも効率よく求められる方法ってなにかありますでしょうか?
190:デフォルトの名無しさん
11/10/30 04:58:24.79
入社試験のFizzBuzz問題ってだた単にこの処理が書けるかじゃなくて、どれだけ効率良い
処理を書けるかを見られてるんだよね?どんなコードにするのが正解なの?
191:デフォルトの名無しさん
11/10/30 05:21:05.06
>>189
ランダムに点を取得する(つまり最初の1フレームの1投目のスコア期待値が55/11となる)前提で
なげ続けた場合の最終的なトータルスコアの期待値を求めたいってこと?
静的な式になるから、式を作れば簡単に解けるだろうけど、
全部の場合を列挙するのがちょー面倒なんじゃ…特にストライクが癌だな。
192:デフォルトの名無しさん
11/10/30 08:35:04.93
30ByteでFizzBazz書けって言われたけど
#include<stdio.h>
int main(vo
で30Byteになってしまった
いったいどうすればいいんですか?
193:デフォルトの名無しさん
11/10/30 09:18:37.59
>>190
プログラミングの基本的なこと(順次実行、分岐、ループ)が理解出来て、それが応用できるかどうかでしょ
要するに「根本的にプログラミングに
向いてない人」をフィルタするための問題かと
194:デフォルトの名無しさん
11/10/30 10:17:30.88
ありがとう、じゃあ別に普通にif(i%15==0) elseif(i%3==0) elseif(i%5==0) else
でも減点ないのか。でもこれじゃ出来ない人なんていなくねと思うけど
195:デフォルトの名無しさん
11/10/30 10:39:46.05
>>194
信じられないかも知れないが
この程度でもまともにコードに出来ない人は本当に居るからなー
196:デフォルトの名無しさん
11/10/30 10:59:57.67
>>189
分岐は、ストライク、クリア、クリア無しの3つだから、各パターンの期待値を再帰で求める。
197:デフォルトの名無しさん
11/10/30 12:01:58.57
FizzBazz問題って自分が普段つかってない言語で出されて
困るってものじゃないのか?
ループ文なんだっけみたいな。
198:デフォルトの名無しさん
11/10/30 12:15:07.78
>>196
期待値って1つだろ。
199:デフォルトの名無しさん
11/10/30 12:30:13.55
>>198
平均値とは多分、確率付き部分期待値の計の事のつもりだろうから、これで合ってる。
200:デフォルトの名無しさん
11/10/30 12:35:28.16
>>195
いねーよwww
201:デフォルトの名無しさん
11/10/30 13:21:10.95
>>200
俺も以前はおまえと同じ考えでした…
202:デフォルトの名無しさん
11/10/30 16:05:55.41
URLリンク(www.aoky.net)
203:デフォルトの名無しさん
11/10/30 16:59:31.69
>>199
エスパー?
平均値なんてどこに書かれてるんだ?
204:デフォルトの名無しさん
11/10/30 18:51:19.14
>>202
それは外国の話だろ
少中高大とマジキチ排除フィルターがよく機能してる日本ではあり得ない
205:デフォルトの名無しさん
11/10/30 23:24:03.72
日本でも2~3%くらいいるんじゃないかと思ってる
206:デフォルトの名無しさん
11/10/31 00:14:48.55
FizzBazz問題ってあの言語もこの言語も使えますって言う奴に、じゃあそれぞれの言語
でFizzBazz書いてみてっていう為の問題じゃないの
207:デフォルトの名無しさん
11/10/31 00:27:04.90
FizzBuzzでゲームとしてやるとなかなか難しいよな
208:デフォルトの名無しさん
11/11/02 21:44:06.70
転売用にAmazon自動予約スクリプト使いたいけど、パソコンの台数と、回線の数、どっちが大事?
209:デフォルトの名無しさん
11/11/02 23:09:29.09
>>208
コンパイラのバージョンは?
210:デフォルトの名無しさん
11/11/03 07:25:39.91
>>208
回線の数
211:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/11/03 14:47:37.16
>>211
ここの下の方のようにすればいいとおもわれ
URLリンク(ja.wikipedia.org)
213:デフォルトの名無しさん
11/11/03 19:41:38.43
>>212
ありがとうございます。
上手く処理できそうです!
wikipediaにヒントがあるとは…。
検索不足かつ初歩的な質問ですみませんでした。
214:デフォルトの名無しさん
11/11/04 02:57:21.58
XMLとかのタグのいい検出方法教えてください。
今は
src=strstr(src,タグ名)+strlen(タグ名);
'<'までコピー
ってしてるけど、汎用性がない
215:デフォルトの名無しさん
11/11/04 11:56:25.19
>>214
規模が大きいならパーサライブラリを使うのが無難だけど、
そうでもないならstrstr()でもいいんでない?
どの辺が汎用性がないと思っているの?
216:デフォルトの名無しさん
11/11/04 23:49:27.03
>>215
決まったタグしか検出できないとか、タグの書く順番をガチガチに決めておかないと
いけないとかそういう辺り。HTMLみたいな感じでタグの書く箇所によって、どこ
がどの属性を持つかとかまで指定出来るようにしたいんだけど、それをしようとすると
if文で羅列するばっかの馬鹿みたいなコードになっちゃう。
パーサライブラリで調べたらいっぱい出てくるのね。オープンソースの探してどうやってるの
か見てみることにする
217:デフォルトの名無しさん
11/11/05 03:22:25.00
Windowsでプログラムのメモリ消費量を知りたいのですが、どうすればいいのでしょうか?
最大メモリ消費量ではなく、現在のメモリ消費量を随時知りたいです。
218:デフォルトの名無しさん
11/11/05 03:49:00.68
>>217
ProcessExplorerでも使えばいいやん
219:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/11/05 03:53:49.99
ここから、ここの処理まではメモリ消費量何Mだったとか書き出したいのです
221:デフォルトの名無しさん
11/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;
}
}
}
222:219
11/11/05 04:34:55.93
>>221
動いた!
ありがとうございます!!
223:デフォルトの名無しさん
11/11/05 07:36:28.71
visual stadio 2003で作ったプログラムをvisual c++ 2010 expressで使うと
deque interator not dereferencableて出ます。
対処法を教えていただきたいです。
224:デフォルトの名無しさん
11/11/05 08:38:37.67
>>220
アロケータ-作れば?
225:デフォルトの名無しさん
11/11/05 17:55:16.70
>>223
コピペくらい手順をちゃんと覚えなさいよ。
んで、ここに貼らずに翻訳サイトに貼れば答えが出てくるよ。
226:デフォルトの名無しさん
11/11/05 17:56:00.64
>>220
自分で書いた処理なら、自分で把握できているでしょ。それを書き出せばいいじゃん。
227:デフォルトの名無しさん
11/11/05 23:33:10.37
>>220
他人が作ったプロセスのメモリ消費量を知りたいのか、自分のコードの中で、自分の消費した量を知りたいのかで違う。
また、自分の消費した量でも、スタックだとかstaticだとかnewやallocだとかのどの量を知りたいのかで違う。
さらに、スレッド別に知りたいかどうかでも違う。
228:デフォルトの名無しさん
11/11/06 06:19:15.51
クラスに追加で一時的に変数持たせたい、要するに
クラスに計算結果を入れておく変数を一時的に作りたいんだけど、どうすればできますか?
229:デフォルトの名無しさん
11/11/06 09:45:43.45
そのクラスの定義を変更できないなら直接は無理。そのクラスを継承や包含で利用する別のクラスを作る。
230:デフォルトの名無しさん
11/11/06 10:51:17.37
>>229
便乗ですみません。継承・委譲はわかるのですが、包含はよくわかりません。java や c++ だとどんな感じのコードになるのでしょうか?
231:デフォルトの名無しさん
11/11/06 10:57:15.41
>>228
std::map<Hoge const *, TempValueType>
232:デフォルトの名無しさん
11/11/06 12:29:13.37
>>230
C++で包含といったらある型が他の型(のインスタンス)を内部にもつ(所有する)、くらいのおおまかな概念でしかないよ
struct X { // X型はint型とY型を包含する
int x;
Y y;
};
int x[10]; // intの配列型はint型を包含する (とは概念的にはありえるけど普通は言わない)
233:デフォルトの名無しさん
11/11/06 14:18:37.77
>>244 >>226-227
自分で組んでるプログラムのヒープやスタック全てを合わせたメモリ消費量を知りたい。
そういう関数でもあるかと思ったけど無いのね
アロケーター調べてみたけど作るのも面倒そうだし、全部数えて書き出すのは規模的に
ありえないしで、もう諦めることにする。ありがとう
234:デフォルトの名無しさん
11/11/07 18:14:50.65
タスクマネージャで仕様メモリなんか表示できてるんだからあるんじゃねぇの
235:デフォルトの名無しさん
11/11/07 18:36:25.60
アロケータごときで面倒とか言ってたら何も出来ないだろ
236:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/11/07 23:08:15.53
boost::assing::operator , (boost::assign::operator += (vec, "1.0"), "2.0") ;
使ったこと無いからわからんけどたぶんこう
238:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/11/08 00:02:03.97
いつ見てもおぞましいインターフェースだな
240:デフォルトの名無しさん
11/11/08 00:19:13.46
vector<double>に文字列はどの方法でも入らんな
241:デフォルトの名無しさん
11/11/08 04:17:41.94
>>239
いやまったく。
boostは確かに便利な局面もあるが、そんな無理しなくてもと思うことの方が多い。
242:デフォルトの名無しさん
11/11/08 19:15:01.84
アドレスを文字列に変換する場合、
void* pVoid = ...
ostringstream oss;
oss << pVoid;
こうするとoss.str()には、例えば「000012AB」という文字列が入るのですが、
16進数・0埋め・桁数など指定していなくても、環境問わずそれらが指定された形になる事は保障されているのでしょうか?
また、64bitOSでは16桁になるのでしょうか?
243:デフォルトの名無しさん
11/11/08 20:15:37.91
そんな保証はない
244:デフォルトの名無しさん
11/11/08 20:16:12.25
>>242
「指定していないのに指定された形になることが保証されているのか」って、
自分でなにを言ってるのか良く考えてからどうぞ。
245:デフォルトの名無しさん
11/11/12 17:21:00.49
継承って何ですか
バカにも分かるように教えて下さい
246:デフォルトの名無しさん
11/11/12 18:56:06.66
ロマサガ2をやれば分かると思うよ
247:デフォルトの名無しさん
11/11/12 19:50:13.26
>>245
既存のクラスの一部/全ての機能を利用する新しいクラスを作る手法の一つ
248:デフォルトの名無しさん
11/11/12 20:00:36.18
>>247
わかりづらいです・・・
ドラゴンボールで例えてみてください・・・
249:デフォルトの名無しさん
11/11/12 20:09:31.37
>>248
ゴクウを亀仙人のところで修行させてかめはめ波を習得すること。
250:デフォルトの名無しさん
11/11/12 20:36:50.37
>>248
セルは孫悟空、ベジータ、ピッコロ、フリーザ達の強い細胞を継承して生まれた
251:デフォルトの名無しさん
11/11/13 01:40:39.84
構造体の実態をexternしたいのですが何をやっても値がnullになってしまいます・・・。
値を代入したソース上で開けばちゃんと値が入っているのですが、他のソースからだと見れないのですが、どうすればいいでしょうか・・・。
252:デフォルトの名無しさん
11/11/13 02:02:56.46
>>251
問題のコードをcodepadかideoneに貼れ。
253:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/11/13 21:20:32.38
宣言と定義を分けるな
255:デフォルトの名無しさん
11/11/13 21:35:13.87
>>254
ありがとうございました。
256:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/11/14 10:24:09.66
templateって特殊化した定義ならソースに書いて良いの?
258:デフォルトの名無しさん
11/11/14 12:25:43.81
>>256
それだと
Test<int> t(100);
t < 123; //できない
50 < t; //できない
t < Test<int>(200); //これならできる
とかで不便なときがあるぞ
259:デフォルトの名無しさん
11/11/14 13:01:25.88
>>258
当たり前じゃん
operator<が定義されてないんだから
Testってクラスだよ?
俺は>>253を試して何とか動くようにしてみただけ
260:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/11/14 15:22:36.11
>>260
どうなってんのこれ?
変換演算子もないのにどうして動くの?
262:デフォルトの名無しさん
11/11/21 12:06:13.76
templateを使いすぎると実行ファイルが大きくなるから気をつけろって言われたんですけど
実行ファイルが大きくなってなにか困ることがあるんですか?
263:デフォルトの名無しさん
11/11/21 12:58:34.87
メモリの使用量が増えるとか起動が遅くなるとか
264:デフォルトの名無しさん
11/11/21 13:19:24.28
要領不足でインストールできなくなる
265:デフォルトの名無しさん
11/11/21 14:09:10.89
大きくなるか??
266:デフォルトの名無しさん
11/11/21 14:29:32.76
>>260
friendで演算子を定義すると、object.operator@(引数)という形では評価されないので
暗黙のコピーコンストラクタにより一時オブジェクトが生成される
もちろんクラス内部にdeep copyが必要な要素が混ざっていると危険なので
自前でコピーコンストラクタを定義する
267:デフォルトの名無しさん
11/11/21 15:19:31.90
>>265
インライン展開されちゃうよ、な話ではなかろうか。
268:デフォルトの名無しさん
11/11/21 15:28:44.33
別にtemplateじゃなくてもインライン展開されるけどね。
269:デフォルトの名無しさん
11/11/26 04:20:58.65
今時PC上で動かすならインライン展開できるだけするべきだろ
270:デフォルトの名無しさん
11/11/26 04:33:41.80
インライン展開はできる限る使わない方が速い。
メモリ使用量が増大するし、同一関数が別々と認識されCPUキャッシュの効果が薄れる。
271:デフォルトの名無しさん
11/11/26 05:18:44.06
というか、インライン展開で速度速くなるものなの?
インライン展開した所で、たいして速くなりそうもない気がする。
アルゴリズムとか制御構造見直した方がよほど速くなる可能性があるだろ。たぶん。
272:デフォルトの名無しさん
11/11/26 08:40:21.30
ためしにVC++2008でインクリメントするだけの関数で
[256 * 256][256]のint配列の全要素をインクリメントしたら
inlineじゃないほうが倍ぐらい早かった
こういう小さい関数ってinlineの得意な分野だと思ってたけどそうでもなかったようだ
273:デフォルトの名無しさん
11/11/26 09:32:48.11
>>272
最適化で消えてる可能性は?
274:デフォルトの名無しさん
11/11/26 09:38:55.85
>>272
何通りか試したら、同等~20%程inlineのほうが速いよ
最適化防止のコードを入れてないんじゃないの?
275:デフォルトの名無しさん
11/11/26 10:04:11.99
パフォーマンス測定で最適化防止っておかしくね?
276:デフォルトの名無しさん
11/11/26 10:09:15.33
インライン展開の効用は、コードをインラインに展開して関数呼び出しを減らすことよりも
関数内部と外部に跨る最適化が施されることにあるよ。
例えば、C++でクラスのメンバのアクセサを作ったとすると、メンバに直接アクセスするのと同じコードになり得る。
↓のfoo::func()も、最適化で定数と同じになれる。
--
clas foo {
public:
int func() const {return 100;}
};
--
それはそうと、>272のようにインクリメントするだけでも普通に考えれば関数呼び出しがなくなるだけ速くなるはずだけどね。
277:デフォルトの名無しさん
11/11/26 18:17:22.55
>>270
巨大な関数ならともかく、小さな関数はインライン展開した方が高速。
巨大な関数を展開するコンパイラはないと思うが、されたらキャッシュに響くので低速になる場合がある。
>>271
意味のない比較
>>272
ソースがないので何とも言えないが、君のテスト方法が間違っている可能性大。
その配列のサイズを見る限り、インラインじゃないところにボトルネックがありそう。
278:デフォルトの名無しさん
11/11/26 19:47:26.08
ちょっとageますよ
少し前に糞スレをage荒らししてたアホがいたもんで大事なスレが全部
下の方に行ってしまってる
279:デフォルトの名無しさん
11/11/26 19:53:06.42
昔のCPUはジャンプ命令のコストがでかかったとか、パイプライン処理が初期化されるとかで有効だった。
(引数や復帰アドレス保存のコストもかかるし)
10年前にスパコンのアセンブラソース読んだときは分岐先をキャッシュに読み込む命令があって
多少速度低下を軽減出来るようになってた。
280:デフォルトの名無しさん
11/11/26 20:02:37.24
今じゃ遅延スロットも完全に消えたしな
投機実行とリターンバッファで十分
281:デフォルトの名無しさん
11/11/26 23:14:18.16
でもAtomとか流行のスマフォに乗ってるARMにはそこまでの回路はない
コンパイラの最適化を働かせるために無意味じゃない
282:デフォルトの名無しさん
11/11/26 23:18:06.91
Atomがインオーダー実行と聞いた時は驚いたな
命令セットは新しいのに
283:デフォルトの名無しさん
11/11/29 22:20:26.93
エクスプローラっぽいものを作ってるんですが、ファイルの名称、日付、サイズ以外の状態などの取得で詰まってます。
特に特殊フォルダで状態をデフォルトで表示したい場合に困っています。
シェルを使うのかと思ったんですが、わからず。
アドバイスお願いします。
284:デフォルトの名無しさん
11/11/29 22:27:00.77
それはC言語でなくOS機能の問題だ。
285:デフォルトの名無しさん
11/11/30 08:57:39.38
>>284
環境はXPでBCB使ってます。
特殊フォルダ内の名前なんかは取得できてるんですが・・・
C++でエクスプローラの「状態」項目を取得するのは無理ですか?
286:デフォルトの名無しさん
11/11/30 09:04:19.55
>>285
WinAPIスレで聞いてきたら?
287:デフォルトの名無しさん
11/11/30 13:16:39.61
>>283
ShellExtensionでぐぐれ
288:285
11/11/30 22:15:24.10
>>286
そうですね。移動します。
ありがとうございました。
>>287
ggrましたが、正直理解し切れませんでした。>ShellExtension
まだシェル使うにはレベルが足りていないようなので、今回はあきらめます。
ありがとうございました。
289:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/11/30 23:01:30.21
unique_ptrは所有権の移譲をmoveコンストラクタで行なってしまうから
一時オブジェクトが解体出来ないって怒ってるんじゃないの
291:289
11/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:デフォルトの名無しさん
11/11/30 23:18:50.92
unique_ptrはそもそもコンテナに入れられないでしょ
auto_ptrと同じような働きでmoveセマンティクスにしただけだから
shared_ptrにしないとまずい
293:デフォルトの名無しさん
11/11/30 23:50:02.24
>>292
unique_ptrがコンテナに入れられないとか嘘乙、と書く前に調べたら
URLリンク(bit.ly)
で入れられるけど中間挿入したらアウトって書いてあってなるほど。
挿入は最後尾のみにしかしない、ということが確実であれば利用は
可能ですよね?
規格書までは読んでないので間違ってたら指摘お願いします。
294:デフォルトの名無しさん
11/12/01 00:25:42.85
> 入れられるけど中間挿入したらアウトって書いてあってなるほど。
どこからそんな話が?
11のコンテナはmoveしかできない型を入れても何も問題はない。ただしそのときはコピーを必要とする操作は当然出来ない。
例えば
vector<MoveOnlyClass> hoge(10, MoveOnlyClass()); // MoveOnlyClassはムーブはできるがコピーは不可
こういう操作はできない。(これは第2引数のコピーで要素10個を初期化するコンストラクタでmove版はない)
295:デフォルトの名無しさん
11/12/01 00:30:27.05
unique_ptrを突っ込んでsortとか掛けたらどうなるん?
あとsetとか入れた時の挙動も気になる
296:デフォルトの名無しさん
11/12/01 00:32:34.19
取り敢えずgccでコンパイル掛けてみたら山ほどエラー吐いてワロタ
もちろん -std=c++0x は付けた
297:289
11/12/01 01:02:04.85
>>294
URLリンク(bit.ly)
ここで
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:デフォルトの名無しさん
11/12/01 01:09:02.84
そういう使用制限が掛かってまでもunique_ptrを使いたい理由は何だろう
299:デフォルトの名無しさん
11/12/01 01:12:56.51
自分が何を間違えているのか正しく理解しておかないと、
同じようにまたやらかすと思うんよ。
300:デフォルトの名無しさん
11/12/01 01:47:37.94
>>289
> std::move付ければうまいことやってくれないかと試しましたがやはり駄目
これがわからん。VC++では知らないがmoveで動くはずだぞ。どうやった?
301:デフォルトの名無しさん
11/12/01 11:15:02.08
Hogeのmoveコンストラクタを書けばいいだけだろ
302:デフォルトの名無しさん
11/12/01 12:04:26.89
string::c_strは規格上例外を投げうる、でおK?
303:デフォルトの名無しさん
11/12/01 13:01:48.60
おk
304:デフォルトの名無しさん
11/12/01 18:27:56.86
C++11では投げなくなった
305:289
11/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:デフォルトの名無しさん
11/12/01 21:13:27.82
馬鹿には無理
307:デフォルトの名無しさん
11/12/01 21:33:12.97
>>305
代入演算子も要求されるみたいだね。なくてもpush_backは実装できると思うんだけど
URLリンク(ideone.com)
308:sage
11/12/01 21:42:22.99
>>307
ありがとうございます。
代入演算子は全く頭になかったです。
自分の間違いが分かり安心しました。
どうもありがとうございました。
309:デフォルトの名無しさん
11/12/01 21:49:31.78
>>305
> vcはもちろんgcc4.5.2もダメなんだなこれが。
これ関係だな。
URLリンク(gcc.gnu.org)
>> Improved experimental support for the upcoming C++0x ISO C++ standard, including support for (中略) and implicit move constructors.
つまりgcc4.5までは暗黙のmove constructorは生成されない。
310:デフォルトの名無しさん
11/12/01 22:02:30.59
>>307
おおgcc4.6.1で通った
Eclipse CDT Indigoが馬鹿過ぎる
早くC++11に対応してくれ
画面が波線ばかりで見にくい
311:デフォルトの名無しさん
11/12/01 22:27:50.38
>>305ならVC10SP1で通る
SP1で修正されたものなのか>>289の環境がおかしいのかは知らん
312:289
11/12/03 01:22:45.50
>>309
4.6.1に上げたら確かに通りました。
ちゃんと最新バージョンチェックしないと駄目ですね。
ソースまでありがとうございます。
>>311
SP1は入れたつもりになっていただけで入っていなかったようです。
改めてSP1入れてからやったら305のコードはすんなり通ったので、
SP1で修正されたっぽいです。ありがとうございました。
313:デフォルトの名無しさん
11/12/03 21:08:24.91
クラスのメンバ関数の定義って
毎回「クラス名::関数名」ってかかなあかんの?
314:デフォルトの名無しさん
11/12/03 21:15:46.80
class hoge {
void f() { }
};
って書けばいいよ
315:デフォルトの名無しさん
11/12/03 21:52:42.54
定義と実装が別の時は?
316:デフォルトの名無しさん
11/12/03 22:58:06.85
かかなあかん
317:デフォルトの名無しさん
11/12/03 23:01:02.27
めんどくさいね
318:デフォルトの名無しさん
11/12/04 00:00:59.86
後からクラス名を変えたいってなると
結構大変っすね
319:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/12/04 08:11:24.81
せんせー
関数の別名定義ってできましか?
321: ◆QZaw55cn4c
11/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:デフォルトの名無しさん
11/12/04 09:36:22.68
#define g f
#define h f
でよくね
323:デフォルトの名無しさん
11/12/04 09:39:44.37
>>322
gとかhって名前の変数作ったら酷いことにならんかw
324:デフォルトの名無しさん
11/12/04 09:54:50.91
マクロのウザさは異常
名前空間の中まで侵食してエラーとかふざけんな
325:デフォルトの名無しさん
11/12/04 10:05:55.47
クラスなら関数ポインタで持つようにして
それに別名定義したらいいんじゃね?
326:デフォルトの名無しさん
11/12/04 10:16:45.14
名前変えるだけなのにそんなコスト払いたくないだろ
327:デフォルトの名無しさん
11/12/04 10:20:32.12
>>323
g とか h って名前の関数があるのに変数作れるのか?
328:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/12/04 16:19:24.42
>>324
現実にはそれが便利なことがあるのですよ。
そうでないと実装が難しいこともある。
実装は、常に現実の問題解決を優先すると、Bjarne も言ってる。
330:デフォルトの名無しさん
11/12/04 19:42:22.86
マクロがどうしても嫌なら
極薄のラッパー書けば済むことだしねめんどいけど
331:デフォルトの名無しさん
11/12/05 17:29:18.56
プログラムの内容の質問ではないんですけど、
角度0~180度を5度刻みに補正する処理のいい関数名が思いつかないので、
教えてください。ちなみに切り捨てです。
332:デフォルトの名無しさん
11/12/05 17:35:02.43
digitizer
333:デフォルトの名無しさん
11/12/05 17:37:49.60
sniper
334:331
11/12/05 17:52:44.71
>>332-333
ありがとうございます!参考になります。
335:デフォルトの名無しさん
11/12/10 14:13:31.14
フレンド指定されているクラスを継承するクラスは
それもまたフレンド扱いになるのでしょうか?
336:デフォルトの名無しさん
11/12/10 15:17:51.61
ならないみたいですね
スレ汚ししてれししました
337:デフォルトの名無しさん
11/12/12 02:10:30.71
ワイは日本人やが聞いた情報によると、もうじき中国はバブルがはじけて昔の貧乏な元の中国に戻るらしいで
みんなも知っての通りもう経済は破綻してて、取り戻すのは無理なんだそうや
その世界ではごっつい有名な政府関係者筋から聞いた確かな情報やで
まあお前らほどの頭の良い連中には、今さらなくらいのネタやな、失礼なくらいかもしれん
お前らからすればもう常識的なくらいの知識やろ?
338:デフォルトの名無しさん
11/12/12 08:31:29.26
中国は終了っていうか中国も終了だな
資本主義崩壊で殆どの国が終わる
339:デフォルトの名無しさん
11/12/12 11:30:30.67
1929から学んでないから、もっと酷い事になる。
340:デフォルトの名無しさん
11/12/12 12:28:56.01
新興国バブルよか先進国のソブリン危機の方が千倍ぐらい怖い
341:デフォルトの名無しさん
11/12/12 17:26:11.73
探し物のついでに、これ見つけた
URLリンク(bellard.org)
自分自身を実行できるCのサブセットのx86コンパイラ(インタプリタではない)。
イチから書き上げるのは面倒だが、ちょっとコンパイラをhackしたい。
pccはまだしも、gccだのllvmだのは大げさ。最適化はいらない。
っていうのに合う、いじり元みたいなのを、趣味用にのんびり探してる
なんかおすすめあったら教えて
可能ならC++で できたらGPLよりBSDが好き
342:デフォルトの名無しさん
11/12/12 17:49:51.24
tcc以外ありえない
343:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/12/13 00:08:58.12
EICAR-STANDARD-ANTIVIRUS-TEST-FILE でぐぐってみたらわかる
345:デフォルトの名無しさん
11/12/13 01:03:45.10
スレリンク(tech板:357番)
スレリンク(tech板:343番)
スレリンク(tech板:802番)
346:デフォルトの名無しさん
11/12/13 08:47:13.74
環境依存の質問もOKですか?
347:デフォルトの名無しさん
11/12/13 08:54:35.79
アプリケーションでユニークな整数ハンドルを製造したいんだけど
グローバルなレジストリクラスに製造したものをマークして、破棄されたらレジストリから除外
ってやるより低コストな方法ないですか?
348:デフォルトの名無しさん
11/12/13 08:56:03.46
guid
349:デフォルトの名無しさん
11/12/13 09:01:34.33
guidはユニークじゃない
350:デフォルトの名無しさん
11/12/13 10:53:52.58
pid
351:デフォルトの名無しさん
11/12/13 17:12:44.48
質問にしては違和感あるなと思ったら、ウイルスコピペか
352:デフォルトの名無しさん
11/12/13 17:19:02.98
>>351 -> >>343
>>347
起動時にRPCサーバ探す、なければ自分がRPCサーバになる
そのRPCサーバがユニークIDを発行
>>349
…たぶん、UUIDで十分な気がするが
353:デフォルトの名無しさん
11/12/13 18:23:10.58
グラフィックスで物体が任意のスピードで楕円運動をするプログラムを作りたいのですが可能でしょうか?
354:デフォルトの名無しさん
11/12/13 18:27:45.83
確率が小さいとか、現実的にありえない大きな数字なら大丈夫、と考えるのは愚か
マシンの進化はそんなことお構いなしだ
355:デフォルトの名無しさん
11/12/13 19:04:41.86
別スレからの転載で申し訳ございません。
gdbを使用してテストをしているのですが、例外を発生させられず困っています。
try {
int *p = new int;
}
catch(...) {
//☆ここにいれたい。
}
どなたかご教授お願いしますm(_ _)m
356:デフォルトの名無しさん
11/12/13 21:30:57.71
>>355
自前のnewオペレータを作って、その中で例外を発生させたら?
357:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/12/13 23:13:14.98
>>356>>357
レスサンクス。
参考にさせて頂きました。
359:デフォルトの名無しさん
11/12/13 23:15:16.89
union {
int i;
float f;
std::string s;
Hoge h;
};
みたいに書きたいのだけどできませんどうすればいいでしょうか
360:デフォルトの名無しさん
11/12/13 23:44:51.02
諦める
361:デフォルトの名無しさん
11/12/14 00:40:16.81
putsの存在意義を教えてください
362:デフォルトの名無しさん
11/12/14 01:07:10.74
printfより軽い
363:デフォルトの名無しさん
11/12/14 08:07:51.12
printf("%s\n", str);と書いたときに、
gccならputs(str);に書き換える位だからな。
364:デフォルトの名無しさん
11/12/14 09:10:45.97
高級アセンブラとしては、ターゲット環境にgets/putsしかない世界があってもいい
365:デフォルトの名無しさん
11/12/14 09:13:37.38
文字列単位の出力は甘え
366:デフォルトの名無しさん
11/12/14 11:26:40.64
printf(str);
みたいなマズいコードにならないのは良いところだと思う
367:デフォルトの名無しさん
11/12/14 14:30:00.13
速度を出したい
扱う度にヒープへアクセスするメンバ変数が遅い
関数ごとに引数やローカル変数へ落とし込みスタックで処理して返す
ソース汚すぎわろた
368:デフォルトの名無しさん
11/12/14 22:43:46.02
>>367
ソースうp
369:デフォルトの名無しさん
11/12/15 01:56:12.88
>>367
どんな処理か知らないが、そこがボトルネックになるようなジャンルは
滅多にないと思う。無駄なことをしてないことを祈る。
370:デフォルトの名無しさん
11/12/15 03:04:59.57
これならわかるC 入門の入門
という本を読んで、早速BorlandC++5.0をインストール。
が、コンパイラのパスと環境変数PATHの設定でwinXPまでしか書いてなくて困っている。
当方windows7starter。
お願いします。
371:デフォルトの名無しさん
11/12/15 03:15:37.43
370
自己解決った。
初めて踏み込むからビビリすぎたみたい。
スレ汚しごめんよ。
372:デフォルトの名無しさん
11/12/15 06:04:27.34
Borlandでやるならbcpadがお手軽じゃないかな
373:デフォルトの名無しさん
11/12/15 10:16:07.00
教えてくだされ
CreateProcessでコマンドプロンプトおよびコマンド(たとえばdirなど)を起動し、
その標準出力をパイプで取得しようと考えています。
この際にUSモード(英語表記)でコマンドプロンプトを起動したいのですが、これはどこで指定すればよいのでしょうか?
現在は、
cpch 437
dir
みたいな.batファイルを作成してそれを実行しているのですが何ともダサいなぁと思っています。
そもそもUSモードで起動できれば良いのかなと思いました。
よろしくお願いします。
374:デフォルトの名無しさん
11/12/15 10:44:34.63
>>373
cmd /k us
じゃだめなん?
375:373
11/12/15 10:49:19.78
>>374
おお、ありがとう。私もちょうどそのあたりにたどり着きそうだった。
cmd.exe /k usは、うちの環境ではus.batがなかったので通らず、
cmd.exe /c chcp 437
で行けそうな感じ。createprocessのプログラム引数で渡して起動してみる。
サンキュー。
376:373
11/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:デフォルトの名無しさん
11/12/16 22:10:16.00
こんなことするやつのテクニックの名前教えて
> class B : public A<B> {};
378:デフォルトの名無しさん
11/12/16 22:22:01.89
ジョジョの奇妙な再帰パターン
379:デフォルトの名無しさん
11/12/16 23:12:47.67
>>378 wikibooksにたどりついた。期待した知識整理ができそうだ。thx
380:デフォルトの名無しさん
11/12/17 05:09:37.57
オブジェクトハンドルって何ですか?
381:デフォルトの名無しさん
11/12/17 09:36:28.86
>>380
オブジェクト(対象物)のハンドル(取っ手)です。
382:デフォルトの名無しさん
11/12/17 09:40:02.77
ポインタとは違うんですか?
383:デフォルトの名無しさん
11/12/17 12:17:05.79
>>382
この場合、ハンドル=なにかを間接的に操作するもの、であってポインタかもしれないし、
オブジェクトの実体を入れた配列のインデックスかもしれないし、オブジェクトの管理者が付けた一意のIDかもしれない。
384:デフォルトの名無しさん
11/12/17 14:32:52.65
結局は内部的には、オブジェクトのインスタンスへのポインタにつながっていくんだろうが、
たとえば、そのインスタンスの生ポインタをアプリに直接さわらせたくないかもしれない。
385:デフォルトの名無しさん
11/12/18 09:48:15.75
ハンドルを整数にする利点って?
スマポに入れにくいし、不透明ポインタでいいじゃん
386:デフォルトの名無しさん
11/12/18 09:58:17.86
>>385
例えばWindowsのウィンドウハンドル(hWnd)は(事実上)整数。
387:デフォルトの名無しさん
11/12/18 10:21:27.99
一々専用の不完全書くのが面倒
388:デフォルトの名無しさん
11/12/18 10:35:50.49
>>386
windowsの話はいいから利点を教えて
389:デフォルトの名無しさん
11/12/18 10:39:08.53
無効になったオブジェクトを指すポインタ(メモリ領域)は容易に再利用されるから。
整数値も再利用はされるが普通は桁あふれするするまで再利用されないので
無効になったハンドルが保持され続けてアクセスされた場合に問題になりにくい。
390:デフォルトの名無しさん
11/12/18 11:05:49.62
>>385
ハンドルは異なるアドレス空間でも共有できる。
391:デフォルトの名無しさん
11/12/18 11:27:42.30
なんだ、ハンドルが実数じゃダメなの?って質問かと思ったわ
392:デフォルトの名無しさん
11/12/18 14:34:18.25
実数だと == で比較出来なくなるだろ馬鹿
393:デフォルトの名無しさん
11/12/18 15:08:00.68
プログラミング入門としてよくC言語が挙げられますが、今の時代にC言語ってどういう場面に使われているんでしょうか?
時代遅れという意見もよく聞きますので・・・
394:デフォルトの名無しさん
11/12/18 15:09:57.93
パチンコ
395:デフォルトの名無しさん
11/12/18 15:10:43.15
家電製品
スペースシャトル
電気自動車
396:デフォルトの名無しさん
11/12/18 15:14:12.79
>>394-395
重要な部分で使われているのですね
学習意欲がアップしました。ありがとうございます
397:デフォルトの名無しさん
11/12/19 00:25:47.35
C言語知ってると他の言語に移行しやすいよね
そして、他の言語はC言語よりもずっと多機能で扱いやすい代わりに、
実行速度が異様に遅いことに愕然としてみたり・3・;
398:デフォルトの名無しさん
11/12/19 01:52:19.88
そういえば。Cの習得に時間がかかりすぎて、
C++を含む他言語のライブラリ習得が難しくなってしまった
アタマが硬くなってしまったらしい
そういや、昔のコードを見返すと、汚かったが、賢かったような気がする
プログラミングはアマでやってるので、仕事に影響はないようなもんだが、
硬くなってしまったアタマは仕事に影響があり、プログラミングを通して、
アタマをやわらかくしたい。
いい方法はないか。ネタ、マジレス両方で。
399:デフォルトの名無しさん
11/12/19 05:11:08.91
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
| i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
|( ´∀`) < きのこ のこーのこ げんきのこ ♪
|(ノ |つ
| |
⊂ _ ノ
""U
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
(´∀` )| < エリンギ まいたけ ブナシメジ ♪
⊂| (ノ |
| |
ヽ _ ⊃
.U""
|
| ミ
| ミ サッ!
| ミ
|
400:デフォルトの名無しさん
11/12/19 18:22:56.19
>>398
スポーツすると頭に酸素がよく回って活発になるよ
401:デフォルトの名無しさん
11/12/19 23:03:50.86
よこからだけど
いいこときいた
ありがとう
402:デフォルトの名無しさん
11/12/20 00:14:04.66
>>398
・楽しめる部分を見つける。
見つからなければ、状況を楽しんでみる。
・苦痛を感じる手前で一旦休憩して再度トライする。
403:デフォルトの名無しさん
11/12/20 00:54:10.94
頭が硬いとか柔らかいとか都市伝説だから心配すんなw
新しい言語の学習がうまくいかないのは、大抵、
1.それが必要じゃないから真剣味が足りない
2.単に経年等で知能が衰えた(ため相対的にそんな気分がする)
のどちらかで、大抵は1だから、仕事にすればすぐ出来るようになる。
404:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/12/20 01:35:38.00
C++は何故、オブジェクト指向言語だと思われてるんだろう?
Stroustrup自身は、マルチパラダイム言語or効率的なライブラリ構築用言語だと表明してるのに。
406: ◆QZaw55cn4c
11/12/20 01:47:49.75
>>404
こっちではうまくいった。
URLリンク(codepad.org)
407:デフォルトの名無しさん
11/12/20 01:51:53.23
ポインタを含む構造体の配列を動的につくりたいんですが、
構造体の配列が静的にしか作れません。
中身のポインタは、要素ごとにmallocできるんですが、、、
作り方教えてください
408:デフォルトの名無しさん
11/12/20 01:56:19.16
>>406
ありがとうございます!
プリプロセッサの使い方が間違っているのかどうか自信がなかったのですが、
貼る過程で省略した部分のどこかが原因のようなので
もう一度自分で考えてみます。
409:デフォルトの名無しさん
11/12/20 04:41:36.15
>>405
心配するな、誰もそんなことを思っていない。オブジェクト指向でもコードが書けるCだと思ってる。
大体STLを始めとするテンプレートライブラリなんて、オブジェクト指向の真逆を突き進んでる。
410:デフォルトの名無しさん
11/12/20 05:30:32.49
STLを完成させるために、C++のオブジェクト指向( クラス、テンプレート)などが整備されたんだろ。
411:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/12/20 10:22:36.07
いろいろ書けるCなんだろうが実際の開発だと矛盾したスタイルが混在して困る。
言語仕様を選択できるようなビルドオプションを仕様化してくれないかな・・・
413:デフォルトの名無しさん
11/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));
}
414:398
11/12/20 14:17:13.99
>>400-403
ありがとう、ちょっと元気出た
415:デフォルトの名無しさん
11/12/20 18:41:02.33
>>400-403
ありがとう、ちょっと精液出た
416:デフォルトの名無しさん
11/12/21 07:51:43.03
>>413
ありがとうございます。できました。
417:デフォルトの名無しさん
11/12/21 13:49:27.00
sizeof(int)で4がでてきた場合、intの大きさは4バイトという認識であってますか?
418:デフォルトの名無しさん
11/12/21 14:16:08.27
はい
419:デフォルトの名無しさん
11/12/21 14:22:37.56
>>418
ありがとうございます
本には「大きさ」としかかかれてなかったもので
420:デフォルトの名無しさん
11/12/21 15:40:29.84
#define alert() (putchar('\a'))
これは「引数のない関数形式マクロ」と解説されているのですけど、オブジェクト形式マクロとの違いがわかりません
これをオブジェクト形式マクロと解釈するのは間違っているのでしょうか?
421:デフォルトの名無しさん
11/12/21 15:51:02.25
変数と、引数のない関数の違いみたいなもんじゃね
422:デフォルトの名無しさん
11/12/21 16:45:08.48
#define alert() (putchar('\a'))
alert(); → (putchar('\a'));
#define alert (putchar('\a'))
alert(); → (putchar('\a'))();