1 名前:デフォルトの名無しさん [2008/02/20(水) 12:33:41 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.48【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1202141921/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
12 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 13:54:43 ] >>9 コマンドラインで bcc32 test.c は成功します。 あと、別に、 #include<cstdio> void main(){ system("bcc32 test.c"); } だけを書いたプログラムを実行したところ今度はtest.cのコンパイルが通りました。
13 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 13:58:11 ] >>8 プログラムのカレントディレクトリとtest.cのパスの関係はどうなってますか。
14 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 14:22:20 ] 〜\debug がカレントディレクトリで debug\bfc.exe(作ったプログラム) debug\system_test.exe(>>12 のプログラム) debug\test.c となってます
15 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 14:38:25 ] >>14 system 関数を呼び出した時点では test.c への書き込みが完了していないんじゃない? コマンドの bcc32 の部分を type に置き換えて実行してみて 何も表示されないようなら system 関数の前にストリームをフラッシュするかクローズする
16 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 14:46:20 ] >>15 ありがとうございました。解決しました。
17 名前:デフォルトの名無しさん [2008/02/20(水) 19:08:43 ] 質問させてください キーボードの「ろ」のところにある記号は「U」で合ってますか? 半角じゃないので違うような気がするのですが 初歩的な質問ですみません よろしくお願いします
18 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:10:28 ] キーボードにも色々種類があってだな
19 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:18:12 ] C/C++と何の関係もない件について
20 名前:デフォルトの名無しさん [2008/02/20(水) 19:25:31 ] >>18 そうなんですか すいません >>19 今やってるプログラムにそれを入れなきゃなんです
21 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:27:43 ] >>20 shift+\ でどう?
22 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:28:03 ] お前の都合は知らないけどさ、こういう分別は義務教育中に分かっておかないと将来困るよ
23 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:28:56 ] C++でダイアログからファイルを選択し、ファイルをバイナリで開きたいのですが CFileDialogから取得したパスをfopenのrbモードで開く、という認識であっているのでしょうか 使用しているエディタはVS2005です。よろしくお願いします。
24 名前:デフォルトの名無しさん [2008/02/20(水) 19:34:12 ] >>21 出ました ありがとうございます >>22 あなたに将来を気にして頂かなくても結構ですよ?
25 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:35:34 ] >>24 もっと適切な場所で聞けって言ってるんだろ
26 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:35:55 ] >>24 >>22 の ”おまえに切れられる筋合いは無い” という心の叫が聞こえる。
27 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:36:53 ] >>24 聞ける友達いねーのかよwww
28 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:37:23 ] >>23 CFileDialogってMFCか? だったら同じMFCのCFileを使うのが筋なんじゃないかな fopenでもいいけどさ
29 名前:デフォルトの名無しさん [2008/02/20(水) 19:46:45 ] >>26 切れたつもりはないんですが >>27 自分、学生じゃないんで
30 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 19:48:51 ] >>28 すみません、MFCアプリケーションでの作成です。 プログラム初めてなものでただただ関数調べたもので… 基本的な事がなってないのでもう少し自分で調べてみます アドバイスありがとうございました。
31 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:09:58 ] 初心者歓迎・環境依存OKとはあるが、 C/C++とは関係ない質問等には答えるなよ。 馬鹿が付け上がります。
32 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:32:52 ] >>24 キモス とっとと帰れ
33 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:03:30 ] >>31 俺は今度から、キモイのが来たら嘘を教えることにするよ。
34 名前:デフォルトの名無しさん [2008/02/20(水) 21:33:17 ] >>33 まあ、おちつけ。
35 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:37:06 ] 変なタイミングで人をなだめる奴は 大抵自分が落ち着いてない罠
36 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:40:12 ] ****ptrとかってものを使ってみたいんだけどどうすればいんでしょうか? (表現おかしいかもしれないです) int *ptr, *p1, *p2, *p3, val = 10; ptr = p1; *ptr = p2; **ptr = p3; ***ptr = &val; printf("%d", ****ptr); こんな具合のことなんですがこれじゃだめみたいですorz 意味はないんですが、試しにやってみたいというだけです
37 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:41:53 ] int val = 10; int *p1 = &x; int **p2 = &p1; int ***p3 = &p2; int ****ptr = &p3; printf("%d\n", ****ptr);
38 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:43:01 ] あ、そっか int*型やint**型はまた別のものなんですね、再確認させられました ありがとうございます
39 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 23:01:01 ] Vectorクラス{ float x,y }があるとして、 Vector a( 0,0 ); Vector b = Vector( 0,0 ); 今まで大差ないと思ってたんだけど、bの書き方って馬鹿にされるかな?
40 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 23:03:58 ] 大差はないが、Vector のコピーコンストラクタが public でない場合、下はコンパイルエラーになる。 たとえ最適化でコピーコンストラクタの呼び出しが省略されるとしても。
41 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 23:13:20 ] 試しにやってみたらたしかにエラーに。 不便すぎるな… ありがとう
42 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 23:23:08 ] noncopyable の時に困るね。 他では大した差は無いけど。
43 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:31:33 ] デコンストラクタを解放とは別のタイミングで実行したいのでnewしたものをfreeで解放してますが問題ないでしょうか
44 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:34:25 ] >>43 デストラクタなのかコンストラクタなのかそれが問題だwww
45 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:35:18 ] >>43 大問題
46 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:35:43 ] >>43 placement new/delete 使え
47 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:36:56 ] freeするならメモリ確保にはmalloc使えということだな。
48 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:37:08 ] >>44 デストラクタです><
49 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:39:04 ] デコンストラクタワロタw
50 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:43:37 ] デコンストラクタ の検索結果 約 1,390 件
51 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:44:45 ] "デコンストラクタ" の検索結果 約 788 件
52 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:46:50 ] >>46 newをオーバーロードしてmallocで実装ということでしょうか?
53 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:49:02 ] >>52 new/delete new[]/delete[] malloc/free 対応関係を間違えるな。
54 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:51:01 ] >>52 T* p = static_cast<T*>(::operator new(sizeof (T))); // 領域のみ確保 new (p) T(); // コンストラクタを呼ぶ(placement new) p->~T(); // デストラクタを呼ぶ ::operator delete(p, p); // placement delete(省略可) ::operator delete(p); // 領域を解放
55 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:51:39 ] #include <new> #include <cstdlib> class c {}; void* p = std::malloc(sizeof (c)); c* obj = new(p) c; //... obj->~c(); //... std::free(obj); malloc/freeでなくても、operator new/delete関数とかでもいいだろうけどね。
56 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 00:52:20 ] >>52 違う。配置構文newだ。 newは大抵mallocをラッピングしてて効率は悪い。
57 名前:sage [2008/02/21(木) 03:23:25 ] 言語の使い方ではないのですが、一応処理系の一部ということで 質問させて頂きたいのですが、静的リンクされたELFバイナリにおいて、 リンクされているライブラリのバージョンを そのバイナリから知る方法はあるのでしょうか?
58 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 03:24:44 ] すみません・・sageを記入する欄を間違えました。
59 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 07:51:13 ] カレンダー作りたいんで、各月何日まであるか年によって違うのでその法則を 教えて欲しいんだけどスレ違い?
60 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 08:01:08 ] 年によって日数が変わる月は2月だけだろ・・・。 最近の小学校は閏年も教えんのか?
61 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 08:05:52 ] ありがとう2月だけなのか。習ったけど忘れてた
62 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 09:44:16 ] 1752年9月も変わってるな
63 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 10:04:47 ] どうやって生きてるのか不思議だな
64 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 10:07:28 ] カレンダー作るのに当時生きてるかはあまり関係ないかと。 unix系のOS使えるなら、 cal 9 1752 でカレンダー出るな。
65 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:05:21 ] 1752年9月がイリーガルなのは一部の国だけだけどな。
66 名前:デフォルトの名無しさん [2008/02/21(木) 13:11:47 ] class ttt { public: int i; int j; double k; }; int main() { ttt t = {1,2,3.001}; structやclassがこういう風に初期化できるのを最近知ったのですが、これって普通に 使う書き方でしょうか?結構C++長いこと使ってきたけど、知らなかったよ。
67 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:22:04 ] C/C++を勉強し始めて1年の俺的には、クラスならメンバ変数公開しないのでやらない。そこはコンストラクタで。 PODな構造体なら hoge h = {0}; とか、 Win32APIで構造体のサイズを入れる必要がある物は WNDCLASSEX wc = {sizeof(WNDCLASSEX)}; とかやるけど・・・ 俺も疑問なんだけど、 hoge h = {0}; って感じで初期化って普通にやるの? 俺より何年もCやってる先輩が言うには、「そんなんで0フィルされるのか?memset使えよ」って言われたんだが。
68 名前:デフォルトの名無しさん [2008/02/21(木) 13:22:38 ] Cを昨日から勉強しましたが、今日でやめます。
69 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:44:25 ] >>67 「0フィル」が「全ビットを 0x00 で埋める」って意味なら memset() で正解。 ただし「全メンバを 0 で初期化する」なら memset() は間違いで {0} で初期化するのが正解。 この2つはメンバにポインタや浮動小数点数が混ざってると意味が違うので、動作が 異なる可能性がある。 C++ でメンバに POD 以外が混ざってる場合には、 memset() での 「0フィル」は未定義動作につながる。
70 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:47:26 ] >>66 >>39 の使い方が一般の気がする。 コピコン便利だし
71 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:49:23 ] >>67 ポインタや浮動小数点数などでは、 Cのソース上では0と表現される値でも、内部では0以外のビットパターンを持つことがある。 そんな場合にも対応できるので、変数初期化のほうが移植性が高いとされる。
72 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:52:19 ] #include <iostream> using namespace std; template <typename T> void printchar(T c){ cout << c << endl; } int main(void){ cout << "print int" << endl; printchar(10); cout << "print double" << endl; printchar(32e-2); cout << "print char" << endl; printchar('A'); cout << "print char*" << endl; printchar("test char"); cout << "print void" << endl; // printchar(); return 0; } コメントアウトした行でコンパイルエラーなのですが、 引数がvoidだと何もしないっていう処理はどう書けばいいのでしょうか。
73 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:53:37 ] void printchar(){ }
74 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:54:36 ] なるほど。 そういえば、Win32APIとかの解説ページを見ると、memsetで構造体を初期化してる人もいるよね(メンバにポインタがあるにもかかわらず Windowsでしか動かない移植性がないプログラムだから問題ないんか。
75 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 13:55:35 ] >73 やっぱりそうするしかないですか。 ありがとうございます。
76 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:50:44 ] 素朴な疑問なんだけど、 #include <> なんかの"#"ってどんな意味があるんですが? cgiみたいに、特別な物でそうゆう仕様という認識で良いのでしょうか? 初めて触った時はコメントアウトじゃんと思ったりもしましたけど。
77 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:53:01 ] >>75 template<typename T>void printchar(T c = 0) {if (c) cout << c << endl;} ではどう? 使うときにはprintchar<char>()のように型を指定する必要があるけど。
78 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:54:35 ] >>76 プリプロセッサに対する指令
79 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 15:01:13 ] >>76 >cgiみたいに、特別な物でそうゆう仕様という ややあたり、起源はいっしょ C++のコンパイルの前に通すテキスト加工スクリプトの様なもの。 もはや意識している人いないれどね。 起源はそうでも、すでにC++の一部機能です。
80 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 15:07:15 ] printchar('A'); がマンドクセにみえた俺は病気
81 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 15:11:12 ] 単純にテンプレートのprintcharとは別にinline void printchar() {}を多重定義するだけではだめなの?
82 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 15:20:40 ] >>81 すでに出てるし、そして当人は二つ書くことになにかご不満のご様子
83 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 15:29:36 ] C/C++でGUIを実装する方法にはどのようなものがあるのでしょうか? 代表的なものにWinAPIとMFCがあると調べてわかったのですが、どちらも難解そうな上 ニュアンス的なものですが、主流ではないような印象を受けました C/C++で作ったDLLをC#で使う?ような方法にも辿りついたのですが それだと使う側に.NETが必要になるようなので、それなら最初からC#を使った方が…と思います どういった方法がベターなのでしょうか?
84 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 15:38:12 ] >>83 ↓のページから好みに合ったものを選べ ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88%E3%83%BB%E3%83%84%E3%83%BC%E3%83%AB%E3%82%AD%E3%83%83%E3%83%88
85 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 15:44:15 ] 普段は小物を作るのにVisual StudioのリソースエディタとATL/WTLをよく使っているけど、 C++はGUI作るツールに満足なものがないから、GUIに向いていない環境だと俺は思っている。 もっとましな状況になってほしい。 いろんなものが乱立していて決定打がないんだけど、 Windowsでは、Windows APIが最下層で、ほかがそのラッパーになっているので、 自然、Windows APIが共通語彙になっているという面はある。 だから、今何を使うにしても、いつかは素のWindows APIプログラミングに触れていてほしいなと思う。
86 名前:デフォルトの名無しさん [2008/02/21(木) 15:46:41 ] 整数を逆に並べて返す関数は以下でよいですか? 例) 12345→54321 12000→21 int reverseDigit(int input) { int a = input; int tmp[12]; int i = 0; while (a > 0) { tmp[i] = a % 10; a = a / 10; i++; } int res = 0; int n = 1; for (int j = i - 1; j >= 0; j--) { res = res + tmp[j] * n; n = n * 10; } return res; }
87 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 16:27:35 ] >>84-85 なるほど、見た感じWinAPIに一番無難な印象を受けてしまいました Windowsがこの先消えうせることはなさそうですしとりあえずWinAPI触ってみます、ありがとうございました
88 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:44:38 ] >>86 試して問題ないならいいんじゃない? 負数で破綻するけど。 それと、一旦各桁に分割した結果を配列で保存するなら、 sprintf()で文字列にしてから逆順にして、atoi()で戻してもいいかも知れない。
89 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:48:39 ] int a = input;に意味がないね そのままinputを使えばいい 知っててわざとやってるなら別にいいが
90 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:57:34 ] c言語でhttpサーバを作っててわからなくなったので質問させてください。 サーバからクライアントへsendを使ってメッセージを送信した際、 メッセージの送信完了を伝えるには、ソケットをclose(あるいはshutdown) する以外に方法はないですか? つまり、ソケットを閉じずに、コネクションを維持したまま、 送信完了を伝えたいのですが、できませんか?
91 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 17:57:59 ] >>89 意味ある、というか引数いじらないのは鉄則だよ。 一時変数ケチってinputを加工するのは無駄なバグの元。
92 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 18:18:34 ] >>90 HTTPであれば、レスポンスにContent-Lengthを入れれば、クライアント がそのサイズの受信でデータ終了だと思ってくれる。
93 名前:90 mailto:sage [2008/02/21(木) 18:29:55 ] >>92 なるほど、そういう方法なんですね。 助かりました。ありがとうございます。
94 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:25:25 ] >>87 C#使った方がいいと思うってもう遅いけど
95 名前:デフォルトの名無しさん [2008/02/21(木) 21:40:29 ] C++ならボーランドが最強 デルファイ言語の環境のまま、言語だけC++
96 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:41:13 ] 正直決定打といえるほどのものじゃない
97 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:41:44 ] でもスタックにVCLのオブジェクト置けないんだよね
98 名前:デフォルトの名無しさん [2008/02/21(木) 21:45:50 ] 物理メモリの未使用量はどう調べられますか?
99 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:48:34 ] >>98 環境を書けよ。でないと答えようが無い
100 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:50:15 ] >>98 パソコンから取り外せば全容量使えるよ。
101 名前:デフォルトの名無しさん [2008/02/21(木) 21:50:59 ] WindowsXPです
102 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:53:40 ] じゃあタスクマネージャだな
103 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:54:02 ] >>101 毒餃子を食わす国の人ですか?
104 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:54:36 ] >>101 GlobalMemoryStatus で調べろ
105 名前:デフォルトの名無しさん [2008/02/21(木) 21:57:57 ] サンクス
106 名前:デフォルトの名無しさん [2008/02/21(木) 22:27:36 ] newやvectorで確保が失敗したかチェックするにはどうすればいいですか?
107 名前:デフォルトの名無しさん [2008/02/21(木) 22:31:16 ] あとメモリが少なくて、確保に時間がかかる場合、途中で止めるか、かかる時間を予測できますか?
108 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:32:24 ] VC9なのですが、SHA-256の定番なライブラリってないでしょうか? JpegのIJGライブラリみたいなものがあると嬉しいのですが
109 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:32:32 ] >>106 長い思考の旅の後には、失敗しないからチェックは不要という結論になるよ。
110 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:43:28 ] >>106 bad_alloc 例外をつかまえる。
111 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:45:29 ] bad_alloc例外が必ず捕まえられる保障はないそうだよ。 by Sutter
112 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:48:48 ] set_new_handler