1 名前:デフォルトの名無しさん [2009/01/11(日) 11:21:38 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part65 pc11.2ch.net/test/read.cgi/tech/1230341243/
159 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 13:24:23 ] >>158 エラーメッセージは?
160 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 13:26:23 ] >>158 X のインスタンス指定が抜けてるよ。 std::tr1::bind(&X::funcB, this, _1) でいけるんじゃない?
161 名前:158 mailto:sage [2009/03/21(土) 13:46:42 ] >>160 であっさりうまくいきました! 昨日一晩の苦労が…。感激です。 >>159 thisがないときのエラーメッセージは(VC9ですが) 「error C2825: '_Fty': '::' が後に続くときは、クラスまたは名前空間でなければなりません」の後 「テンプレートのインスタンス化 'std::tr1::_Result_type1...' の参照を確認してください」という bind特有の長いメッセージが続きます。
162 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 14:21:43 ] 長文で申し訳ない。 >153 やっぱり 4.2.4 の挙動もおかしいと思う。 インスタンス化時点での名前解決の対象になるのは ADL のみみたいだけど、 そもそも、テンプレートパラメータに依存する dependent name に対するものだけなので。 ぴったりしたケースじゃないけど 4.3.1 に対してこんなバグレポもあがってるので、 gcc の挙動をそんなに信用できないと思う。 ttp://gcc.gnu.org/bugzilla/show_bug.cgi?id=36883 テンプレートパラメータに依存しないものならインスタンス化を待たなくとも結果は変わらない はずだし、遅延すると通常の名前に対するものと異なる直感に反する結果を与えかねないので、 定義時点で名前解決を行えばいい。 一方、テンプレートパラメータに依存する名前について定義時点のみで名前解決を行うとすると、 制約が強すぎる。例えば STL を使う場合、コンテナのヘッダをインクルードする前にコンテナの要素型と 必要な操作が宣言されていなければならない。 従って、インスタンス化まで名前の解決を遅延したいが何でもかんでも名前解決の対象にすると、 これまた直感に反する結果を与えかねない。 ということで、ADL のみに制限しているという理解。 ……なんだが、14.6.4 の規定自体に問題がある気がしてきた。 ADL じゃない lookup はインスタンス化時点では行わないようにも読めるんだが、qualified name lookup も インスタンス化時点で行われないと、dependent name な基本クラスのメンバにアクセスできなくなるので そんなわけないと思うのだが。 C++ Templates The Complete Guide では dependent qualified name もインスタンス化時点で名前解決されるって 書いてあるんだが、一方、インスタンス化時点で名前解決されるのは ADL のみという記述も結構見かける。
163 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 14:27:34 ] g++の挙動はおかしいから 有名なソフトじゃ禁止コーディング規約いっぱいあるよ C++のインプリで世界最悪なのがg++だし
164 名前:デフォルトの名無しさん [2009/03/21(土) 20:10:57 ] アンチg++必死だなw
165 名前:135 mailto:sage [2009/03/21(土) 20:28:38 ] >162 つまみ食いみたいなレスになりますが・・・ >gcc の挙動をそんなに信用できないと思う。 私もgccのbugzilla幾つか確認したけどアサインされてないバグって 結構いっぱいありますな。外野があれこれいうのもなんだけどあれで C++0x対応が収束するのやら。 > ということで、ADL のみに制限しているという理解。 そもそもオーバーロードは遅延名前解決の対象になるのか? 152の//3はnamespaceが違うのでget(void*)とはオーバーロードの 関係ではないわけで、そういう風に考えると、名前解決が遅延するのも 自然な気がしてきました(w f()内でget呼び出しがTに依存していないのにも関わらず 名前解決が遅延するのがバグであったとしても、 本来はTに依存させて使用するのが普通で、そのバグを 前提にしたロジックを組まなければ何とかなるかと。
166 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 21:19:05 ] >165 > そもそもオーバーロードは遅延名前解決の対象になるのか? > 152の//3はnamespaceが違うのでget(void*)とはオーバーロードの > 関係ではないわけで、そういう風に考えると、名前解決が遅延するのも > 自然な気がしてきました(w 名前解決(というより照合と呼ぶべきかもしれないが)とオーバーロードの解決は別のステップで、 まず名前の解決を行い、その後、名前解決によって発見された候補関数群から、呼び出すべき関数が 選び出される(これがオーバーロードの解決)。 なので、名前の解決が遅延された時点でオーバーロードの解決も遅延される。 ちなみに、private とかのアクセス制限が確認されるのはこの後。
167 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:01:10 ] >>163 >C++のインプリで世界最悪なのがg++だし いるいる、「絶対○○」とか「世界一○○」とか何の根拠もなしに比較したかのように語る人w
168 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 01:28:11 ] ここの住人は頭がみんな良さそう 名前空間なんて、 松坂大輔 宮川大輔 のようなものとしか理解してないんだがな、俺的には。
169 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 02:52:53 ] よくわからんけど、gccは新しいのでやってくれ。windowsもlinuxも4.3.3以前のは入れてない。
170 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:12:11 ] gccについて疑問に感じたのなら、本家のforumが待ってるよ。
171 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:44:02 ] >>169 gccの4.x系は、Linux上での動作はいいが、Windows上での動作は問題があるって聞いてるんだが。 だからMinGWも最新安定版はg++は3.4.5なんだと。 (アルファ版なら4.x系もあるだろうが。)
172 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 16:46:44 ] gcc の話は↓こちらでどうぞ。 GCCについて part8 pc11.2ch.net/test/read.cgi/tech/1192201659/
173 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 12:22:42 ] 聞いた話じゃなぁ
174 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:18:14 ] 心を振るわせる話なら信用するのに どうして鼓膜を振るわせる話は信用しようとしないのだ。
175 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:30:19 ] 質問です ソースファイルAでnewしたインスタンスを 別のソースファイルBでdeleteしたりしても大丈夫なんですか?
176 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:39:08 ] インスタンスの実体が対応してれば大丈夫だろ
177 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 01:03:40 ] 変な設計だとは思うけどな
178 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 02:43:52 ] コンストラクタをcppに書いて、デストラクタをインラインでヘッダに書けば普通に起こる状況だな
179 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 08:21:36 ] クロスDLL問題ってのとは全くの別物だよね? そもそもどうしてあれはダメなんだろ?
180 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 09:21:41 ] それは、それぞれでnewとdeleteの実装が別物だとうまくいかないという話。 msvcr90.dllですべて統一するとか、shared_ptrのようにdeleteごと渡すとかすればいい。 そして、コンパイラが違うとvtblやRTTIの形式が違うという話へ続く……。
181 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 09:28:56 ] そんな面倒事に悩まされる前に一つのモジュールに閉じ込める工夫に労力注げ…と
182 名前:179 mailto:sage [2009/03/24(火) 09:35:57 ] >>180-181 へーそういうことか。 ありがとう!
183 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:12:11 ] テンプレートの規則や仕様に 詳しくなれる本ってありますかね?
184 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:25:18 ] >>183 ない
185 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:26:32 ] >>184 嘘つくな洋書で一冊出てるだろ 教えろよ
186 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:27:32 ] >>185 詳しくなれるかどうかは別。 詳しく書いてるかもしれないけど。
187 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:29:14 ] c++ templatesとか c++ template metaprogramming とか
188 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 22:30:10 ] books.google.com/books?id=EotSAwuBkJoC&pg=PP1&dq=c%2B%2B+templates
189 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:24:12 ] C++編(標準ライブラリ) 第27章 例外クラス www.geocities.jp/ky_webid/cpp/library/027.html ここで紹介されている std::overflow_error std::underflow_error が起こる例は、例えばどんなのがあるの? 前者はともかく後者がわからん。。。
190 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 03:14:14 ] 標準じゃunderflow_error投げる規定は無さそうだな。 >189
191 名前:189 mailto:sage [2009/03/25(水) 09:38:25 ] >>190 そうなのか。 とりあえず作っちゃった謎の例外か? どうも。
192 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 11:17:10 ] std::underflow_error - Google Code Search www.google.com/codesearch?hl=en&lr=&q=std%3A%3Aunderflow_error&sbtn=Search
193 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:41:38 ] 0をboolに変換するとfalse, 0でない数をboolに変換するとtrueになるんだよね? これは分かる。 では falseをintに変換すると0, trueをintに変換すると1 ってのは仕様上正しい? 特に後者が心配でならないんだが、標準で1になることが保証されている?
194 名前:デフォルトの名無しさん [2009/03/25(水) 22:47:03 ] >>193 > 4.5 汎整数昇格 > 4 bool 型の右辺値は,int型の右辺値に変換することができる。falseは,0になり,trueは,1になる。
195 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 23:15:06 ] でも、int値をtrueと比較するのは危険なんだよね。
196 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 23:18:49 ] 別に気にするな 引き継いで逃げ切ればOK
197 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 23:30:32 ] if ( int値を返す式 ) { } は正常に動作するけど if ( int値を返す式 == true ) {} とやると意図したとおりに動かない可能性がでてくる 妙なルール。
198 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 17:19:01 ] >if ( int値を返す式 == true ) {} は if ( int値を返す式 == 1 ) {} と同じ動作?
199 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 18:56:19 ] うん。
200 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 21:25:19 ] 左辺をboolに変換して比較すれば問題ないのにな 変なルールだよな仕方ないけど
201 名前:デフォルトの名無しさん [2009/03/26(木) 21:26:34 ] 201
202 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 01:14:18 ] >>197 C が 0 以外は true と決めてたわけで better C としての C++ は、従うしかなかったんちゃう? まぁ、そんな言語は山ほどあるわけだが………
203 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 10:41:29 ] 比較とか論理演算とかが結果を0と1で返すから trueをそっちに合わせたんじゃね?
204 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 14:23:37 ] #define true 1 #define false 0 typedef char bool; 昔ありそうな超手抜き実装
205 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 14:24:25 ] 手抜き?
206 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 14:30:14 ] Exceptional C++を読むとboolの必要性が説かれている
207 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 14:44:47 ] int値をbool値に変換するのは情報の欠落が生じるけど、その逆は生じない。 だからint型とbool型を比較すると、暗黙の型変換のルールに従って、bool型の方がint型に昇格する。 結果、>>198 のようになって、意図したとおりに動かなくなる。仕様どおり!・3・
208 名前:デフォルトの名無しさん [2009/03/27(金) 21:09:51 ] C++の副作用に関して良く解らないので教えてください。 int a=0; int b=0; int func(int c){ b=a; return c; } このとき、 func(++a); を通ると、bに1が入ることは保障されますよね? func(a++); この場合はどうでしょうか? bに0が入る? bに1が入る? 鼻から悪魔?
209 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 21:16:01 ] >>208 関数を呼ぶ直前と、関数から戻った直後に副作用完了点がある。 だから、どちらもbは1になる。
210 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 21:22:54 ] >>209 有難うございます。
211 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 21:28:25 ] >209 すいません。もうひとつ教えてください。 && || ?: , 以外の演算子は副作用完了点ではないんですよね? 自分でオーバーロードした演算子の場合は 通常の関数と同じように関数に入る直前と戻った直後に副作用完了点はありますか?
212 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 21:32:31 ] >>211 ある。 ただし、最初にあげてる演算子をオーバーロードした場合、 組み込み演算子と違って、オペランドの評価順序が不定になったり、 ショートサーキットでなくなったりするのには注意。
213 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 21:42:28 ] 有難うございます。 たびたびすみません。 「オペランドの評価順序が不定になる」とは何ですか? 組み込み演算子でも一般的に不定だと思うのですが、 オーバーロードによって不定でなかったものが不定になる場合があるのですか?
214 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 21:53:18 ] あ、 組み込みの && || ?: , 演算子の評価順序のことですね? 自己解決しました。
215 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 22:22:27 ] printfで64bit値(u_int64_t)を表示したい。 32bit環境では %llu 64bit環境では %lu 両対応でスマートな解決法ってないものだろうか? define拾ってきて切り替えるくらいしか思いつかない
216 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:32:40 ] unsigned long long にキャストしていつでも %llu で表示する
217 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:35:15 ] VCとかは%I64uだったような defineで切り替えるしかないんじゃね?
218 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 00:21:24 ] 末尾にLがついてるのってlong int だよな?
219 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 00:25:57 ] >>216 その手があったか! 思考がループしてそこまで考え付かなかった。 thx
220 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 01:23:02 ] C99かC++0xでは<inttypes.h>のPRIu64を使う
221 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 19:28:24 ] >>220 それだと、uint64_t使えというところから始めないと。
222 名前:193 mailto:sage [2009/03/28(土) 19:54:02 ] >>194 あまりにもな遅レスすまんかった!! ちょっと私用が。。。 汎整数昇格 了解しました。 ありがとう。
223 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:31:56 ] 最近C++の勉強をはじめた者なんですが、n個のデータを打ち込んで それらの平均値や標準偏差を求めるプログラムを打ち込んだところ、 .\例題2.1.cpp(10) : error C2679: 二項演算子 '>>' : 型 'const char [2]' の 右オペランドを扱う演算子が見つかりません (または変換できません)。 というエラーが出てしまったんですが、なにが原因かさっぱりわかりません。 いつもと同じように打ち込んだつもりなのですが、原因分かる方いませんか?
224 名前:デフォルトの名無しさん [2009/03/28(土) 23:33:21 ] せめて例題2.1.cppの10行目くらい見せろよ
225 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:43:10 ] cout<<"nの値は?"; cin>>n>>"\n"; こうなっています。見たところどこにもミスはないと思うのですが・・・
226 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:45:32 ] >>225 cout<<"nの値は?"; cin>>n;
227 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:47:54 ] >>225 場合によって意味が変わるけど<<は出力、>>は入力 cin >>n nに入力された値を入力 n>>"\n"; 次に入力された値を"\n"に入力 だぞ? おかしいだろ
228 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:50:52 ] >>226 ああ、なるほど!入力と出力の指令が混同してましたね(汗) こりゃ動かんわ・・・どうもありがとうございました!!
229 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:00:58 ] 以下のようなコードを見たのですが、 これってC++のルール上、 ((T*)NULL)->function() は安全にコールできるんでしょうか? class T { void function(){ if (this == NULL){ return; } メンバにアクセス } } function() が virtual だとしたらヌルポ例外ですよね?
230 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:06:01 ] >>299 C++にnull_pointer_exceptionなんて気の利いたもんはない。多分OSがそのプロセスを殺そうとするだけだろう。 経験則ではメンバに触れなければ落ちないけど規格で決まってる訳ではないだろうからお勧めしない。
231 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:07:05 ] 誰もいないところにパスした。 >>230 は>>229 宛
232 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:13:00 ] >>229 ((T*)NULL)-> が現れた時点で未定義動作になる。関数の中身は関係ない。
233 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:20:21 ] >>230 >>232 ありがとうございます。
234 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:41:21 ] ((T*)NULL)->function() このfunction()をstatic関数にしてみるとどうだろう? 有識者のご意見を聞きたい。 class T { public: static void function(){} }; int main() { ((T*)NULL)->function(); return 0; }
235 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:43:43 ] 未定義。だいたいコンパイル通るのか
236 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:46:42 ] 通るよ
237 名前:234 mailto:sage [2009/03/29(日) 00:49:17 ] ちゃんと質問する前にコンパイル済み。 通ったよ。g++ね。 C++では (T*)NULL 自体は未定義じゃないよね? >>232 さんが言っているように >((T*)NULL)-> が現れた時点で未定義動作になる。関数の中身は関係ない。 なのだとしたらstaticだろうが何だろうが確かに未定義になるのだろう。 が、static関数なら実質的にグローバル関数扱いなのではと思っているので疑問だった。 staticなメンバ関数はstaticなメンバ変数にしか触れることができないじゃん。 >>236 チェックしてくれてありがとう。
238 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:54:50 ] c++でcキャストは使うべきじゃないよ。 >229
239 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:55:55 ] 今更そこに突っ込む不毛さ。
240 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:01:01 ] class Test { public: void func( void ){ std::cout << "test"; } }; int main( void ) { static_cast<Test*>(NULL)->func(); return 0; } メンバ変数に触れなければこれもコンパイル通って動きそうだけど さすがに未定義か?
241 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:04:39 ] >>240 括弧が足りなくないか?
242 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:06:19 ] ほぼ全ての環境で動くだろうけど未定義。 メンバ関数の呼び出しはつまるところ暗黙の引数thisを含む関数の呼び出しにすぎない。それがNULLであったとしても関数を実行するコードはあるので実行はされる。 でも未定義。
243 名前:237 mailto:sage [2009/03/29(日) 01:07:21 ] >>240 メンバ関数に触れていても通るよ。 コンパイラにはNULLかどうかなんてコンパイル時に分からない。 全く問題無く通り、実行時に鼻から悪魔が出て来ることとなる。
244 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:09:10 ] ところが >>237 が言っているstatic関数になると話は別じゃね? 俺はstatic関数に詳しいとかいうわけじゃないから知らんけど、 グローバル関数に無理矢理クラス内というスコープつけたものという認識。
245 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:21:49 ] >>244 未定義動作になるのは、オブジェクトを指していない参照に対して単項 & や sizeof など特殊な ものを除く演算子を適用した場合はいつでも。 アロー演算子 -> の右にあるのが何だとか関数が static だとかそんなのは関係ない。
246 名前:244 mailto:sage [2009/03/29(日) 01:27:35 ] >>245 へーそうなんだ、ありがと。
247 名前:237 mailto:sage [2009/03/29(日) 01:33:32 ] delete NULL; ってのがあったな。めずらしく安全な例で。
248 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:41:17 ] >245 ポインタだからいいんじゃね? 4.10 Pointer conversions (snip) A null pointer constant can be converted to a pointer type; the result is the null pointer value of that type and is distinguishable from every other value of pointer to object or pointer to function type.
249 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:43:30 ] >>248 p->x は (*p).x と定義されている。
250 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 01:47:04 ] キャスト演算子だけなら問題ないってことだろ。 ((T*)NULL);
251 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:09:54 ] std::vector<ポインタ型> v; というのがあって あるタイミングで v.push_back(アドレス); これやるとmemoty.stlの__rw_basis::data()で落ちるんです。どうやらタイミングとかが関係するみたいなんで どなたかエスパーお願いできないでしょうか?再現ができなくて申し訳ないんですが・・・
252 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:13:33 ] >>251 スレ違いです。↓へどうぞ。 pc12.2ch.net/test/read.cgi/tech/1187922645/
253 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:16:08 ] 環境書いてよ。それだけだとRogueWave製の標準ライブラリを使ってることぐらいしか分からない。
254 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 02:16:48 ] >>250 それはあたりまえ。だれもそんなところ問題にしていない。
255 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 10:59:55 ] __LINE__みたいに関数名表示するマクロありませんか?
256 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 11:02:31 ] 標準ではC99で__func__。 コンパイラ拡張なら色々。
257 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 11:34:03 ] ちなみにマクロじゃないぜ。
258 名前:デフォルトの名無しさん [2009/03/29(日) 17:40:26 ] 戻り値が指定されてる関数で、 関数の最後にreturnが無くても 関数の最後まで到達しないなら C++の規格上は正しくコンパイル、実行できることは保障されますか? たとえば以下のような記述は問題ないですか? int a(int n){ if (n){ return 0; } else { return 1; } } int b(int n){ if (n*n>=0){ return 0; } } int c(int n){ while(1); }
259 名前:デフォルトの名無しさん [2009/03/29(日) 17:45:52 ] 全部問題あります。