C++相談室 part9
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG(´∀`).。o(関連URLは>>2-5の辺り)
0369デフォルトの名無しさん
NGNG> #end
さらしあげ
0370364
NGNG複数行に渡るコメント/**/
は""の中にあるかも判断すると
コンパイラ作るのが面倒になるから
単純に最初の*/で判定してるってことで納得しました。
0371デフォルトの名無しさん
NGNG#ifndef __A__
#define __A__
int getvalue();
#endif
//a.c
#include "a.h"
int getvalue() { return 0; }
//main.c
#include "a.h"
int main() {
return getvalue();
}
//makefile
main : main.obj a.obj
bcc32 main.obj a.obj
main.obj : main.c a.h
bcc32 -c main.c
a.obj : a.c a.h
bcc32 -c b.c
というふうなプログラムをコンパイルしているのですが、
main.c をコンパイルすると getvalue の宣言がないと警告がでます。
一応実行は出来るようですが、どうすれば出なくなるでしょうか?
0372デフォルトの名無しさん
NGNGちげーよ
/*が来るとその後に*/が来るまでは何がこようとすべてコメントとみなして"があっても文字列としてみないだけ。もちろんint i;とあってもそれは単なるコメントと見なす。
0373デフォルトの名無しさん
NGNG>>371 extern お使いやす
0374デフォルトの名無しさん
NGNGとりあえずint getvalue();はint getvalue(void);にしろ
037511
NGNGなんだそりゃ!!!!
つまり"〜*/〜"は"〜*""/〜"と書けということか
0376デフォルトの名無しさん
NGNG0377デフォルトの名無しさん
NGNG間違いはなさそうだが、とりあえずプリプロセッサにかけたものをみてみろ。
037811
NGNGなるほど、よく考えたら当然だ
0380364
NGNGああ、なるほど!!
/* " */ "
先に/*があるから後の"が無視されて*/が文字列になってないのか。
0381デフォルトの名無しさん
NGNGまじ!?
結構細かいんだね。BCCって。
プロトタイプの場合、voidをつけないと関数呼び出し時に引数リストをどんなものにしてもコンパイラがエラーを出さないからつけたほうがいいよ。
0382デフォルトの名無しさん
NGNG~~~~?
0383デフォルトの名無しさん
NGNGC++ なら void 書いても書かなくても同じだと思うけど。
a.c/main.c か。
あと、__A__ とか、インクルードガードに _ 使う人多いんだけど、
いちおうダメだよね。
038411
NGNGそれはCの場合でC++では空の引数リストはvoidと同じ
0385デフォルトの名無しさん
NGNG何がだめなの?
0386デフォルトの名無しさん
NGNG.cだからCだとオモタ
038711
NGNG0388デフォルトの名無しさん
NGNGいいかげんに名無しに戻ったほうがいいと思うよ。
0389364
NGNG>後ろの"
/*の後ろの"
0390デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNG__FILE__とかか?
0393デフォルトの名無しさん
NGNGwsprintf でまず変換しようとしましたが、これは整数のみできないようなのです。
方法がありましたらお願いします。
0394デフォルトの名無しさん
NGNGprintf("%f\n",f);
これじゃだめなのか!?
0395デフォルトの名無しさん
NGNGstd::cout << f << std::endl;
じゃないの?
0396デフォルトの名無しさん
NGNGあ!できました。すごい!!
ありがとうございました。
0397デフォルトの名無しさん
NGNGあんたがすごいよ
0399C厨
NGNGごめん。スレ立てるまでもない・・・スレかと思っていた。
0400デフォルトの名無しさん
NGNGお願い
0401デフォルトの名無しさん
NGNGごめん。本当にごめん。
0402400
NGNG0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNGだめじゃない。でもC++らしくない。
0405デフォルトの名無しさん
NGNGでも
cout << "(" << number << ")" << endl;
っていうようなのはなんとなくダセエ
0406デフォルトの名無しさん
NGNGそゆときどうしてる?
0407デフォルトの名無しさん
NGNGfprintfを使っていマス
0408デフォルトの名無しさん
NGNGわしも。
0409デフォルトの名無しさん
NGNGそのうちの片方だけをusingすることは可能ですか?
0410デフォルトの名無しさん
NGNG0411デフォルトの名無しさん
NGNGusingする方法は分からないのだけれども
インラインのラッパを用意してやれば片方だけ使えるようになるよ
0412デフォルトの名無しさん
NGNGありがとう。
0413デフォルトの名無しさん
NGNG> あと、__A__ とか、インクルードガードに _ 使う人多いんだけど、
> いちおうダメだよね。
処理系が予約してるから、ね。俺は一度だけ、標準ヘッダのインクルードガードと
衝突して泣いた経験がある。
ただ VC++ みたく「処理系が勝手に _ 付きのインクルードガードをつける」場合に
は問題ないんじゃない? あれは重複しない文字列 (GUID) 使ってるし。
0414デフォルトの名無しさん
NGNG文字列にするにはどうすればいいのでしょうか?
0415デフォルトの名無しさん
NGNG0416デフォルトの名無しさん
NGNGもとのデータはそんなに正確なのかい?
0417414
NGNGまず初めは
float -> string -> float
みたいな処理をしても
一致させたいのです。
0418デフォルトの名無しさん
NGNGなんでそんなことを?
0419デフォルトの名無しさん
NGNG0420414
NGNGありがとう。がんばってみます。
0421デフォルトの名無しさん
NGNGfloat の全ビットパターンについて
sprintf(buf, "%.15g", f1);
sscanf(buf, "%g", &f2);
assert(f1 == f2);
を試してみたことがあるが、NaN,Infを除いて一致したよ。
0422デフォルトの名無しさん
NGNGスゲー、floatが32bitってことは43億通りになるんかいな?
0423デフォルトの名無しさん
NGNGたいして時間かからないでそ。
0424デフォルトの名無しさん
NGNGビットパターンのセットってintとかからキャストしてぶっこむの?
0425421
NGNGキャストで予期しない変換がおこると嫌なので、memcpy しました。
テストコードはこんな具合っす。
float f1, f2;
for (unsigned long u = 0; u != 0xFFFFFFFF; ++u) {
int e = (u >> 23) & 0xff;
if (e == 0 || e == 0xff) continue; // NaN or Inf
memcpy(&f1, &u, sizeof(f1)); // f1 = *(float*) &u;
sprintf(.... 以下 >>421 と同じなので略
PenIII 700MHz で2〜3日で終わったよ。
0426デフォルトの名無しさん
NGNGそんなにかかるのかー。一瞬自分もやってみようとしたけど
それを聞いておいて良かったw
0427デフォルトの名無しさん
NGNG複素数ライブラリってどうやって使うんですか?
0428デフォルトの名無しさん
NGNG0429421
NGNG実際に試したのは sscanf ではなく istringstream 経由の
istream >> float なので、sscanf なら3日もかからず早く終わるかも。
試してみるなら、途中経過を入れておくと良いっす。
if (u % 0x10000 == 0) printf("%08lx,%g", u, f1);
0431デフォルトの名無しさん
NGNGなにがスゲーんだ???
たいして時間かからないでそ。
SETI@home、UDはカレにおまかせ♥
0432デフォルトの名無しさん
NGNG献血と同じで無意味だ
0433デフォルトの名無しさん
NGNG0434デフォルトの名無しさん
NGNG献血も無意味だよ。
死ぬ奴は死なしておけば良いんだ。
0435デフォルトの名無しさん
NGNGその主張の先は、
「じゃキミ生きてなくてもいいよ。キミが生きてる事は俺には無意味だ」
とか「俺には迷惑だよ」となる
0436デフォルトの名無しさん
NGNGこ こ は C + + に つ い て
相 談 す る ス レ で す 。
0437デフォルトの名無しさん
NGNGf1≠f2
になってしまうのでしょうか?
int e = (u >> 23) & 0xff;
if (e == 0 || e == 0xff) continue; // 0 or Denormal or NaN or Inf
0438デフォルトの名無しさん
NGNGどっかにC++の規格書落ちてねえのかよ。
0439デフォルトの名無しさん
NGNG>>5
0440デフォルトの名無しさん
NGNGそれはまずかないですか?
0442デフォルトの名無しさん
NGNG何故?
0443デフォルトの名無しさん
NGNG売り物じゃないの?
0444デフォルトの名無しさん
NGNGNaNもしくはInfの場合は、
f1==f2がfalseになるからではなくて?
ってかNaNかInfの時ってf1==f2はtrue?false?
どっち?
0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNGしかし、allocation functionはアドレスを返し、返されたポインタがどうたら
と書いてあるところはある…。
アドレスとポインタを同一視してると思えるような文は所々にあるな。
0449デフォルトの名無しさん
NGNGなにがいいたいの?
0450デフォルトの名無しさん
NGNGポインタはC++ではアドレスなのか。そうでないのか。
規格書の記述ではわかりづらいが前者のようだということ。
0451デフォルトの名無しさん
NGNGそれが重要なの?
0452デフォルトの名無しさん
NGNG一応ね。人にポインタを説明する時に頻出事項だし。
ぜひ確認しておきたいことではあるね。
ただし、一般にアセンブラなどで使ってる「アドレス」とは
異なる意味でのアドレスだということは確かだな。
ポインタの値はimplementation-definedだとはっきり書いてあるし。
0453デフォルトの名無しさん
NGNG0454デフォルトの名無しさん
NGNGいや、そう思いやすいかもしれないけど、そうではないと思う。
implementation-definedでかつアドレスなんだと思う。
勝手に処理系がつけた値を「アドレス」と呼んでしまえば、矛盾しない。
言葉の定義の問題だけど。
0455デフォルトの名無しさん
NGNGimplementation-defined は、ようはどう定義しても間違いではないって
意味でしょ?例えば「aが整数だ」というルールがあったときに、
あんたはa=0だと主張しているに過ぎないんじゃない?
0456デフォルトの名無しさん
NGNGだから、もしも0という言葉が整数全体を表す言葉にも使える
ものだったとしたら(実際は違うけど)OKだよな?
あと、いくらimplementation-defined だと言っても
全く自由というわけではないぞ。当然他の規則と矛盾しない
ようにしなくてはならない。
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNGそうだが。
いろいろな記述を見るに、アドレスはポインタだと考えないとつじつまが合わない。
決定的なのはさっきのallocation functionの記述。
それから、constやvolatileに関してはアドレスがポインタだと明記してある。
例えば、allocation functionの説明でもアドレスはポインタだとして
解説してるようだが、それ以外にもconstやvolatileに関してはアドレスが
ポインタだとはっきり明記してある。
この場合は確実にimplementation-definedで、かつアドレスなんだよ。
0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNG本当に規格書読んだ?
ISO/IEC 14882:1998(E)
5.3.1
2
The result of unary & operator is a pointer to its operand.
0461デフォルトの名無しさん
NGNGん?その部分は勿論読んだぞ。
「&はポインタを返す」だろ。
でも、ポインタがアドレスとはその部分だけでは断定できまい。
「&がアドレスを返す」と書いてない以上。
まあ、&は「address-of operator」って名前らしいが…
しかし、それ以外のいろんな記述を見るに、アドレスがポインタらしいと
いうのが俺の意見。
0462460
NGNG046311
NGNGなだけでその他はそうであるとは限らない。ということだと思いまっせ。
0464デフォルトの名無しさん
NGNG文脈から見るに、その部分は「〜へのポインタ」という言い方をconstなど
に適用するとどうなるかを説明した文であって、そこだけアドレスがポインタ
だということを説明した文じゃないと思うわけよ。
それに、何度も言ってるように、他でアドレスとポインタを混同したような文がいくつもある。
比較的証拠っぽいのは14.3.2のプログラムのコメントとか、thisポインタが
アドレスだとかな。
046511
NGNGおおその通りだ。へたうった。例外はメンバポインタの場合だけだ
3.9.3.5 In this International Standard,
the notation {\it cv} (or {\it cv1}, {\it cv2}, etc.),
used in the description of Types,
represents an arbitrary set of cv-qualifiers,
0466デフォルトの名無しさん
NGNG適当にアドレスと書いたり書かなかったりしてしまってるように見える。
まあ断定は出来ないけど。
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNG% cp foo.pdf bar.pdf
できますが、何か? もしかしてパーミッションの問題か?
■ このスレッドは過去ログ倉庫に格納されています