[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/24 21:17 / Filesize : 258 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



1 名前:デフォルトの名無しさん [2007/06/03(日) 22:33:55 ]
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sage禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.37【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1178432985/l50
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm


445 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:21:58 ]
>>442
「構造化例外」つってんのにググりもしないとは。

>>443
それこそまったく関係がない。
「文字列を出力する」 ostream と
「何でも出力する」 fwrite() を比較するとは
頭大丈夫?

446 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:22:12 ]
>>442
__try
__except
__finally

447 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:23:58 ]
>>445
ostream は別に文字列だけ出力すればいいわけじゃないってのは、
ofstream と ios::binary の存在を考えれば分かると思うが。

448 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:24:54 ]
>>444
要するに、あくまでバイトストリームを出力する、というスタンスを示すために、
write では引数を const char* としてるという理解でいいのか?

449 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:26:38 ]
文字列をbyte列と言い換えればいいのでは、streamは

450 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:34:58 ]
クラステンプレートbasic_ostreamのこともたまには思い出してあげてください
writeの引数はただのcharではなくテンプレート引数よ

451 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:36:15 ]
ああ、そうか。
そういうことか・・・。
了解。分かった。

452 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:42:34 ]
俺が思うに、basic_ostream::writeに対応するCの関数は、
fwriteではなくfputs/fputwsなのだろう

するとfwriteに対応するのはなんだろうという気になるが

453 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:52:56 ]
いや、ヌル文字を無視するから、fputs とは対応しないと思う。
wostream::write がある以上、
fwrite と basic_ostream::write も対応しないんだろうな。

用途的には fwrite と ostream::write が対応するんだろうけど。



454 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:56:35 ]
ところで、例えば int 値をバイナリでファイルに書き込みたいときは、

ofstream f("hoge", ios::binary);

int x = 0x12345678;
f.write(reinterpret_cast<const char*>(&x), sizeof x);

という風に使うんだよね?(エラー処理は略)

455 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 19:29:12 ]
new されたサイズをプログラマが知る方法はないですか?

456 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 19:37:32 ]
>>455
標準にはない

457 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 20:03:36 ]
>>454
たしかに、そうなんだけどね。ただ、
 basic_ofstream<wchat_t> f;
のときは
 f.write(reinterpret_cast<const wchar_t*>(&x), sizeof(x) / sizeof(wchat_t));
になる。
const void* を引数にするとわけ分からなくならないか?

458 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 20:05:26 ]
"wchat_t"?

459 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 20:11:26 ]
>>457
それって意図したとおりに動かないんじゃないの
最終的に書き込む際にはバイト列に落とし込まなければならないんだから
char以外のストリームだと確実にエンコード変換がかかるだろ
単なる狭化変換かもしれんがバイナリ値とかは確実に壊れる

write()で書いたものが変換をバイパスできるわけではないし

460 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 20:34:48 ]
>>457
それは x のサイズが wchar_t のサイズで割り切れなければヤバいかと。
まあ、今回は x が int だから多分ほとんどの環境で大丈夫なんだろうけど。

const void* でわけわからなくなる点に関しては、
既にその点で了解してる。

バイナリで wchar_t 以外の値を書き込む場合は、
ostream::stream を使うしかないとういことやね。
char = 1バイトと決まってるし。

461 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 21:14:07 ]
>>455 >>456
replacement newを書くというのはだめなのかな。

462 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 21:16:49 ]
>>459
エンコード変換なんてかかるの?
basic_ofstreamはwchar_tだけ特殊化なんてことはしないと思うから、
charでかからないならwchar_tでもかからないと思うよ。
それとも、エンディアン変換の話か?

>>459
うん。割り切れない処理系がないとは言い切れないよね。正確には知らんけど^^
そもそも、stream系のクラスはバイト列を扱うこと自体が
向いていないってことを言いたかっただけだよ。

463 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 21:21:27 ]
>>462
まぁ落ち着いてVCとかの標準C++ライブラリのソース見てみ。



464 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 21:38:59 ]
C言語でプログラムを作ってコンパイルまでできているのに
いざコマンドプロンプトで実行して整数値を入力だとかするんだけど、
数回入力するとエラーがでるんだけどなんでなんだい?

465 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 21:40:41 ]
コンパイルが通るからってバグが無いわけじゃないだろ

その情報だけじゃ何が原因かはわからんけど

466 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 21:42:18 ]
文てきには間違ってないんだけど、
長い文を書いて作ると絶対なるんだよね。
行数の限界とかってないよね?

467 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 21:47:43 ]
>>457
char 以外のストリームでバイナリ出入力っていうのがそもそも無理。

468 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 22:12:04 ]
>>463
一応、STLportのソースをざっとみたけどそんな箇所は見あたらなかった。
少なくともSTLportでは、
ofstream::write → streambuf::sputn → streambuf::xsputn → char_traits<_Char>::assign
の順で文字などが出力されているのだけど、
このどこでエンコーディング変換を行うのかだけでもよかったら教えて欲しい。
多分、探し方が足りないだけだと思うので。

>>467
basic_ostream<char>でしか正しくバイナリストリームを扱えないにもかかわらず、
UTF8やUTF16、UCS4などに対しても適切なstreamクラスを提供せねばならんので、
charだけ特別ってわけにはいかなかったんだろうね。

469 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 22:14:37 ]
学校で作ったライブラリがあって、ヘッダーファイルに
#define GameMain \
int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPreInst,LPSTR lpszCmdLine,int nCmdShow)\
{\
MSG lpMsg;\
HWND hWnd;\
WNDCLASS myProg;\
(以下略)

って書いてるんだけど、家に帰っていざ作って入力すると全行にエラーが出て動かないんだ・・・
とりあえず、\消してやってみたりしても{に対応する関数がないとかエラーが出て動かない。

学校だと.net2003で、家だとVC2005なんだけど・・・何がどう間違っているんだかさっぱりだ。orz

470 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 22:14:47 ]
>>468
足りんな。
そこまででは、I/Oバッファに書き込んでいるだけだ。
実際にI/Oバッファからファイルにフラッシュする時点で同時に
変換を行っているはずなので、そこを探せ。


471 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 22:18:50 ]
>>469
どういうエラーだよ
\は次の文字と組み合わさるので
この場合は、\直後の改行が無効になるだけ
スペースとかまぎれこんでるとエラーになるぞ

472 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 22:19:40 ]
>>469
}が全角だとか言う落ちはないよな?

473 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 22:24:58 ]
キタ━━━━(゚∀゚)━━━━!!!!



474 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 22:35:19 ]
>>471 >>472
半角だった。
今、見比べていて、唯一違った部分のコメント部分消したら動くようになった。
\とかとコメントって絡ませたらまずいってことを知ったよ。お騒がせして申し訳ない。orz

475 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 22:50:00 ]
問題が発生したため、ta.exe を終了します。 ご不便をおかけして申し訳ありません。

コマンドプロンプトで実行したら絶対途中でエラーがでる。
なぜだよおい。

476 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 22:51:56 ]
環境もコードも示さずにその質問に答えられるのはエスパーだけだな
まぁexeとかコマンドプロンプトとか言ってるし
Windowsなんだろうなってことぐらいはわかるが

477 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 22:53:56 ]
まあ、どうせいまだにMBCSなんだろう>糞学校のソースコード
で、VS2003のIDEのデフォルト設定がMBCSで、
VS2005のデフォルトが、ようやく、ほんとうにようやくUnicodeに変わったので、
こけてるんじゃないか。

478 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 22:54:51 ]
素人なもんですみません。windowsです。
でなにを示せばいいんだい。
ちなみに短い文ならエラーでないのに複雑な文になると途中で強制終了される。

479 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:00:51 ]
>>459
Cのstdioだとバイナリモードなら変換がかからなかったはず
もしかしたら単に俺の使っているVisual C++固有の挙動なのかもしれないけど

>>468
locale関係で文字の変換の機能が提供されていて、
標準では(locale毎の)charとwchar_tの変換が用意されていることになっている
たしかcodecvtとかいうファセットがそれだったと思う

480 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:02:34 ]
>>478
素人が手を出すもんじゃない。
大人しく一から言語の勉強をしなさい。

481 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:04:08 ]
>>480
おそらくコマンドプロンプトがバグってると思われるんだけどな

482 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:10:04 ]
ソース出せばいいと思うよ

483 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:11:04 ]
>>481
わらた、おもしろすぎ。



484 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:13:38 ]
>>481
windows入れなおせばいいと思うよ

485 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:26:52 ]
>>470
最終的にファイルに書き出すときに、sjisやeucに変換する必要があるってことね。
たしかに変換してた。
勉強になった。ありがとう。

486 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:39:48 ]
>>474
/* */ 型のコメントなら大丈夫だよ

487 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:46:04 ]
>>857
へぇ、今まで自分もエラーは一括して-1返してた。
ていうかそもそもmainの正常終了異常終了って何かが拾って処理してるんですか?

488 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:47:30 ]
何誤爆しとんねんw

489 名前:487 mailto:sage [2007/06/13(水) 23:51:37 ]
誤爆しました><
焦ってすぐ書き込もうと連打したら規制リストに引っかかりました><


490 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 00:52:31 ]
NULLは大抵 0 とか (void *)0 だと思うんですが、環境によっては ゼロ じゃない時もある、とききました。すなわち、
「NULLは 0」ということを前提としたプログラムは書くべきではないですか?
例えば…
void hoge(Foo *bar)
{
  // bar が NULL じゃなかったら
  if (bar != NULL) // こっちはいいけど
  if (bar)       // こう書く奴は死ぬべきでしょうか
    bar->...;
}

491 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 00:54:41 ]
>>355
それらしい記述見つからないから、flushした方がいいのかなぁ。
ようわからん。

492 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 00:56:23 ]
>>490 www.kouno.jp/home/c_faq/c5.html

493 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 01:24:47 ]
>>491
d。
俺も最新のドラフト見てるけど、
それにすらそれらしい記述が見つからないんだよな。
どっか違うところに隠れてるのか、それとも flush しないとヤバいのか・・・。

まあ、flush しといた方が無難そうだな。



494 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 19:27:21 ]
pc11.2ch.net/test/read.cgi/tech/1181087371/l2
↑のスレで>>982のコードを書いたのですが、
このプログラムで非数字(たとえばaとか)が入力されると
プログラムが異常な動作となってしまいます。
これって普通どうやって対処するものなのでしょうか?

495 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 19:35:50 ]
scanf の戻り値を確認して
0 なら 1 文字捨てて読み直す

496 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 20:18:35 ]
>>495さんのレスを参考に変えてみたのですが、

for(i=0;i<3;i++){
printf("%d行目の\n",i+1);
for(j=0;j<3;j++){
printf("%d列目=",j+1);
if(scanf("%d",&array[i][j])==0)
printf("%d",array[i][j]);
j--;
}
こういうことかと思ったらやはり間違ってて、
「一文字捨てる」という概念がいまいち分からないです。
どう直したらarray[i][j]のエラー入力は無かったことにされて
再入力するようにできるんでしょうか?orz

497 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 20:35:41 ]
int ret;
while(ret = scanf("%d", &array[i][j]), ret == 0) {
 scanf("%*c");
}
if(ret == EOF) { /* 途中で終わっちゃったのでエラー処理して終了 */ }

498 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 20:43:41 ]
>>497
%*cって何やってるんだろうとググったらscanfに見たことも無い仕様が
いっぱいで今更ながらにビックリしてしまったです…。
for(j=0;j<3;j++){
printf("%d列目=",j+1);
if(scanf("%d",&array[i][j])==0){
scanf("%*c");
j--;
}
レスを参考にこんな感じで直したらいけそうな感じになりました!
scanfの入力エラーって結構よくあるわりに長いこと対処法が分からなかったのでとても助かりました。
教えて頂き本当にありがとうございます><

499 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 20:53:50 ]
つか、getchar でいいような

500 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 21:12:28 ]
>>499
getcharって文字入力用じゃないですか?
これで使う方法ってあります?


501 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 21:26:25 ]
scanf("%*c"); の代わりに使ってみればいいじゃないの。

502 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 21:34:57 ]
>>501
あぁあなるほど、そっちの方に使うのか!
getchar=入力用って思ってたからscanfの代わりにって言ってるのかと思った。
それじゃ「111」が三桁の数値にならないよなぁ?みたいなよく分からない混乱に陥っていたorz
ちょっとそちらでも試してきてみます><

503 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 22:46:34 ]
結局のところ、scanf()の代わりにfgets()+sscanf()で充分ってことだね。



504 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 22:48:53 ]
余計複雑になるだけだと思うが。

505 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 03:24:22 ]
fgets+strtolにすれば10進数以外も使えて便利
文字が来ても対処簡単だし


506 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 04:02:27 ]
1行につき数値1つ?

507 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 13:00:46 ]
>>506
オイオイ、strtolは変換できなかった場所のポインタ返ってくるし
変換できなかった場合はerrnoにエラーコード入るから改行までループで回せば何個でも変換できるぞ


508 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 13:48:27 ]
すまんす

509 名前:デフォルトの名無しさん [2007/06/15(金) 15:35:13 ]
C++の質問です。
学習用の簡単なクラス(名前をsampとします)があって、内部でintの値を保持してます。
そこに、friend関数でoperator+()を追加したいです。
最初、
samp operator+(samp & obj, int i)
samp operator+(int i, samp & obj)
としたところ、
obj = 10 + obj;
はOKだったのですが、
obj = 10 + obj1 + 10;
はコンパイルがエラーになりました。
そこで、
samp operator+(samp obj, int i)
samp operator+(int i, samp obj)
としたところ、コンパイルが通り、結果も意図した通りになりました。
これはなぜなのでしょうか?
ちなみに、operator+()の内部は以下のように書きました。

samp operator+(int i, samp obj)
{
samp temp;
temp.x = obj.x + i;
temp.y = obj.y + i;
temp.z = obj.z + i;
return temp;
}

引数の順序が反対の関数も内部は同じです。
今まで参照と実物とはまったく同じ扱いでいいと思っていたのですが、


510 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 15:43:21 ]
samp operator+(samp & obj, int const & i) ;
samp operator+(int const & i, samp & obj) ;

511 名前:デフォルトの名無しさん [2007/06/15(金) 15:56:02 ]
>>510
そのように書き直してみましたが、コンパイル通りませんでした。
以下はコンパイルエラーのメッセージです。

> g++ samp.cpp
samp.cpp: In function 'int main()':
samp.cpp:50: error: no match for 'operator+' in 'operator+(((const int&)((const int*)(&10))), ((samp&)(& obj3))) + obj3'
samp.cpp:37: note: candidates are: samp operator+(const int&, samp&)
samp.cpp:28: note: samp operator+(samp&, const int&)

512 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:10:41 ]
>>511
すまん、sampの分を忘れてた。

samp operator+(samp const & obj, int const & i) ;
samp operator+(int const & i, samp const & obj) ;

理由?
関数の戻り値はrvalueだからかな。

513 名前:デフォルトの名無しさん [2007/06/15(金) 16:13:55 ]
やたらと質問ばかりですいません。

operator||()って、定義するのが何か変な感じなのですが、
||って、そもそも
式A || 式B
などと書いて、
式Aまたは式Bのどちらかが真なら、真。
という意味ですよね?このとき、||の右側の値と左側の値とを
特にoperator||(式A, 式B)としてひとつの関数内で一緒に処理しなくては
ならないような状況ってないんじゃないか
と思うのですが、
,,,
ここまで書いてきて、なんだか自分でも意味が分からなくなってきました。
ぶっちゃけた話、operator||()が定義できてよかった、という状況って
ありますでしょうか?
よろしくお願いします。





514 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:18:52 ]
C++再考かなにかで、画像をくっつける演算子に使っていた気がするな。
実装例では簡単にするため、たんなる文字列だったが。

operator , () より使い道はあるだろ。
こんなものBoostを実装できるような変態なやつらしか使わない。

515 名前:デフォルトの名無しさん [2007/06/15(金) 16:23:16 ]
>>512
教えてもらった書き方でコンパイルは通りました。
しかし、今度は
obj3 = 10 + obj3 + obj3 + 100;
と書くとコンパイルが通りません。
ずーっと御世話になってますので、ソースを張り付けます。

#include <iostream>
using namespace std;
class samp {
int x;
public:
samp(int i = 0) {x = i;}
friend samp operator+(int const & i, samp const & obj);
friend samp operator+(samp const & obj, int const & i);
};
samp operator+(samp const & obj, int const & i) {
samp temp;
temp.x = obj.x + i;
return temp;
}
samp operator+(int const & i, samp const & obj) {
samp temp;
temp.x = obj.x + i;
return temp;
}
int main() {
samp obj1(10), obj2(7), obj3;
obj3 = 10 + obj3 + obj3 + 100;
return 0;
}

516 名前:デフォルトの名無しさん [2007/06/15(金) 16:31:38 ]
>>514
そうなんですか。実は今独修C++を読んでいますが、そこに、operator,()は
特殊なのでこの本では扱わない、と書いてあって、不思議な感じがして
いました。たしかに手元のマシンでgrepしてみると出てきますね。

rpm -ql boost-devel | xargs egrep 'operator\,\('
/usr/include/boost/assign/list_inserter.hpp: return operator,( r );
/usr/include/boost/assign/list_inserter.hpp: return operator,( r );
...(略)

前このスレで、独修C++をやればそれなりに力が付く、とだれかが
書いていたのでこの本を勉強しているのですが、たしかにいい本だと
思ってます。でも、この本にも書いてないことがあるのですね。
この本を終えたら次はどういう本で勉強すべきでしょうか?



517 名前:デフォルトの名無しさん [2007/06/15(金) 16:34:28 ]
>>514
C++再考ですね。見てみます。
ありがとうございます。

518 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:36:00 ]
ミスターoperatorでも目指してんのか

519 名前:デフォルトの名無しさん [2007/06/15(金) 16:38:22 ]
今見ている本が演算子のオーバーロードの章(6章)なので、
つい上記のような質問ばかりになってしまいました。


520 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:39:39 ]
よっ、ミスターoperator!

521 名前:257 mailto:sage [2007/06/15(金) 16:40:19 ]
friend samp operator+(samp const & obj1, samp const & obj2);
が必要

((10 + obj3) +obj3) + 100 の順に評価される

operator 演算子呼ばれた後のの戻り型を並べると
((samp) + samp) + int
~~~~~~~~~~~~~~~~ ここの演算定義がいない

522 名前:デフォルトの名無しさん [2007/06/15(金) 17:03:04 ]
>>521
なるほど。。。。その通りですね。定義したらコンパイルできました。
あと、constの役割(とくにint const &iのあたりとか)が気になるのですが、
それはもうすこし自分で調べてみます。

ありがとうございました。

523 名前:デフォルトの名無しさん [2007/06/15(金) 17:10:09 ]
>>520
いやいや。。
それにしても、C++はいろいろ複雑ですね。





524 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 17:18:12 ]
質問なんですが、C/C++の開発環境でお勧めのものってありますか。
JavaのEclipseみたいにいきなり変なことを書いてもその場で教えてくれるやつってありますかね?
ソースコードを書くのが楽したいというのが要望です。

ちなみに、TurboC++を試してみましたがどうもしっくりこない。
というか、まだほとんど使っていないので分からないというのが正直なところです。


環境、WinXP 普通の32ビット
(MacやLinuxでもおk)
当方のスペック 大学3年 Javaは普通に使いこなせるという程度

525 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 17:19:06 ]
よろしくお願いします。

526 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 17:54:37 ]
Eclipseが使えるんなら、そいつにCDTを入れてみたら?

527 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 18:22:25 ]
operator&&、operator||、operator, をオーバーロードすると短絡評価でなくなってしまう
見た目が一緒なのに評価のやり方が変わってしまうのであまり良くない

528 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 19:50:20 ]
>>505
sscan系でも%iというものがあってな

>>512
intは値渡しでいいだろ

>>513
> operator||()が定義できてよかった、という状況って
Boost.Lambda

529 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 19:57:07 ]
samp じゃなくて smap に見えた

530 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 19:57:36 ]
>>524
VC++のアカデミックは?
アカデミックは超安かった希ガス

ところで、みんなは何使ってんだ?
俺はVStudioでC++とC#を中心にやってる。

531 名前:デフォルトの名無しさん [2007/06/15(金) 20:10:29 ]
VC++2005expressは無料だよ

532 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 20:40:21 ]
express だな。
商用には使えないが、それはアカデミックも同じだな。

533 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 21:12:36 ]
嘘言ってはいけません。
Expressも他のEditionと同じように、
商用利用を禁止する条項はない



534 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 21:27:41 ]
VC++EEはリソースの扱いが難点だけど
それ以外は十分だな

535 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 21:30:29 ]
>>533
前どっかのスレでそう聞いたんだけど、騙されてたのか。
ググったら商用に使えるって書いてたわ。ありがとう。

536 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 23:32:57 ]
アカデミックも商用可能だな。

537 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:23:34 ]
std::wofstream m_ofs;

void CLog::Write( LPCWSTR strMessage )
{
if( !m_ofs.is_open() ) return;

m_ofs << " Message:" << strMessage;
}

こういうものを作って

CLog log;
log.Write( L"てすと" );

という風に使うと

Message:

としか出力されません。何故でしょうか?

538 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:26:58 ]
よく判らんけど、バッファリングされているからじゃないの?
フラッシュしたら?

539 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:27:16 ]
ロケールの設定

540 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:34:54 ]
Write( L"aa" )だと
Message:aaと普通に表示されます
日本語だけだめみたいです

>>539
ぐぐりました
こういうのが出てきたので→setlocale(LC_ALL,"Japanese")
付け足しましたが、解決ませんでした・・・


541 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:40:59 ]
>>540
imbue()

ただし
forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=250724&SiteID=7

542 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:47:35 ]
>>541
おお!解決しました!
ありがとうございます!

543 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 02:41:07 ]
度々すいません __FUNCTION__ のwchar_t型というのはあるのでしょうか?



544 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 05:12:13 ]
>>543
gcc の拡張だね。 static const char [] な変数と決められてるから、いまのことろ無いね。

545 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 05:36:40 ]
wchar_t wfunc[sizeof __FUNCTION__];
swprintf(wfunc, sizeof __FUNCTION__, L"%s", __FUNCTION__);

とか自分で変換するしかないのかな。
バッファが必要だから、マクロ化するのも難しいな。
グローバル変数を使うのもアレだし・・・。






[ 続きを読む ] / [ 携帯版 ]

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

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