- 1 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:18:41 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.47【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1200464091/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 22 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:24:55 ]
- >>20
Eclipse + CDT
- 23 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:47:35 ]
- このような構造体があるとして
struct KOUZOUTAI{ std::vector<int> Array; int nNum; std::string str; }; KOUZOUTAI g_Kouzoutai; std::ofstream fout; fout.write( (char*)(&g_Kouzoutai), sizeof( g_Kouzoutai ) ); こんな風に構造体を書き込んでおきます。 このデータを次に読み込みたい場合、 KOUZOUTAI data; fin.read( (char*)(&data), sizeof( data ) ); こうやって読み込むと配列の部分が正常に読み込めません。 何かいい方法はありますか?
- 24 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:53:06 ]
- >>23
ありません。つーか、そもそもそれではvectorは書き込まれていない筈です。ご愁傷様。
- 25 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:56:15 ]
- std::vectorの中身をserialize/unserializeする関数を作成して、保存/読み込み時にその関数を経由させる。
- 26 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 15:58:56 ]
- 動的配列はメモリが無条件に動的になるわけじゃなく、
動的配列を実現できるようなメンバ関数でアクセスするから動的配列たりうるわけで。 エレベーターのボタンを押さずに扉こじ開けてもエレベーターには乗れないでしょ?
- 27 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 16:01:53 ]
- その例えもどうかと思う。
- 28 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 17:20:39 ]
- ただの配列なら書き込めますか?
- 29 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 17:21:42 ]
- はい。
- 30 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 17:26:50 ]
- わかりました
ありがとうございました
- 31 名前:デフォルトの名無しさん [2008/02/05(火) 19:03:05 ]
- 下記のコードはBCB6で通りません。
template<typename FunctionPtr> struct FunctionTraits; template<typename ResultType,class ClassT> struct FunctionTraits<ResultType (ClassT::*)(void)> { typedef ClassT ClassType; }; テンプレートの関数ポインタによる特殊化でメソッドのクラスを推測することは不可能なんでしょうか。
- 32 名前:デフォルトの名無しさん [2008/02/05(火) 19:35:31 ]
- VCでは通ったが。
- 33 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 19:46:16 ]
- >>31
部分特殊化は VC6 あたりでも対応してなかったと思う。 コンパイラが対応してないのはありうると思う。
- 34 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:08:26 ]
- とりあえずBCB2007で通るか検証してみては
- 35 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 21:20:13 ]
- 最近Cを勉強し始めたのですが、とりあえずチンチロリンでも
作ってみろというようなことをいわれました。 早速やってみようと思ったのですが、何から手をつけていいのか さっぱりです。何か良い書籍などあるでしょうか? チンチロリンのサンプルプログラムを見てみるのも勉強になると いわれたので、検索してみたのですがサンプルが無く困っています。 どうかよろしくお願いします。
- 36 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 21:47:25 ]
- 本屋に行って何冊か立ち読みしてみるか、ぐぐればいいと思うよ
- 37 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 21:58:18 ]
- >チンチロリンのサンプルプログラムを見てみるのも勉強になると
>いわれたので 簡単にそんなものが見つかるのが前提のアドバイスにワロタw でも、そういう簡単なゲームを作るのはいい練習になると思うよ。 とりあえず、今勉強に使ってる本かサイトか知らんが その知識だけで自分で作ってみるといいよ。 多分いろいろと汚いプログラムになりはするとは思うけど、 そうやって作ってみた後にサンプルなり本なりを読むと、 どこがマズかったのかってのがよく分かっていいと思うぜ。
- 38 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:03:38 ]
- >>36
今は、手元にある入門書とぐぐって何とかやってる状態です。 何冊か立ち読みして、よさそうなのをもう1冊買ってみようかと 思います。ありがとうございます。 >>37 簡単に見つかるものじゃないんですね・・。 なんとか形にしてみてから調べてみることにします。 ありがとうございます。
- 39 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:41:22 ]
- VC9ですけど、
std::exceptionにうにこーど入れると文字が壊れますか?
- 40 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:43:58 ]
- >>39
[std::exception unicode]でググって速効。 jinguru.blog86.fc2.com/blog-entry-10.html
- 41 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:56:32 ]
- やっぱりそうですか。
- 42 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:59:49 ]
- UTF-8なら入れられると思う。そこまでする必要があるかは別として。
- 43 名前:デフォルトの名無しさん [2008/02/06(水) 05:39:37 ]
- コンソールアプリケーションで、ユーザにインプットをもらって処理をするコードがあります。
その時、 int a; cin >> a; として、入力が数字ではなかったとき、変数aにはなにも代入されず、 ユーザが行った入力はどこかのバッファに溜まってる のでしょうか。その次の入力から動作がおかしくなります。 あと、もし上記が正しいとすると、ユーザからの入力を受け取る処理は、 とりあえずstringで受けるべきなのでしょうか?
- 44 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 10:57:57 ]
- >>43
intには数字しか読込めない。今の場合、何も読込まれずに cinにはfailbitが立つ。cin.clear()か何かでgoodbit立てない 限り次の読み込みは出来ない。stringにすべきかどうかは何を 読み込むかによる。
- 45 名前:デフォルトの名無しさん [2008/02/06(水) 11:34:06 ]
- >>44
ありがとうございます。自分でも調べてみたのですが、 int a; cin >> a; 入力データを使って処理する cin.clear(); cin.ignore(numeric_limits<int>::max(),'\n'); とするとcinが元の状態に戻りました。 ここで、clear()はgoodbitを立てるものだとして、 ignore()は指定文字数分か指定した文字(上記だと'\n')が出るまで 入力値をバッファから消す、という処理ですよね。 cinの入力ってこう書かないとだめなのでしょうか? (結構面倒かも、と思った)
- 46 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 11:59:49 ]
- Win32APIなんですがnewで確保した領域をWM_DESTROY:がきたときにdeleteしたら
コンパイル時はエラーでないけど、実行してnewで確保した後プログラムを終了 (WM_DESTROYが送られる)したらエラーがでるんですが、何故ですか? WM_CLOSEでならdeleteしてもエラーでないんで問題は無いんですが興味本位で
- 47 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 12:16:07 ]
- >>45
入力フォーマットの仕様がどうなってるのかわからないから なんとも言えないな。任意の値が入力されるならgetlineで 一行読込んでstring解析したほうがいいかも。
- 48 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 12:21:08 ]
- >>46 どうせメモリ破壊や二重解放だろ。
- 49 名前:デフォルトの名無しさん [2008/02/06(水) 14:18:30 ]
- doubleをcoutを使って出力するときに、かならず小数点以下2桁までを
出力するようにしたいのですが、どうすればよいですか? double amount = 3.33333; cout << amount; => 3.33 どうかお願いします。
- 50 名前:デフォルトの名無しさん [2008/02/06(水) 14:27:18 ]
- 今までソフトのバイナリいじったりして満足してたんですが
これからCを始めようと思ってます。 (とりあえず、Cが基本だからやっとけ!と、どこかで見たので) その際、アルゴリズムを先に学んだ方がいいですか? 周りに技術者がいないので、ネットで勉強する形になりますが・・。
- 51 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 14:35:04 ]
- >>50
すみません 書き込む場所間違えました・・。 吊って来るんで許してください
- 52 名前:デフォルトの名無しさん [2008/02/06(水) 14:47:22 ]
- 49です。
ios::rightとかその他諸々を使って出来たみたいだったのですが、 次回必要になった時に絶対わすれてそうだったので、sprintf()を使ってやりました。 失礼しました。
- 53 名前:デフォルトの名無しさん [2008/02/06(水) 14:48:25 ]
- stringは、値渡しですか
- 54 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 14:50:57 ]
- 値渡しでも参照渡しでもポインタ渡しでもお好きな方法をどうぞ
- 55 名前:デフォルトの名無しさん [2008/02/06(水) 14:54:21 ]
- コンパイラに任せたときは値渡しですか
- 56 名前:デフォルトの名無しさん [2008/02/06(水) 14:57:04 ]
- 文字列 は参照ですが、stringもそうなりますか
- 57 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:06:37 ]
- >>49
<iomanip>ヘッダ setprecisionマニピュレータを使う。 double amount = 3.33333; streamsize oldprec = cout.precision(); cout << setprecision(3) << amount << setprecision(oldprec) << endl;
- 58 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:17:12 ]
- しかし1の位が0だと小数点以下が3ケタになってしまいます
#include <iostream> #include <iomanip> int main() { using namespace std; double amount=3.33333; double aaa=0.3333; streamsize oldprec = cout.precision(); cout << setprecision(3) << amount << ' ' << aaa << setprecision(oldprec) << endl; } $ bjam precision-run 3.33 0.333 EXIT STATUS: 0 こういう場合は文字列処理に持っていくしかないですかねぇ?
- 59 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:34:32 ]
- >>55
コンパイラは自動的にプログラムを書いたりはしてくれませんので、コンパイラに任せるなどということはできません コンパイラは あなた が書いた通りに動きます >>56 文字列(=文字の配列)への参照っていうと、こういうのでしょうか void foo(const char(&s)[6]) { printf("%s\n", s); } int main() { foo("Hello"); } あんまりやらないと思いますが
- 60 名前:58 mailto:sage [2008/02/06(水) 15:40:26 ]
- #include <iostream>
#include <sstream> #include <cassert> using namespace std; string foo (double n) { ostringstream os; string s; os << n; assert(os.str().size() >= 4); s = os.str(); string::size_type b=0, e=0; b = s.find('.'); e = b+3; --b; return s.substr(b, e); } int main() { double amount=3.33333, aaa=0.3333; cout << foo(amount) << ' ' << foo(aaa) << endl; } $ bjam 3.33 0.33 よくわからないので適当にsstreamで
- 61 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:41:03 ]
- >>58
cout.setf(ios::fixed, ios::floatfield); をcout前に追加 setprecision(3) → setprecision(2)
- 62 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 17:21:15 ]
- 普通小さくするのがぬ゛うんキャストじゃないの?
- 63 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 17:56:43 ]
- >>62
ごめん、よくわからない
- 64 名前:デフォルトの名無しさん [2008/02/06(水) 18:59:44 ]
- MacOSXとGLUTの組み合わせで◯◯.appというディレクトリを作って
起動させると、はじめカレントディレクトリは ルートディレクトリになってるんですけど glutInit()を通過すると、◯◯.app/Contents/Resourcesが カレントディレクトリになってんですよ なんでこんな妙なところに行っちゃうんですかね ちなみに◯◯.appの中身は以下の通りです ◯◯.app/Contents/Info.plist <--謎 ◯◯.app/Contents/MacOS/○○.exe <--実際に動くc++コード ◯◯.app/Contents/Resources/icon.icns <--アイコンの絵
- 65 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:21:04 ]
- D3DPRESENT_PARAMETERS d3dpp;
::ZeroMemory(&d3dpp, sizeof(d3dpp)); と D3DPRESENT_PARAMETERS d3dpp = {0}; はちがいますか?
- 66 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:23:40 ]
- 詰め物
- 67 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:30:09 ]
- >>64
そこがアプリケーションのリソースを置く場所だから、 親切に(あるいは余計なお世話か)移動してくれてるんじゃないかな
- 68 名前:デフォルトの名無しさん [2008/02/06(水) 20:39:50 ]
- >>67
なるほど Glutで何かしているのではなく ◯◯.exeに引数で渡してるんですね。 そんな気がしてきました。 ちょっとチェックしてみます。
- 69 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:00:07 ]
- >>48
NULLポインタdeleteって問題ないんじゃないの?
- 70 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:03:06 ]
- >>69
二重解放つったら解放したアドレスをもっかい解放のことだろ?
- 71 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:04:35 ]
- deleteしただけで、0(NULL)になってるとは限らないんじゃないの?
- 72 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:32:43 ]
- とりあえず gcc だとなってないな
- 73 名前:デフォルトの名無しさん [2008/02/06(水) 23:35:43 ]
- 質問です。g++を使っています。O2 で最適化してます。
クラスの中で定義した関数は勝手に inline となるのでしょうか? inline をつけても意味は無いのでしょうか?
- 74 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:38:40 ]
- deleteした後自分で0をポインタに代入するというTipsがある位だからな
- 75 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:44:29 ]
- >>73
inline指定してるのと同じになる。 実際にinline化されてるかはコンパイラ次第。
- 76 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:48:07 ]
- ありがとう。何か勘違いしてたみたい
deleteした後nullになるわけじゃないのね WM_DESTROYが来た時点ではOSかが自動的にdeleteしちゃってるから多重解放 でエラーでかうのかな
- 77 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:42:46 ]
- OSは自動的にdeleteなんてしません
- 78 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:47:50 ]
- libhoge.so
をスタティックリンクすることってできるんでしょうか?
- 79 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:54:20 ]
- はい。それがスタティックリンクできるようなアーカイブやオブジェクトモジュールであれば。
- 80 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 03:40:14 ]
- >>77
じゃあ何でエラーでるの? newしたまま終了してしまっても最悪OSがエラー処理として解放してくれるって聞いたけど
- 81 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 05:19:50 ]
- >>80
エラーが出る事と自動的にdeleteする事を同列に考えるなよ そもそもソース出してないのに的確な答えが出せると思える? つーか自分で考えて答え出すか出たんなら帰れよ、必要最低限のレスは付いたんだから
- 82 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 05:55:50 ]
- 的確な答じゃないなら断言口調で書くなよ、紛らわしい。
- 83 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 06:04:00 ]
- >>81
その考えをおまえが否定したから聞いてきてるんだろ
- 84 名前:デフォルトの名無しさん [2008/02/07(木) 06:42:38 ]
- vector って大きさが可変のはずですが、vectorの配列のポインタ操作ってうまくいくのでしょうか?
たとえば以下のように double の vector の配列を作ったとします。 std::vector<double> a[3][4]; この vector 配列の要素ごとに違う回数だけ push_back() で値を入れたとします。 そして vector のポインターを引数にとる以下の関数があり void hogehoge (std::vector<double>* arg ){ for(std::vector<double>::const_iterator it=arg[0].begin(); it!=arg[0].end(); it++){ std::cout<<"arg[1] " } } その引数に a[1] を以下のように入れた場合は hogehoge(a[1]); arg[0]というのは a[1][0] をちゃんとさしてくれるのでしょうか?
- 85 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 06:44:38 ]
- 否定したんじゃなくて、ありがちなパターンに陥っていそうだから指摘しただけだろ。
- 86 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:16:58 ]
- >>84
当然さす
- 87 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:18:13 ]
- >>80
newしたまま終了って、main/WinMain すら終了した後の話だぜ
- 88 名前:84 [2008/02/07(木) 07:20:43 ]
- >>86
ありがとう! ってことは sizeof(vector<double> は要素の数にかかわらず値は変わらないって事か。 不思議。
- 89 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:23:40 ]
- >>88
意味が分からん。 ポインタに [0] をつけたら そのアドレスにあるオブジェクトを指す。 極めてシンプルな答え。
- 90 名前:84 [2008/02/07(木) 07:30:44 ]
- メモリを動的に作ってるからコンテナの要素が増えてもポインタは同じ所にあるって事か
- 91 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:31:39 ]
- vectorの中身はnewで確保したメモリへのポインタ(と管理情報)だからな
- 92 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:35:21 ]
- >>88
要素自体は動的確保されているからな
- 93 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:35:52 ]
- いいえ。
- 94 名前:デフォルトの名無しさん [2008/02/07(木) 09:42:52 ]
- vectorの中の要素をソートしたいのですが、そのとき、自分で定義した関数によって
ソートしたいです。どうすればよいですか?
- 95 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 09:45:44 ]
- vectorは連続領域に格納される(配列と同じように扱える)から普通にソートしたらいい。
- 96 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 10:00:45 ]
- >>94
std::sort
- 97 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:14:42 ]
- スタティックリンクとかシャードリンクとかそのあたりのことが勉強できるサイトありませんでしょうか?
- 98 名前:デフォルトの名無しさん [2008/02/07(木) 14:26:10 ]
- >>96
sort(vec.begin(), vec.end(), func); と書きたい時、funcはどういう風に書けばよいでしょうか? class func : public binary_function { bool operator()(const string &a, const string &b){} }; と書いてみたのですが、コンパイルも通りません。 どうかお願いします。
- 99 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:29:08 ]
- binary_functionでぐぐれ
- 100 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:30:57 ]
- >>98
厳密に言うとstrict weak orderingを満たすように書く ことになるが、 struct func : public binary_function { bool operator()(const string &a, const string &b) { return a < b; //辞書順で昇順 } }; sort( vec.begin(), vec.end(), func() ); とかでどう?
- 101 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:31:04 ]
- 質問です。
VC6.0で自前のライブラリをまとめたStatic Link Libraryを作っています。 そのライブラリを実際に他のプロジェクトで使う際、リンクのところで以下のように躓きました。 ・すでに LIBCMTD.lib(crt0dat.obj) で定義されています これを筆頭に、大量にリンク警告がでました。 調べたところ ttp://m--takahashi.com/bbs/pastlog/08900/08806.html libの方はシングルスレッドで。テストプロジェクトのほうはマルチスレッドでコンパイルしているのが問題のようでした。 両方マルチスレッドにしたところ… ・"libcmt.lib" は他のライブラリの使用と競合しています 今度はこれだけでました。 調べたところ ttp://m--takahashi.com/bbs/pastlog/03900/03888.html libがReleaseコンパイルで、テストプロジェクトがDebugコンパイルなのが悪いようでした。 libをRelease版とDebug版の両方をつくり、適切にリンクするようにしたところ、エラーがきえました。 ここで疑問なのですが、今後の汎用性を考えるとlibは ・シングルスレッドDebug版 ・シングルスレッドRelease版 ・マルチスレッドDebug版 ・マルチスレッドRelease版 をそれぞれ用意しておかなければならないのでしょうか? 一般的に用意されている"winmm.lib"などは、何も考えずにstdafx.hに #pragma comment(lib, "winmm.lib") と書いておけば、シングルスレッドだろうがマルチスレッドだろうが、DebugだろうがReleaseだろうが適切にリンクされました(警告やエラーでません) 自作のlibも同じくらい気軽に使えるようにするには、どのようにしたら良いのでしょうか?
- 102 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:32:02 ]
- おっと、
>>99を見て struct func : public binary_function<string, string, bool> { bool operator()(const string &a, const string &b) { return a < b; //辞書順で昇順 } }; か。
- 103 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:38:33 ]
- const が有った方がいいな。
- 104 名前:デフォルトの名無しさん [2008/02/07(木) 14:39:36 ]
- ハードディスクへの書き込みで、メモリへのキャッシュを自動で行ってくれる命令ありますか
- 105 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:52:29 ]
- おっと、
>>103を見て struct func : public binary_function<string, string, bool> { bool operator()(const string &a, const string &b) const { return a < b; //辞書順で昇順 } }; か。おれはconstをよく忘れる。
- 106 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:53:31 ]
- >>101
・Debug版は公開しちゃいけません ・現行VCはシングルスレッド版ランタイムがありません >>104 そんな「命令」なんてあるもんですか。
- 107 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:59:57 ]
- >>106
MFC等のデバッグ版DLLの再配布が禁止なだけで 自前ライブラリのデバッグ版配布は禁止じゃねえだろ。
- 108 名前:デフォルトの名無しさん [2008/02/07(木) 15:05:41 ]
- >>106
自前でキャッシュ用意しましたよ
- 109 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 15:16:46 ]
- >>106
101です お返事ありがとうございます。 >・Debug版は公開しちゃいけません 確かにそもそもDebug版は用意しておく必要ないですよね ただ、d3d9.lib も、デバッグ版らしき d3d9d.libというものがあります。 もしかして「Debug/Releaseで自動的にリンクを変えている」なんていうのは私の妄想で d3d9d.libは使われていないのでしょうか? >・現行VCはシングルスレッド版ランタイムがありません これはつまり、世の中に配布されてるlibはマルチスレッド版で作られており、 マルチスレッド版libは、シングルスレッドなプロジェクトで利用しても特に問題が起きないということでしょうか? (実際試してみたところ、シングルプロジェクトからマルチLibを呼び出してもエラーとなりませんでした) そもそも「_beginthreadを使うためにはマルチスレッド版にする必要がある」という認識しかもっておらず、 「マルチスレッド版にしないことによる利点」は知らないのです
- 110 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 15:21:59 ]
- >>109
まず、デバッグ版のlibがあるやつはpragmaで切り替えてるはず。 自分の作ったlibが物によって変わるのは、そいつの中でデバッグ版や MT版のlibを呼んでるから。 そういうの避けたければスタティックリンクしてしまうといいかも。
- 111 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:08:21 ]
- >>109です
>(実際試してみたところ、シングルプロジェクトからマルチLibを呼び出してもエラーとなりませんでした) これですが、勘違いでした。 やはり「マルチスレッド版のlibファイル」を「シングルスレッド版のプロジェクト」からリンクすると、 LINK : warning LNK4098: defaultlib "LIBCMTD" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください となってしまいました。 (上のは、Debugマルチ版LibをDebugシングル版のプロジェクトにリンクした場合の警告です) >>110 なるほど。hファイルあたりで、#ifdef _DEBUG やら色々としているのでしょうか。 >そういうの避けたければスタティックリンクしてしまうといいかも。 ちょっとこの意味合いがわからないのですが、詳しく教えていただけますでしょうか どこかのサイトへのリンクでも構いません
- 112 名前:デフォルトの名無しさん [2008/02/07(木) 16:26:09 ]
- 教えてください。
以下の式で、shinが偽になるのはなぜでしょうか? unsigned int a =10, b = 20; char shin = ((a - b) < (b - a)); (a - b) = -10, (b - a) = 10 なので、shin = 真になるように思うのですが。。。
- 113 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:29:04 ]
- unsigned同士の演算の結果はunsigned
- 114 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:32:12 ]
- int型変数(-32768〜32767)に-40000とか入れようとしたらどうなると思う?
- 115 名前:デフォルトの名無しさん [2008/02/07(木) 16:32:16 ]
- ありがとうございます
- 116 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:37:11 ]
- >>101
コンパイラオプション/ZlってVC6にない? これはobjファイルにLIBCMTD.LIBとかCRTへの参照を 埋め込まないようにするコンパイラオプション。 1つのlibで全てを賄えるようにもなる。 けど現実的には最適化・デバッグオプションの有無で、 少なくともRelease/Debugの2種用意すべきだと思うけど。
- 117 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:48:16 ]
- >116
Zlオプションを使ったところ、DebugプロジェクトからReleaseLibを使っても警告がでなくなりました。 ありがとうございます。 (最初 Zl が ゼット・アイだと思って混乱しましたw ゼット・エルですね) しかし、StaticLibraryの作り方を詳しく解説しているサイトって全然見当たりませんね…。 Lib側としては、Releaseだけ用意しておけばいいと思うのですがどうでしょうか? Libがバグっていないと仮定して利用するのが前提ですけど
- 118 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:51:38 ]
- >>101
winmm.libってwinmm.dllの単なるインポートライブラリでは? VCのランタイムをリンクしないライブラリならそういった問題は当然起きない
- 119 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:52:47 ]
- 別にReleaseだけでもいいと思う。
DLLだとデバッグ版も提供なんて話聞かないし。
- 120 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:02:19 ]
- >>118
あ、なるほど。そういえばlibにはもうひとつ「DLLとリンクするためのインポートライブラリ」という役目がありましたね。 winmmはそっちですか。 (拡張子変えればいいのになぁ…) >>119 了解しました。 >ALL 大変参考になりました。 ありがとうございました!
- 121 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:19:25 ]
- デバッグ版のlibを提供するのはlibをデバッグしてもらおうということじゃなくて、
それを使ったプログラムもLibのソースをトレースできるようにだよw
- 122 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:23:39 ]
- >121
誰への返事だ??
|

|