【初心者歓迎】C/C++室 Ver.28【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/06/09(金) 10:08:51ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.27【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1147183708/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
2006/06/09(金) 10:44:36,ヘ ,:ヘ.
/: : \ /:: !
/::::..... \--―‐'.:.:::... ! >>3 プギャーーーーーーーッ
/:::::: .::::::::::::: ',
,':::: /\ヽ_ヽv /: /\i
.i:::: √___丶 !
!:::. / / tーーー|ヽ !
|::::.. ..: | |ヽ l _,-,.、
i;::::.. | |⊂ニヽ| | ! i´ヽ い {,-ゝ.
':;::::... | | |:::T::::| ! / l ,人 __,!...!_}ゝ l
_ \:::::.... ト--^^^^^┤ / ヽ. '´ ` /
/ `ヽ `ゝ:::::........ ....../_ / ァ-- '
i::..... ;\!..-ー 、 /⌒ヽ 、\ / .:/
` '''''ー- 、::::/ ,.. . `/::: 〉‐ 、 \ \ / ..::ノ
.ソ' : /::. /:: 〉 \\,/ .:/
/i:. :,'::. /:: ./ヽ \! ..:;'
/ |:: |ヽ.:.. :'::/ \ .::/
/ !::. i::.:.:`:‐"ー、_,ノ \:::/
/ ,/ヾ;:.... /:.:.:.:.:/:::.:.. ヽ、
| :i `ー::':.:.::.:.:./\:::::.:.:. ':;
0003デフォルトの名無しさん
2006/06/09(金) 11:45:59乙
0004デフォルトの名無しさん
2006/06/09(金) 16:43:530005デフォルトの名無しさん
2006/06/09(金) 17:04:39居ませんか???
教えていただけると助かります。。。。
0006デフォルトの名無しさん
2006/06/09(金) 17:09:01マルチ死ね。
0007デフォルトの名無しさん
2006/06/09(金) 17:52:59環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0008TOM
2006/06/09(金) 19:00:500009デフォルトの名無しさん
2006/06/09(金) 19:03:32デーモンの常駐。それかsleep()を発行して、一定時間経過後ディレクトリ内容取得。
0010デフォルトの名無しさん
2006/06/09(金) 20:41:37listで型を指定するところにクラスや構造体を指定した場合
要素を追加するときどうするんですか?
intやfloatのような型だとpush_back(10)のようにできますが、
クラスだと、どうやって記述すればいいのかわかりません。
0011デフォルトの名無しさん
2006/06/09(金) 20:47:31class Foo;
std::list<Foo> foos;
foos.push_back(Foo());
Foo foo;
foos.push_back(foo);
001210
2006/06/09(金) 20:56:38ありがとうございました
関数でもいいんですね
0013デフォルトの名無しさん
2006/06/09(金) 20:59:33> foos.push_back(Foo());
これの引数はFooという関数を呼んでいるわけではないぞ。
Foo型の一時的なオブジェクトを(コンストラクタ引数なしで)作っている。
001410
2006/06/09(金) 21:23:14コンストラクタを呼べばいいのですね。わかりました
あと、何度も同じような質問で申し訳ないのですが
listの要素のオブジェクトのメンバ関数を呼ぶ方法がわかりません。
0015デフォルトの名無しさん
2006/06/09(金) 21:29:04class Foo;
std::list<Foo> foos;
...
for(std::list<Foo>::iterator it = foos.begin() ; it != foos.end() ; ++it)
it->memberFunc();
001610
2006/06/09(金) 21:36:23ありがとうございました
0017デフォルトの名無しさん
2006/06/09(金) 22:50:21メンバ変数の一つに、CFOO* m_focusFoo を持ち、
メンバ関数の一つに、CFOO* GetFocusFoo() を持ってます。
m_focusFooは、下のようにコンストラクタでNULLで初期化してます。
CFOO::CFOO():m_focusFoo(NULL),・・略{略}
GetFocusFoo()は、下のようにただ m_FocusFoo を返すだけです。
CFOO* CFOO::GetFocusFOO() {
return m_focusFoo; ←ここで止まる!!!!!
}
CFOOのインスタンスは複数生成するんですが、
m_focusFooには自分自身が入ってる場合もあれば
NULLの場合もあれば
他のインスタンスが入る場合もありえます。
GetFocusFoo()を呼び出してる側では、
NULLが返ってきてもいいようになってまして、
ためしに return NULL; としてみると落ちないでちゃんと動きます。
(もちろん正規の動きでは無いですが、
少なくとも呼び出し側は仮にNULLが返されても安全なようにはしてある、という意味です。)
で、一応コンパイルは通ってまして、
win2000の環境では動くのですが、xpのマシンで走らせるとエラーで落ちます。
デバッグしてみると、return m_focusFoo;のところで止まっているようで、
CFOOのコンストラクタの初期化リストでちゃんと初期化しているはずの変数も含め
全ての変数に「式を評価できません」とエラーが出てます。
return の m_FocusFoo の評価部分で落ちて、
しかもそれが環境に依存するというのは、どこの書き方が悪いと考えられますでしょうか?
001817
2006/06/09(金) 22:57:310019デフォルトの名無しさん
2006/06/09(金) 23:09:32再現する最低限のソースを貼れ。
002017
2006/06/09(金) 23:13:380021デフォルトの名無しさん
2006/06/09(金) 23:14:50◆北朝鮮への経済制裁等を行なうはずの「北朝鮮人権法案」だったのだが◆
◆民○党案は「脱北者」と称する棄民&工作員を呼び込む外患誘致だった◆
◆突如まともな自○党案に民○党案を織り交ぜる妥協話が・・ヤバ過ぎ!!◆
まとめサイト
http://www14.atwiki.jp/akiramenai/pages/4.html
これが通れば日本にチョンが何十万人とやってきます。13日に可決予定です。
時間がもうありません。これを見た方はコピペ&凸お願いします!!
【日本終了】朝鮮人を日本に大量移住 反対 OFF(抗議運動作戦本部)
http://off3.2ch.net/test/read.cgi/offmatrix/1149833514/l50
002217
2006/06/09(金) 23:47:41GetFocusFoo()の処理の先頭に、
WinAPIのMessageBoxを差し込んで試してみたら、
なぜかWin2000の方で実行すると起動直後にGetFocusFoo()は呼ばれなくて、
xpの方で実行すると呼ばれるみたいです。
OSによって実行の順序が変わるなんてありえるんですかね?
処理的には、GetFocusFoo()が呼ばれるからにはインスタンスが出来上がってるわけで、
となれば少なくともm_focusFooはコンストラクタでNULLに初期化されてるはずだと思うのですが、
これをreturnするところで落ちるってのがいったいどういうことなのかよく分かりません。
002317
2006/06/09(金) 23:57:45実行される順番が違うってことが分かったんで、
勘で適当に関係ありそうなところをいじって見たら直りました。
なんで直ったか分かりませんし、
説明しようにも内容が入り組みすぎてるので、無理です。すいません。
お騒がせしました。
0024デフォルトの名無しさん
2006/06/10(土) 00:19:20そんなに入り組んだプログラムを作っているから、
17のようなわけわからないことが起きるんだよ。
0025デフォルトの名無しさん
2006/06/10(土) 01:42:50プログラミングはC#をちょっとだけです。
質問なんですが、
標準Cライブラリ http://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA
ここに載っていない関数は、大まかに言うと各環境の独自拡張と考えてよいのでしょうか?
0026デフォルトの名無しさん
2006/06/10(土) 01:49:39「主な機能」と書いてあるじゃないか。全部ってわけじゃない。
0027デフォルトの名無しさん
2006/06/10(土) 16:24:07「拡張」っつーと少し語弊がある気がするな。
CはもともとJavaみたいに、その言語環境だけでどうこうするように考えて
作られた言語じゃない。
CはOSのシステムコールやFORTRAN等で書かれたライブラリルーチン等を
直接呼べるように設計されているが、
別にOSのシステムコールは「C言語を拡張するため」のものではない。
0028デフォルトの名無しさん
2006/06/10(土) 20:15:18{
public:
AClass **ppMe;
};
というクラスがあったとして
AClass *pTest = new AClass();
pTest->ppMe = &pTest;
とやってppMeメンバに自分のアドレスを持つ変数のポインタを代入したいんですが
これをオペレータ等を使って見た目上1ステップで書くことは可能でしょうか?
0029デフォルトの名無しさん
2006/06/10(土) 20:27:210030デフォルトの名無しさん
2006/06/10(土) 20:32:580031デフォルトの名無しさん
2006/06/10(土) 20:33:430032デフォルトの名無しさん
2006/06/10(土) 20:37:41003328
2006/06/10(土) 20:39:31ちなみにthisはAClass*、ppMeはAClass**です
0034デフォルトの名無しさん
2006/06/10(土) 20:41:040035デフォルトの名無しさん
2006/06/10(土) 20:43:13グローバル変数に保存してそれを参照しないことには。
003628
2006/06/10(土) 20:49:21外のpTestの内容を書き換えることは可能です
で、今回の質問はクラス生成、代入時に、
同時に左辺の変数のアドレスをppMeメンバに代入したいということなんですが
0037デフォルトの名無しさん
2006/06/10(土) 21:00:11しているエリアはローカル変数だから、コンストラクタを抜けた時点でppMeの
アドレスが無効になる。
やはりどこかでグローバル変数が必要か。
003828
2006/06/10(土) 21:05:46AClassのインスタンスのアドレスを保持する変数を持つことを想定しています
リストやツリーのようなもんです(根っこだけは別ですが)
0039デフォルトの名無しさん
2006/06/10(土) 21:07:550040デフォルトの名無しさん
2006/06/10(土) 21:10:470041デフォルトの名無しさん
2006/06/10(土) 21:15:48004228
2006/06/10(土) 21:33:50どこかのスコープで保持されている変数が持っているかの違いだけで、
やっている事自体に変わりはありません
質問の主旨とかけはなれてきているので
しばらくはppMeを設定するメソッドを用意して対応することにします
ありがとうございました
0043デフォルトの名無しさん
2006/06/10(土) 21:34:03例えば、0から10までの数字をランダムで一定時間ごとに
足していって1000になるまでかかった時間を表示するプログラムみたいなの
つくるためにはどうすればいいですか?
0044デフォルトの名無しさん
2006/06/10(土) 21:37:47秒単位なら time() さらに高精度でほしいなら clock() で現在時刻を取得できる。
004543
2006/06/10(土) 21:40:44ありがとうございました。
0046デフォルトの名無しさん
2006/06/11(日) 01:32:06OSあたりで調整しているの?
0047デフォルトの名無しさん
2006/06/11(日) 01:36:53何か差があるんでしょうか?
全関数のプロトタイプとインプリメンテーションは別にした
方がいいのでしょうか?
004847
2006/06/11(日) 01:42:30templateを使うクラスを記述するときに
インラインの方が記述しやすかったもので・・・
0049デフォルトの名無しさん
2006/06/11(日) 01:45:25そりゃそうだ。
clock() はいろいろ違うだろうけど CLOCKS_PER_SEC で差を吸収することができる。
0050デフォルトの名無しさん
2006/06/11(日) 01:47:280051デフォルトの名無しさん
2006/06/11(日) 01:48:35インターフェースをクラス定義で記述するつもりなら、
別にしたほうがインターフェースと実装が分かれていて良いと言える。
インターフェースを別の文書で記述するなら、
クラス内で定義してしまってもほとんど問題ない。
0052デフォルトの名無しさん
2006/06/11(日) 01:51:41環境は VC++2003/2005 でプロジェクトのプロパティでコンパイル言語をC言語にしています。
#include <stdio.h>
int main() {
char exe[] = "test.exe"; /* �@ */
// char *exe = "test.exe"; /* �A */
char *p = strrchr( exe, '.' );
if( p ) {
strcpy( p, ".ini" );
}
printf("%s\n", exe);
return 0;
}
�Aの方を有効にすると実行時にエラーになってしまいます。
�@も�Aもやっていることは同じだと思っていたのですが、何か違いがあるのでしょうか?
0053デフォルトの名無しさん
2006/06/11(日) 01:53:00for文などで何回も空ループさせて、計測しているのか?
CPUの周波数があらかじめわかると計算できるけど
OSからみれば、どのCPUに搭載されるかわからないからね〜
0054デフォルトの名無しさん
2006/06/11(日) 01:57:36まぁあれだ。オープンソースのOSのソースみればわかるよ
0055デフォルトの名無しさん
2006/06/11(日) 02:04:37それらは全く別物。
char a[] = "abc";
は
char a[] = {'a','b','c','\0'};
と同義。
char *a = "abc";
は、メモリ上のどこかに確保された文字列定数「"abc"」へのポインタを、ポインタ変数「a」の初期値としている。
文字列定数は、あくまで定数だから変更しちゃいかん。
0056デフォルトの名無しさん
2006/06/11(日) 02:09:51この手の間違いはC初学者にはとても多いので、何か命名した方がいいと思った
「リテラルレイプ」とか
そうすれば回答者は「リテラルレイプでググれ」で済むし、
質問者も「リテラルレイプはCでよく陥るミスなんだな」と
理解が早まると思ったんだがどうか
005747
2006/06/11(日) 02:53:42ありがとうございます。
ヘッダをインターフェース確認ファイルとして使うときに分ける感じでしょうか?
VisualC++ですと1クラス1ヘッダが推奨されているようなんですが、
組み込みのSTL等見るとインラインに加えて複数クラスが
ヘッダで定義されているんですが、
どっちがよいのでしょうか?
005852
2006/06/11(日) 03:04:49素早い回答ありがとうございます。
char a[] = "abc";
と
char *a = "abc";
では実際に確保されるメモリ領域が異なるということでしょうか?
char a[] = "abc"; はヒープ領域?に確保される。
char *a = "abc"; は静的領域?に確保される。
静的領域に確保されたメモリは変更できない。
という理解でいいんでしょうか?
0059デフォルトの名無しさん
2006/06/11(日) 03:36:21ポインタはstack(auto) or bss(static),
配列の名前はおそらく即値でアセンブラ命令に直接入るだろうな。
0060デフォルトの名無しさん
2006/06/11(日) 03:43:41ちょwwwww
どうみても初心者なのにその解説かよwwww
0061デフォルトの名無しさん
2006/06/11(日) 08:09:30# とおりすがりですが、、、、
実装される領域に注目しすぎると本質を見失うかも。
定数(const)かどうかに注目したほうが理解しやすいと思います。
char a[] = "abc";
これは、配列(メモリ上の領域)の定義。(const指定子をつけていないので書き換え可能)
char *a = "abc";
これは、ポインタの定義。
リテラル("abc")を指すように初期化される。
通常リテラルはconst属性を持つ定数配列なので、書き換えができない。
コンパイラにうるさくwarningさせれば、この初期化が問題を起こしうることは
コンパイラが指摘してくれるはずです。
また、コンパイラオプションによって、リテラルを定数として扱わないように
することができる処理系も存在します。このようなオプションを指定すれば、
�Aのソフトも実行することは可能です。
ただし、この場合、処理系がどのようにリテラルをメモリ上に格納しているのか、
実装方法に対して十分に注意しないと、さらに予期せぬ動作につながるため
お勧めはできません。
006255
2006/06/11(日) 08:33:14配列は理解してる前提で書いたら、配列は理解してなかったのか…。
前者(a[])である配列の方は、文字列「abc\0」を格納するのに必要な領域を確保し、
それ全体に「a」と言う名前を付ける、と言う配列の定義。
後者(*a)であるポインタ変数の方は、どこかの領域を指すための値を格納するのに必要な領域なを確保し、
その領域に「a」と言う名前を付け、文字列定数「abc\0」の先頭を指すポインタ値で初期化しているポインタ変数の定義。
# ちなみに、文字列定数は、一般的には文字列リテラルと呼ばれる。
# 「文字列定数」と書いた方が、「何故、変更するべきモノではないのか?」がわかりやすいかと思った。
0063デフォルトの名無しさん
2006/06/11(日) 09:02:20そうすれば書き換えようとしても、コンパイル時にエラーになる。
特にC++では文字列リテラルを非constなchar*へ初期化・代入できるのは、互換性のためとなっていたはず。
0064デフォルトの名無しさん
2006/06/11(日) 13:05:24そのネーミングセンスに感動した
0065デフォルトの名無しさん
2006/06/11(日) 16:09:12今日からプログラミングをはじめてみたんですが、
プログラムが動きません。
色々ネットであさってみたのですが、よく理解できないので
ヒントでもいいので教えてください。
0066デフォルトの名無しさん
2006/06/11(日) 16:10:560067デフォルトの名無しさん
2006/06/11(日) 16:11:30何をどうしてどのように動かないのか書かないと口の出しようもない。
0068デフォルトの名無しさん
2006/06/11(日) 18:16:31今日からはじめようと思うんですが、CとC++どっち覚えればいいですか?
と質問したいところですが、わからないっていわれたんで、
C++でできることはCで全部できますか?教えてください。
0069デフォルトの名無しさん
2006/06/11(日) 18:21:20MSDNとかじゃなくてもうちょっと綺麗にまとまった感じで
0070デフォルトの名無しさん
2006/06/11(日) 18:21:260071デフォルトの名無しさん
2006/06/11(日) 18:21:460072デフォルトの名無しさん
2006/06/11(日) 18:29:090073デフォルトの名無しさん
2006/06/11(日) 18:34:36俺はC++に関してならここの「標準 C++ ライブラリ」のところを見ている。
http://www.microsoft.com/japan/developer/library/vclang/stdlbhm.htm
0074デフォルトの名無しさん
2006/06/11(日) 19:35:37「できること」というのがプログラムを作成するという意味なら可能
言語の機能を指してるなら不可能
0075デフォルトの名無しさん
2006/06/11(日) 19:54:25すみませんでした。ちょっと頭痛かったのでそこらへん忘れていました。
borlandをsetbccを使って設定までしたのですが、
作ったのを動かす(?)ことができません。
たぶんborlandの使い方が理解できていないと思うのですが・・・
作ったやつをクリックすると1.exe 1.obj 1.tbsが作成されます。
プログラムの内容は文字の表示です。
その他書くことがあればお願いします。
0076デフォルトの名無しさん
2006/06/11(日) 20:04:390077デフォルトの名無しさん
2006/06/11(日) 20:04:44ttp://www6.plala.or.jp/mnagaku/cmag/ac20005/
0078デフォルトの名無しさん
2006/06/11(日) 20:51:50わかりました。ありがとうございます。
C言語から始めて、色々身に付けてC言語じゃ不便と感じるようになってからC++に手出したいと思います。
0079デフォルトの名無しさん
2006/06/11(日) 21:45:41書き方とか参考になるサイトないですか?なにかけばいいやら…
0080デフォルトの名無しさん
2006/06/11(日) 21:54:31そこが欠落した人の図面はどこか破綻している事が多い。
0081デフォルトの名無しさん
2006/06/11(日) 22:00:31たとえばスタッククラスのpopメソッドで
空っぽなのに実行された場合など
どういうエラー処理をすればいいんでしょうか?
例外をthrowしたり、assert()を呼んだりの区別がよくわかりません。
0082デフォルトの名無しさん
2006/06/11(日) 22:02:43C++ ならとりあえず例外投げとけ。
0083デフォルトの名無しさん
2006/06/11(日) 22:03:59好きにしろ。ここはお前のプログラムの仕様を考えてやるスレじゃいないんだ。
0084デフォルトの名無しさん
2006/06/11(日) 22:08:03表明とかEiffelの契約とか
0085デフォルトの名無しさん
2006/06/11(日) 22:30:450086デフォルトの名無しさん
2006/06/11(日) 22:33:23その1.exeを動かせ。それがお前の作ったプログラムだ。
0087デフォルトの名無しさん
2006/06/12(月) 00:00:04いずれかのウィンドウがアクティブになるたびに処理をしたいので、
下記のようなシステムフッククラスを作成しました。
(長いので要点のみ)
// フックの登録
BOOL CHook::Set(HWND hWnd)
{
m_hHook = ::SetWindowsHookEx( WH_CBT,
(HOOKPROC)CHook::CBTProc,
GetThisInstH(), // システムフックなのでNULLじゃなくインスタンスハンドル渡す
GetWindowThreadProcessId(hWnd, &lpdwProcessId));
}
0088デフォルトの名無しさん
2006/06/12(月) 00:00:35LRESULT CALLBACK CHook::CBTProc(int p_nCode, WPARAM p_wParam, LPARAM p_lParam)
{
// 処理してはいけないメッセージなので、次へ渡す
if( p_nCode < 0 || p_nCode == HC_NOREMOVE)
return ::CallNextHookEx( m_hHook, p_nCode, p_wParam, p_lParam );
if( p_nCode == HCBT_ACTIVATE ) // ここがアクティブウィンドウが発生したときの処理
TRACE0(_T("アクティブ化\n"));
return ::CallNextHookEx( m_hHook, p_nCode, p_wParam, p_lParam );// 次のフックへと繋げる
}
また、このフックハンドルや必要な変数はグローバルにし、他とかぶらないようにしてあります。
#pragma data_seg( ".CKHookData" )
HHOOKCHook::m_hHook = NULL;
#pragma data_seg()
この状態で使用すると、フックを呼び出したウィンドウがアクティブになったときにしか反応しません。
これではローカルフックと変わりません。
いろいろ試してはみたのですがどうにも・・・どなたかわかる方、ご教授願います。
MFCアプリで使用するので、DLLはMFC DLL の拡張モードで作成してあります。
0089デフォルトの名無しさん
2006/06/12(月) 00:18:15GetWindowThreadProcessId(hWnd, &lpdwProcessId));
フックを呼び出したウインドウと同じスレッドのみって自分で指定してるだろが。
システム全体にフックを有効にしたければ、ここをNULLにする。
0090k ◆WFGp1NZuiw
2006/06/12(月) 00:23:36作りたいのですが,うまくいきません.アドバイスいただけないでしょうか?
(placement new と組み合わせて使用することを想定)
書いてみたのは↓みたいなコードで,「pointer_->PointerClass();」のところで
文句言われてしまいます.
template<class PointerClass> class CleanPointer
{
public:
CleanPointer(PointerClass *pointer)
: pointer_(pointer)
{
};
~CleanPointer()
{
pointer_->PointerClass();
};
private:
PointerClass *pointer_;
};
0091デフォルトの名無しさん
2006/06/12(月) 00:26:25はて……コピペミスではないようだが……高度な釣りかな。
0092デフォルトの名無しさん
2006/06/12(月) 00:26:32デストラクタの呼び出しは ~PointerClass() だよ。
しかしそのクラスが何の役に立つのかわからんな。
0093デフォルトの名無しさん
2006/06/12(月) 00:26:42デストラクタを呼ぶにはpointer_->~PointerClass();だぞ。
0094デフォルトの名無しさん
2006/06/12(月) 00:26:55できた・・・orz
即答ありがとうございます。
できた…かも。
今日一日潰れた問題でしたが、解決してよかったです。
ありがとうございました。さっそく必要な処理を加えていこうと思います。
0096京大生www
2006/06/12(月) 01:18:09環境はどこまでいえばいいか分かりませんが、コンパイラはbcc32
テキストファイルのa.textが
abc
def
ghi
だとします。
char *hako[3];
で定義した配列ポインタを使って
*(hako+0) = abc
*(hako+1) = def
*(hako+2) = ghi
というかんじでファイルから配列にコピーしたいのですが、どうすればいいのでしょうか?
0097デフォルトの名無しさん
2006/06/12(月) 01:23:03宿題は宿題スレへ。
0098デフォルトの名無しさん
2006/06/12(月) 01:23:570099京大生www
2006/06/12(月) 01:24:16早く答えて欲しい、製作意欲が失せてしまう
0100629 ◆zZtDbr6Gfc
2006/06/12(月) 01:25:240101デフォルトの名無しさん
2006/06/12(月) 01:25:590102京大生www
2006/06/12(月) 01:27:55分からないなら分からないって言ってくれないか?
0103デフォルトの名無しさん
2006/06/12(月) 01:29:01わかるからわからないって言わないんだろうが。
マルチは失せろそして氏ね。
0104デフォルトの名無しさん
2006/06/12(月) 01:31:10我々には到底分からないので、どうか違う場所でお尋ねください
0105デフォルトの名無しさん
2006/06/12(月) 01:39:48お前には一生無理なんだからもう寝ろよ
0106デフォルトの名無しさん
2006/06/12(月) 01:40:13つまりお前のこの先はうまくいかないってことだ。
これは分かる。
0107デフォルトの名無しさん
2006/06/12(月) 01:42:05何がうまくいかないのかわからなけりゃ、答えようもないだろ?
まずは自分で書いて、わからないところを質問、相談しろ。
010852
2006/06/12(月) 02:31:21回答ありがとうございます。
ポインタを使えば文字列定数でも書き換えられると誤解していました。
0109デフォルトの名無しさん
2006/06/12(月) 10:47:13BCC32で確認してある。ちなみにお前の配列はタダのポインタの配列
#include <stdio.h>
#define BUFSIZE 1000
FILE *fp;
char *fname = "testdata.txt";
unsigned char buf[BUFSIZE];
unsigned char *getnext(unsigned char *);
int main(void)
{
char *hako[3];
int i,g;
if((fp=fopen(fname,"rt"))==NULL){printf("cannot open file %s\n",fname);return 1;}
i=0;
while(1){
if(EOF==(g = fgetc(fp)))break;
buf[i++]= g;
}
//printf("%s",buf);
hako[0]=buf;
for(i=1;i<3;i++)hako[i] = getnext(hako[i-1]);
for(i=0;i<3;i++) printf("hako[%d] : %s\n",i,hako[i]);
return 0;
}
unsigned char *getnext(unsigned char *buffer){
while( *buffer != 0x0a) buffer++;
*buffer=0x00;
return ++buffer;
}
0110デフォルトの名無しさん
2006/06/12(月) 18:02:04CREATEWINDOWの所を教えて下さい
0111デフォルトの名無しさん
2006/06/12(月) 18:09:17●どこまで調査したのか?
●どこまで理解したのか?
●何が理解できないのか?
●具体的に、どの様な事を試したのか?
0112デフォルトの名無しさん
2006/06/12(月) 19:26:20リソースエディタなどで作れる物とは違い、線のみの枠なので
困っているのです
立体的な凹みのある物を作りたいのですが
0113デフォルトの名無しさん
2006/06/12(月) 20:05:53ttp://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/editcontrols/abouteditcontrols.asp
よく読むんだ
0114デフォルトの名無しさん
2006/06/12(月) 20:10:580115デフォルトの名無しさん
2006/06/12(月) 20:19:42各行は1023バイト以下とし、エラー処理等は割愛する。
char *hako[3];
char buffer[1024];
FILE* fp;
int i;
てな変数を用意して、
fp = fopen("a.text", "r");
for (i = 0; i < 3; i++) {
buffer[sizeof(buffer)-1] = 0;
fgets(buffer, sizeof(buffer)-1, fp);
hako[0] = strdup( buffer );
}
fclose(fp);
0116デフォルトの名無しさん
2006/06/12(月) 21:02:12CreateWindowExで拡張スタイル指定すればいい
詳細はググレ
0117デフォルトの名無しさん
2006/06/13(火) 17:35:50コンパイラ C言語を始めよう! を使っているのですが実行してコマンドプロンプトに何も出ません
プログラム自体には間違いはないと思うのですが・・・
そもそもコンパイラとの受け渡しもよく理解できておりません ><
OS:windowsXP SP2
コンパイラに LSI C-86 Ver.3.30c 試食版 を使用
0118デフォルトの名無しさん
2006/06/13(火) 17:46:390119デフォルトの名無しさん
2006/06/13(火) 17:53:09「C言語を始めよう!」ってのは、誰だかが作った簡易IDE機能を持つ
エディタのようなものの固有名詞のようです。
では淡々と続けてください:
0120デフォルトの名無しさん
2006/06/13(火) 17:54:30http://homepage3.nifty.com/aokura/phoebe/phoebe.htm
プログラムは
#include <stdio.h>
main()
{
printf("ABC\n");
}
でも何もでません ><
0121デフォルトの名無しさん
2006/06/13(火) 17:58:42コンパイルして実行してみたら?
0122デフォルトの名無しさん
2006/06/13(火) 18:23:24学習用としても、LSI-C86を使うことは激しくお勧めできません。
もっと近代的なコンパイラを使いましょう。
0123デフォルトの名無しさん
2006/06/13(火) 18:28:14おすすめの教えてください
0124デフォルトの名無しさん
2006/06/13(火) 18:50:04ttp://www.amazon.co.jp/gp/product/B000CSNTQ2/249-0740458-2933159?v=glance&n=637392
0125デフォルトの名無しさん
2006/06/13(火) 19:00:13これが良いかと思います。無料です。
↓
Visual C++ 2005 Express Edition 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1140806916/
0126デフォルトの名無しさん
2006/06/13(火) 19:41:180127京大生www
2006/06/13(火) 19:43:270128デフォルトの名無しさん
2006/06/13(火) 19:48:15自らの学歴を誇大するDQNキンモー☆
0129デフォルトの名無しさん
2006/06/13(火) 21:43:360130デフォルトの名無しさん
2006/06/13(火) 23:11:16ヘッダファイルとCソースファイルに書くべきことは何ですか?
例えば、Cソースファイルで使う定数をヘッダファイルに書くなと聞いたことがあります。
どんなものがヘッダファイルに記述すべきで、どんなものがCソースファイルに記述すべきか教えてください。
0131デフォルトの名無しさん
2006/06/13(火) 23:17:26いろいろなソースファイルから参照される情報→ヘッダファイルへ
その他→ソースファイルへ
0132デフォルトの名無しさん
2006/06/14(水) 00:44:33HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE);
ここで警告がでてきます。
'型キャスト' : 'LONG' からより大きいサイズの 'HINSTANCE' へ変換します。
(VS.NET 2003 > VC++)
警告を出さないようにするにはどうすればいいんでしょうか?
0133デフォルトの名無しさん
2006/06/14(水) 01:00:10平方根を求めるためにsqrt関数を使おうとしました。
#inclide<math.h>もちゃんと入れたのですが、
「エラー E2314 rego.c 27: 関数でないものを呼び出している(関数 main )」
と表示されうまくいきません。
どうすればいいのでしょうか?
0134デフォルトの名無しさん
2006/06/14(水) 01:00:21プロジェクトの設定の「C/C++」→「64bit移植への対応」を「いいえ」に
0135デフォルトの名無しさん
2006/06/14(水) 01:12:510136デフォルトの名無しさん
2006/06/14(水) 01:30:29おお、見事に消えました。ありがとうございます!
0137デフォルトの名無しさん
2006/06/14(水) 01:45:43ですがうまくいきません
------ ビルド開始: プロジェクト: C, 構成: Debug Win32 ------
コンパイルしています...
Cプラス.cpp
.\Cプラス.cpp(4) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
ビルドログは "file://d:\My document\Visual Studio 2005\Projects\C\C\Debug\BuildLog.htm" に保存されました。
C - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
となってエラーになります
0138デフォルトの名無しさん
2006/06/14(水) 01:47:22さようなら
0139デフォルトの名無しさん
2006/06/14(水) 07:28:13<windowsx.h>のGetWindowInstanceの方が楽だよ。
中身はGetWindowLongPtrを呼んで結果をHINSTANCEへキャストするマクロ。
0140デフォルトの名無しさん
2006/06/14(水) 09:48:48まず、ソースも貼れ。
話はそれからだ。
0141133
2006/06/14(水) 10:34:01#include<math.h>
#define n 5
int main(void)
{
int i;
double q[n],avq,qr,s;
double p=0,r=0;
printf("%d個のQのデータを入力してください\n",n);
for(i=0; i<n ; i++)
{
scanf("%lf", &q[i]);
}
for(i=0; i<n ; i++)
{
p=p+q[i];
}
avq=p/n;
for(i=0; i<n ; i++)
{
r=r+(q[i]-avq)*(q[i]-avq);
}
qr=sqrt(r/ (n(n-1)) );
s=qr/avq;
printf("Qの相対誤差は%20.15lfです。\n",s);
return 0;
}
ソース貼ってなかったですね。冗長なソースですがよろしくお願いします。
0142デフォルトの名無しさん
2006/06/14(水) 10:37:44× n(n-1)
○ n*(n-1)
これじゃnって名前の関数をn-1を引数に呼び出してると解釈される罠
0143133
2006/06/14(水) 12:03:47ありがとうございます、解決しました。
こんな初歩のミスやってしまった・・・
0144137
2006/06/14(水) 13:26:03ソースは単純なものです
#include <stdio.h>
main()
{
printf("ABC\n");
}
初歩の文字の表示すら受け付けないんでしょうか・・・
0145デフォルトの名無しさん
2006/06/14(水) 13:32:05C言語としてコンパイルすること。
C言語は、関数の戻り値の型の省略を認めている(暗黙にint型になる)
C++は、認めていない(main()関数は、かならずint型を返さなければならない)
0146623
2006/06/14(水) 14:32:17行列のプログラム計算をしようとしてて下のサイトのファイルを導入しようと思い、
ttp://www.ipc.akita-nct.ac.jp/~yamamoto/comp/cpp/class/class.html
で、matrix.hとmatrix.cppをダウンロードして、まずmatrix.hを
.hが入っているフォルダに入れてそのあとmatrix.cppをビルドしました。
しかし、Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
となってしまいました。それで解決する方法をそのあといろいろググって
保存ファイル名を「bcc32 -tW 保存ファイル名」にすればいいらしいということが
書いてあって早速やってみたのですが「エラー E2194: ファイル 'bcc32.cpp' が見つからない」
となってしまい、ビルドできません。さらに、ビルドを無視して
インクルードファイルを使ってプログラムを作って実行してみたのですがやはり、
「Error: 外部シンボル 'Matrix::~Matrix()' が未解決(Z:\○○\TORIAEZU.OBJ が参照)
Error: 外部シンボル 'Matrix::Matrix(int, int)' が未解決(Z:\○○\TORIAEZU.OBJ が参照)」
と出てきてしまいます。どうにかしてこれを使用したいのですがどうすればいいのでしょうか?
長文すみません。教えてください。よろしくお願いします。
0147137
2006/06/14(水) 14:42:14拡張子をCにしていろいろ試したらできました
0148デフォルトの名無しさん
2006/06/14(水) 14:47:25そのmatrix.cppはクラスの実装だけだからそれだけじゃ実行できない。-cオプション付けてリンク、実行ファイル生成しなければobjファイルは吐けるけど。
でtoriaezu.cppでエラー出るのはクラスの実装がリンクされてない。上の手順でコンパイル済みのobjをリンクする必要がある。
bcc32 toriaezu.cpp matrix.objな感じで。
0149デフォルトの名無しさん
2006/06/14(水) 15:05:21bcc32 toriaezu.cpp matrix.cppでもいける。
でも元のソースの文字コードがEUCでそのままじゃエラー出るんで、
QKCかなんか適当な手段でShift-JISに直すと吉。
0150デフォルトの名無しさん
2006/06/14(水) 15:11:36俺は使ったことがないので手放しにお勧めしない。
適当にぐぐった
ttp://www.page.sannet.ne.jp/d_takahashi/boost/ublas/index.html
0151146
2006/06/14(水) 15:33:18小一時間考えても何をおっしゃってるのか理解出来ません( ノД`)
本当申し訳ないのですが、もう少し馬鹿にもわかるように
説明していただけませんか?本当すみません。
あと>>150のは見たんですけど、私はそれほど大規模な計算は
行わないと思いますのでこの山本さんのファイルを使用したいと思うのです。
0152デフォルトの名無しさん
2006/06/14(水) 15:45:55えーと。
分割コンパイルという言葉に聞き覚えは?
0153デフォルトの名無しさん
2006/06/14(水) 16:45:58返答遅くなってすみません!!どうしても外せない用事ができてしまって
外に出てしまいました。今出先のノートパソコンからやってるのですが、
分割コンパイルという言葉に聞き覚えはありません…
帰ってみてぐぐればわかるでしょうか?本当申し訳ありません。
0154デフォルトの名無しさん
2006/06/14(水) 18:20:51なんかとてつもなくわかりにくいような気もするが置いとく
・コンパイル時の動作
とりあえずbcc32 toriaezu.cpp matrix.cppと打ち込んだ場合、
コンパイラはまず最初にtoriaezu.cppとmatrix.cppをコンパイルしてtoriaezu.objとmatrix.objを作成する(この時点でエラーがあればコンパイルエラーと出る)
次に、リンカ(ilink32.exe)を呼び出して、CUIアプリケーション用スタートアップモジュール(C0X32W.OBJ)や標準関数ライブラリ(CW32.LIB)と
先にコンパイルしたtoriaezu.objとmatrix.objをリンクしてtoriaezu.exeを吐き出させる。
・ヘッダファイルとソースファイル(コンパイル単位)
ヘッダファイルは通常、クラスや関数の宣言のみで単独でコンパイルや他のソースファイルにインクルードしても実体は含まれない。(テンプレートは通常ヘッダに実装書くけど置いとく)
当然、宣言だけだと呼び出す関数がそのコンパイル単位に存在しないのでそのクラスの実装(matrix.obj)から関数を呼び出す必要がある。
ついでにBCC5.5.1のライブラリファイルとかの資料
http://support.borland.com/entry!default.jspa?categoryID=90&externalID=4323
混乱するかも知らん(;´Д`)
0155デフォルトの名無しさん
2006/06/14(水) 19:54:30環境変数設定で間違えて$(PATH)の値を消してしまって困っています
$(PATH)○○
となるはずですけど○○の部分がわかりません
変な話で申し訳ありませんが教えてください
どうかお願いします
0156デフォルトの名無しさん
2006/06/14(水) 20:00:55・複数のソースコードからなるソフトをひとつのexeファイルにまとめることができる。
中規模以上のソフトは通常複数のソースファイルで構成されている。
(もしこの機能がなかったら、たとえばLINUXカーネルのソースコードは、、、、、、)
ひとつのソフトを分割してコンパイルすることになるので、コンパイル結果を結合する
必要がある、リンカはこの結合を行い、結合されたソフトの実行開始アドレスなどを
exeファイル内に設定する。
(ちなみに、単一のCソースからなるソフトでも、リンカはスタートアップ時に初期化のために
実行されるCRTなどを、コンパイル結果に結合して実行ファイルを作成している)
・C言語(コンソールプログラム)は、int main()から実行が開始される。
(実際にはCRT(C0X32)の中のスタートアップルーチンからmainを読んでいるのですが、、、)
よって、mainがないとリンカさんが困ってしまう。
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
そしてふりだしへ、、、
0157デフォルトの名無しさん
2006/06/14(水) 21:27:19十中八九WinMainから始まっているのに-Wを指定していなかったというオチ。
0158デフォルトの名無しさん
2006/06/14(水) 21:40:38不幸なことに今回はレアケースなのだよ
つまり10回のうち1、2回というか、それ以上
多分100万人に1人の…
0159デフォルトの名無しさん
2006/06/14(水) 22:03:17bcc32 -etest *.h *.c
0160デフォルトの名無しさん
2006/06/14(水) 23:59:17関数定義、宣言の時
例えば
static void func(void){}と
void func(void){}とするのでは
何が違うんでしょうか
どなたか教えて頂きたいです
0161デフォルトの名無しさん
2006/06/15(木) 00:03:59別のソースファイルから呼び出すことができるかどうかが違う。
0162デフォルトの名無しさん
2006/06/15(木) 00:09:21前者は非公開、後者は他ソースに公開。
例えば同じ名前の関数が他ソースにあるときに問題になる。
最適化の観点からは、
gccなら前者ならインライン展開する可能性を期待できる。
iccなら事実上殆ど差がない。
0163デフォルトの名無しさん
2006/06/15(木) 00:24:07例えばコマンドラインから、bcc32 hoge.h hoge1.c hoge2.c ...でできるはず
>>159
*.h *.c はディレクトリ内の拡張子 .h .c の全てのファイルをコンパイル対象にしてしまう。
これやるぐらいなら、makefile の作り方を覚えた方がいい。
初心者の内は自分がどのファイルをコンパイルしているのか、
意識的に考えながらやった方がいい。
0164デフォルトの名無しさん
2006/06/15(木) 03:31:01#include <stdio.h>
int double_malloc(double *target, int number) {
if ((target = (double *)malloc(sizeof(double) * number)) == NULL ) {
puts("Memory Unallocatable in dounle_malloc()\n") ;
return (-1) ;
}
return (0) ;
}
int main(void) {
int number ;
double *test ;
number = 2 ;
double_malloc(test, number) ;
test[0] = 1.0 ;
test[1] = 2.0 ;
printf("%f\n", test[0]+test[1]) ;
free(*test) ;
return (0) ;
}
OSはVineLinux3.2、コンパイラはOSについてきたgccを使っています。CPUはPentium4 2.66GHz、総メモリは1Gでコンパイル後も650MB程度の空きがありました。
0165デフォルトの名無しさん
2006/06/15(木) 03:36:270166デフォルトの名無しさん
2006/06/15(木) 03:40:360167デフォルトの名無しさん
2006/06/15(木) 07:05:120168デフォルトの名無しさん
2006/06/15(木) 12:43:361. 関数の中で引数(の変数)に代入しても、渡した側の変数の値は変更されない。
2. free には malloc が返してきた値と同じ値を渡す必要がある。
(例) a = malloc(...); としたなら free(a)。 free(*a) や free(a+1) はダメ。
C なら double* double_malloc(int n) として、 test = double_malloc(number) とするか、
int double_malloc(double** ptr, int n) として、 double_malloc(&test, number) とする。
(後者の場合 *ptr = (double*) malloc(...); として値を返す)
加えて C++ なら int double_malloc(double* &ptr, int n) として、 double_malloc(test, number) とも書ける。
(この場合 ptr = (double*) malloc(...); でOK)
0169デフォルトの名無しさん
2006/06/15(木) 12:45:490170デフォルトの名無しさん
2006/06/15(木) 12:54:370171デフォルトの名無しさん
2006/06/15(木) 13:05:00#define MBYTE (1024 * 1024)
char Var[MBYTE];
こうやったらエラーでたからしかたなくmalloc()使ってる…。
0172デフォルトの名無しさん
2006/06/15(木) 13:05:35単一オブジェクトの動的生成なら new 使ったほうがよくて、
動的配列なら vector 使ったほうがいいから。
0173デフォルトの名無しさん
2006/06/15(木) 13:07:510175デフォルトの名無しさん
2006/06/15(木) 13:25:51俺もnewかコンテナ使うけど、コンテナの機能を使わない場合、malloc()でもいいんじゃね?
ビルトインタイプなんだし。
0176デフォルトの名無しさん
2006/06/15(木) 13:30:000177デフォルトの名無しさん
2006/06/15(木) 13:41:410178デフォルトの名無しさん
2006/06/15(木) 13:48:240179デフォルトの名無しさん
2006/06/15(木) 13:53:00微妙なのかよw
0180デフォルトの名無しさん
2006/06/15(木) 14:39:31そもそもmallocなど使わずに、環境依存のメモリ確保のシステムコールなどを使う。
0181デフォルトの名無しさん
2006/06/15(木) 14:53:15C++で積極的にmalloc()を使用する理由はない。
0182デフォルトの名無しさん
2006/06/15(木) 15:06:32問題になるのは、コンストラクタ/デストラクタの呼び出しの有無。
呼び出されなければならない場合、new/deleteを使用するべき。
コンストラクタ/デストラクタがなければ好みの問題。
0183デフォルトの名無しさん
2006/06/15(木) 16:08:580184デフォルトの名無しさん
2006/06/15(木) 16:21:28システムコールの方が c のライブラリの malloc より速い OS って
例えばどんなのがある?
0186デフォルトの名無しさん
2006/06/15(木) 17:17:11mallocがそのシステムコールを呼んでいるだけだったとしても、
インライン展開されない限り、mallocを呼ぶオーバーヘッドがかかる。
0187デフォルトの名無しさん
2006/06/15(木) 17:20:44理論上、1度だけ大きな領域を確保するときにはそうだね。
というような特殊事例でのバカ話は別として、
実際にはどのOSのシステムコールが、そのOSの標準的なCランタイムの
malloc より高速なの?
0188デフォルトの名無しさん
2006/06/15(木) 17:22:53http://www.google.co.jp/search?hl=ja&q=%E9%80%9F%E5%BA%A6+HeapAlloc+malloc&lr=
malloc の方がはるかに高速。Linux だって sbrk より malloc の方が速いだろ。
0189デフォルトの名無しさん
2006/06/15(木) 17:33:10まあ、そういう工夫によって、OS依存のAPIより早いという場合はあるね。
iostreamだって、内部でバッファ処理をしていて、
OSのAPIを呼び出して、ファイルに対して1バイトずつアクセスするより早いことがあるかもしれないし。
0190デフォルトの名無しさん
2006/06/15(木) 18:13:53でも近頃のVisual C++のmallocは単にHeapAllocを呼ぶようになっていたと思う。
0191デフォルトの名無しさん
2006/06/15(木) 20:26:52ヒント:仮想記憶空間
0192デフォルトの名無しさん
2006/06/15(木) 22:33:21実はプロセス起動時にまるっとある程度確保されてる場合もある
0193デフォルトの名無しさん
2006/06/15(木) 23:16:49システムにメモリを要求することはかなりかなり高価な処理であるから,
mallocの呼び出しごとにそれをするのは損である。
、、、
と古典には書かれている。
0194デフォルトの名無しさん
2006/06/15(木) 23:28:44どのレスに対するコメントか知らんが、
「だからどうした」
0195デフォルトの名無しさん
2006/06/16(金) 00:17:27欲しいのですが、お勧めはありますか?
下のを試したんですが、VC++2003以降でいくつか古いインクルードヘッダが
なくなったせい(だと思うんですが)で、コンパイルできません。
ttp://www.vector.co.jp/soft/win95/prog/se059033.html
0196デフォルトの名無しさん
2006/06/16(金) 00:33:47これ使ってみて。
boost sandbox bigint
0197デフォルトの名無しさん
2006/06/16(金) 03:00:28>>162さん
遅レスですいません
レスありがとうございます。
そういう意味だったんですか。
わかりました。ありがとうございました。
0198デフォルトの名無しさん
2006/06/16(金) 03:27:37>MS VC++2005 で使える
かどうかは確認してないけど
gmpなんてのもある
0199デフォルトの名無しさん
2006/06/16(金) 09:32:430200デフォルトの名無しさん
2006/06/16(金) 09:59:50bigintってまだ残っていたんだ。
正式に採用される日は来るのかな。
個人的に、単純な実装でもいいから、
多倍長整数のための、標準ライブラリは必要だと思うのだけれど。
0201デフォルトの名無しさん
2006/06/16(金) 12:05:43単にC++のヘッダーファイルが*.hになってるだけだね。
気合で修正汁
0202デフォルトの名無しさん
2006/06/16(金) 18:22:39キーでソートされていることは保障されているのでしょうか?
次のコードによる出力結果が同じであることは、保障されていますか?
int main()
{
std::map<int, int> test ;
for (int i = 0 ; i != 100 ; ++i)
test[i] = i ;
for (std::map<int, int>::iterator Iter = test.begin() ;
Iter != test.end() ;
++Iter)
{ std::cout << "key : " << Iter->first << ' element : ' << Iter->second << '\n' ; }
std::cout << std::endl ;
}
0203デフォルトの名無しさん
2006/06/16(金) 18:30:13・できる限り載せるソースはコンパイル可能なものにしてくれ。
・「出力結果が同じ」とは? 何と何が同じであることを期待しているの?
0204デフォルトの名無しさん
2006/06/16(金) 18:35:50全角空白を半角空白に置換すればコンパイル可能だと思います。
VC8のDinkumwareでは、
1 1
2 2
3 3
...
のように表示されます。
デフォルトでは比較関数はstd::lessになるのは決まっていたと思いますが、
イテレータでアクセスする場合、
こういう風にソートされた形で順々に要素にアクセスできるのが、
規格として保障されているのか知りたいのですが。
0205デフォルトの名無しさん
2006/06/16(金) 18:40:34ほんとにコンパイルできた?
2バイト空白を置換してもエラーになるんだけどなぁ。
つーか、>204のようには出力されないと思うぞ。
#少し落ち着いて自分のコードをよく見てみるか自分でコピペして味噌。
##あ、すまんが本題の「規格で保証」されているかは知らない。
###でも、その筈だけどね。
####いや、保障はしてくれないのは間違いないなw
0206デフォルトの名無しさん
2006/06/16(金) 19:03:59ttp://www.sgi.com/tech/stl/Map.html
ttp://www.sgi.com/tech/stl/SortedAssociativeContainer.html
0207デフォルトの名無しさん
2006/06/16(金) 19:48:25パッと見、elementを囲っているのがシングルクォーテーションであるって以外は問題ないコードだが
0208デフォルトの名無しさん
2006/06/17(土) 00:16:35> gmpはgccでしか使えない希ガス
ttp://www.cs.nyu.edu/exact/core/gmp/
0209デフォルトの名無しさん
2006/06/17(土) 00:46:57作ったんだけどエラーが出ます。
助けてください。
ttp://uploader.fam.cx/data/u10732.txt
0210202
2006/06/17(土) 00:52:23どうも文字列リテラルをシングルクオートでくくっていたみたいです。
すみません。
>>206
読んでみましたが、どこにもmapをイテレータでアクセスすると
ソートされているかどうかなんて、書かれていないような気がします。
0211209
2006/06/17(土) 00:54:18申し訳ないです。
0212デフォルトの名無しさん
2006/06/17(土) 01:00:45> and they also guarantee that their elements are always sorted in ascending order by key.
0214195
2006/06/17(土) 01:58:47>>196
頑張って探したけど、見つかりませんでした><
>>201
気合入れて修正して、コンパイルはなんとか通らせることが出来ました。
サンプルプログラムも正常に動作しているみたいです。でも、警告いっぱいでちょっと不安です。
gmpの情報もありがとうございます。ドキュメント読みながら考慮してみます。
0215デフォルトの名無しさん
2006/06/17(土) 02:58:57どう探したんだ?
http://www.google.co.jp/search?q=boost+sandbox+bigint
0216デフォルトの名無しさん
2006/06/17(土) 13:59:47GetValue()という関数があったとして、仮引数に与えたTypeとIndexによって、
戻り値がfloatやlongとして返ってくる方法は無いでしょうか?
キャストや別関数を作成しないでまとめたいのです。
戻り値
float(or long) GetValue(long iType, long iIndex);
0217デフォルトの名無しさん
2006/06/17(土) 14:04:59思いつく方法を書いてみた。
戻り値型のクラスを作成する(別関数と同程度の手間がかかる)
unionを使う(非推奨)
void *ポインタを使って環境依存のコード(非推奨&キャスト必須ゆえNG)
boost::anyを使う(キャスト必須ゆえNG)
例外を使う(禁止)
何がいいんだろう。
0218デフォルトの名無しさん
2006/06/17(土) 14:09:10戻り値の型がfloatではいけない訳を聞こうか。
0219デフォルトの名無しさん
2006/06/17(土) 14:18:42仮にGetValueがfloatやlongを臨機応変に返せたとして、受け取る側はどうするつもりだよ
long l = GetValue(); // floatを返すかもしれない
float f = GetValue(); // longを返すかもしれない
0220デフォルトの名無しさん
2006/06/17(土) 14:19:21取ってきたいデータがfloatはlongと混在しているので、全てfloatで返ってきてしまうのが、
なんかスッキリしなくてですね。
0221デフォルトの名無しさん
2006/06/17(土) 14:23:400222デフォルトの名無しさん
2006/06/17(土) 14:24:56エスパーしてみると、iTypeってのがlongかfloatかを決めているのかな?
だとしたらtemplate使えばいいんじゃまいか。
0223デフォルトの名無しさん
2006/06/17(土) 14:28:01はい。Typeによって決めています。
最初テンプレート関数を使おうかと思ったのですが、私が馬鹿過ぎてほぼ使い方を忘れかけてまして...。
戻り値の型だけを変更することもできるんでしたっけ。
0224デフォルトの名無しさん
2006/06/17(土) 14:31:200225デフォルトの名無しさん
2006/06/17(土) 14:33:270226デフォルトの名無しさん
2006/06/17(土) 14:34:000227デフォルトの名無しさん
2006/06/17(土) 14:38:30出来る、が、iTypeを見て型を判別する責務をGetValueではなく、GetValueを使う側に移さないといけない。
template <class T>
T GetValue(long iIndex);
てなのを作っておいて
long l;
float f;
if (iType == /*long型*/)
l = GetValue<long>(index);
else
f = GetValue<float>(index);
のような感じの使い方なら可能だが…
0228デフォルトの名無しさん
2006/06/17(土) 14:40:07てっきり、戻す型がもっと多くて、コンパイル時にやるのが面倒だから聞いているんだと思っていた。
//ヘッダ
template < typename T >
T getValue(int idx) ;
//実装
template < typename T >
T getValue(int idx)
{
return 0 ;
}
//longとfloatしか使わないので、明示的なインスタンス化をしておく。
template long getValue(int idx) ;
template float getValue(int idx)
でもこれ、わざわざ使うときに、getValue<long>とかgetValue<float>とかしないといけないな。
面倒かも。
0229デフォルトの名無しさん
2006/06/17(土) 14:44:43オーバーロードだとこんな感じ?
戻り値にはできなくなるけど
void GetValue(long & dest, int idx) ;
void GetValue(float & dest, int idx) ;
//使い方
long x ;
GetValue(x, 0) ;
float f ;
GetValue(f, 1) ;
0230デフォルトの名無しさん
2006/06/17(土) 14:50:10> キャストや別関数を作成しないでまとめたいのです。
というのがあるし、データを特定のインデックスから取ってくるってだけでオーバーロードを使ってしまうと、
それぞれの関数の内容がほとんど同じになってしまって無駄。
この場合はtemplateが妥当だろ。
longとfloatの場合でよほど処理に差があるなら話は別だが
0231デフォルトの名無しさん
2006/06/17(土) 15:14:050232デフォルトの名無しさん
2006/06/17(土) 15:19:260233デフォルトの名無しさん
2006/06/17(土) 15:33:04いつの時代の人ですか?
とっくにできるようになりましたよ。
0234デフォルトの名無しさん
2006/06/17(土) 15:34:240235デフォルトの名無しさん
2006/06/17(土) 16:39:20一般的に、floatの方がlongより精度がないので問題が出そう。
0236デフォルトの名無しさん
2006/06/17(土) 16:42:19オーバーライドはできないなぁ。
オーバーロードならできるけど。
>>233 いつの時代の人ですか?
0237デフォルトの名無しさん
2006/06/17(土) 17:06:550238デフォルトの名無しさん
2006/06/17(土) 20:54:51D&E読めば少しは納得する気になれるかもしれない。
0239デフォルトの名無しさん
2006/06/17(土) 22:58:08初心者なのでお手柔らかにお願いします
ttp://up.spawn.jp/file/up25025.txt
0240デフォルトの名無しさん
2006/06/18(日) 01:39:43何かと思ったら計算するだけかと思いきや何で全部intなんだよ
toukasokudoの中の変数はdoubleかfloatを使うか、割り算の前に1.0を掛けておけ
0241デフォルトの名無しさん
2006/06/18(日) 01:45:08各 case 節を関数に分けるといいよ。
何度も使われてる数値入力も関数にするのがいいよ。
0242デフォルトの名無しさん
2006/06/18(日) 02:58:25#include <stdio.h>
int main()
{
int a = 10;
int b = 7;
double c = (double) (a+b)/2.0;
printf("%f",c);
return 0;
}
「10」と「7」の平均を求め、小数点以下まで正しく表示させる問題で
上のが答えで下のが自分でやったものでどっちとも同じ答えが出力されるのですが
これはこれでいいのでしょうか?
#include <stdio.h>
int main()
{
short a = 10;
short b = 7;
float c = (a+b)/2.0;
printf("%f",c);
return 0;
}
0243デフォルトの名無しさん
2006/06/18(日) 03:07:12その場合は問題は無い、ように見えるが、厳密に言うとキャスト演算子を用いる方が適切。
結果は問題なくても、処理の流れとしては (double) のある方が適切。
0244デフォルトの名無しさん
2006/06/18(日) 03:12:230245デフォルトの名無しさん
2006/06/18(日) 03:14:53それじゃ、(double) をつけずに c = a/b をやってみ。
次に c = (double)(a/b) と c = (double)a/(double)b を比較してみ。
どういう結果になるか?
各々の変数に対して (double) をつけなきゃ意味がないのが分かるよ。
a+b と変数同士が足し算だったから分からなかっただろうけど
変数同士の割り算ならどう?
0246デフォルトの名無しさん
2006/06/18(日) 03:15:240247デフォルトの名無しさん
2006/06/18(日) 03:17:210248デフォルトの名無しさん
2006/06/18(日) 03:24:450249デフォルトの名無しさん
2006/06/18(日) 03:25:31変数の定義はすべてdoubleにしちゃうぞぉ〜
0250デフォルトの名無しさん
2006/06/18(日) 03:29:43C言語:float型の精度
ttp://homepage1.nifty.com/aok2/004/c04.html
0251デフォルトの名無しさん
2006/06/18(日) 03:36:39近似値だの常用対数だの、円周率だの、そういった数値計算を扱わず
整数ばかりを扱う人にとっては気にせんでもやっていけるもんだねw
0252デフォルトの名無しさん
2006/06/18(日) 03:42:540253デフォルトの名無しさん
2006/06/18(日) 03:44:35はいはい、えらいえらい。自慢はよそでやってね。ちらしの裏とか。
0254デフォルトの名無しさん
2006/06/18(日) 03:45:21整数ばっかり扱っている奴にはほとんど気にしなくてもやっていけるくらい
その問題にぶち当たらないってことを指摘したまでだが?
どうもこういう板には自分の考えに沿わない奴を排除したがる奴がいて困るw
適切か不適切かはコンピュータがはじきだしてくれるから、安心しろw
0255デフォルトの名無しさん
2006/06/18(日) 03:45:540256デフォルトの名無しさん
2006/06/18(日) 03:46:51なんなのお前ら?自分が答えられなかった、知らなかったことを知っている奴を妬んでいるように聞こえるが?
違いに気づかないくらい、整数、あるいは除算に定数を使っている奴が多いってことだろ?
やれやれ・・・お前らじゃ変数の型にすら理解していないようだ、失せろ、専門学校程度のクズ共
0257デフォルトの名無しさん
2006/06/18(日) 03:49:11>桁オチなんかされちゃ困る
誰が桁オチを良しとした?意味を理解できない低学歴ってほんっと困るねw
0258デフォルトの名無しさん
2006/06/18(日) 03:49:52失せろ、正論も言えないバカ
0259242
2006/06/18(日) 03:49:57ちょっと荒れる質問だったようで申し訳ないです
0260デフォルトの名無しさん
2006/06/18(日) 03:51:58気にせんでいいよ。キミが悪い訳ではないw
0261デフォルトの名無しさん
2006/06/18(日) 03:52:28何こいつ?自分が趣味程度にしか思わなかった程度の知識しか持ってなくて
説明を聞いて理解したとたん、小数を理解して扱う人が少ないって意見に対して
自分は小数命!みたいなレスしてんの?(プ
0262デフォルトの名無しさん
2006/06/18(日) 03:53:20そうそう、君が悪いんじゃない、桁オチを許さないって思っている頭の固い奴が
勝手に小数点以下を切り捨てても良いもんだと言った奴がいると勘違いしただけだからw
0263デフォルトの名無しさん
2006/06/18(日) 04:53:01勿論、右辺は2.0で割っている以上等価だし。
0264デフォルトの名無しさん
2006/06/18(日) 05:06:21小数を扱わない型で宣言された変数を除算で扱った場合は、モロに分かる。
厳密に言えば、 a / (double)b で a に (double) をつけなくてもいけるが
とりあえず計算式を代入する変数の型に合わせておいてもおk。
0265デフォルトの名無しさん
2006/06/18(日) 05:07:460266デフォルトの名無しさん
2006/06/18(日) 05:30:49少し依頼っぽくなるのですが、
窓立て2ってソフトがあるのですが、
ttp://www.ksky.ne.jp/~seahorse/mtate2/
どうしても立体化ボタンのダサさが気になり、替えたいのですが、
立体化ボタンがC++で直接書かれているのでどうにもなりません。
窓立てフォルダ内に置いた指定画像ファイルを
表示させるようなプログラムには出来ないんですか?
もし、そのような改造を施せるのであれば、教えてください。
0267デフォルトの名無しさん
2006/06/18(日) 08:27:530268デフォルトの名無しさん
2006/06/18(日) 08:57:45作者に頼めば?
って、既に掲示板で同じこと言ってるのか。
ソースはあるけどBCCだしなぁ。
0269デフォルトの名無しさん
2006/06/18(日) 09:38:25もうちょっとオブラートに包め
0270デフォルトの名無しさん
2006/06/18(日) 12:01:59必死な奴の特徴丸分かりで笑える。
他のスレでもよく見る奴。
0271デフォルトの名無しさん
2006/06/18(日) 12:03:370272デフォルトの名無しさん
2006/06/18(日) 13:06:530273デフォルトの名無しさん
2006/06/18(日) 15:12:15245=246=247=248=249=256=261=262とかw
0274デフォルトの名無しさん
2006/06/18(日) 15:15:59例:
164 hoge
24 hogehoge
300 hog
…
というテキストから数字と文字を取り出したいんですが、
int num;
char str[1000][128];
int count = 1;
fp = fopen("test.txt" , "r");
while( (temp = fscanf(fp , "%d %s" , &num , &str[count-1])) != EOF){
printf("line:%d\n" , count);
count++;
if(temp == 2){
printf("%d %s\n" , num , str[count-1]);
}
else{
fgetc(fp);
}
}
として、変なのが入ったら切り捨てて、戻り値が2の場合のみとりあえず表示させてみようっていうソースを書いたつもりなんですが、出力で上手く出ないようです…。
どこがまずいのでしょうか・・・
0275デフォルトの名無しさん
2006/06/18(日) 15:29:50printf("%d %s\n", num, str[count - 2]);
0276デフォルトの名無しさん
2006/06/18(日) 15:36:43指摘通り書き換えたら正しく入ってたようです
ありがとうございました
0277デフォルトの名無しさん
2006/06/18(日) 16:34:07それ、全部イコールじゃないのは書き込んでいた奴なら分かるけど
それ以外のくだらねぇ煽りをしているのがお前だってバレバレだから
0278デフォルトの名無しさん
2006/06/18(日) 16:35:520279デフォルトの名無しさん
2006/06/18(日) 16:39:13キャスト演算子がなくても問題のない、あるいは気づかない人が
どっちも同じだと勘違いする例が上で挙げられていただけなのに気づかないだけ。
>>251には小数点以下の数値が重要となる一例
>近似値だの常用対数だの、円周率だの
が書かれているにも関わらず、それらの計算式を使う必要がある場合は
結果からして小数点以下が落とされると困るのは分かっているはずで
そういう計算式を扱うようになれば、プログラム言語の細かい部分にまで
目がいくようになるわけで。
まぁ、理解力のないバカは、相手の意向を無視して自分勝手な解釈で
勘 違 い をして恥をかくから痛々しいw
0280デフォルトの名無しさん
2006/06/18(日) 16:40:420281デフォルトの名無しさん
2006/06/18(日) 16:57:47自演しまくってる本人が何言ってんだかwwww
0282デフォルトの名無しさん
2006/06/18(日) 17:00:03数値計算の基礎で叩き込まれるけど、キャストしたからOKって事では無いぞ
引き算なんかは一気に演算精度落ちちゃうから
有効桁数云々言うなら式の変形も考えないと
0283デフォルトの名無しさん
2006/06/18(日) 17:01:570284デフォルトの名無しさん
2006/06/18(日) 17:03:23頭のおかしい人は相手にしないようにしましょう
0285デフォルトの名無しさん
2006/06/18(日) 17:05:360286デフォルトの名無しさん
2006/06/18(日) 17:29:27そうだよ、だからってそんな精密な計算を必要とする計算式に
int型で宣言した変数を扱うこと自体どーとか言う前に
上で挙げられた例は気づかないものだって話じゃん。
キャスト演算子なんて使うのが面倒なら、よーしぼくちん
面倒だから全部変数をdoubleで宣言しちゃうぞー
で良いじゃんw
0287デフォルトの名無しさん
2006/06/18(日) 17:30:51言葉も理解できない低学歴(専門学校生)ごときが、何煽ってんだよ?w
せっかくの休日も煽りをするためだけに使うなんて、くせぇ人生送ってんなぁ〜お前w
あっ、もしかして、ニート?w
0288デフォルトの名無しさん
2006/06/18(日) 17:35:43そういう点に気づかないんだろ。問題や論点の趣旨が分かってない奴がファビョってるだけ。
誰も小数点以下の数値を扱う必要がないとは言ってないし。
扱う奴が勝手に困るとか言っただけw
こっちは扱う人間を困らせるつもりなんてないし、
扱う場合がない例について言ったところで何も困らんだろ。
0289デフォルトの名無しさん
2006/06/18(日) 17:37:510290デフォルトの名無しさん
2006/06/18(日) 17:39:23(double)(a+b)/2.0 みたいに動作に影響を与えないものなら趣味の問題だよなあ。
0291デフォルトの名無しさん
2006/06/18(日) 17:48:03キャスト演算子を使わなくても結果にはほんとうに影響がないが
こういう場合でも、キャスト演算子を使った例を出して質問してんだから
それについて答えてみろよ?>精度フェチ
0292デフォルトの名無しさん
2006/06/18(日) 17:53:58第一、キャスト演算子は何も精度を保つとかじゃなく
型の違う変数同士の計算式で使って帳尻あわせすんだろが?
何も変数の型がdoubleだけじゃないんだから、ちったぁ幅広い観点で物事を理解しろや、な?
0293デフォルトの名無しさん
2006/06/18(日) 17:55:130294263≠精度フェチ
2006/06/18(日) 17:56:27また例によって途中は読み飛ばしているのだが、>242の右辺は全く等価でキャストする必要は全くないよ。
あくまでも、代入される対象の変数の型が違うだけ。
0295デフォルトの名無しさん
2006/06/18(日) 17:57:06なにが「そうだよ」だ。pgr
0296デフォルトの名無しさん
2006/06/18(日) 18:03:00>代入される対象の変数の型が違うだけ
まだわかってないのか、呆れた・・・
>>295
数学で出てくる微積分だの、常用対数だの、円周率だの
無限小数が続くような精度の重要性の問題でキャストの話をしたんじゃねーんだよ?
まだ上の議論の論点がわかってねーのか、呆れたな、ろくに勉強してこなかった
オチこぼれの「専門学校生」ってのは
0297デフォルトの名無しさん
2006/06/18(日) 18:06:54((a + b) / 2.0) と ((double)(a + b) / 2.0) が等価でないということでしょうか?
0298デフォルトの名無しさん
2006/06/18(日) 18:07:05>float c = (a+b)/2.0;
ここ、除算に使っている値はなんだ?そもそも何型の変数でもないな?
分かったか?タコ助共。問題がないからってその前にあるint型の変数を
無視しても良いとか言い出したら笑っちゃうよ?
そもそも、除算するくらいなら浮動少数を使っとけって、うぜぇ。
まぁ、こういうと今度は小数点以下のある数値の積、和、差については良いんでちゅか〜?
って屁理屈ごねてくるんだろw
0299デフォルトの名無しさん
2006/06/18(日) 18:09:40いるように見えるので、始末におえない。
0300デフォルトの名無しさん
2006/06/18(日) 18:10:01> ここ、除算に使っている値はなんだ?そもそも何型の変数でもないな?
short 型の変数と、 double 型のリテラルだよ。
0301300
2006/06/18(日) 18:11:40言いたいことはよくわからんが。
0302デフォルトの名無しさん
2006/06/18(日) 18:14:530303263≠精度フェチ
2006/06/18(日) 18:19:18>>297
そういうわけで、>296にとっては等価ではないと思い込みたいらしい。
0304デフォルトの名無しさん
2006/06/18(日) 18:20:35積み残しとかはなんか嫌だから
小さい値から加えてくようにしてる。
0305デフォルトの名無しさん
2006/06/18(日) 18:27:320306デフォルトの名無しさん
2006/06/18(日) 18:34:390307デフォルトの名無しさん
2006/06/18(日) 18:59:04int a;
public:
test(int i) : a(i) {};
};
上のようなコンストラクタを見たのですが、これは
test(int i) { a = i; }
と同じ意味ですか?
同じだとしたらどちらが一般的な書き方なのでしょうか。
0308デフォルトの名無しさん
2006/06/18(日) 19:06:58意味は違う。
前者は a を i で初期化している。
後者は a を初期化せず i を代入している。
0309デフォルトの名無しさん
2006/06/18(日) 19:20:00じゃあ、後者でaはいつ初期化されるんですか?
0310デフォルトの名無しさん
2006/06/18(日) 19:22:11test(int i) : a(i) {}; なら初期化だけで済む。
0311デフォルトの名無しさん
2006/06/18(日) 19:23:06意味論的には307の前者の書き方でaが初期化されるのと同じ時に、
(初期化子が無いので)不定の値で初期化されると言えば良いかな。
0312307
2006/06/18(日) 19:32:41エラーの原因が分かったみたいです。
前者の場合はコピーコンストラクタが動いていたのかな。
後者だと、intの引数無しコンストラクタと代入演算子が動く・・・。
0313デフォルトの名無しさん
2006/06/18(日) 19:51:45文字列を返す関数を作っているのですが、
char *Method() {
char strA[] = "こんにちは";
return strA;;
}
これだとstrAはローカル変数へのポインタなのでもちろんダメなわけですが、
なんとかして文字列を返す方法はありませんか?
ちなみに引数は一切取りたくありません。
0314デフォルトの名無しさん
2006/06/18(日) 19:55:330315デフォルトの名無しさん
2006/06/18(日) 19:55:45return "こんにちは";
}
0316デフォルトの名無しさん
2006/06/18(日) 19:55:46char *Method() {
char* strA = "こんにちは";
return strA;;
}
0317デフォルトの名無しさん
2006/06/18(日) 19:57:310318デフォルトの名無しさん
2006/06/18(日) 20:00:410319デフォルトの名無しさん
2006/06/18(日) 20:05:17ちがう。後者では a は初期化されず、代入まで不定な値となる。
意味上はね。
0320デフォルトの名無しさん
2006/06/18(日) 20:08:19そもそも初期化ってなんだよ
0321デフォルトの名無しさん
2006/06/18(日) 20:10:36ちょっと古いが。
ttp://www.kuzbass.ru/docs/isocpp/decl.html#dcl.init
0322デフォルトの名無しさん
2006/06/18(日) 21:04:30ああなるほど。そうすると"こんにちは"は性的領域に確保されるんですね。
bufを取らないitoaを作ろうとしましたが、なぜいちいちbufを取るのか先ほど理解しました。
ありがとうございました。
0323デフォルトの名無しさん
2006/06/18(日) 21:04:550324デフォルトの名無しさん
2006/06/18(日) 21:06:290325デフォルトの名無しさん
2006/06/18(日) 21:07:55何か語ってるかー?
馬鹿なだけだろ
0326デフォルトの名無しさん
2006/06/18(日) 21:10:09が結論だな
0327デフォルトの名無しさん
2006/06/18(日) 21:14:06>2.0がdoubleじゃない
お前バカ?定数と型の指定のある変数の意味もわかってないのが露呈されただけ
専 門 学 校 は こ の 程 度 ( プ
0328デフォルトの名無しさん
2006/06/18(日) 21:16:30それはお前
0329デフォルトの名無しさん
2006/06/18(日) 21:19:57http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2099.txt
上手く、文字列の値が交換出来ないんですか、どこがダメなんでしょう…?
多分ポインタの辺りがまずいんだと思いますが…
0330デフォルトの名無しさん
2006/06/18(日) 21:22:130331デフォルトの名無しさん
2006/06/18(日) 21:25:20なんで?まさか2.0って小数点以下を書いたら浮動少数になるの?バカだこいつ・・・
自分の知識が浅はかだってまだ気づいてないな。
キャスト演算子の括弧の中はな〜〜〜んだ?変数を宣言するときの型が入っていると思うがねぇ〜〜
>>330
決定っつーか低レベル決定。物事を理解する頭がないってこと。
定数と変数なんて、既に中学、高校の数学でやってんだし。
違いの意味に気づいてない奴は、惰性で数値計算をしているだけの
思考能力のないアホ
0332デフォルトの名無しさん
2006/06/18(日) 21:30:59> なんで?まさか2.0って小数点以下を書いたら浮動少数になるの?バカだこいつ・・・
なるよ。馬鹿だなお前。
0333デフォルトの名無しさん
2006/06/18(日) 21:33:49筋の通った理論に基づいて話してなく、自分がバカだと思う奴がバカって
言っているだけだな。ご愁傷様。
2.0は 変数 ではなく 定数 なので、変数に使う型は関係ない。
問題は変数同士と、代入する変数の型だよ。
あの数式を見れば一目瞭然。さすがに初心者だからといって
理解力のないバカまで指導するスレじゃないんで、俺はこれで失礼するよ。
低俗な人間の問題煮まで相手にしてたら、こっちがバカになるw
0334デフォルトの名無しさん
2006/06/18(日) 21:34:150335デフォルトの名無しさん
2006/06/18(日) 21:34:580336デフォルトの名無しさん
2006/06/18(日) 21:39:10初心者が見てるだろうから騙されないように注意しておきますが、
C/C++ のソース上で 2..0 は double 型のリテラルです。
確かに変数の型とは関係ないですが、型が決まっていないわけではありません。
0337336
2006/06/18(日) 21:40:010338デフォルトの名無しさん
2006/06/18(日) 21:46:49上級者にバカにされたくなければ今すぐ考えを改めるよう注意しておきますが、
2.0がどこうではなく、「変数」と「定数」について述べていると思われますが?
それから、浮動小数についても理解しておられないようですね。
123.45を1.2345 x 10^2と表示することは理解していても
小数点が動くという意味までは理解しておられないようで?
>>334
いつまで屁理屈で自分勝手なお馬鹿な妄想してんの?
07については述べられていないし、2.0という値についてだよ?
っつか、0xとかつけるならまだしも、単に07って二桁にする意味ってなんだよ・・・
0339デフォルトの名無しさん
2006/06/18(日) 22:04:310340デフォルトの名無しさん
2006/06/18(日) 22:04:36とりあえず以下のコードの実行結果の考察について説明してもらおうか。
#include <stdio.h>
int main()
{
printf("sizeof(long)=%d\n", sizeof(long));
printf("sizeof(float)=%d\n", sizeof(float));
printf("sizeof(double)=%d\n", sizeof(double));
printf("sizeof(2)=%d\n", sizeof(2));
printf("sizeof(2.0)=%d\n", sizeof(2.0));
return 0;
}
sizeof(long)=4
sizeof(float)=4
sizeof(double)=8
sizeof(2)=4
sizeof(2.0)=8
0341デフォルトの名無しさん
2006/06/18(日) 22:05:450342デフォルトの名無しさん
2006/06/18(日) 22:06:21いや、馬鹿が一人いるだけ
0343デフォルトの名無しさん
2006/06/18(日) 22:07:44まだ居るのかよ。早く消えるか、主張の内容がわかるように書いてくれ。
「変数」と「定数」について何を述べているのか伝わってないから。
0344デフォルトの名無しさん
2006/06/18(日) 22:10:380345デフォルトの名無しさん
2006/06/18(日) 22:14:22お前が変数と定数の意味を理解していないだけじゃね?どっちも恥ずかしいから
いい加減にしろ。特に屁理屈だけしか言わないアホ、C言語の前に数学やり直せw
0346デフォルトの名無しさん
2006/06/18(日) 22:14:56(A) (double)(a+b)/2.0;
(B) (a+b)/2.0;
aとbはint型。(242の後者でaとbはshort型だが、式内での格上げで結局int型として扱われる)
だから(a+b)もA, B共にint型になる。
Aでは、それをdouble型にキャストして、2.0で割っている。Bではキャストせずに2.0で割っている。
2.0は浮動小数点リテラルで、接尾辞は何も付いていないから、double型。
つまりAは「double型の値 / double型の値」、Bは「int型の値 / double型の値」となる。
Aは除算演算子の両辺の型が同じdouble型だから、double型で除算が行われる。
Bは両辺の型が違うが、規格書ではこの場合両辺をdouble型にする事になっている。(規格書を各自見てくれ)
この際にint型の値をdouble型の値に変換する方法は、
int型の値をdouble型の値へキャスト演算子で変換する場合と全く同じである。(〃)
だからAもBも(型、値含め)全く同じ結果になる。
0347デフォルトの名無しさん
2006/06/18(日) 22:16:50>>334は
>07って書いても10進数だって
だから10進数だったら0を書く必要がないだろ・・・
その値が8進数かどうか言い出したら、最初の10進数で記述された数式ってなんだよ・・・
相手が知らないであろう事実を引き出そうって態度が痛すぎ。
論点を摩り替えて、お前は俺が知っている○×を知らない!ざま〜みろって
自分に有利なルールで勝負でもしてんの?w
0348デフォルトの名無しさん
2006/06/18(日) 22:17:36Cでは式の中で右辺値として用いられる限り、
共に何か型を持ち値を持つという点では同じなのだから、
この流れで定数と変数を区別する意味は無いだろ。
0349デフォルトの名無しさん
2006/06/18(日) 22:18:52>2.0は浮動小数点リテラルで、接尾辞は何も付いていないから、double型。
それについては、2.0が変数か定数かの方が論点になってるだろ・・・
お前、まさかいちいちdouble型で宣言したa,bをint型で宣言した変数cに代入する数式で
c= a+b / (int)2.0 ってやる?キャスト演算子についての話としても不適切だよ・・・
もうバカバッカw
0350デフォルトの名無しさん
2006/06/18(日) 22:20:08>定数と変数を区別する
残念、計算式の中で使われている変数の型が違うってところから話が始まっているんだが?
過去ログも読んでないで、論点ズラして何言ってんだ?
もう痛すぎ、質問でも質問者への答えでもないなら消えろ
0351デフォルトの名無しさん
2006/06/18(日) 22:23:11あぼーんしづらい
0352デフォルトの名無しさん
2006/06/18(日) 22:33:07察しの通り、文字列の操作部分が怪しい。
(1) int str[MAXDATA][64]; → char str[MAXDATA][64]; じゃないか?
(2) 配列の初期化されていない部分を参照しているので適当な値で初期化するか、
終端フラグをもうけるか、ソート範囲を有効なデータの範囲だけにすること。
(3) (1) と仮定して str は「大きさ64の文字列の配列」なので Insertion_sort の引数を
void Insertion_sort(int num[] , char str[][64] , int data) とする。
(4) この場合、ソートする際は文字列の実体を strcpy 等でコピーする。
0353デフォルトの名無しさん
2006/06/18(日) 22:33:36素直に「私が無知でしたごめんなさい」って言えばいいのに
8進数程度のことでがたがた言うなよ
0354デフォルトの名無しさん
2006/06/18(日) 22:34:29安心しろ。 2.0 が変数だなんて言ってるやつは居ないから、それは論点にならない。
0355デフォルトの名無しさん
2006/06/18(日) 22:51:570356デフォルトの名無しさん
2006/06/18(日) 22:52:11双方とも
0357デフォルトの名無しさん
2006/06/18(日) 23:00:39正直、double型とかの論争?に埋もれたかと思ってたら返信が…
(1)のとおりcharでした;
(2)の意味がすこし不明なんですが、まず、データのtxtファイルは>>274の上の部分のが999個くらい入ってます。
で、num[]にそれぞれの数を str[]に英字を格納してますが…
(3)と(4)とおりに直してみました…。コンパイルできず
mainの渡し方がまずいのか、根本的にわかってないのか、両方か…。
0358デフォルトの名無しさん
2006/06/18(日) 23:07:45コンパイルできないなら、エラーメッセージ読んで直せよ。
0359デフォルトの名無しさん
2006/06/18(日) 23:10:45いつまでも構うなよ・・・。
0360デフォルトの名無しさん
2006/06/18(日) 23:10:450361デフォルトの名無しさん
2006/06/18(日) 23:26:090362デフォルトの名無しさん
2006/06/18(日) 23:32:500363デフォルトの名無しさん
2006/06/18(日) 23:32:57(2) の意味は、例えば読み込んだデータの数が900個だった時
mainで Insertion_sort() を呼ぶ際、data=MAXDATA(999)になってるから
num[900]/str[900]以降のデータもあわせてソートしてるけど
じゃあ、そこに入っている値は何? ということ。
(3), (4) の通りにするとこんな感じになる。
void Insertion_sort(int num[] , char str[][64] , int data){
int i, j;
int numtemp;
char strtemp[64];
for(i = 1; i < data ; i++){
numtemp = num[i];
strcpy(strtemp, str[i]);
for(j = i; j > 0 && num[j-1] > numtemp ; j--){
num[j] = num[j-1];
strcpy(str[j], str[j-1]);
}
num[j] = numtemp;
strcpy(str[j], strtemp);
}
}
文字列のソートをポインタ操作だけで済ませたいときは >>329 のソースに
例えば char str[MAXDATA][64]; の後ろ辺りに文字列へのポインタの配列
char *ptr[MAXDATA]; を追加してデータを読み込む際にptr[]を初期化
(ptr[count] = str[count]とか)し、以降はstr[]の代わりにptr[]を操作すれば良い。
0364デフォルトの名無しさん
2006/06/18(日) 23:34:340365デフォルトの名無しさん
2006/06/18(日) 23:48:098進数なんてchmodの時ぐらいしか使わないんだから
0366デフォルトの名無しさん
2006/06/18(日) 23:51:41プログラミングの式を数学の式と同じだと思わない方がいいと俺は思う。
理由は>>348で書いたとおり。
0367デフォルトの名無しさん
2006/06/19(月) 00:00:29>プログラミングの式を数学の式と同じだと
誰が同じって言った?また妄想か・・・ループじゃなくて
無限に屁理屈が増大しているので、ここらでビックバーンでも起こして
お前ら全員吹っ飛んでくれw
0368デフォルトの名無しさん
2006/06/19(月) 00:05:33おかげさまで動きました。と同時に(2)の話も理解しました。
そこらへんもなんとかしてみます。
お世話になりました。
0369デフォルトの名無しさん
2006/06/19(月) 00:07:55なんか喋る前に>>340についてなんか解説してくれよ。
シンプルなコードにシンプルな結果だろう?
0370デフォルトの名無しさん
2006/06/19(月) 00:08:170371デフォルトの名無しさん
2006/06/19(月) 00:08:31自分で定義する関数とか変数に大文字使う人っているじゃん?
それってちょ〜〜〜〜キモイんですけどぉ〜、やめてもらえませんか〜?
大文字使う場合、変数とか関数とかじゃなくってぇ〜〜〜〜
#define MAX 10 とか変数じゃないものに使って欲しいんですけどぉ〜〜?
↓それについてあんたどう思う?
0372デフォルトの名無しさん
2006/06/19(月) 00:09:08勝手な妄想する前に>>340についてなんか解説してくれよ。
シンプルなコードにシンプルな結果だろう?
>>370
質問に対してレスすることが無いなら黙っててください。
0373デフォルトの名無しさん
2006/06/19(月) 00:11:160374デフォルトの名無しさん
2006/06/19(月) 00:12:28> 誰が同じって言った?また妄想か・・・ループじゃなくて
↓こりゃなんだ?
>>331
> 定数と変数なんて、既に中学、高校の数学でやってんだし。
別人?
0375デフォルトの名無しさん
2006/06/19(月) 00:14:58>sizeof(2.0)=8
ああ、これね。これが何か?変数じゃない値で
メモリはdoubleと同じ分だけ使っているが、それは精度を落とさぬよう
コンピュータ側がやっていることだが、それで勝手に2.0がdouble型の変数と
同じ扱いにはならない。変数と定数についてまだわかってないんだな・・・
少なくとも、変数の型が違う場合に使うキャスト演算子の話じゃないんで
何 が 言 い た い ん だ ?
0376デフォルトの名無しさん
2006/06/19(月) 00:15:14コンパイルはしなくていいからさ、実行結果についてなんか喋ってくれよ。
0377デフォルトの名無しさん
2006/06/19(月) 00:16:19誰も2.0が変数だなんて主張してないぞ。
0378デフォルトの名無しさん
2006/06/19(月) 00:17:29> それで勝手に2.0がdouble型の変数と同じ扱いにはならない。
式で参照される限りは同じだよ。いいかげんにどこが違うのか言ってみてよ。
0379デフォルトの名無しさん
2006/06/19(月) 00:18:28http://dictionary.goo.ne.jp/search.php?MT=%C4%EA%BF%F4&kind=jn
http://dictionary.goo.ne.jp/search.php?id=1772890-0000&kind=jn&mode=5
>変数の変化に関係なく一定な値を表す数
値が何なのか、分かっているならそれに応じて代入する変数の型を決めれば良いだけじゃね?
変数がなんで変数なのか、いい加減理解しとけよ、バカ共。
既に数値が分かっているものと、数値が定まっていない数値を扱うのとじゃ
すべき対処が変わってくる。
0380デフォルトの名無しさん
2006/06/19(月) 00:21:26という状況に陥ったら、まず前半の前提部分を疑ったほうがいいなw
0381デフォルトの名無しさん
2006/06/19(月) 00:22:52そうだね、だから変数の型によって出てくる「キャスト演算子」の話じゃねーっつってんだろ?
>>378
>いいかげんにどこが違うのか
それじゃ、お前はdouble型で宣言されたaを2.0で割った値を
int型の変数に代入する際には、ちゃんと 2.0 に (int)2.0 と書いて下さいね(ニヤニヤ
俺は2だってわかっている「定数」だったらわざわざ2.0なんて書かずに2って書くけどねw
質問の出所が分かってないから余計に悪いんだよな。
>>242 を読み直してから議論しろよ、こっちはもうくだらない屁理屈には付き合わない。
0382デフォルトの名無しさん
2006/06/19(月) 00:23:440383デフォルトの名無しさん
2006/06/19(月) 00:25:280384デフォルトの名無しさん
2006/06/19(月) 00:26:08>>331
>なんで?まさか2.0って小数点以下を書いたら浮動少数になるの?バカだこいつ・・・
>>376
>ああ、これね。これが何か?変数じゃない値で
>メモリはdoubleと同じ分だけ使っているが、それは精度を落とさぬよう
>コンピュータ側がやっていること
0385デフォルトの名無しさん
2006/06/19(月) 00:27:53今一度まとめて確認させてくれないか?
A. 2.0 は double 型の定数である。
B. a, b が整数型のとき ((a+b)/2.0) と ((double)(a+b)/2.0) は等価である。
どちらも真なわけだが、何か反論はあるか?
0386デフォルトの名無しさん
2006/06/19(月) 00:29:00>>381
>int型の変数に代入する際には、ちゃんと 2.0 に (int)2.0 と書いて下さいね(ニヤニヤ
>俺は2だってわかっている「定数」だったらわざわざ2.0なんて書かずに2って書くけどねw
2と2.0と書いた場合では、コンピュータの扱いが違うのだが。
>>340
>sizeof(2)=4
>sizeof(2.0)=8
わざわざ2と書かずに2.0と書くのには意味があるのか無いのか説明してもらおう。
0387366
2006/06/19(月) 00:30:59331で「定数と変数なんて、既に中学、高校の数学でやってんだし。」
と書いていることから、数学がわかればプログラミングも(当然)わかると主張しているように見受けられた。
366でアンカーを張った先が338というのはおかしかったな、それはすまん。
0388デフォルトの名無しさん
2006/06/19(月) 00:32:530389デフォルトの名無しさん
2006/06/19(月) 00:33:22・暗黙の型変換
・型拡張
0390デフォルトの名無しさん
2006/06/19(月) 00:37:34「2.0はdouble型のリテラルでしたごめんなさい」
が言えてないのか
0391デフォルトの名無しさん
2006/06/19(月) 00:40:46たしかにC/C++において、
(配列の要素数など)整数定数式が要求される場所以外では、2と(int)2.0は等価。
でも2.0はあくまでdouble型。
しかし(int)2.0とした場合、コンパイラは定数式だからコンパイル時にint型に変換してしまう。
0392263≠精度フェチ
2006/06/19(月) 00:53:22確か、失礼するのどうのと言ってたのじゃなかったのかな。
あーそうか、「去る」と言う意味ではなく文字通り、「失礼な行為を行なう」と言う意味だったのか。
#って、アンカーなくても被害妄想全開でレス来るんだろうなぁ。
0393デフォルトの名無しさん
2006/06/19(月) 11:20:31friend ostream &operator<<(ostream &o, out ob);
public:
int a;
int func() { return 99; }
};
ostream &operator<<(ostream &o, out ob)
{
o << "unko\n";
return o;
}
int main()
{
out ob;
cout << ob;
cout << ob.func();
}
これを実行したらプログラムが強制終了します。
ob.a = 10;を追加すると動きました。
変数に値を格納していないオブジェクトはメモリ上に存在しないということですか?
0394デフォルトの名無しさん
2006/06/19(月) 11:59:210395デフォルトの名無しさん
2006/06/19(月) 11:59:510396393
2006/06/19(月) 12:16:21もう一度実行してみましたがやっぱり途中で落ちます。
環境のせいだったみたいですね。
VisualC++.net2003を使っています。
0397デフォルトの名無しさん
2006/06/19(月) 12:47:000398デフォルトの名無しさん
2006/06/19(月) 14:27:17このスレは個人を特定して考えを聞くスレじゃありません。
何偉そうに 〜〜(して)いただこう?なんて催促してんの?
さて、sizeofの2.0と2について、結果が8と4バイトということだったが
それはメモリの領域のサイズのことであって、しつこいようだけど
2.0そのものは定数だし「変数じゃない」ってことは理解しているんだろうか?
そして、2.0というように、小数点以下のある値を精度を落とさずに代入するには、
浮動小数があ使えるdouble型で宣言されたものにするのが適切
というのが言語の仕様や検証結果から分かることではないだろうか?
まぁ、こっちは変数の型のキャスト演算子と計算式の中の定数について
しっかり述べているのに、 >>386 >>389 みたいな疑問を抱く奴に
いちいち答えを強要される必要はないし、答えなきゃこいつは無知だの
勝手に言われてもかまわない。俺が知らないわけじゃないし。
問題は俺が最初に何の質問に対して答えたか?
そっちを理解できない奴が勝手に自分が疑問に思ったことを
いちいちつきつけられるスレじゃないし。そんな質問は
自分で言語の仕様を知って理解すべきだろ。
どこの学校言ってんだよ、こいつら?分からなきゃ誰かに教えてもらわなきゃ
やっていけない、学習能力のない痛いお子ちゃまですか?
0399デフォルトの名無しさん
2006/06/19(月) 14:31:24君の脳内仕様はどうでもいいです><
0400デフォルトの名無しさん
2006/06/19(月) 14:55:42なんか喋る前に、>>385に答えろ、馬鹿が
お前の脳内言語仕様はちらしの裏にでもメモしとけ
0401デフォルトの名無しさん
2006/06/19(月) 15:05:04変数か定数かなんてことは誰も話題にしてないことに気づけよ。
>>349
>それについては、2.0が変数か定数かの方が論点になってるだろ・・・
その論点の発端となった、お前以外の発言番号を示せるものなら示してみろ。
0402デフォルトの名無しさん
2006/06/19(月) 15:20:12上の方で勝手に
>07って書いても10進数だって
とか言ったアホがいるから悪いんだろ。煽って荒らしているのはどっちだ?
そろそろ通報した方が良いな。ついでにどこの専門学校から書き込まれているか
調べてもらいたいね。
0403デフォルトの名無しさん
2006/06/19(月) 15:20:44>答えろ
命令しても無駄。ここで出た質問に「確実に答えてもらえる」すれじゃありません。
そろそろうざいね、低レベルな低学歴って。
0404デフォルトの名無しさん
2006/06/19(月) 15:20:45良くも悪くも周りがみんな自分と同レベルだと思わない方がいいよ。判っているとは思うけど。
0405デフォルトの名無しさん
2006/06/19(月) 15:23:10>変数か定数かなんてことは誰も話題にしてないことに気づけよ
定数の型についてが最初の話題じゃないって気づけよ?
勝手に論点すり変えて、自分勝手な議論を持ち出すなよ?
こっちが理解していないみたいなことを言うが、自分で言語の仕様を理解して
適切に記述できないことを
露 呈 し な く て 良 い か ら さ ぁ 専 門 学 校 生 w
ついでに、2.0は定数だよ?人間の目でも小数点以下があることが分かるじゃん?
コンピュータもちゃんと8バイトで計算に使う数値を格納するメモリをとってるだろ?
それはsizeofで分かったろ?いい加減うざい。
本当に通報するね。悪質だよ、ここ。
0406デフォルトの名無しさん
2006/06/19(月) 15:24:36>りがみんな自分と同レベルだと思わない
思ってないよ。初心者歓迎でしょ?少なくともこのスレで
屁理屈や理解していない議論を持ち出しているバカは低レベル。
そんな奴らにまともなソースはかけないのは分かっているし
いつまでもつまらん質問に答えようとも思わない。
が、バカはバカだときづかぜるきっかけを与えなきゃ、いつまでも社会のお荷物で困るんだよ
犯罪者になるなよ、低学歴
0407デフォルトの名無しさん
2006/06/19(月) 15:25:01ヒント:頭のおかしい人は相手にしないようにしましょう
ヒント:強度の学歴コンプレックスを持った人も相手にしないようにしましょう
0408デフォルトの名無しさん
2006/06/19(月) 15:26:41精度が保たれる型の変数は何か?
a = 1*0.5
b = 2+2
c = 2.5 + 1
さぁ、計算結果に応じて代入するabcの適切な型を宣言してください。
また、メモリの無駄な確保はしないように答えなさい(すべてdoubleは不適切とする)
これくらいの問題に答えられなきゃ、お前ら小学生からやり直せ
0409デフォルトの名無しさん
2006/06/19(月) 15:26:59頼むから通報してくれよ。マジで。
0410デフォルトの名無しさん
2006/06/19(月) 15:32:25http://www.jisc.go.jp/
「JIS検索」から規格番号 X3010でいわゆるC99、X3014でC++が見れる。
今言い合っている点に関してはC89からC99まで特に変化は無いはず。
0411デフォルトの名無しさん
2006/06/19(月) 15:35:19どう考えても2つめは計算の結果の 値 が等しいんであって
値として出された数値の型(精度)については考慮していない無意味な質問だよ。
>定数である
そうだよ?見て分かるじゃん。変数ってのは定まっていない値を入れるから
わざわざ何か値が入りますよって宣言してメモリを確保してんだから。
定数だけどdouble型とかは関係ない。double型って
浮動小数でしょ?2.0は固定小数だよ?頭大丈夫か・・・
既に浮動小数の表現についても過去ログにレスがあるけど?
123.45だったら1.2345 x 10^2って表したら浮動小数(double型)って思えと言うのか?ってのは
ご自由に解釈してください。少なくとも2.0は固定小数であってdouble型とは関係ない。
>等価である。
値が同じだからといって、変数の型まで不適切にして良いわけじゃない。
キャスト演算子についてもバグが報告されている。
最初っから数式が小数点以下も扱うもんだと分かったら
その計算式をの値を代入する変数の型はdoubleにしときゃ良いって話で終わるよ?
自分の目でそういう部分を判断できなきゃ、自分が適切なプログラムを作れなくて困るだけ
一生2.0が何型か?について議論してなさい。
とりあえず答えたけど?自分(質問者)はバカですが何か?って質問に対して
あ〜そうですね?って俺に答えさせただけだな。恥ずかしいね
本当に頭の弱い人って。お願いだから浅はかな考えで社会に出て
犯罪を犯さないでくれ。いつまでもあんたらみたいな「低俗な人間」に
入れ知恵をするつもりはないし、お前らもその程度じゃ賢くはなれんよ。
何でもかんでも答えてもらえる、自分の思った通りに答えない人は嫌いになる
みたいな感情まで持ち込んでどうすんだよ?プログラムは感情なんて当てにしてくれないぞw
0412デフォルトの名無しさん
2006/06/19(月) 15:35:35わかっているならバカや低レベルや初心者にもわかりやすく書いてください。
バカは死んでも直らないと言う信念をお持ちであれば、
せめて低レベルや初心者だけでも相手してやってください。
0413デフォルトの名無しさん
2006/06/19(月) 15:47:31> >>385の何を間違えだと言った?論点がズレてるね。
> どう考えても2つめは計算の結果の 値 が等しいんであって
ヒント:暗黙の型変換(キャスト)
0414デフォルトの名無しさん
2006/06/19(月) 15:51:37つーか定数ってなに?
0415デフォルトの名無しさん
2006/06/19(月) 15:54:29>ああ、これね。これが何か?変数じゃない値で
>メモリはdoubleと同じ分だけ使っているが、それは精度を落とさぬよう
>コンピュータ側がやっていること
だったら、>>242の下のコードは全く問題ないね!
0416デフォルトの名無しさん
2006/06/19(月) 15:54:53C/C++には“言語仕様上”、固定小数と言う概念は無い。
C/C++で数値を扱う型は数値型と分類されている。
数値型は整数型と浮動小数点数型に分かれる。
当然intは整数型、doubleは浮動小数点数型に分類される。
標準規格ではリテラル(お前の言う定数)がどんな型になるかも規定されている。(>>410から見てみろ)
それによればC/C++において2.0はdouble型になる。
俺が語っているのでは無い。規格書がそう語っているのだ。
0417デフォルトの名無しさん
2006/06/19(月) 15:54:59> C/C++的には「2.0」は浮動小数点数リテラルであって、それ以上でもそれ以下でもないと思うが。
その通り。
> つーか定数ってなに?
リテラル(Literal)の和訳。
0418デフォルトの名無しさん
2006/06/19(月) 15:55:22めんどくさいので訂正はしない。
0419デフォルトの名無しさん
2006/06/19(月) 16:01:10変数の型についてが最初の話題じゃないって気づけよ?
勝手に論点すり変えて、自分勝手な議論を持ち出すなよ?
こっちが理解していないみたいなことを言うが、自分で言語の仕様を理解して
適切に記述できないことを
露 呈 し な く て 良 い か ら さ ぁ 専 門 学 校 生 w
0420デフォルトの名無しさん
2006/06/19(月) 16:03:32定数と書くと、#defineやconst (C++)などによって名前を付けたものというイメージを持つ人が多いんだ。
0421デフォルトの名無しさん
2006/06/19(月) 16:07:23C/C++において385の2つの式は、結果の型も同じ。
そういう規則だから。
0422デフォルトの名無しさん
2006/06/19(月) 16:09:08>ヒント:暗黙の型変換(キャスト)
それがバグの原因だよ。もっと必要な文献に目を向けたらどうだ?
だから適切にキャスト演算子を使うか、最初っから計算結果を代入する型にあわせて
計算式の中に使う変数の型もあわせておいた方が良いってのが報告されてんだよ
0423デフォルトの名無しさん
2006/06/19(月) 16:11:07だから?代入する型の変数をどうしたら良いか?って話になるなるだけじゃん。
まだわかってないな・・・精度の問題なのか、値が扱うメモリの領域の大きさがどうなのか?
議論をはっきりしろよ、おめぇ騒ぐだけで相手を無理に否定しようとしているだけじゃん。
相手がどうだろうと、言語を作った人が決めたルールや仕様書があんだろが?
0424デフォルトの名無しさん
2006/06/19(月) 16:11:06それとコード中に出てくる数値リテラルなどのことは「直値」と言うな。
「リテラル」は対人コミュニケーションでは使わない。相手が理解できない場合があるからな。
自分が書く文章では使うが。
0425デフォルトの名無しさん
2006/06/19(月) 16:12:43ヒント:頭のおかしい人の相手はしないようにしましょう
0426デフォルトの名無しさん
2006/06/19(月) 16:13:33今はバグの話をしているのではないと俺は思っている。
暗黙の型変換によって385のBの2つの式は
同じ意味(結果の型・値、途中の計算過程など全てが等価)になると主張するだけだ。
0427デフォルトの名無しさん
2006/06/19(月) 16:15:24俺が気付いていないうちに242のcがdoubleかfloatかの違いの話になっていた?
今まで俺はずっと代入式の右辺の部分(385のB)についてだけ話していると思っていたよ。
0428デフォルトの名無しさん
2006/06/19(月) 16:16:22式1 : (double) (a+b)/2.0;
演算手順
1. a+b を演算
→a、b共にint型のためint型として演算
2. (a+b) の演算結果をdouble型にキャスト
3. [2の結果] / 2.0 を演算
→[2の結果]、2.0 共にdouble型のためdouble型として演算
式2 : (a+b)/2.0;
演算手順
1. a+b を演算
→a、b共にint型のためint型として演算
2. (a+b) の演算結果をdouble型にキャスト
→暗黙の型変換
3. [2の結果] / 2.0 を演算
→[2の結果]、2.0 共にdouble型のためdouble型として演算
君は「結果の値のみ」が等しいと言った。
しかし、C/C++の規格に沿って見ると、
手順も一緒であるが、どこがどう違うというのかね?
0429デフォルトの名無しさん
2006/06/19(月) 16:19:39それだと式2の暗黙の型変換が行われるタイミングが勘違いされそう。
double型の値で割られるからdouble型へ暗黙の型変換がなされるという風に読み取れない。
0430デフォルトの名無しさん
2006/06/19(月) 16:23:410431デフォルトの名無しさん
2006/06/19(月) 16:34:070432デフォルトの名無しさん
2006/06/19(月) 16:44:20このC++プログラムをVC++で動作させたいのですが、
ほうりこんで色々いじった結果(上の方を//で消したり・・・)
実行すると、
「入力データファイル名を指定してください。」
とだけ出るようになりました。
これはどうすればいいのでしょうか・・・。
0433デフォルトの名無しさん
2006/06/19(月) 17:38:490434デフォルトの名無しさん
2006/06/19(月) 17:41:50あのねぇ、まずはどんなソースをつくりたかったのか説明するべきだろ。
0435デフォルトの名無しさん
2006/06/19(月) 17:45:08適当にコピペしながらプロジェクトを作ったら、ちゃんとビルドできた。
引数としてファイル名が二つ必要みたいだったので、適当にファイルを作って動かしたら、
>***error ユニット番号が不適当(1 0 -858993460 -858993460)
と表示された。
で、何が聞きたいの?
0436デフォルトの名無しさん
2006/06/19(月) 17:47:490437デフォルトの名無しさん
2006/06/19(月) 17:50:57人それぞれ。
0438デフォルトの名無しさん
2006/06/19(月) 17:53:070439432
2006/06/19(月) 17:54:55申し訳ないです。
ttp://www.sist.ac.jp/~suganuma/cpp/3-bu/18-sho/18-sho.htm#e-18-4
このページのにあるニューラルネットワークの
「バックプロパゲーションアルゴリズム」というプログラムなのですが、
これをVC++6.0で正常に動作させたいです。
(学習させた出力を出したいです。)
0440435
2006/06/19(月) 18:00:08アルゴリズムが正しいかどうかの判断は出来ないが、動かして出力を見ることだけはできるから、
引数に与えるファイル1、ファイル2をコードと同じ場所にアップしてくれ。
0441デフォルトの名無しさん
2006/06/19(月) 18:07:13引っ込みがつかなくなった約一名の狂態はこれ以上ないくらいくっきり浮き彫りなんで、
もう相手しなくていいと思いますよ。
こんだけログが揃えば、約一名様がいくらそれっぽく勝利宣言しても誰も騙せないでしょうし。
0442435
2006/06/19(月) 18:16:38で、質問は?
[C:\temp\backpr\Debug] backpr data1.dat data2.dat
学習回数は? 5000
何回毎に収束を確認しますか? 500
学習パターンのファイル名は? learn.dat
回数 500 誤って認識したパターン数 4
回数 1000 誤って認識したパターン数 4
回数 1500 誤って認識したパターン数 4
回数 2000 誤って認識したパターン数 4
回数 2500 誤って認識したパターン数 3
回数 3000 誤って認識したパターン数 0
入力パターン 1 0.00 0.00
出力パターン(理想) 0.000
(実際) 0.087
入力パターン 2 0.00 1.00
出力パターン(理想) 1.000
(実際) 0.907
0443435
2006/06/19(月) 18:19:04内容はわからんが。
(略)
重み
to 1 from 2 10.767 3 -4.905 4 4.892
to 2 from 3 6.506 4 -6.819
バイアス 1 -2.615 2 -3.678
未学習パターンの認識を行いますか?(=1:行う,=0:行わない) 0
[C:\temp\backpr\Debug]
0444デフォルトの名無しさん
2006/06/19(月) 18:47:11メニューからプロジェクトの設定を選んで、デバッグタブに引数を書いてから実行する。
ファイルが見つからない場合は、ファイル名をフルパスで書くか、作業用のディレクトリに
ファイルがあるディレクトリ名を書く。
0445デフォルトの名無しさん
2006/06/19(月) 19:12:13リテラルと定数は意味が違うだろう・・・。
0446デフォルトの名無しさん
2006/06/19(月) 20:21:40http://dictionary.goo.ne.jp/search.php?MT=%A5%EA%A5%C6%A5%E9%A5%EB&search_history=%B2%CA%B3%D8&kind=jn&kwassist=0&mode=0
0447デフォルトの名無しさん
2006/06/19(月) 22:00:45Stroustrup: C++ Glossary
constant - literal, object or value declared const, or enumerator.
literal - notation for values of bool, character types, integer types,
or floating-point types. See also: enumerators.
TC++PL 4.2, 4.3.1, 4.4.1, 4.5.1, 5.2.2, D&E 11.2.1.
つまりリテラル⊆定数
0448デフォルトの名無しさん
2006/06/19(月) 22:09:210449デフォルトの名無しさん
2006/06/19(月) 22:13:51このスレは
【初心者歓迎】C/C++室 Ver.28【環境依存OK】
0450デフォルトの名無しさん
2006/06/19(月) 22:33:45C/C++室ってところがうまいよなぁw
0451デフォルトの名無しさん
2006/06/20(火) 00:29:290452デフォルトの名無しさん
2006/06/20(火) 00:35:49今度会社のコーディング規約で「//のコメント禁止」が入るらしい。
なぜかと聞くと「コメントの最後が日本語で「\」を含む場合継続行と見なされるから」
つまり下の例でb=2;が前の継続行と見なされてコメント扱いされてしまうからというのですが
本当でしょうか。
会社は組み込み系なのでCは今でも現役だし、コンパイラはCPUのメーカによって異なります。
VC++では大丈夫とかC99では採用済みとか以外の回答をお願いします。
例
int a,b;
a=1;//○○可能
b=2;
0453デフォルトの名無しさん
2006/06/20(火) 00:37:22全くの嘘ですが、波風立てたくないなら、おとなしく従いましょう
0454デフォルトの名無しさん
2006/06/20(火) 00:38:42組み込み系ならASCIIのみというコンパイラもあるだろう
そういう場合はヤバス
0455仕様書無しさん
2006/06/20(火) 00:44:14コンパイラが日本語(2バイトコード)を含むソースに対応していなくて、
ソースがシフトJISで書かれている場合に限定される話だろ。
今時、そんなラベルの低いコンパイラは捨ててしまえ。サポートもロクに
期待できないだろう。あるいは、そんなコーディングルールを決めるような
会社はさっさと辞めたほうがいいかも。バカは伝染るぞ。
0456デフォルトの名無しさん
2006/06/20(火) 00:44:52大学のLinux端末が少し前に更新されたがそれまではその問題があった。
結構有名な話なんで覚えておいても損はない。
0457デフォルトの名無しさん
2006/06/20(火) 00:45:43全くの嘘ではありませんが、万に一つくらいの可能性でマルチバイトに対応していないコンパイラがあるかも知れません。
それを禁止するなら文字列リテラルの直接表記を禁止するとかコメント閉じの前にスペースは必須とかもコーディング規約に入れるべきだと思います。
0458デフォルトの名無しさん
2006/06/20(火) 00:49:09まだザラにあるんじゃないか?
0459デフォルトの名無しさん
2006/06/20(火) 00:52:21組み込み系でマルチバイト文字を処理させるとは
考えにくいけどどうなんだろうね?教えれ>>452
0460デフォルトの名無しさん
2006/06/20(火) 00:54:30SJISでコメント入れたときの話だろ?
作成するプログラムでマルチバイト文字を扱うわけじゃない。
0462デフォルトの名無しさん
2006/06/20(火) 00:55:12#空白は拙いな。行末の空白を取り除く余計なお世話なエディタがあるし、毛嫌いする人もいる。
0463デフォルトの名無しさん
2006/06/20(火) 00:57:27ウィンドウのデザインを変更する事はできるのでしょうか?
よくフリーソフトでウィンドウのスキンを変更できるソフトあるじゃないですか。
私の場合はexeにした時点でウィンドウデザインを変更しておきたいのです。
ググっても載っていなかったので、
ご存知の方いらしゃいましたらアドバイスお願いします。
0464デフォルトの名無しさん
2006/06/20(火) 00:59:510465デフォルトの名無しさん
2006/06/20(火) 01:17:22「コンパイル時にウィンドウスタイルを変更したい」
だと語っている
0466デフォルトの名無しさん
2006/06/20(火) 01:18:13あ、不明確ですみませんorz
ビルドする前にコード打つ段階でウィンドウスタイルを変更する
コードが打てるのか、もしくはコンパイラのフォームデザインから
変更できるのか分からないのですが、ビルドしてexe形式にして
配布できる状態になった状態の時点でデザインの変更をしておきたいのです。
普通ウィンドウズですと、タイトルバーが青くてフォームがグレーじゃないですか。
それを画像を用意して張りかえるか、コードで変更できるのか、もしくはできないのか
分からないので、現在もググりながら書き込んでます。
0467デフォルトの名無しさん
2006/06/20(火) 01:19:20セイントktkr
0468デフォルトの名無しさん
2006/06/20(火) 01:23:35まぁそういう問題があるコンパイラなら、
a=1;/*○○可能*/
b=2;/*hoge*/
でもb=2はコメントアウトされてしまう(またはコンパイルエラー)から、気をつけとけ
0469デフォルトの名無しさん
2006/06/20(火) 01:42:48これでも見てマターリしろ
ttp://www.youtube.com/watch?v=P4mZlwuOg50
0470デフォルトの名無しさん
2006/06/20(火) 02:16:04ヒント: WM_NCHITTESTを処理せよ。
0471452
2006/06/20(火) 04:09:00ほとんど大丈夫だが、中には当てはまるコンパイラがあるかも知れないということですね。
コーディング規約に入れられたら反論できないわけですね。
0472デフォルトの名無しさん
2006/06/20(火) 08:22:53「その規約だと>468の問題もありますよね」って突っ込んでみると面白いかもしれない。
0473デフォルトの名無しさん
2006/06/20(火) 08:59:34行連結って行末の \ + 空白xn + 改行 でしか行われないような・・・
そもそもそんな構造のコンパイラがあったら"\"(0x5c)を含むコードが一切使えなくなる気が
0474デフォルトの名無しさん
2006/06/20(火) 11:25:11"能"の次の*がエスケープされて、"*/"というコメント終端文字列とはみなされず、
次の行の終わりの"*/"までをコメントとみなしてしまうおそれがある。
0475デフォルトの名無しさん
2006/06/20(火) 11:35:02って言うかそんなの気にするぐらいなら
コメント中の行連結文字を検出するツールでも
作った方がいい希ガス。
0476デフォルトの名無しさん
2006/06/20(火) 11:59:59/* */ のコメント中にエスケープなんか効かないよ。
0477デフォルトの名無しさん
2006/06/20(火) 12:03:53まあ、実在するかは(´・ω・`)知らんがな
0478デフォルトの名無しさん
2006/06/20(火) 12:10:44自由にしてたらコンパイラごとにソースの意味が変わっちゃうからダメだろ。
0479デフォルトの名無しさん
2006/06/20(火) 12:16:59/* */の中はエスケープは効かないが、//の後ろは効くという主張?
0480デフォルトの名無しさん
2006/06/20(火) 12:21:58改行のエスケープは規格で定められている。
0481デフォルトの名無しさん
2006/06/20(火) 12:25:03そういうプロジェクトいくつかあったよ
0482デフォルトの名無しさん
2006/06/20(火) 12:25:46それはコメント中もだっけ?
0483デフォルトの名無しさん
2006/06/20(火) 12:25:51#include <stdlib.h>
#include <time.h>
int myRand(int a)
{
return rand()%a+1;
}
int main(void)
{
srand( (unsigned)time(NULL) );
int a;
printf("整数を入力\n");
scanf("%d", &a);
printf("%d", myRand(a));
return 0;
}
このプログラムで、srand((unsigned)time(NULL));を書くとコンパイル時にエラーが出てしまうのですがなぜですか?
まったく原因が分かりません。
0484デフォルトの名無しさん
2006/06/20(火) 12:26:59コメント処理は翻訳段階3だからねー。
規格合致処理系なら
/\
*\
*\
/\
もコンパイルは通る。
0485デフォルトの名無しさん
2006/06/20(火) 12:27:39日本語に対応してないコンパイラ(Cygwin の gcc とか)
0486デフォルトの名無しさん
2006/06/20(火) 12:28:540487デフォルトの名無しさん
2006/06/20(火) 12:29:26エラーメッセージ嫁。
0488デフォルトの名無しさん
2006/06/20(火) 12:32:10Cでは、変数の宣言はブロックの先頭でなければならない。
関数呼び出しの後ろで宣言するな。
0489483
2006/06/20(火) 12:32:29です
0491デフォルトの名無しさん
2006/06/20(火) 12:42:43それは確かに。
でもそういうコンパイラを使うプロジェクトなら
それこそ日本語禁止にしないと駄目だよな。
0492デフォルトの名無しさん
2006/06/20(火) 12:50:54もう 3.4 になってるから、 -finput-charset 使えば問題なし。
0493デフォルトの名無しさん
2006/06/20(火) 14:17:43お、使えるんだ。
0494432
2006/06/20(火) 15:20:14おお、ありがとうございます!
それで、質問というのは
そのプログラムをVC++に入れてコンパイルしても、エラーが沢山出てしまって
動作してくれなくて困っています。
具体的にどういじって、どんなファイルを用意すれば良いのかなど、
ご教授してくれると有難いです・・・。
程度が低すぎて申し訳ない。
0495デフォルトの名無しさん
2006/06/20(火) 15:36:24もしかして、
サンプルのtxtファイル自体をVCに食わせようとしてる?
あと、単にエラー出たとか言われてもエスパーじゃないのでエラー内容は君にしかわからん
0496435
2006/06/20(火) 15:50:26ビルドしたプロジェクトをうpしといた。受信パスはsuganuma。
ttp://www.uploda.org/uporg421601.zip.html
普通、ひとつのクラスの実装はひとつのcppで行うので、そのようにファイルを作った。
誰かへの説明のためなどの理由で、ファイルを分割するひつようがあるなら、
このビルドできるプロジェクトをいじってね。
次に質問するときは、エラーメッセージをコピペすること。
0497435
2006/06/20(火) 15:57:42ttp://www.sist.ac.jp/~suganuma/cpp/3-bu/18-sho/18-sho.htm#e-18-4
にあるように、
実行可能ファイル名 制御データファイル名 構造データファイル名
で起動する。引数に与えるデータファイルは、そのページの赤字のところそのものが
入ったファイルを用意してやればいいよ。何してるのかさっぱりわからんけど。
0498435
2006/06/20(火) 16:04:220499デフォルトの名無しさん
2006/06/20(火) 21:50:36・
・
・
//抜けたい場所
・
・
・
}
whileやfor文ならbreakで抜けれますが、
returnを使わずに関数を途中で抜ける方法ってありますか?
0500デフォルトの名無しさん
2006/06/20(火) 21:52:440501デフォルトの名無しさん
2006/06/20(火) 21:54:27もしかして値を返さなくてもreturnできるですか?
0502デフォルトの名無しさん
2006/06/20(火) 21:54:58質問自体が矛盾している。
0503デフォルトの名無しさん
2006/06/20(火) 21:58:06何かつけないとダメと思ってました。ありがとうございます。
0504デフォルトの名無しさん
2006/06/20(火) 22:05:28それか、gotoやら例外で飛ぶこともできる。前者の濫用はやるべきではないが。
0505デフォルトの名無しさん
2006/06/20(火) 22:05:50たしかCだとvoid以外の関数でも戻り値をせずにreturnが使えるはずだから、
一応念のため言っておくけど、returnに戻り値を書かなくても済むのは、
戻り値の型がvoidである関数限定だと思っておきなさい。
0506デフォルトの名無しさん
2006/06/20(火) 22:06:02たまたまEAXレジスタに入ってたゴミが返るとかそんな感じなのかな。
今まで考えたこともなかった。
関数を途中で抜けて、しかも戻り値を使わないような場合って
ほとんどエラーが起こった状況だと思うんだけど、エラーが
起こったことがわかるように戻り値を返してやるのが親切かも。
0507デフォルトの名無しさん
2006/06/20(火) 22:24:250508504
2006/06/20(火) 22:28:45この場合setjmpとlongjmpを使う。
つっても例外使った方がいいと思うけど
0509デフォルトの名無しさん
2006/06/20(火) 22:37:46Cではたしか不定の値(ようするにごみ)が返ることになるんだったと思う。
(もしかしたら未定義だったかもしれない)
C++ではコンパイルエラー。
0510デフォルトの名無しさん
2006/06/21(水) 00:19:11実装依存なので、律儀に0を返すコンパイラもあります。
0511デフォルトの名無しさん
2006/06/21(水) 03:26:58メモリが節約できると思うのですが、そうすると他人に理解しにくいというか、
間違ってると思われるでしょうか?
0512デフォルトの名無しさん
2006/06/21(水) 03:42:30殆どメモリの節約にならないばかりか、最適化の妨げになるのでintで充分です。
0513デフォルトの名無しさん
2006/06/21(水) 14:48:12gettimeofday関数を使用して実行時間を計測したいのですが、
#include <sys/time.h> が見つかりません とエラーが出てgettimeofday関数を使用できません。
このファイルは普通どこにあるんでしょうか??
VisualStudio.NET2003使用。
0514デフォルトの名無しさん
2006/06/21(水) 14:55:230515デフォルトの名無しさん
2006/06/21(水) 15:40:40落ち着いてどんな質問がしたいのかもう一度考えて。
0516デフォルトの名無しさん
2006/06/21(水) 16:29:450517デフォルトの名無しさん
2006/06/21(水) 16:38:19まあ、VCのライブラリには無いようなので適当に<time.h>includeしてclock()使うとか
0518デフォルトの名無しさん
2006/06/21(水) 17:06:09(略)
準拠
SVr4, BSD 4.3
0519デフォルトの名無しさん
2006/06/21(水) 17:08:490520デフォルトの名無しさん
2006/06/21(水) 17:35:59実行時間の計測ならプロファイラ使え
0521432
2006/06/21(水) 17:44:32こんなにご丁寧に、親切教えて頂いて、
本当にありがとうございます!
アップして頂いたコードも落とさせて頂きました。
ビルドしたら、上手くいったのですが・・・
こんな事を聞くのも心苦しいのですが、
VC++で実行すると、***error 入力データファイルを指定してください。
と出ます。
435さんが教えてくださった通り、data1.dat、data2.datというファイルを作り、
中に制御データ、構造データを入れるところまではやったのですが
ここから起動する、というのがよく分からないです・・。
ここまで親切に教えてくださいましたし、あまり甘えるのもアレかと思うのですが
もし宜しければ、起動の方法を教えてください。
0522デフォルトの名無しさん
2006/06/21(水) 18:13:28そうじゃないなら、[Windowsキー]+Rで、cmdと入力して、exeがあるところまでcdしてから>>442
0523432
2006/06/21(水) 22:58:59出来ました!
ありがとうございました!
>>444さん、>>435さん
お世話になりました!
特に435さんは、とても丁寧ににして頂いてとても感謝しています。
素人の程度の低い質問に答えてくださり、
皆様本当にありがとうございました!
0524デフォルトの名無しさん
2006/06/21(水) 23:11:26まぁ全部の発言が俺なわけだが・・・。
なんにせよ、よかった。いろいろ頑張れよ。
0525デフォルトの名無しさん
2006/06/21(水) 23:35:09ワロタww
524親切だな
0526デフォルトの名無しさん
2006/06/22(木) 00:46:16STL の情報が網羅されている(出来れば)日本語のサイトが見たいのですが、
std::deque
std::list を使うか、 std::vector を使うかで迷っているのですが、
1. 二つのコンテナをつなげて一つのコンテナにする
2. 末尾に要素を追加
3. 先頭から要素を取り出して、削除する
4. 要素の数を取得する
という4つの操作しかしないのですが、std::listの方が速いですか?
0527速度が気になるなら試せばいい
2006/06/22(木) 00:47:23日本語でどうぞ。
つーか、文章は完結させましょう。
0528526
2006/06/22(木) 00:48:21書く内容を纏めている途中で送信してしまいました。
でも大体書きたいことは伝わったかなと思います。よろしくお願いします。
0529デフォルトの名無しさん
2006/06/22(木) 00:52:32短く言うと、std::dequeは大抵は お そ い と知っておいてくれ。
0530デフォルトの名無しさん
2006/06/22(木) 01:05:52ttp://www.wakhok.ac.jp/~sumi/index.html
>>529
どうも。とりあえず std::list でやってみたいと思います。
merge() もあるようですし。
0531デフォルトの名無しさん
2006/06/22(木) 01:48:200532笹井奈琴
2006/06/22(木) 03:14:41次のプログラムのコンパイルが通らない...
---ファイル:bigger.h
enum e_bigger_t { MEGUMI, HOSHINO, SAAYA };
---ファイル:momu.h
enum e_bigger_t;
void momu( e_bigger_t eb );
---ファイル:momu.cpp
#include "momu.h"
#include "bigger.h"
void momu( e_bigger_t eb ) {
// なんか処理
}
$ g++ momu.cpp
ってやると
momu.h:1: error: use of enum `e_bigger_t' without previous declaration
「e_bigger_tってなんだよ?」って...
つか、e_bigger_tは列挙体だよ、って、そこで教えてるのに...
0533デフォルトの名無しさん
2006/06/22(木) 03:23:490534デフォルトの名無しさん
2006/06/22(木) 03:43:09ギャグでやってるのかなw
0535デフォルトの名無しさん
2006/06/22(木) 03:50:450536デフォルトの名無しさん
2006/06/22(木) 03:57:30結論を言えば、ダメ。
enumは不完全型として認められていない。
0538デフォルトの名無しさん
2006/06/22(木) 11:09:030540デフォルトの名無しさん
2006/06/22(木) 11:34:47SGIの実装がlinearなだけ
ttp://www.sgi.com/tech/stl/FAQ.html
仕様では、constant timeのほうが良いとされているけど。
0541デフォルトの名無しさん
2006/06/22(木) 11:57:04ほんとだ。
でも constant と要求されてるわけじゃないから、 constant とも言い切れないな。
困った規格だ。
0542デフォルトの名無しさん
2006/06/22(木) 12:08:47public:
void f() const {}
void f() {}
};
定義がconstの有無だけのオーバーロード?関数はどうやって呼び出しを区別するのですか?
こういう定義をする意味もよく分かりません。
どういった場合に使われるのか良ければ教えてください。
0543デフォルトの名無しさん
2006/06/22(木) 12:27:22A a;
A const ca;
a.f(); // こっちは const 付いてない f()
ca.f(); // こっちは const 付いてる f()
コンテナの operator [] とか、オブジェクトの中身への参照を返すときに
戻り値の型にも const を使い分けてよく使われる。
0544デフォルトの名無しさん
2006/06/22(木) 12:57:24回答ありがとうございます。
0545デフォルトの名無しさん
2006/06/22(木) 14:01:34ここ2ヶ月そのことしか考えてません。
0546デフォルトの名無しさん
2006/06/22(木) 15:41:34ttp://www.catb.org/~esr/faqs/smart-questions.html
0547デフォルトの名無しさん
2006/06/22(木) 15:46:50確かthisにconstが付くんだっけ。typeidで表示されてみればいいか?
0548デフォルトの名無しさん
2006/06/22(木) 17:36:28#include <stdio.h>
#include <stdlib.h>
typedef union {
double a;
unsigned char b[8];
} D8;
double swap(D8 s) {
return (double)((s.b[0] << 56) |(s.b[1] << 48) |
(s.b[2] << 40) |(s.b[3] << 32) |
(s.b[4] << 24) |(s.b[5] << 16) |
(s.b[6] << 8) |(s.b[7]));
}
int main() {
D8 a;
int i;
a.a = 0.0;
a.a = swap(a);
printf("%g\n", a.a);
}
gcc ttt.c
ttt.c: In function
[minomura@mozart07 minomura]$ ttt.c:10: warning: left shift count width of type
ttt.c:11: warning: left shift count width of type
ttt.c:12: warning: left shift count width of type
ttt.c:13: warning: left shift count width of type
0549デフォルトの名無しさん
2006/06/22(木) 17:47:3056bit以上の整数型 (仮に T としよう)でキャストの後ビットシフトすれ
((T)s.b[0]) << 56
0550デフォルトの名無しさん
2006/06/22(木) 18:08:59むしろ、藻前が何をしたいのかがわからん。
0551デフォルトの名無しさん
2006/06/22(木) 20:19:58typedef union {
unsigned long long a;
unsigned char b[8];
} D8;
unsigned long long swap(D8 s) {
int i;
D8 tmp;
for(i=0;i<8;i++) tmp.b[i] = s.b[8-1-i];
return tmp.a;
}
0552デフォルトの名無しさん
2006/06/22(木) 22:13:45C言語のプログラミングをマスターするために来週から練習します。
プログラムを打つのは初心者です
C言語を覚えたら、javaなどやろうと考えています
OS:XP h
今後のことを考えて、お勧めの市販ソフト又はフリーソフトは何がいいんですか?
ご指導お願いします
0553デフォルトの名無しさん
2006/06/22(木) 22:19:53VC++ 2005 Express
0555デフォルトの名無しさん
2006/06/22(木) 23:02:52即レスありがとうございます
これはCとC++がやれるソフトでOKですか?
0556デフォルトの名無しさん
2006/06/22(木) 23:09:41そりゃ、CもC++もできるけど、高いよー。
プログラマでメシを食う覚悟があるならどうぞ。
単に趣味とか学校の単位のためとかならとりあえずタダのBorlandで。
0557デフォルトの名無しさん
2006/06/22(木) 23:11:55Expressは無料だろうが。
0558デフォルトの名無しさん
2006/06/22(木) 23:19:59アカデミックなら4800円。
MSの青田刈りもここまで来たかという感じがする。
0559デフォルトの名無しさん
2006/06/22(木) 23:25:520560デフォルトの名無しさん
2006/06/22(木) 23:30:45ありがとうございます
0561デフォルトの名無しさん
2006/06/23(金) 00:29:20で、そのログ出力の内容を外部からhookさせる方法やソフトはないでしょうか?
ログ出力機能を持った既存のアプリの変更は無しが嬉しいです。
ようするにログの内容を別窓で見たいのです。
0562デフォルトの名無しさん
2006/06/23(金) 00:49:55Visual C++ 2005 Express (簡単な)まとめサイト
ttp://www14.atwiki.jp/garyohosu/
0563デフォルトの名無しさん
2006/06/23(金) 00:53:25class TestBase {
public:
print() { std::cout << "TestBase" << std::endl; }
};
class TestSub : public TestBase {
public:
print() { std::cout << "TestSub" << std::endl;}
};
これで、TestBase* testBase = new TestSub; testBase->print() をすると、TestBaseが呼ばれます。
で、TestBaseのprintにvirtualをつけると、TestSubが呼ばれます。
この動きが良くわかりません。
わかりやすく教えてください。
0564デフォルトの名無しさん
2006/06/23(金) 00:58:44printがTestBase、TestSubのどちらが呼ばれるかは
printがvirtualでないとき静的に決まり、virtualだと動的に決まる。
つまりこの場合静的と言うと、ソースコード上testBaseの型がTestBaseだからTestBase::printが呼ばれるということ。
動的と言うのは、printを呼ぶときにTestBaseへのポインタから呼び出そうとも、
newして作られたのはTestSubだから、TestSub::printが呼ばれるということ。
0565デフォルトの名無しさん
2006/06/23(金) 00:59:23・TCHAR [](固定長) による文字列とその処理
・(STL)std::basic_string<TCHAR> による文字列とその処理
・(MFC)CString による文字列とその処理
について考えているのですが、
C++でも文字列変数にTCHAR[]が多いのはなぜでしょうか?
安全性の要求があってもbasic_stringなどでなくTCHAR[](固定長)を使うのは
なにか理由があるのでしょうか?
0566デフォルトの名無しさん
2006/06/23(金) 01:04:380567デフォルトの名無しさん
2006/06/23(金) 01:04:48WinAPIの引数がTCHARだからじゃない?
CStringはともかく、std::stringを使わない積極的理由は思いつかない。
0568デフォルトの名無しさん
2006/06/23(金) 01:10:29回答ありがとうございます。
静的か動的かということですか。
なれないと難しい動きですね。
ありがとうございました。
0569デフォルトの名無しさん
2006/06/23(金) 01:28:28デストラクタに virtualがついているのも同じ理由。
動的にデストラクタを呼び出す為。
覚えると何かと便利だ。
0570デフォルトの名無しさん
2006/06/23(金) 01:54:16TestBase*と宣言しているから、生成したのはTestSubでも
virtualをつけなければ、単純にTestBase::print() が呼ばれる。
virtualをつけても実はTestBaseのメソッドしかアクセスできない。
virtualの場合、TestBase内にTestBase::print() 関数への
ポインタ変数が作られる。
そして、TestSubで生成するとTestBase内のこのポインタに
TestSub::print() へのアドレスが格納される。
TestBase::
virtual print() ← 実は関数へのポインタ
print() ←TestBase::print() の実体 ↑
|
|
TestSub:: |
print() ←TestSub::print() の実体 ---+
TestSubの生成時にポインタをセット
0571デフォルトの名無しさん
2006/06/23(金) 07:56:09というか、そのコードというか考え方そのものがあまりよくない。
virtualを付ける/付けないで動きが違う理由は、上記の通りだけどね。
もう一度、継承する意味と多態性について勉強したほうがいいと思う。
0572デフォルトの名無しさん
2006/06/23(金) 07:57:49ベースクラスの関数を隠蔽してしまう(上書きしてしまう)ような関数定義は、あまりよくないってこと。
0573デフォルトの名無しさん
2006/06/23(金) 15:26:28それには漏れは全く同意しない。ケースバイケースですらなく、1%も。
0574デフォルトの名無しさん
2006/06/23(金) 15:30:06理由は?
0575デフォルトの名無しさん
2006/06/23(金) 15:38:01理由が(オブジェクト指向を知らない人が混乱すること以外)存在しないし、
ふつうにポリモするときにはこれは必須。
virtual をつけずに(誤って)隠ぺいしてしまうことの問題は、昔からある一般的な
シンボルの衝突の問題であって、派生だ基底だという問題ではないから。
これは単に「関数名はよく考えてつけよう」という話。
virtual をつけずに意図して隠ぺいするのはテンプレート等メンバのシグネチャレベル
でのインタフェイスを維持するときに便利だし。
「確かにこれは悪い」っていう例がこれらの利点を打ち消すほどたくさんあれば、
考えを変えるけど。
0576デフォルトの名無しさん
2006/06/23(金) 15:54:15まぁ考え方の違いなんだろうけど、言語的に便利な場面で意図的に隠蔽するような
関数定義をするのは全く問題ないけど、多態性という文脈で考えたときに、どちらが
呼ばれるか混乱するという意味で、俺は隠蔽するのは良くないと思う。
一般的なシンボルの衝突、と言ってしまえばその通りかもしれないけど、オブジェクトに
よって同一のメッセージ(という単語を出すと荒れるような気がするが)に対して異なる
振る舞いをするというのが多態性の基本的な考え方なので、そうクールに切り捨てて
いい問題とは思わない。
0577デフォルトの名無しさん
2006/06/23(金) 15:59:12#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 15
void get_randam(int block[N][N]){ int *p;for(p = &block[0][0]; p <= &block[N-1][N-1]; p++)*p = rand() % 2; }
void paint(int block[N][N], int x, int y){ if( x<0 || y<0 || x>=N || y>=N || block[y][x] != 0)return;
block[y][x] = 2; paint(block, x+1, y);paint(block, x-1, y);paint(block, x, y+1);paint(block, x, y-1); }
void make_ans(int block[N][N]){ int i; for(i = 0; i < N; i++){ paint(block, 0,i);paint(block, N-1,i);paint(block, i,0);paint(block, i,N-1);
} } int main(){int block[N][N], *p, i = 1;srand(time(NULL));get_randam(block);make_ans(block);for(p = &block[0][0]; p <= &block[N-1][N-1]; p++, i++){
switch(*p){case 0: printf(" 1"); break; case 1: printf(" *"); break; case 2: printf(" -"); break; default:printf(" E"); break;
}if(i % N == 0) putchar('\n'); } return 0;}
上のソースは、宿題レスでだいぶ前に俺が適当に問題提示してみた問題の答え(どなたかが答えたソースです)
-**-**
-*-*-*
*-****
**----
の*で囲まれてる所をすべて別の文字に埋めるっていう問題
で、問題出しただけで答えは自分自身わからなかったのですが
この答えのソース見てもどうやって、再帰つかって探索してるのかが
いったいどうやったらこういうのを思いつけるのかがわからないです。
センスもあるんでしょうが、パズルの解法とかの関連ページ見ても
わからずで。
どういう風に、再帰さして結果を出してるのか。
ヒントか、参考になるページとかあれば、どなたか教えてください。
0578576
2006/06/23(金) 16:00:48・printを多態する(俺造語)関数であると設計するなら、初めからvirtualを付けとけ
・printを多態しない関数であると設計するなら、継承したクラスではその関数名は使うな
(似たような処理をする関数を作りたければ、別の名前にしろ)
また別の側面から考えると、あるクラスライブラリを使うということを考えたときに、
「隠蔽された関数がいたるところに散らばっている」というライブラリの場合、
使いたいクラスの規定クラスまでさかのぼって、多態という文脈でその関数を
使ってよいかどうか調べなければならなくなるかもしれないというようなことも
起こりえる。
0579576
2006/06/23(金) 16:13:480580デフォルトの名無しさん
2006/06/23(金) 16:43:07まぁ昔はそうだったわけだけど、WTLなんかにあるようなテンプレートベースの
クラスライブラリだと virtual なしで関数シグネチャ一致でポリモするってのは
便利に使われてるわけで・・・
たとえば(単純すぎて有効性が示せてない例かもしれないけど)
template class<T> void Log(const T& o) { o.print(); }
なんてのを使いたいとき。
Java とか C# なら >>579 には賛成します。
0581576
2006/06/23(金) 16:52:46俺はただ「1%も同意しない」にひっかかってるだけなんだけど、その「便利な場合」以外においても
C++では>>576,>>578には全く同意できないということですか?
うーん、まぁそういう考えの人もいるってことはわかりました。(あなたにとっては俺のような奴が
いるってことがわかったんでしょうが)
0582576
2006/06/23(金) 17:01:30呼び出される文脈でどれが呼ばれるかが変わるいうことはありません。
こっちの方が自然だと思う。
0583デフォルトの名無しさん
2006/06/23(金) 17:12:56今のところ、標準規格においてstd::basic_stringは要素がメモリ上で連続している保障がないから、
APIにバッファとして渡せないという影響も大きいと思う。(読み取りだけなら勿論c_strがあるけどね)
その点CStringはGetBufferなど、如何にもAPIにバッファとして渡すことを考慮されている分便利。
ちなみにCString以外でWindows APIにバッファとして渡すのに使えるものとしては、
std::vector<TCHAR>とか(std::vectorは要素がメモリ上連続している保障がある)、
new[]してboost::scoped_array, shared_arrayとかがある。
0584デフォルトの名無しさん
2006/06/23(金) 17:38:17主義の違いでよいような気もするけれども、質問風の文章なので一応返事してみます。
CBase::print() // オブジェクトの内部状態を表示
CDerived::print() // オブジェクトの内部状態を表示
なんていう2つの関数は同じ名前でよいと(強く)思うわけです。
CBase::basePrint() // オブジェクトの内部状態を表示
CDerived::derivedPrint() // オブジェクトの内部状態を表示
とするのは馬鹿げてると(これまた強く)思うから。
でまぁ、virtual の有無で動作が変わるからポインタベースでのポリモに使えるか
どうかわからんってのは・・・ドキュメント化するしかないでしょうね。
関数名を変えておけば使えないことは明らかなのでウマー!ってのは・・・アリなのかなぁ。
デストラクタとかは関数名変えようがないわけだし・・・
0585576
2006/06/23(金) 17:52:59うーん、主義の違いとしか言えないということかな。
>なんていう2つの関数は同じ名前でよいと(強く)思うわけです。
全く同意。ただ俺の場合はCBase::print()をvirtualにします。
俺の主義では、CBaseもCDerivedもprintに反応するなら、CFoo : CBaseも、
CBar : CDerivedもprintに反応するのが自然だと本能的に思うわけです。
どうせ全部でprintに反応すると思っているのなら、CBase::print()をvirtualに
しとけって思うんですね。
つまり、親クラスがprintに反応するのに子クラスが反応しないのはOOに
反していると感じるわけです。
やっぱり、主義の違いってことかな・・・。
0586デフォルトの名無しさん
2006/06/23(金) 18:38:20馬鹿じゃないの?
0587デフォルトの名無しさん
2006/06/23(金) 20:01:58馬鹿じゃないの?どう考えても、メンバ関数の隠蔽は、最悪ケースバイケースでそれはオッケーてな感じだろ。
いちいちそんなことされた日にやコンテナ入れるのも迷うわい。可読性とユーザビリティが著しく阻害される。
つか、純粋仮想関数使え。あ、こりゃ仮想だからNGなのかw
0588デフォルトの名無しさん
2006/06/23(金) 20:02:19能無しが無理して割り込まなくていいですよ。
0589デフォルトの名無しさん
2006/06/23(金) 20:32:52ギャハハハハ
0590デフォルトの名無しさん
2006/06/23(金) 21:19:23>どうせ全部でprintに反応すると思っているのなら、CBase::print()をvirtualに
>しとけって思うんですね。
virtual にしなくても反応はするでしょう。ふつうに継承して。
virtual の有無での差はポインタ経由で呼び出すときの違いだけ。
>>587
なにか具体的な例あげて批判してくれるとわかりやすいんだけど。
っていうかみんななんでそんなに仮想関数好きなの?
漏れは純粋仮想関数以外はあんまり使わないけどなぁ。
0591デフォルトの名無しさん
2006/06/23(金) 22:06:00つまりC++の継承とポリモーフィズムの仕組みを真っ向から否定する、ということだね
0592デフォルトの名無しさん
2006/06/23(金) 22:14:430593576
2006/06/23(金) 22:32:28うーん、なんだかもっと話がかみ合わなくなってきた気がするので、これを
最後にします。
>virtual にしなくても反応はするでしょう。ふつうに継承して。
え?そういう話だったんですか?
もともとあるクラスツリーに属するクラスでは全てprintに反応するのだが、
それぞれで実装が違うけど、virtualはお勧めしないって話では?
なぜvirtualを付けることに1%も同意できないのか良く分からなくなって
きました。
とはいうものの、実はC++の場合、俺も将来を見越してvirtualを付けておく
というのは(オーバーライドされることを考えておくというのは)、ほんの少し
違和感があります。前述のRubyの例が自然だと考えてるわけで・・・。
ただひとつ言えることは、言語仕様的にvirtualを付ける/付けないでこの
ように振る舞いがかわるからこうしろ、ということではなく、多態性を使う
のであれば仮想関数にしておくのがC++の流儀である、という認識は
多分どのように説得されても変わることはないと思います。
ではでは。
0594576
2006/06/23(金) 22:35:190595デフォルトの名無しさん
2006/06/23(金) 22:40:21前のよりマシだけど
0596デフォルトの名無しさん
2006/06/23(金) 23:09:30利口な人間は己に欠落を見つけ次第黙々と勉強する。だから利口になる。
馬鹿はそこで間違った自分の正しさを延々と説いて回る。だから馬鹿。
0597デフォルトの名無しさん
2006/06/23(金) 23:10:55・どこまで理解できていて、何が理解できていないのか明確にせよ。
・デバッガを使ってどのような動作するのか調査する。
・printfなどを使って途中経過がわかるようにする。
、、and so on
0598デフォルトの名無しさん
2006/06/23(金) 23:12:55そんなことしか言えないお前らはもっと馬鹿だけどなpgr
0599デフォルトの名無しさん
2006/06/24(土) 00:03:380600デフォルトの名無しさん
2006/06/24(土) 00:04:280601デフォルトの名無しさん
2006/06/24(土) 00:31:470602デフォルトの名無しさん
2006/06/24(土) 00:35:480603デフォルトの名無しさん
2006/06/24(土) 00:37:500604デフォルトの名無しさん
2006/06/24(土) 02:14:57data[number] = a;
number++;
と書くのと、
data[number++] = a;
と書くのでは、では客観的にどっちのほうが良いでしょうか?
0605デフォルトの名無しさん
2006/06/24(土) 02:24:010606デフォルトの名無しさん
2006/06/24(土) 02:33:09客観的に理由を述べられるか?
0607デフォルトの名無しさん
2006/06/24(土) 02:37:000608デフォルトの名無しさん
2006/06/24(土) 02:37:17後者はnumberのインクリメントのためにdata[]のインデックスとして使いaを代入する冗長なコード。
0609デフォルトの名無しさん
2006/06/24(土) 02:40:45(プログラミング手法の好みって宗教と似てる所があるな)
0610デフォルトの名無しさん
2006/06/24(土) 02:42:38馬鹿ですか?
0611デフォルトの名無しさん
2006/06/24(土) 02:47:280612デフォルトの名無しさん
2006/06/24(土) 03:01:320613デフォルトの名無しさん
2006/06/24(土) 03:03:091.インクリメントだけする時、++i; と i++; のどっちがいい?
2.無限ループは、while(true) while(1) for(;;) ?
3.エラー処理へのgoto はOK?
4.関数の入口でチェックしてreturn はOK?
5.ステータスを返す時は、必ず戻り値で返した方が良い ?
6.正常値は 0 にすべき?
…まだまだありそうw
0614デフォルトの名無しさん
2006/06/24(土) 03:13:002.現代では関係ない。
3.gotoでなくthrowが正しい
4.ぜんぜんOK、それを排除するとthrowも書けない
6.Cのライブラリにそういう関数が多いから合わせたほうが良いでしょう。
0615デフォルトの名無しさん
2006/06/24(土) 03:18:48どっちを書いても処理の流れが同じなら、パッと見て把握しやすい
見やすい方を選べば良い。そしてその見やすいの基準は自分で良いんじゃね?
誰かにいちいちケチつけられても始まらないし
そもそも市販の本をいくつか見たことある人なら
そんな細かいことを気にしないんでは?
人それぞれだし、思想の自由まである国で生きていることを実感した方が良いよ?
0616デフォルトの名無しさん
2006/06/24(土) 03:25:04例外のないCの場合は?
0617デフォルトの名無しさん
2006/06/24(土) 03:27:38まあ、ソースを自分しか見ないのであれば。
0618デフォルトの名無しさん
2006/06/24(土) 03:30:32誰が見ても下手なコードは存在する
0619デフォルトの名無しさん
2006/06/24(土) 03:40:11自分の視野が狭く観点が甘いことに気づいた方が良いよ。
無理に相手を理解しない、自分を理解させない。
意見を押し付けない、気に入らない意見ならスルーすりゃ良い。
ただ、誰かが自分の気に入らないことを言っていると思う前に
言っていることが「事実」かどうかは自分で判別する能力を身に着けた方が良いよ。
所詮、他人の意見なんざそいつの価値観による判断でもあるんだろうし。
何も相手が自分が嫌いな食べ物を好き好んでいたって良いじゃん。
嫌うなら食べ物だけにして、食べる人まで嫌うこたぁ〜ないだろ?
0620デフォルトの名無しさん
2006/06/24(土) 04:14:390621デフォルトの名無しさん
2006/06/24(土) 04:33:33Cの黎明期に、実はCが環境依存というか
プロセッサ依存していた名残ですね。
0623デフォルトの名無しさん
2006/06/24(土) 04:36:21いったい何にあきれてるんだ?
このスレでは2.0問題以降、平和なもんだが。
0624デフォルトの名無しさん
2006/06/24(土) 05:12:060625デフォルトの名無しさん
2006/06/24(土) 05:58:150626デフォルトの名無しさん
2006/06/24(土) 09:52:306. WindowsのGetLastError()/HRESULTなどのように複数の意味を持たせる場合には、
逆に0を成功値にするというのもありだとは思う。
7. void func(int* num, size_t size);
或いは
template<typename RandomAccesIter>
void func(RandomAccesIterIter first, RandomAccesIterIter last);
あとRange版もあればなおよしか。
0627デフォルトの名無しさん
2006/06/24(土) 09:59:19┏┫┃┃┃ スレ違い雑談は┃┃┃┣┓
┃┃┃┃┣┓ ここまで.┏┫┃┃┃┃
┃ ┃┃┏━━━┓┃┃ ┃
┃スレ違い ┣┫ ・∀・ ┣┫ END ┃
┗━━━━┛┗┳━┳┛┗━━━━┛
┏┻┓┃
┏━┛ ┣┻┓
┗━━━┫ ┗━┓
┗━━━┛
0628デフォルトの名無しさん
2006/06/24(土) 12:43:330629デフォルトの名無しさん
2006/06/24(土) 13:43:040630デフォルトの名無しさん
2006/06/24(土) 13:55:08君、2ちゃんに向いてないと思うよ。
来なけりゃ腹も立たないし。
Yahooや@ITの掲示板がいいんじゃないかな。マナーいいらしいよ。
0631デフォルトの名無しさん
2006/06/24(土) 14:29:14a="test";
このソースコードに悪い点はありますか?
0632デフォルトの名無しさん
2006/06/24(土) 14:30:200633デフォルトの名無しさん
2006/06/24(土) 14:30:370635デフォルトの名無しさん
2006/06/24(土) 14:33:49char *a = "test";
0636デフォルトの名無しさん
2006/06/24(土) 14:34:170637デフォルトの名無しさん
2006/06/24(土) 14:34:23ないよ。
まぁ固定文字列を代入するのなら
char *a = "test";
って書けという奴はいるかもしれんがな。(俺もこう書く)
0638デフォルトの名無しさん
2006/06/24(土) 14:37:19君なんでそんなに必死なの?
君が振る話題って、手垢が付きまくったもので面白みに欠けるんだけど。
相手してほしけりゃ、もっとましなネタ振って下さいね。
0639631
2006/06/24(土) 14:38:12a="test1";
(aを表示)
a="test2";
(bを表示)
ではこんな使い方も、あながち間違いではないということでしょうか?
0640631
2006/06/24(土) 14:38:45char *a;
a="test1";
(aを表示)
a="test2";
(aを表示)
0641デフォルトの名無しさん
2006/06/24(土) 14:47:49全く問題ない。
(コードの最適化はできるだろうが)
0642デフォルトの名無しさん
2006/06/24(土) 14:48:400643631
2006/06/24(土) 14:52:080645デフォルトの名無しさん
2006/06/24(土) 14:56:23別にいいんじゃないの?気にせず続けなよ。
0646デフォルトの名無しさん
2006/06/24(土) 15:49:30括弧の中を詳しく。
>>640
間違いではないが、括弧の中が関数呼び出しなら
a = "test1";
disp(a);
ではなく
disp("test2");
の方が見通しはよさそうだね。
0647笹井奈琴
2006/06/24(土) 16:10:12const char* a;
a = "test1";
のほうが好ましいと思う。
0648デフォルトの名無しさん
2006/06/24(土) 16:12:020649デフォルトの名無しさん
2006/06/24(土) 16:12:240650デフォルトの名無しさん
2006/06/24(土) 16:17:140651デフォルトの名無しさん
2006/06/24(土) 16:19:140652デフォルトの名無しさん
2006/06/24(土) 16:25:560653デフォルトの名無しさん
2006/06/24(土) 16:54:27char ch[10] = "hoge";
return 謎2
}
int main() {
char str[10] = "test";
str = Hoge();
printf("%s",str);
return 0;
}
関数Hoge()で処理した ch の文字配列を
呼び出し元の str へ入れようとした時に
謎1・2はどんな風に書けばいいのでしょうか。
0654笹井奈琴
2006/06/24(土) 16:57:32void Hoge( char* forRet ) {
char ch[10] = "hoge";
strcpy( forRet, ch );
}
int main() {
char str[10] = "test";
Hoge( str );
printf("%s",str );
return 0;
}
0655笹井奈琴
2006/06/24(土) 17:00:52struct buf_wrap {
char buf[10];
}
struct buf_wrap Hoge() {
struct buf_wrap r;
strcpy( r.buf, "hoge" );
}
int main() {
struct buf_wrap l;
l = Hoge();
printf( "%s", l.buf );
}
スタックをたくさん消費するし、
そんなに簡潔な感じもしないのであんまりお薦めしない。
0657デフォルトの名無しさん
2006/06/24(土) 17:10:57についてわからないのですが、
宣言時に初期化せずにconstした場合、そのとき
aのメモリ位置に元から入っている未知のビットが
aの定数として固定されるのではなく、
後から代入が可能なのですか?
0658デフォルトの名無しさん
2006/06/24(土) 17:22:08const char *a;
と
char * const b;
の違い。
0659@゚ν゚)ニホンゴムズカスィネー ◆FIgVQJjZb6
2006/06/24(土) 17:23:530660デフォルトの名無しさん
2006/06/24(土) 17:31:08しかし画面を最大化するとツールバーが消えてしまいます。
ウィンドウのサイズが変更になったときの処理
WM_SIZE: SendMessage(hTool、TB_AUTOSIZE、0、0)
もして、ツールバーにメッセージをおくっているのですが直りません。
どうしたらいいですか?
0661デフォルトの名無しさん
2006/06/24(土) 18:01:01初心者にもいろいろあるし好みもあるから、一概にこれというのは決められない。
自分で試して使いやすいのを選べ。
0662デフォルトの名無しさん
2006/06/24(土) 18:10:44純粋仮想関数の存在意味がわかりません。
仮想関数でも十分な気がするんですが。
0663デフォルトの名無しさん
2006/06/24(土) 18:12:23・派生クラスにオーバーライドを強制できる
・純粋仮想関数があるクラスはインスタンス化できなくなる
0664デフォルトの名無しさん
2006/06/24(土) 18:27:16gccでコンパイルしたライブラリーはiccからリンクすることは
可能なのでしょうか?
よろしくお願いします。
0665デフォルトの名無しさん
2006/06/24(土) 19:04:20Windows版iccはリンカにMSのLink.exeを使うんじゃなかったかな。gccはどうだっけ?
Linux版はgccでコンパイルしたと思われるライブラリを使っているから大丈夫っぽい。
#但し、C++は無理。
0666デフォルトの名無しさん
2006/06/24(土) 19:21:07これはどういう意味なんでしょうか
0667デフォルトの名無しさん
2006/06/24(土) 19:21:20インターフェースのみのクラスを定義できる。
派生クラスにインターフェースを確実に継承させられる
(インターフェースの保証ができる)
0668デフォルトの名無しさん
2006/06/24(土) 19:28:060669デフォルトの名無しさん
2006/06/24(土) 19:33:15スマン 訂正サンクス。
0670デフォルトの名無しさん
2006/06/24(土) 19:34:45ゼロで除算が行われた。
0671デフォルトの名無しさん
2006/06/24(土) 19:35:33ありがとうございます
0672デフォルトの名無しさん
2006/06/24(土) 19:38:15というかそのまま書いてあるんだから読めよ
0673デフォルトの名無しさん
2006/06/24(土) 20:19:560674デフォルトの名無しさん
2006/06/24(土) 21:46:27int count=0;
int main(void){
while(1){
cout<<count;
}
}
これをコンパイルしようとすると
「E2015'count'とSTL::count(略)の区別が曖昧」ってエラーでて、
countを別の変数に変えると通るのはどうして?
0675デフォルトの名無しさん
2006/06/24(土) 21:56:25obsoleteなC++コンパイラは窓から投げ捨てろ。
0676デフォルトの名無しさん
2006/06/24(土) 22:01:57よくわかんないけどBCC6ってポンコツなのか
0677デフォルトの名無しさん
2006/06/24(土) 22:09:53だとしたらBCCって超絶ウンコだな
0678デフォルトの名無しさん
2006/06/24(土) 22:12:220679デフォルトの名無しさん
2006/06/24(土) 22:14:050680デフォルトの名無しさん
2006/06/24(土) 22:18:13BCCはもう5.8.2になってるから。5.6.4とかだろ?あれは失敗作と言われている。
STLportなんぞを無理に取り込もうとするからnamespace周りでバグだらけ。
5.8.2も良いとは言えないが、Dinkumwareなので上のようなエラーにはならない。
0681デフォルトの名無しさん
2006/06/24(土) 22:23:320682674=676
2006/06/24(土) 22:26:23ちょっと勘違いしてるかもしれない。
0683デフォルトの名無しさん
2006/06/24(土) 22:39:27ネットなプログラムを書こうとしてるんだけど、お互いが固定ではないIP
の場合、相手のIPを知る必要がありますよね。手動で相手のIPを入力する
のは手間だし、メッセのデータを使えると便利かなぁとか。
0684デフォルトの名無しさん
2006/06/24(土) 22:45:230685デフォルトの名無しさん
2006/06/24(土) 23:00:39// extern unsigned int *data; // srcにdata[0]が代入される
// extern unsigned int data[]; // 意図通りに動く
void hoge()
{
void *src, *dst;
src = data;
dst = malloc(1024);
memcpy(dst, src, 1024);
}
ポインタと配列で混乱中なんだけど誰か講釈してくれ
0686デフォルトの名無しさん
2006/06/24(土) 23:05:210687デフォルトの名無しさん
2006/06/24(土) 23:09:16ネタ?
0688デフォルトの名無しさん
2006/06/24(土) 23:27:120689デフォルトの名無しさん
2006/06/24(土) 23:31:01unsigned int dataについてもっとくやしく語ってください。
0690デフォルトの名無しさん
2006/06/24(土) 23:56:23for(i=0;i<100;i++){
fprintf(stderr, "%s\n", strerror(i));
}
こんなの実行してみて出力結果を眺めていたんですけど、
strerr(17);だと
vs2005 :Block device required
cygwin :Unknown error
でエラー内容が違っていたりします。
別にエラーとして出力される内容が違っているのは問題ないんですが、
c言語では、エラーが起きるかもしれない標準関数を実行し、エラーが
起きた場合のエラー定数ってマクロ定義されていないんでしょうか?
もしも、マクロ定義されている場合、どこを調べるといいんでしょうか?
0691デフォルトの名無しさん
2006/06/25(日) 00:06:12ほんとにcygwinでerrno=17がそのエラーか?
ってのは置いといて、<errno.h>を見ればわかる。もちろんerrno.hが何かを
インクルードしてたら、それも見るんだぞ。
cygwinの場合は、/usr/include/errno.hだ。
0693デフォルトの名無しさん
2006/06/25(日) 00:13:38ANSI-CではEDOMとERANGEが決まってる
それ以外はPOSIXとかX/OPENとかなんかでも決まりがある
はっきり言って統一されていないが、過去の互換性とかあるので仕方が無い
0694デフォルトの名無しさん
2006/06/25(日) 00:17:170695689
2006/06/25(日) 00:41:59んなら挙動は同じ。
src[0]でけでなくsrc[1]も見てみな。デバガでメモリを参照するといい。
>>686の言うとおりポインタを理解していないと思われる。
「配列はポインタのシンタックスシュガーなんだよ!」
こう語れるぐらい勉強してください。
0696デフォルトの名無しさん
2006/06/25(日) 00:56:47マクロ定義だけでも統一してくれればいいのに・・・
コンパイラ屋はマクロ定義をマクロ定義すればいいだけだからそんなに手間はかからないだろうに。
エラー処理は移植性を考慮できないじゃん。
0697デフォルトの名無しさん
2006/06/25(日) 01:10:53> 「配列はポインタのシンタックスシュガーなんだよ!」
それだとポインタがあれば配列が必要ないような言い方だが、
配列なしにはメモリ上で連続したオブジェクトの集合を表現できないよ。
0698デフォルトの名無しさん
2006/06/25(日) 01:19:380699660
2006/06/25(日) 01:23:540700デフォルトの名無しさん
2006/06/25(日) 01:29:300701デフォルトの名無しさん
2006/06/25(日) 01:33:490702685
2006/06/25(日) 02:08:50int data_ary[] = {1,2,3,4};
int data_ptr[] = {5,6,7,8};
-- xyz.c ---
extern int *data_ptr;
extern int data_ary[];
int *src;
int ary[] = {9,10,11,12};
src = ary; // こういう書き方が出来るので
src = data_ptr; // これもOKだと思ってた
src = data_ary; // こっちはOK
解決できました。
みなさんありがとうございました。
0703デフォルトの名無しさん
2006/06/25(日) 03:11:35複数の戻り値を返すには仮引数を使うところは分かったんですが…。
void func(int **array, int *number);
int main(void)
{
int *array, number;
func(&array, &number);
(処理...)
return 0;
}
void func(int **array, int *number)
{
int data[50], data_number;
(処理...)
*array = data;
*number = data_number;
}
配列を返したい時に、これでいいのかちょっと自信がありません。
コンパイラは通るので間違ってはいないと思うのですが、なにか改良点などあるでしょうか?
0704デフォルトの名無しさん
2006/06/25(日) 03:19:48初心者がよくやる間違い。
関数から抜けた時点ですでに開放されている領域(スタック上に確保された配列)を
ポイントしているので、領域内のデータは保証されない。
0705703
2006/06/25(日) 03:34:55ではint data[50]をstatic変数にするか、グローバル変数にすればよいってことですか?
static変数やグローバル変数を使わずに配列を戻り値としてとる方法は無いでしょうか。
0706デフォルトの名無しさん
2006/06/25(日) 03:44:230707デフォルトの名無しさん
2006/06/25(日) 03:49:58> あー…。
> ではint data[50]をstatic変数にするか、グローバル変数にすればよいってことですか?
そうです。
> static変数やグローバル変数を使わずに配列を戻り値としてとる方法は無いでしょうか。
ある。
0708デフォルトの名無しさん
2006/06/25(日) 10:55:02と斜め上の回答もしてみる
0709デフォルトの名無しさん
2006/06/25(日) 13:23:12引き渡したバッファにデータを設定したいなら中身をコピーせんと。
0710デフォルトの名無しさん
2006/06/25(日) 15:38:00検索しても個人のサイトゆか見つからず、そのようなサイトは一部の関数等の説明が省かれてしまっています。
MSDNには英語のものしか見つかりませんでした。
0711デフォルトの名無しさん
2006/06/25(日) 15:40:42読むだけなら、JISでいけるが。
ttp://www.jisc.go.jp/
0713デフォルトの名無しさん
2006/06/25(日) 15:57:06http://pc8.2ch.net/test/read.cgi/tech/1149427282/289-290n
0714デフォルトの名無しさん
2006/06/25(日) 16:12:42API一覧ならMSDNにも日本語でついてるよ
構造体とメッセージは英語だけど
0716デフォルトの名無しさん
2006/06/25(日) 19:48:000717デフォルトの名無しさん
2006/06/25(日) 20:02:50(*array)[0] = data[0];
(*array)[1] = data[1];
以下略
0718京大生www
2006/06/26(月) 19:37:34int compare (char *s1, char *s2) {
int i;
char new_s1[20];
for (i=0; i<20; i++) {
new_s1[20] = toupper(s1[i]);
}
return strcmp(new_s1, s2);
}
strcmpの進化版みたいのを作ったつもりですがうまく作動しません。
どこが間違っているのでしょうか?
ちなみにここで使います。見てのようにどうせ小文字しかないのでstrcmpで代用したらうまく動きました。
上のはどこが間違っているのでしょうか。
void search_record(word *eng, int current_num, char *search_string){
int i;
int count=0;
for (i=0; i<current_num; i++){
if(strcmp(eng[i].spelling, search_string)==0) {
printf("%s\n", eng[i].spelling);
count += 1;
}
}
printf("以上%d件がヒットしました", count);
}
0719スミたん ◆JnsvZNFyHU
2006/06/26(月) 19:54:41環境はbcc32です。
0720デフォルトの名無しさん
2006/06/26(月) 20:05:13おそらくforの中のこれ。
> new_s1[20] = toupper(s1[i]);
new_s1[i]だろ、きっと。
けど、そのcompareではs1に19文字以上の文字列を渡せない。
ループまわして1文字ずつ比較するようにしようよ、strcmp使わないで。
もっとも、英字の大小を区別せずに比較したいだけなら、
だいたいstricmpとかstrcmpiとかそういう名前の関数が
処理系独自に用意されていることが多い。
0721京大生www
2006/06/26(月) 20:10:11ちとやってエラーでたら報告する
0722京大生www
2006/06/26(月) 20:14:34しかし直したにも関わらず
compare("unko", "unko")で-32という意味不明な値を返してきた。
鬱になる、これさえ通せば終わりなのに・・・何が間違ってるんだぁ
0723京大生www
2006/06/26(月) 20:16:00そういう便利な関数があるとは知らなかったが、使っちゃダメなんだろうな〜あくまでも課題だから
0724デフォルトの名無しさん
2006/06/26(月) 20:16:330725デフォルトの名無しさん
2006/06/26(月) 20:20:37大文字小文字区別しないなら、引数の両方を統一してやらないと意味無いのでは?
0726京大生www
2006/06/26(月) 20:44:07かけられるワード(配列)は全部小文字なのですが、課題では例えそれが大文字であってもよいようにしろという意図が含まれています。
ああああああああああああああああ
toupperじゃなくてtolowerじゃねーか。やってみよ
0727京大生www
2006/06/26(月) 20:46:57全部解決、ありがとございますた!!!!
0728デフォルトの名無しさん
2006/06/26(月) 20:59:29魔美ちゃんありがとう!
0729デフォルトの名無しさん
2006/06/26(月) 21:38:59あーなるほど。亀レスですが、ありがとうございました。
0730デフォルトの名無しさん
2006/06/26(月) 22:33:590731デフォルトの名無しさん
2006/06/26(月) 23:32:530732デフォルトの名無しさん
2006/06/26(月) 23:40:590733デフォルトの名無しさん
2006/06/27(火) 00:56:13をみなさんはどのように考えていますか?
経験不足なのか、私にはいまいちわかりません。
0734デフォルトの名無しさん
2006/06/27(火) 01:00:27それだけだ。
0735デフォルトの名無しさん
2006/06/27(火) 01:00:27質問の意味がわかりません。
0736703
2006/06/27(火) 01:28:10>>703のコードのvoid funcを
void func(int **array, int *number)
{
int data[50], data_number, i;
(処理...)
for(i = 0, i < data_number; i++) {
(*array)[i] = data[i];
}
*number = data_number;
}
に変えたり、forの部分をmemcpy(*array, data, sizeof(data));とかにしてみましたが
うまくいきませんでした(コンパイラは通る)
どう修正すればいいのでしょうか…。
0737デフォルトの名無しさん
2006/06/27(火) 01:45:35それだけじゃエスパーしかわからんから、ソース丸ごとどっかに上げてみ。
0738デフォルトの名無しさん
2006/06/27(火) 01:50:07-void func(int **array, int *number)
+void func(int *array, int *number)
-(*array)[i] = data[i];
+array[i] = data[i];
0739738
2006/06/27(火) 01:54:04int配列へのポインタなら配列の先頭アドレスを渡せば
配列全体の変更ができる。
0740738
2006/06/27(火) 02:12:35int a[50];
int *b=a;
int cnt;
func(&b, &cnt);
>>738 なら
func(a, &cnt);
で呼び出せる。
0741703=736
2006/06/27(火) 02:39:47int main(void)
{
int *array_data, number;
func(array_data, &number);
(array_dataを表示する処理など...)
return 0;
}
void func(int *array, int *number)
{
int data[50], data_number, i;
(50個以下で入力したデータをdataに格納する処理など...)
//data_numberはdataに格納されてるデータの個数です
for(i = 0, i < data_number; i++) array[i] = data[i];
*number = data_number;
}
こうすると、値が割り当てられていないローカルな変数array_dataに対して参照が行われたとエラーがでます。
func(array_data, &number);の前にmallocするとか、あらかじめarray_data[50];とかって
領域を確保しておけばエラーはでないのですが、void func()内で得たデータ分だけの領域を
確保したいのです。
0742デフォルトの名無しさん
2006/06/27(火) 02:52:07それは無理だ。
必要領域の大きさを返す関数を先に呼ぶか、
充分な領域を用意するか、
可変長の構造を持つクラスのオブジェクトを渡すか
のどれかでないと。
0743742
2006/06/27(火) 03:07:12その方式でいけば、
#define NULL 0
int main(void)
{
int *array_data, number;
func(NULL,&number);
array = (int*)malloc(number*sizeof(int));
func(array_data, &number);
(array_dataを表示する処理など...)
free(array);
return 0;
}
void func(int *array, int *number)
{
int data[50], data_number, i;
(50個以下で入力したデータをdataに格納する処理など...)
//data_numberはdataに格納されてるデータの個数です
if(array !=NULL)
for(i = 0, i < data_number; i++) array[i] = data[i];
*number = data_number;
}
0744デフォルトの名無しさん
2006/06/27(火) 10:38:54func()を二度呼んでもコストが掛からない状況にしか使えないね。
>>741
エラー処理省略でこんな感じじゃね?
int main()
{
int ** array, number;
func(& array, & number);
...;
free(array);
return 0;
}
void func(int ** array, int * number)
{
int tNumber = 件数;
int * tArrray = malloc(sizeof(int) * tNumber);
for (int i = 0; i < 件数; ++i) {
tArray[i] = データ[i];
}
* array = tArray;
* number = tNumber;
}
まぁ、件数は戻り値でもいい気がするけどね。
0745デフォルトの名無しさん
2006/06/27(火) 18:40:16ウィンドウプロシージャ関数の先頭で構造体を宣言してウィンドウプロシージャ内で構造体内のデータをセットしたら動作がおかしくなります。なにが原因なのですか?
0746デフォルトの名無しさん
2006/06/27(火) 19:01:380747デフォルトの名無しさん
2006/06/27(火) 19:05:390748デフォルトの名無しさん
2006/06/27(火) 19:10:14inline int f(int i)
{
static const int a[] = {...};
return a[i];
}
という風に書いた場合,どういう風に展開されるのでしょう?
a[]は1つだけ確保されるのでしょうか?
0749デフォルトの名無しさん
2006/06/27(火) 19:34:38賢いコンパイラなら定数に展開するかも。たぶん
0750デフォルトの名無しさん
2006/06/27(火) 19:35:080751デフォルトの名無しさん
2006/06/27(火) 19:43:53それはさておき、inline関数はstatic inlineにする方が無難だと思うのだが。
0752745
2006/06/27(火) 20:06:15すいません説明不足でした
Aという構造体とCという構造体ををウィンドウプロシージャ内の先頭で宣言して、宣言直後にAとCの構造体
に、データをセットすると、Aはのデータは正常ですがCのデータだけがおかしくなるので
参照位置はあんまり関係なあいとおもいます
0753デフォルトの名無しさん
2006/06/27(火) 20:10:42その構造体の定義とウィンドウプロシージャを晒して味噌。
#十中八九、バッファオーバランだろうけど。
0754デフォルトの名無しさん
2006/06/27(火) 20:32:11fをstaticにすべきかはfがどこでどう使われているかに拠るだろ。
そんな一概に言えることか?
0755デフォルトの名無しさん
2006/06/27(火) 20:38:41コンパイル単位内にないとインライン展開できないから事実上、staticでもいいかもね。
0756デフォルトの名無しさん
2006/06/27(火) 20:49:37int main(void)
{
int i;
for(i=0; i < 100; i++) printf("%d\n", i);
return 0;
}
よりも、
int main(void)
{
int i = 0;
while(i < 100) printf("%d\n", i++);
return 0;
}
の方がやってることが少なくて良いように素人目では思えてしまうのですが…。
0757デフォルトの名無しさん
2006/06/27(火) 20:53:00がセットで記述できるので、書き忘れがない
といいな
0758デフォルトの名無しさん
2006/06/27(火) 20:59:10>751 >754 >755 さん
fはヘッダで定義してグローバルな関数として使っています。
参照回数が多いのでどのような扱いになっているのか気になり質問した次第です。
staticにすると何が起こるのでしょうか?
各ソース毎に関数が定義されてa[]が複数確保されそうな印象を受けるのですが
配列は1つだけになるのでしょうか?
( 実際のところ速度重視でサイズはあまり気にしていないのですけれども。)
元々は下の様な形になっていたのですがもし良い方法があればご教示ください。
if( i < a0) return 0;
if( i < a1) return 1;
:
if( i < a8) return 8;
else assert(0);
0759デフォルトの名無しさん
2006/06/27(火) 21:05:34for(i=0; i < 100; i++) ...
と書いてあればたいていの人が100回繰り返すことを一目で分かってくれるのでよいかもしれません。
c++では
for(int i=0; i<100; i++) ...
と書けるようになってループ変数のスコープがfor文の中だけでおさまるのが嬉しいこともあります。
0760デフォルトの名無しさん
2006/06/27(火) 21:06:26forなら宣言と初期化とインクリメントと判定が1セットだし、
iのスコープが限定されるのでわかりやすいです。
for(int i=0;i<100;++i)と書くのがセオリーです。
これであってる?
0761デフォルトの名無しさん
2006/06/27(火) 21:08:210762デフォルトの名無しさん
2006/06/27(火) 21:11:38適当にK&R読むとか
0763デフォルトの名無しさん
2006/06/27(火) 21:14:51この書き方って大丈夫なんだっけ?
0764デフォルトの名無しさん
2006/06/27(火) 21:22:540765デフォルトの名無しさん
2006/06/27(火) 21:33:200766デフォルトの名無しさん
2006/06/27(火) 22:17:50JIS仕様ってどこで手に入るか?
0767デフォルトの名無しさん
2006/06/27(火) 22:27:23ここで規格番号「X3010」で検索すれば見れる
スキャンしただけの画像だから見難いし検索も出来ないけど
0768756
2006/06/27(火) 22:41:01へえ、C++ではそういう機能があるんですか。まだCしか勉強していないので知りませんでした。
効率的な部分は良く分からないんですが、
>>756のような場合だとwhileよりforの方が見た目に分かりやすくて良いということですか。
0769デフォルトの名無しさん
2006/06/27(火) 22:49:250770デフォルトの名無しさん
2006/06/27(火) 22:56:39インデックス増やすだけとか単純な処理ならforのほうが良く使う
whileだとうっかりi++を書き忘れて「あれ、ばぐった」ということがよくある、すぐ気づくけど
0771デフォルトの名無しさん
2006/06/27(火) 23:09:530772デフォルトの名無しさん
2006/06/27(火) 23:26:510773デフォルトの名無しさん
2006/06/27(火) 23:28:01STLは怖くないよ。
0774デフォルトの名無しさん
2006/06/27(火) 23:31:570775デフォルトの名無しさん
2006/06/27(火) 23:42:05使うのはそれほど怖くないけど。
0776デフォルトの名無しさん
2006/06/27(火) 23:58:33逆にenable_ifは拍子抜けした。
0777デフォルトの名無しさん
2006/06/28(水) 01:02:570778デフォルトの名無しさん
2006/06/28(水) 01:04:21思いつかなかったら読んで勉強する
もちろん暇な時に限るけど
0779745
2006/06/28(水) 02:58:25LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ) //ウィンドウプロシージャ
{
TBBUTTONtbb[5];//ツールバーを表示させたい しかしこれが悪の元凶でプロシージャに持ってきただけで動かなくなる
//グローバル領域で宣言するとまともに表示されるが、プロシージャで宣言すると表示が無茶苦茶になる
INITCOMMONCONTROLSEXcc;
tbb[0].iBitmap = 0;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = BTNS_BUTTON;
tbb[1].iBitmap = 1;
tbb[1].fsState = TBSTATE_ENABLED;
tbb[1].fsStyle = BTNS_BUTTON;
tbb[2].iBitmap = 2;
tbb[2].fsState = TBSTATE_ENABLED;
tbb[2].fsStyle = BTNS_BUTTON;
tbb[3].iBitmap = STD_FILENEW;
tbb[3].fsState = TBSTATE_ENABLED;
tbb[3].fsStyle = BTNS_BUTTON;
tbb[4].iBitmap = STD_CUT;
tbb[4].fsState = TBSTATE_ENABLED;
tbb[4].fsStyle = BTNS_BUTTON;
staticHWNDhTool;
0780745
2006/06/28(水) 02:59:21switch ( msg ){
case WM_CREATE:
cc.dwSize = sizeof(INITCOMMONCONTROLSEX);
cc.dwICC = ICC_BAR_CLASSES;
InitCommonControlsEx(&cc);
hTool = CreateToolbarEx(hwnd, WS_CHILD | WS_VISIBLE , ID_TOOLBAR, 3 ,
hInst,
IDR_TOOLBAR1, tbb, 3, 0, 0, 0, 0,sizeof(TBBUTTON));
tb.hInst = HINST_COMMCTRL;
tb.nID = IDB_STD_SMALL_COLOR;
tb= SendMessage(hTool, TB_ADDBITMAP, 0, (LPARAM)&tb);
break;0
0781デフォルトの名無しさん
2006/06/28(水) 02:59:30= {0} で初期化してみ。
0782745
2006/06/28(水) 03:48:57TBBUTTONtbb[] = {
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
};
で初期化してデータをセットしなおすと表示できました!!ありがとうございます!!
でも、どうして全部0で初期化したら表示できるという発想がおもいついたのですか?
普通そんなこと思いつかないと思うんだけど・・・
0783デフォルトの名無しさん
2006/06/28(水) 03:50:33グローバルに置いた変数は = {0} と同じように初期化される。
関数ローカルに置いたときは初期化しないとゴミが入ってる。
0784745
2006/06/28(水) 04:34:58tbb[0].iBitmap = 0;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = BTNS_BUTTON;
のように書いたら、すでに初期化されていると思うのですがどうしていけないの?
0785デフォルトの名無しさん
2006/06/28(水) 04:53:29TBBUTTON には他にもメンバがあるだろ。
0786デフォルトの名無しさん
2006/06/28(水) 05:30:02のエラーになってしまいます。どうしてなのでしょうか。
static intで宣言した変数は、インスタンスを作成しなくても使えると思ったのですが。
gcc.exe (GCC) 3.4.2 (mingw-special)です。
#include <iostream>
class A{
static int x;
public:
static int get_x();
static void set_x(int m_x);
};
int A::get_x(){
return x;
}
void A::set_x(int m_x){
x=m_x;
}
int main(){
A::set_x(5);
std::cout << A::get_x() << std::endl;
}
0787745
2006/06/28(水) 05:49:30ええ?最初の4つの引数だけじゃなかったんですか?
今回は表示させるだけで2番目は必要ないし・・・
0788デフォルトの名無しさん
2006/06/28(水) 07:29:50クラスの静的変数は、クラスの宣言内で宣言するだけでなく、
どこかでint A::x;のように定義しないといけない。
ちょうど、グローバル変数をヘッダに宣言して、どこかで定義するのと同じ。
0789デフォルトの名無しさん
2006/06/28(水) 08:35:50API に渡して使ってるんだから、 API の中では使われるんだろ。
さっと Google で調べると bReserved は 0 固定にする必要があるらしい。
0790745
2006/06/28(水) 17:08:440791デフォルトの名無しさん
2006/06/28(水) 19:11:32C++のvectorは、JavaのVectorと違って、インスタンスをコピーして
登録するのでしょうか?
vector<string> vec;
vec.clear();
string foo = "ふー!";
vec.push_back(foo);
cout << (&vec[0] == &foo) << endl;
=> 0
こうして見ると、どうもアドレスは違うようで、コピーされているようです。
コピーされるという推測がが正しいとしたら、どうしたらコピーなしで
登録が出来るのでしょうか?
0792デフォルトの名無しさん
2006/06/28(水) 19:15:53ポインタを登録する
0793デフォルトの名無しさん
2006/06/28(水) 19:18:240794791
2006/06/28(水) 19:22:03vector<string*> vec2;
vec2.clear();
vec2.push_back(&foo);
cout << (*vec2[0] == foo) << endl;
=> 1
cout << (vec2[0] == &foo) << endl;
=> 1
cout << *vec2[0] << endl;
=> ふー!
確かに意図どおりに動きました。
しかし、vector#push_back()はconst <T>& を引数に取るので、
私はてっきり、渡したインスタンスがそのまま登録されると思っていました。
そのままか、コピーなのか、見分ける方法はないのでしょうか?
0795791
2006/06/28(水) 19:24:24各種コンテナにインスタンスを登録する場合、それがそのままなのか、コピーなのか、
コンテナやそのメソッドによって違うのでしょうか?
もし違うとしたら、どうやって見分ければ良いでしょうか?
0796デフォルトの名無しさん
2006/06/28(水) 19:24:47コンテナは基本的に全て値ベースのコピー。
引数が参照型なのは効率化のため。
0797791
2006/06/28(水) 19:27:26ありがとうございます。
すべてデフォルトでコピーとは驚きました。Javaとはまったく逆です。
巨大なオブジェクトを登録するときなど、気をつけなければいけませんね。
0798デフォルトの名無しさん
2006/06/28(水) 19:30:320800デフォルトの名無しさん
2006/06/28(水) 20:58:25な。なるほど・・・・。
たしかにそうじゃないとクラス宣言をincludeしたときにつじつまが
合わなくなってしまいますね・・・。ありがとうございました。
0801デフォルトの名無しさん
2006/06/28(水) 21:09:45(コンパイルオプション等で)どうしたら良いのでしょうか?
コンパイラーはiccです。
ほとんどCに馴染みがなく、非常に単純な質問で申し訳ないのですが、
どなたかよろしくお願いします。
0802デフォルトの名無しさん
2006/06/28(水) 21:31:16Windows, Linux, Unix, MacOS など殆どの OS でファイルは
単なるバイトストリームであって、エンディアンを持ちません。
0803デフォルトの名無しさん
2006/06/28(水) 21:48:52例として与えられているのは「クイックソートを再帰を使った場合と、ループで実装してしまう場合との速度差」
だとか「○○ソート(マイナーなヤツ)について調べる」とか、せいぜいそんなレベルです。
大体C言語はわかっている俺は他と差を付けたいのですが、研究テーマが思いつきません。
それが公に結果が明らかであるか否かなど問いません、なにかいいテーマないでしょうか?
0804デフォルトの名無しさん
2006/06/28(水) 21:50:02新しいソートアルゴリズムを開発する
0805デフォルトの名無しさん
2006/06/28(水) 21:53:15良いPCもってるなら、
SMTやマルチコア向けのparallel sortなんかどう?
並列度を増やした場合の性能向上度合いとか。
0806デフォルトの名無しさん
2006/06/28(水) 21:59:170808デフォルトの名無しさん
2006/06/28(水) 22:19:30出典は全部書けよ
【初心者歓迎】C/C++室 Ver.28【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1149815331/
0809デフォルトの名無しさん
2006/06/28(水) 22:36:04コンパイルオプションではないが
swab
使うとか
0810デフォルトの名無しさん
2006/06/28(水) 23:02:28ちなみにポインタ・参照ベースのコンテナが欲しければ、boost::ptr_vectorなんかがある。
0811笹井奈琴
2006/06/29(木) 03:14:31そのアルゴリズムがO(n)だったら、割と役に立つような気もする。
0812デフォルトの名無しさん
2006/06/29(木) 10:30:26なお、階乗計算において、いくつを超えるとオーバーフロー(桁あふれ)が発生するか、調べなさい。
この問題がわからないんだがだれかおしえてくれ
0813デフォルトの名無しさん
2006/06/29(木) 10:43:190814デフォルトの名無しさん
2006/06/29(木) 10:46:48さんすうを べんきょう しましょう
0815デフォルトの名無しさん
2006/06/29(木) 14:20:44そのやりかたを教えて下さい
0816デフォルトの名無しさん
2006/06/29(木) 14:41:170817デフォルトの名無しさん
2006/06/29(木) 15:17:58どこがC/C++の質問なのか?
0818デフォルトの名無しさん
2006/06/29(木) 16:48:59これの使い方がわからないのですが、どなたか教えてください。
0819デフォルトの名無しさん
2006/06/29(木) 17:06:36double d=10.5;
TextOut(HDC ,0 ,0 ,a
,wsprintf(a ,"d:%2.5f\n" ,d) );
このプログラムをC++.Netに入力しても表示されないのですが
どこが間違っているのでしょうか?
よろしくお願いします。
0821デフォルトの名無しさん
2006/06/29(木) 17:13:230822デフォルトの名無しさん
2006/06/29(木) 17:17:04C++.Netうごく環境ないから適当なこと書くけど、
分解してうまくいくならコンパイラが変なのでは?
0823デフォルトの名無しさん
2006/06/29(木) 17:19:05解説をよく見ろ。
0824819
2006/06/29(木) 17:39:22読みましたがわからないです。
どこが悪いのでしょうか?
0825デフォルトの名無しさん
2006/06/29(木) 18:06:28HDCとはcharやdoubleのような型であって変数そのものではない。
TextOutの最初の引数にはHDC型の変数か何かを渡す必要がある。
適切なHDCを得る関数も、MSDNには書いてある。
082680
2006/06/29(木) 18:23:16ってまじ?
0827デフォルトの名無しさん
2006/06/29(木) 18:26:24本当です。
0828819
2006/06/29(木) 18:27:04HDCのところは HDC hdc というように宣言してから、
GetDCを用いて行っていますので間違ってないと思います。
0829デフォルトの名無しさん
2006/06/29(木) 18:32:08#include<stdlib.h>
int charcmp(const void* a,const void* b){return *(const char*)a-*(const char*)b;}
int main(void){char tmp[100];int len;fgets(tmp,sizeof(tmp),stdin);len=strlen(tmp);
tmp[--len]='\0';qsort(tmp,len,sizeof(char),charcmp);
printf("%s\n",tmp);return 0;}
文字列をASCIIコード順に並び替えるプログラムなんですが、qsortっていうのがどこから出てくるのかわかりません。
教えて下さい
0830デフォルトの名無しさん
2006/06/29(木) 18:35:48質問の意味がよくわからないけど、stdlib.hで宣言されている、Cの標準ライブラリ関数、
と答えてみる。
0831デフォルトの名無しさん
2006/06/29(木) 18:36:080832デフォルトの名無しさん
2006/06/29(木) 18:36:180833デフォルトの名無しさん
2006/06/29(木) 18:38:09そういうことなんですね。ありがとうございます
このプログラムをポインタを使わないで書くことってできますか?
0834デフォルトの名無しさん
2006/06/29(木) 18:39:230835デフォルトの名無しさん
2006/06/29(木) 18:43:190836デフォルトの名無しさん
NGNG0837デフォルトの名無しさん
2006/06/29(木) 18:48:38断った奴がしゃしゃり出てきてレスすんなよ、黙ってろ
0838デフォルトの名無しさん
2006/06/29(木) 18:50:34変わらないですね。でもどっかでおかしくなるのかなとおもいました
0839デフォルトの名無しさん
NGNG変わらないように見えるなら今すぐ病院へGO!
0840デフォルトの名無しさん
2006/06/29(木) 19:14:48//A
while(1){
scanf("%d",&a);
printf("%d",a);
}
//B
WHILE
scanf("%d",&a);
printf("%d",a);
0841デフォルトの名無しさん
NGNG0842デフォルトの名無しさん
2006/06/29(木) 19:18:56a;
b;
c;
以下略
どこまでループするかどうやって判断するんだ
0843デフォルトの名無しさん
2006/06/29(木) 19:23:58ええー…。衝撃…。
0844デフォルトの名無しさん
2006/06/29(木) 19:27:09これまた随分と懐かしいネタだなぁ。
0845デフォルトの名無しさん
2006/06/29(木) 19:30:16当時ならわりと釣れたかもしれないなあ
0846デフォルトの名無しさん
2006/06/29(木) 19:36:31確かにそうですね、どうもありがとうございました
0847デフォルトの名無しさん
NGNG真相はこちら。
http://www.research.att.com/~bs/bs_faq.html#IEEE
0848デフォルトの名無しさん
2006/06/29(木) 20:29:22エラーの意味がわからんので教えてください。
class Hoge {
vector<HWND> hWnds;
・
・
・
VOID Hoge::EnumStart() {
EnumWindows(Hoge::EnumWindowProc, (LPARAM)this);
}
BOOL CALLBACK Hoge::EnumWindowProc(HWND hWnd, LPARAM lPram) {
Hoge* hoge = (Hoge*)((LPCREATESTRUCT)lParam)->lpCreateParams;
hoge->hWnds.push_back(hWnd);
}
push_backで落ちます
0849デフォルトの名無しさん
2006/06/29(木) 20:34:540850デフォルトの名無しさん
2006/06/29(木) 20:42:02Hoge* hoge = (Hoge*)lParam;
でなおった。
いみわからずやってた私があふぉでした。
0851デフォルトの名無しさん
2006/06/29(木) 21:25:41そこreinterpret_cast
0852デフォルトの名無しさん
2006/06/29(木) 21:39:080853デフォルトの名無しさん
2006/06/29(木) 23:07:59そもそもwsprintfではdoubleは扱えない。書式指定子の型指定子にfなんてないだろ。
0854デフォルトの名無しさん
2006/06/30(金) 00:16:330855デフォルトの名無しさん
2006/06/30(金) 00:36:31WinMain()でDialogBoxParam()でダイアログを表示し、OKボタンを押したら終了するプログラムを作りました。
ダイアログプロシージャでOKボタン押したらEndDialog()を呼ぶようにしたわけです。
WinMainはループ処理をしています。(SleepとかPeekMessageを使ってます)
さて質問なのですが、ダイアログを表示する前と表示後で、タスクマネージャで見ていると、
ハンドルが10個くらい増えます。
EndDialog()でダイアログを終了しても、このハンドルが減りません。
これってハンドルリークというやつだと思うのですが、このDialogBoxParam()で起動したダイアログの
ハンドルを解放するにはどうやるのでしょうか?
0856デフォルトの名無しさん
2006/06/30(金) 09:30:11あと、モーダルダイアログなのに、なんでループ処理してるの?
0857855
2006/06/30(金) 09:58:51ある日タスクマネージャでハンドル数をチェックしてたら、あるタイミングで10個くらい増えたのを発見。
そのタイミングがダイアログ表示とわかり、原因特定のため855のようなプログラムを組んだわけです。
ループにしてるのはループにしないとプログラムがすぐ終了して、もしのちのちハンドルが解放されてもわからないからです。
でも気にしなくてよかったんですね。
0858デフォルトの名無しさん
2006/07/01(土) 14:44:06MFCのCSocket以外でおいしいの教えて工口ぃ人
UDP/TCPの非同期処理がサポートされているやつを探しているんですが
Google先生でみつかるのは同期処理のやつヴぁっか。
0859デフォルトの名無しさん
2006/07/01(土) 14:49:440860デフォルトの名無しさん
2006/07/01(土) 14:53:160861デフォルトの名無しさん
2006/07/01(土) 14:58:290862デフォルトの名無しさん
2006/07/01(土) 18:17:11stlとboostは使う予定です。
0863デフォルトの名無しさん
2006/07/01(土) 18:19:260864デフォルトの名無しさん
2006/07/01(土) 18:35:51カプセル化を考えるなら、必要性をよく考えて自分で作ったほうがいいよ。
不要な setter, getter はカプセル化を破壊する。
0865デフォルトの名無しさん
2006/07/01(土) 18:39:570866デフォルトの名無しさん
2006/07/01(土) 19:31:52a[10][10]ってのがあるとしてa[10],[1]〜[10]までに同じ値を入れたい時はどう書けば良いでしょうか。。。?
0867デフォルトの名無しさん
2006/07/01(土) 19:35:320868デフォルトの名無しさん
2006/07/01(土) 19:38:44やっぱりforしかないですよね。ありがとうございます
0869デフォルトの名無しさん
2006/07/01(土) 19:44:06memset
0870デフォルトの名無しさん
2006/07/01(土) 19:46:070871デフォルトの名無しさん
2006/07/01(土) 19:47:35C++を使ってるなら
std::fill(&a[10][0], &a[10][10], 0x1234);
0872デフォルトの名無しさん
2006/07/01(土) 19:47:520873デフォルトの名無しさん
2006/07/01(土) 19:49:120874デフォルトの名無しさん
2006/07/01(土) 20:14:35#include <fstream>
using namespace std;
int main() {
fstream ifs("a.bmp", ios::binary | ios::in);
fstream ofs("a.bin", ios::binary | ios::out);
char c;
while ( ? ) {
ifs.get(c);
ofs.put(c);
}
return 0;
}
バイナリ型式でファイルをコピーしたいのですが、
この場合、ファイルの終端はどうやって検出するのでしょうか?
ifs.eof()は当然ダメでした
0875デフォルトの名無しさん
2006/07/01(土) 20:32:16get()してみないと、eof()かどうかは判らない。
0876デフォルトの名無しさん
2006/07/01(土) 20:40:23ifs.get(c);
ofs.put(c);
} while (!ifs.eof());
取り敢えず修正
eof()を使って終端判定すると
変なところでeof検出されたりしませんか?
0877デフォルトの名無しさん
2006/07/01(土) 20:47:56単にファイルをコピーしたいだけならOS依存にはなるが、
system("/bin/cp -p fromFile toFile");
でいいのではないかと。
#或いは"copy fromFile toFile"か。
0878デフォルトの名無しさん
2006/07/01(土) 21:04:48#include <fstream>
#include <iterator>
#include <algorithm>
using namespace std;
int main() {
fstream ifs("a.bmp", ios::binary | ios::in);
fstream ofs("a.bin", ios::binary | ios::out);
typedef istreambuf_iterator<char> i;
typedef ostreambuf_iterator<char> o;
copy(i(ifs),i(),o(ofs));
}
//while(ifs.get(c))とかいてもいいけどな
0879デフォルトの名無しさん
2006/07/01(土) 21:13:06int main()
{
std::ifstream ifs("a.bmp", std::ios::binary);
std::ofstream ofs("a.bin", std::ios::binary);
ofs << ifs.rdbuf();
}
0880デフォルトの名無しさん
2006/07/01(土) 21:40:09in function _WinMain@16
as.exe : fatal error LNK1120: 1 unresolved externals
コンパイルは通るんですが、上記のリンクエラーがでます。
どのライブラリをリンクしたらいいのか教えていただけませんか?
もしくは、それを調べる事ができるAPI関数のリファレンスのような物があれば教えて下さい。
コンパイラはVCTK2003とPsdkのx86用
OSはXPを使っています。
0881デフォルトの名無しさん
2006/07/01(土) 21:44:21エラーの最終行が変わってました。正しくは上記です。
0882880
2006/07/01(土) 21:48:00数時間彷徨って、書き込んだとたんにこれだあえちjせちぽうgsれlkじぇryぽ
お騒がせしましたー。
0883デフォルトの名無しさん
2006/07/01(土) 23:08:06{
{ 1, 2 },
{ 5, 7 },
{ 3, 3 },
{ 2, 4 },
};
こんな感じで構造体の配列を作ったとします。
stMyDataというアドレスだけを受け取って
構造体が何個含まれているか(上の例では4個)を
知る方法はありますか?
0884デフォルトの名無しさん
2006/07/01(土) 23:12:21ない
0885デフォルトの名無しさん
2006/07/01(土) 23:13:45sizeof(stMyData) / sizeof(MY_DATA) とかで
あらかじめ個数を調べておくしかないってことですね
0886デフォルトの名無しさん
2006/07/01(土) 23:15:27sizeof(stMyData)/sizeof(stMyData[0])
そうじゃないなら終端を表す特殊なデータをケツに置いておく
0887デフォルトの名無しさん
2006/07/01(土) 23:23:05x = pstMyData[3].nData1
y = pstMyData[3].nData2
と値を取ろうとしますが、うまくいきません (x=2、y=4になるはずなのに)
全然違う値が返ってきてしまいます。
理由を教えてもらえませんでしょうか?
0888デフォルトの名無しさん
2006/07/01(土) 23:27:560889デフォルトの名無しさん
2006/07/01(土) 23:32:46ソースをみないとわからんぽ
0890デフォルトの名無しさん
2006/07/02(日) 00:55:550891デフォルトの名無しさん
2006/07/02(日) 13:27:19俺にはお前が理解できないw
0892デフォルトの名無しさん
2006/07/02(日) 16:36:370893Microsoft Visual C++ Runtime Library
2006/07/02(日) 17:18:02Program: ...udio 2005\Projects\directxtest05\debug\directx05.exe
This application has requested the Runtime to terminate it in an unusal way.
Please contact the application's support team for more information.
VC2005 Express Editionでコンパイルしたらこんなのが出て終了します。なんで?
0894デフォルトの名無しさん
2006/07/02(日) 17:28:50○デバッグなしで開始 したら
デバッグ開始 すると意味分からないエラーが
directxtest05.exe の 0x7c81eb33 で初回の例外が発生しました: Microsoft C++ の例外: long (メモリの場所 0x0012fcb4)。
directxtest05.exe の 0x7c81eb33 でハンドルされていない例外が発生しました: Microsoft C++ の例外: long (メモリの場所 0x0012fcb4)。
ttp://uploader.system-witch.com/UpLoader/Itiran
file_id:621,pass:cpp
0895デフォルトの名無しさん
2006/07/02(日) 17:45:13fp = fopen(path, "r");
if (fp ==NULL) die("unko");
if (ferror(fp)) die("unko");
をC++でfstreamを使う場合で同じ動作をさせるにはどう書けばよいですか?
0896デフォルトの名無しさん
2006/07/02(日) 18:17:46デバッグしろってか。
せめて落ちる所を特定しろよ。
0897デフォルトの名無しさん
2006/07/02(日) 18:25:22std::ifstream fin(path);
if (!fin) throw std::runtime_error("die");
0898デフォルトの名無しさん
2006/07/02(日) 18:26:280899デフォルトの名無しさん
2006/07/02(日) 18:44:05catch(int errtype){
↓
catch(HRESULT errtype){
というかこんなキモイ例外の使い方するな、普通に返り値で分岐すればいいだろ
0900デフォルトの名無しさん
2006/07/02(日) 18:53:39作り方がわからないのでまず試しにhtml文書で試しにしてみました。
<html>
<head>
<title>■ 書き込み確認 ■</title>
<META http-equiv="Content-Type" content="text/html; charset=x-sjis">
</head>
<body>
<form method=POST action="http://pc8.2ch.net/test/bbs.cgi">
<input type=hidden name=subject value="">
<input TYPE=hidden NAME=FROM value="">
<input TYPE=hidden NAME=mail value="sage">
<input type=hidden name=MESSAGE value="試しです">
<input type=hidden name=bbs value=tech>
<input type=hidden name=time value=1151831869>
<input type=hidden name=key value=1149815331>
<input type=hidden name="hana" value="mogera">
<br>
<input type=submit value="上記全てを承諾して書き込む" name="submit">
<br>
</form>
</body>
</html>
ですが「ERROR:referer情報が変です。(ref1) 」となりました。
ですので調べたらIPアドレスとかの情報がいるとか・・・。
どなたか作り方教えてもらえないでしょうか?
0901800
2006/07/02(日) 18:57:53勝手にそういった情報が送られるのかな?
0902デフォルトの名無しさん
2006/07/02(日) 19:22:080903デフォルトの名無しさん
2006/07/02(日) 20:09:53あと自鯖でやれ、迷惑かけるな
0904デフォルトの名無しさん
2006/07/02(日) 21:25:390905デフォルトの名無しさん
2006/07/02(日) 21:26:510906904
2006/07/02(日) 21:51:50VC2005で実際やってみたのですがどうもうまくいかないorz
「MSにエラー送信しますか」のダイアログがでます。
で、いろいろ試行錯誤してみたのですが
printf( "%d", (char*)0x00001234 );
で通すと"1234"と出力されました。
printf( "%d", *(char*)0x00001234 );
でやるとエラー送信のダイアログがでます。
フォーマットの指定が変なんでしょうか?
0907デフォルトの名無しさん
2006/07/02(日) 21:54:400908デフォルトの名無しさん
2006/07/02(日) 22:06:30アンタはアタイの触れちゃいけないもんに触れちまったのさ
0909デフォルトの名無しさん
2006/07/02(日) 22:18:54そのアドレスを読むことが認められていないのでしょう。
0910デフォルトの名無しさん
2006/07/02(日) 23:26:430911デフォルトの名無しさん
2006/07/02(日) 23:28:48WindowsはまともなOSだから、そう直接的に好き勝手な場所のメモリを読み書きその他することはできない。
0912904
2006/07/02(日) 23:36:550913デフォルトの名無しさん
2006/07/02(日) 23:41:51そもそも任意のメモリが読めたとして、一体それをどうしたいんだ?
0914904
2006/07/02(日) 23:54:450915デフォルトの名無しさん
2006/07/02(日) 23:55:45ところで物理アドレスなのかね?それとも論理アドレス?
0916デフォルトの名無しさん
2006/07/02(日) 23:56:31それは他プロセスのアドレス空間の話だろ。
ReadProcessMemory()を使え。
0917デフォルトの名無しさん
2006/07/03(月) 00:00:04致命的に知識不足。
お前には無理だ、あきらめろ。
0918デフォルトの名無しさん
2006/07/03(月) 00:07:56短絡的に無理と判断するのはこれまたゆとり教育の弊害か。
0919デフォルトの名無しさん
2006/07/03(月) 00:11:40「埋める」の主語はなんだ?俺たちが埋めてやるとでも?
0920デフォルトの名無しさん
2006/07/03(月) 00:14:350921デフォルトの名無しさん
2006/07/03(月) 00:21:310922デフォルトの名無しさん
2006/07/03(月) 02:22:430923デフォルトの名無しさん
2006/07/03(月) 04:00:16if ((fp = fopen("my.dat", "r")) == NULL) {
/* エラー処理 */
}
等のようにしてエラー処理をすると思うんですが、fgetsもエラー処理はした方が良いでしょうか?
0924デフォルトの名無しさん
2006/07/03(月) 05:14:55どっちか不安なら、しといたほうがいい。
0925デフォルトの名無しさん
2006/07/03(月) 10:24:58ANSI C++で
#include <stdlib.h>
#include <iostream.h>
#include <list.h>
class Guardian
{
class Child
{
public:
int a;
double b;
list<Gurdian*> gurdian;
};
Child *child;
};
の様にクラスの中でそのクラスのメンバを持った
クラスを宣言することはできないのでしょうか?
0926デフォルトの名無しさん
2006/07/03(月) 10:29:58#include <list.h> → #include <list>
list<Gurdian*> gurdian; → std::list<Guardian*> gurdian;
~~~~~~~~~
0927デフォルトの名無しさん
2006/07/03(月) 10:32:27class Hoge{
Moge moge;
};
class Moge{
};
int main(){
return 0;
}
↑のようなコードを書いてコンパイルしたところ、
「'Hoge::moge' が 未定義の class 'Moge' で使用しています」(VC8)
「未定義の構造体 'Moge'」(BCC5.5)
「field `moge' has incomplete type」(GCC)
のようなエラーを吐かれます。
また、
- Moge moge;
+ Moge* pMoge;
のように変更を加えたところ、何事もないようにコンパイルされます。
この違いはいったい何なのでしょうか。
0928デフォルトの名無しさん
2006/07/03(月) 10:40:550929デフォルトの名無しさん
2006/07/03(月) 10:59:41コンパイラはソースを上から順に読んでいく。これがヒント。
0930927
2006/07/03(月) 11:11:59(ポインタの宣言ならそのクラスの宣言だけでよい)
という解釈でよろしいでしょうか。
とりあえず、おとなしく分割コンパイルをすることにします。
0931デフォルトの名無しさん
2006/07/03(月) 18:24:04gif_lib.h と
png.h
をインクルードしてるんですが
これらのヘッダのあるライブラリの名称ってなんですか?
0932デフォルトの名無しさん
2006/07/03(月) 19:12:32giflib
libpng
0933デフォルトの名無しさん
2006/07/03(月) 20:53:16コピーコンストラクタの場合 :
class Test
{
public :
fstream fs;
Test() { }
Test( const Test &test )
{
fs = test.fs;
}
};
関数で受け渡しする場合 :
void test( fstream fs )
{
}
int main()
{
fstream fs;
test( fs );
return 0;
}
error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : private メンバ (クラス 'std::basic_ios<_Elem,_Traits>' で宣言されている) にアクセスできません。
環境はWindowsのVC8です。
どちらかの場合の解決法がわかれば、問題は解決できるんですが、どなたかわかりますか?
0934デフォルトの名無しさん
2006/07/03(月) 21:06:02ポインタを保持する
0935デフォルトの名無しさん
2006/07/03(月) 21:10:16参照で渡す or ポインタで渡す のどちらかで
0936デフォルトの名無しさん
2006/07/03(月) 21:26:38-935回答ありがとうございます。
ポインタで渡すしかないということは、クラスのコピーコンストラクタを使う方法は使えないということでいいですか?
test( fstream &fs )
{
}
int main()
{
fstream fs;
test(fs);
return 0;
}
では、動作することを確認しました。
ありがとうございます。
0937デフォルトの名無しさん
2006/07/04(火) 11:54:16演算子の優先順位に関して、Cのスレで質問したのですが、
C++とちょっと様子が違うようなので、こちらで聞かせてください。
3項演算子と、代入、カンマ演算子を括弧無しで書いたときの
動作についてです。
a , b ? c , d : e , f;
は
a , (b ? (c , d) : e) , f;
と同じでしょうか?
あと、
a = b ? c = d : e = f;
は
a = (b ? (c = d) : (e = f));
ですか?
優先順位を素直に解釈すれば
a = (b ? (c = d) : e) = f;
こうなるようなアドバイスはあったのですが、現実には上に書いたような
解釈をされるようです。
続きます…
0938デフォルトの名無しさん
2006/07/04(火) 12:31:31括弧を省略したくなる病になる可能性があるから、
そういう分かりにくいものは必ず括弧をつけるように。
あと、C だと a = (b ? (c = d) : e) = f; と解釈されるけど、
C++ だと確かに a = (b ? (c = d) : (e = f)); と解釈されるようだ。
つまり、e = f の付近は括弧をつけないと
移植性が低いよということなんだろうが、
何でこういう違いが出るのかは分からんな。
0939デフォルトの名無しさん
2006/07/04(火) 13:38:49すみません、続きを書くのを忘れてしまったようです。
仰るようにプログラムするときは括弧を書くべきですが、
コンパイラの動きの内部をちょっと勉強していて、
どうもC++の3項演算子のコロン以降が特殊処理されている
ような感触を受けたので質問させていただきました。
なら、カンマ演算子の場合も
a , b ? c , d : e , f;
は
a , (b ? (c , d) : (e , f));
こうなるのでしょうか?
0940デフォルトの名無しさん
2006/07/04(火) 15:21:05if else if 同様に以下のような書き方ができると
覚えておけば忘れないと思います。
weight = (sex == male) ? 65 :
(sex == female) ? 55 :
105;
0941デフォルトの名無しさん
2006/07/04(火) 16:08:103項演算子の連続ではなくて、カンマ演算子や代入演算子との兼ね合いで
首をひねっているのです。
0942デフォルトの名無しさん
2006/07/04(火) 16:43:55iostreamはコピー禁止
0943デフォルトの名無しさん
2006/07/04(火) 16:49:15> 現実には上に書いたような解釈をされるようです。
バグやろ。コンパイラ晒せ。
0944デフォルトの名無しさん
2006/07/04(火) 16:58:43VC++ 6らしい。
http://pc8.2ch.net/test/read.cgi/tech/1146700389/664n
俺はVC++ 7.1, 8で試したが直っているみたい。
#include <iostream>
int main()
{
using namespace std;
int a, b, c = 2, d = 3, e = 4, f = 6;
cin >> b;
a = b ? c = d : e = f;
cout << a << ' ' << b << ' ' << c
<< ' ' << d << ' ' << e << ' ' << f << endl;
}
1を入力すると「3 1 3 3 4 6」と出力され、0を入力すると「6 0 2 3 6 6」が出力される。
g++でも当然そうなった。
0945デフォルトの名無しさん
2006/07/04(火) 17:02:540946デフォルトの名無しさん
2006/07/04(火) 17:05:40使えるものを適切に使うところから始めた方が良いよ。
原理を理解していないから結果が分からんのだし。
0947デフォルトの名無しさん
2006/07/04(火) 17:36:20括弧をつけるのがおすすめ、
0948デフォルトの名無しさん
2006/07/04(火) 18:09:27「それができたら領域破壊をする可能性があるためできないんじゃないだろうか」と答えたのですが、
憶測のため間違った知識を与えてしまったかもしれません。
実際のところ、配列のアドレスを書き換える事はできるのでしょうか?
0949デフォルトの名無しさん
2006/07/04(火) 18:12:56a のあるアドレスをあとから変更できるかってことか?
無理だろ。
int b; の b のアドレスを後から変更できないのと同じ。
それとも、違う意味か?
0950デフォルトの名無しさん
2006/07/04(火) 19:08:10VC6でもそうなります。なので、C++流は
a = b ? c = d : e = f;
は
a = (b ? (c = d) : (e = f));
なのでしょう。
この辺がC言語から変わった経緯とか知ってる人いませんか?
D&Eにはそれに触れてるところはなかったかなあ…。
あと、括弧をつけるのは別の話で。実務ではそうしてますから。
>>944さんへ。カンマ演算子に関してはご存知ないですか?
a , b ? c , d : e , f;
は
a , (b ? (c , d) : e) , f; こう?
VC6ではこれっぽかった。代入演算子の場合と括弧の結びつきが違うのは、
代入は右から評価されるってのが影響してるのかな。
0951デフォルトの名無しさん
2006/07/04(火) 19:14:280952デフォルトの名無しさん
2006/07/04(火) 19:23:00実行した限りでは、a , (b ? (c , d) : e) , f だな。
これはごく普通の挙動だ。
= だとなぜ C と C++ で変わるんだろうか?
ああ、俺のコンパイラは gcc/g++ 3.4.4 ね。
0953944
2006/07/04(火) 19:25:41ああ、ごめん。
自分が試したコンパイラ=正しい、VC6=間違いと思い込んでしまっていた。
ところで規格をあたってみたら、たしかにCとC++ではその定義が異なっている。
X3010ではこう。(PDF P69-70)
6.5.15 条件演算子
条件式:
論理OR式
論理OR式 ? 式 : 条件式
ところがX3014ではこうなっている。(PDF P73-74)
5.16 二択条件演算子
二択条件式:
論理和式
論理和式 ? 式 : 代入式
X3014の付随書C(Cとの非互換の機能の説明がある)にも何も書かれていない。
0954デフォルトの名無しさん
2006/07/04(火) 20:02:25初めてわかった気がした。
0955デフォルトの名無しさん
2006/07/04(火) 21:03:540956デフォルトの名無しさん
2006/07/05(水) 02:45:45三項演算子の右項で普通代入式なんか書かねーよw
0957デフォルトの名無しさん
2006/07/05(水) 02:48:22なるほど。
C++ だと ? : の仕様として、
最右項に代入式があったら括弧なくても通るようになってんのか。
こんな仕様変更、始めて知ったな。
0958デフォルトの名無しさん
2006/07/05(水) 10:41:32結合なので、括弧なしで結合するのが正しい構文解析だと思うのだが、
# ちなみにカンマは左からの結合
0959デフォルトの名無しさん
2006/07/05(水) 11:15:270960デフォルトの名無しさん
NGNGVC7でやってみた。
コンパイルは通るが、実質的にno effect。
int main(void)
int x=10, y=20, z;
char tmp[100];fgets(tmp,sizeof(tmp),stdin);z=atoi(tmp);
z&1?x:y = 0; //←no effect?
printf("x=%d,y=%d,z=%d\n",x,y,z);
return 0;
}
当然の事ながら、こうしたら期待した結果を得られた。
*(&(z&1?x:y)) = 0;
0961デフォルトの名無しさん
2006/07/05(水) 14:09:48それだと第3項が代入になるんじゃない?
0962デフォルトの名無しさん
2006/07/05(水) 14:12:43括弧足りないし
(z&1?x:y) = 0 がやりたいことじゃないの
>>959
出来ない。
>>953はC++で可能になったことが追加されているわけでしょ。
だから非互換ではない。あくまで追加。
0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
2006/07/05(水) 15:38:38機能からこれが気になってしょうがない。
ネタじゃなかったらC++を窓から放り投げるぞ。
コンパイラだけは使うけど…
0965デフォルトの名無しさん
2006/07/05(水) 15:53:55>847
0966デフォルトの名無しさん
2006/07/05(水) 16:01:19ガセであることがすぐわかってつまらない。
0967デフォルトの名無しさん
2006/07/05(水) 16:08:07例えば開発期間が長くなるとかetc
0968デフォルトの名無しさん
2006/07/05(水) 16:10:320969デフォルトの名無しさん
2006/07/05(水) 16:13:040970デフォルトの名無しさん
NGNG0971デフォルトの名無しさん
2006/07/05(水) 17:12:42結合規則は優先順位が同じもの同士じゃないと意味がないのでは・・・。
0972デフォルトの名無しさん
2006/07/05(水) 19:51:21機構を実現したいのですがどうしたらいいのでしょうか?
やはりwhileで変数を見張り続けるしかないのでしょうか?
わかりづらい質問ですが、どなたかわかる方がいらっしゃったら教えていただけ
ないでしょうか?
0973デフォルトの名無しさん
2006/07/05(水) 20:11:54> 開発期間が長くなる
教科書的な回答をするとしたら、
「それはC++に熟練していない人間が関わるからだ。」
0974デフォルトの名無しさん
2006/07/05(水) 20:38:19pthread_wait とかあった気がする。
0975デフォルトの名無しさん
2006/07/05(水) 20:42:14シグナルでも送れば?
0976デフォルトの名無しさん
2006/07/05(水) 21:12:19なこたない。
0977デフォルトの名無しさん
2006/07/05(水) 21:51:15として、自スレッドを一時停止させようとしているのですが、うまくいかないのです。
何か根本的に間違っている気がするのですが、、pthreadの資料少なすぎ orz
0978955, 958, 976
2006/07/05(水) 21:57:10手元のK&Rのapendixに乗ってるBNRをまじめに追いかけてみたら、
確かにCでは第3項は代入式としては解釈されない、、、
# 手元に最新の規格ないので古い資料ですが、、、(ANSI1989版相当)
>>953の言っているように、生成規則自体が変わっているのだね…
そもそも、結合則に関して勘違いした状態で
知ったような口をたたいて申し訳なかった。
0979デフォルトの名無しさん
2006/07/05(水) 22:07:16×BNR
○BNF
、、、、、旅に出ます、、、、
0980デフォルトの名無しさん
2006/07/05(水) 22:56:42cond_waitするんだから、第一引数は当然condition objectを渡さないとイケナイ。
http://www.mtl.t.u-tokyo.ac.jp/~nminoru/pc/event.txt
ここらをみるといいかもしれんし、manする方が早いかもしれない。
0981デフォルトの名無しさん
2006/07/06(木) 10:05:00ありがとうございます。
う〜ん、しかしやっぱりスレッド一時停止してくれません orz
pthreadのmanでも見るしかないのか。。。
0982デフォルトの名無しさん
2006/07/06(木) 10:09:440983デフォルトの名無しさん
2006/07/06(木) 11:48:45(953のX3010と同じ)
第二のオペランドと第三のオペランドが、同じ型であり、
どちらも左辺値である場合、式の結果も左辺値である。
例をあげる。
int a,b;
x?a:b = 1; // ok
ARM19.1
conditional-expressionとassignment-expressionの構文は、
(throw-expressionを許すために)、以下のように変更された。
(略 953のX3014と同じ)
例をあげる。
i ? x=y : x=z; // i ? (x=y) : (x=z) を意味する
0984937
2006/07/06(木) 17:00:35ARMですか…。もう読んだの10年以近く前でした。
D&Eの横に置いてあったんだけど目に入ってなかったです。
皆さんの書き込みで大体納得できました。
直感に従うように変更された、という感じですね。
0985デフォルトの名無しさん
2006/07/07(金) 01:14:430986デフォルトの名無しさん
2006/07/07(金) 23:13:260987デフォルトの名無しさん
2006/07/07(金) 23:36:37どうしよう
0988デフォルトの名無しさん
2006/07/08(土) 00:11:11おいしいもの食ってうんこすればなおるよ!
0989デフォルトの名無しさん
2006/07/08(土) 19:00:57ハ_ハ
('(゚∀゚∩ なおらなかったよ!
ヽ 〈
ヽヽ_)
0990デフォルトの名無しさん
2006/07/08(土) 19:50:26#include <stdio.h>
#include <curses.h>
int main(void)
{
printf("Enter a letter: ");
printf("That letter is %c.\n",getch());
return(0);
}
というプログラムなんですがコンパイルして実行してもgetch()の部分がすっ飛ばされて終了してしまいます
Linux環境でgetch()をどうしても使わなくてはいけないのですが何か解決法はないでしょうか?
0991デフォルトの名無しさん
2006/07/08(土) 20:03:13curses使いたいならちゃんと手順を踏んで使おう
適当にぐぐった使用例:
ttp://www.h7.dion.ne.jp/~matsu/feature/c-language/index.html#feature.c-language.curses
0992デフォルトの名無しさん
2006/07/08(土) 22:48:250993デフォルトの名無しさん
2006/07/08(土) 22:53:56Cursesきつそうなら↓を参考に。
http://search.luky.org/fol.2002/msg00636.html
http://www.slayers.nu/~kumasaka/Gyoumu/kbdhit.html
UNIXプログラミングスレの方が適当だろうね。
ANSI Cにはない機能だから。
0994デフォルトの名無しさん
2006/07/08(土) 22:59:310995デフォルトの名無しさん
2006/07/08(土) 23:05:45【初心者歓迎】C/C++室 Ver.29【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1152367512/
0996デフォルトの名無しさん
2006/07/08(土) 23:12:470997デフォルトの名無しさん
2006/07/08(土) 23:46:390998デフォルトの名無しさん
2006/07/09(日) 00:00:430999デフォルトの名無しさん
2006/07/09(日) 00:01:28↓m9(^Д^)プギャーッ
1000デフォルトの名無しさん
2006/07/09(日) 00:01:5710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。