boolやenumをintで代用する奴は氏んだ方がよい
1 :
デフォルトの名無しさん :
03/08/11 08:00 命名規約もドキュメントもなく何型かわかるはずもないのに 「チミはなんで勝手にboolなぞという型で受け取ってるのかね!これは列挙型だよ!君のせいで修正が大変だ」 とか言われると心底ムカつく。 みんなはどうよ?
ぬ
3 :
デフォルトの名無しさん :03/08/11 08:03
る
4 :
デフォルトの名無しさん :03/08/11 08:10
ぽ...
6 :
デフォルトの名無しさん :03/08/11 08:26
>>1 >命名規約もドキュメントもなく何型かわかるはずもないのに
プロトタイプ宣言。
MSのことか?
>>1 自分一人で全部やるのでまったく関係のない話だ。
enumをboolで代用しようとした
>>1 も死んでいいかもよ。
分からないなら聞けば良いじゃないか。
12 :
デフォルトの名無しさん :03/08/11 18:20
命名規約もドキュメントもなければまず関係者で話し合えよ。 五十歩百歩。
booleanをintでやる奴はしんでほしいとおもうが enumの場合はどうだろうか。 enum使用禁止言語もあるのだし
14 :
デフォルトの名無しさん :03/08/11 18:40
どうでもいいよ。 っところで1さぁ〜、昨日アキバに居たよね?テレビの取材受けていたのを見たんだよ。 アナ「今日はあの大人気の声優○○○○さんが来ています。」 1 「えぇ〜、ホントですか?ハァハァ」 アナ「・・・そんなに興奮なさらないでください(笑)。もし会えたら何したいですか?」 1 「えぇ〜っと、まず握手したいですねぇッハァッハァハァ・・・」 アナ「是非あなたに会いたいといっていましたよ。」 1 「ホントですかぁ?」 アナ「それでは呼んできます。目をつぶって待っていてください。」 1 (目をつぶる) アナ「目を開けてください!!」 1 (目を開けた!!) アナ「ドッキリ大成功!!!!!!」 1 「えぇ〜、俺をおちょくってんのか?」 (スタッフ登場) スタッフ「すみません、これはドッキリでして」 1 「嘘つくなんて、怒ったぞぉ」 その後1はアナを犯しまくったとさ
はっきりいってくそすれだとおもう
言わなくてもわかりますよ
なんか夏厨数名がage嵐てるようだな。暇な奴らだ。
| ?|\|/ | |? | |?∧?∧??|/⌒ヽ、| ∧_∧?| ∧∧ | |(,,゚Д゚)| |,,゚ Θ゚) |(; ´Д`)|(=゚ω゚ |
| ?|\|/ | |? | |?∧?∧??|/⌒ヽ、| ∧_∧?| ∧∧ | |(,,゚Д゚)||,,゚ Θ゚)|(; ´Д`)|(=゚ω゚)|
22 :
デフォルトの名無しさん :03/08/11 19:37
23 :
デフォルトの名無しさん :03/08/11 19:43
24 :
デフォルトの名無しさん :03/08/11 19:51
boolって1bitだろぉぃ。
boolって1bitだろ土井。
boolってtrueかfalseを表すもんじゃないの?
>>27 そうだよ、だから電子一粒で判定できる。
すなわち1bit
29 :
デフォルトの名無しさん :03/08/11 20:14
そうだよ、だから電子一粒で判定できる。 すなわち1bit
(´-`).。oO(サイズが1byteあるってことを突っ込みたいのだろうか?)
二重投稿しちまった・・・ セージしとこ
33 :
デフォルトの名無しさん :03/08/11 20:16
(´-`).。oO(サイズが1byteあるってことを突っ込みたいのだろうか?)
33 名前:デフォルトの名無しさん 投稿日:03/08/11 20:16 (´-`).。oO(サイズが1byteあるってことを突っ込みたいのだろうか?)
またやっちまったょ・・・ セージ。。
4Bytesでは?
33 名前:デフォルトの名無しさん 投稿日:03/08/11 20:16 (´-`).。oO(サイズが1byteあるってことを突っ込みたいのだろうか?)
38 :
デフォルトの名無しさん :03/08/11 21:16
arere? 1bitdattakke?
VCでは4よりバージョンが高いのなら1バイト、低いなら4バイト gccでは4バイト 後のコンパイラは知らん
>>40 BOOLのことか?
BOOLは
typedef int BOOL;
よく調べてからいえ、バカ
42 :
デフォルトの名無しさん :03/08/11 23:14
>>42 そうだな、ビッグエンディアンで96B391CAってところか。
(´-`).。oO(漏れのペニスのサイズも1byte)
int client; client = 1; if (client) { } とか書いてて int customer; とか出てきたから bool isCustomer で受けとったら customer = CT_ABC; とかだったんだよ。 命名規約で縛ってるわけでもないし、 ドキュメントもないしもう最悪。
テキストエディタなんか使わずIDEを使っていれば ちゃんと補完されてバグが未然に防げたのにな。
愚痴ならまいたでやれ
49 :
デフォルトの名無しさん :03/08/12 07:41
>>46 IDE厨発見
intって書かれてる時点でIDEに判別できるわけないやん。
ほんとIDE厨ってヴァカヴァッカ
誰か45をわかりやすく説明して。
>>50 int を bool の代わりに使ってるようだったので
似たような int 型の変数が出てきた時 bool だろうと思って
bool に保存したら実は enum 変数だった。
かな?
アホな職場に入っちゃったアホな1が悪い。
アホはアホを呼ぶ。
57 :
デフォルトの名無しさん :03/08/12 18:21
呼んだ?
intをboolやenumで代用する奴は氏んだ方がよい
>>41 だからBOOLじゃなくてboolだってば
60 :
デフォルトの名無しさん :03/08/13 00:39
>>58 ちょっと君、詳しく話聴かせてもらおうか?
ブーリアンとハンガリアンとエンディアンの中で最強なのは誰ですか?
先住民の奇術。
40 名前:デフォルトの名無しさんsage 投稿日:03/08/11 21:42
>>39 そもそもWin32APIが4Byte
( ´,_ゝ`) プッ
そもそも田村正和が4Byte
65 :
デフォルトの名無しさん :03/08/13 08:06
bool型のtrueが常に1だと思ってるバカがバグを出す。
C++のbool型なら、true==1が常に成り立つ。 まぁbool型を比較するような奴がバグを出すのは確かだな。
>>66 boolは1bitじゃなくて1byteでつ。
と思ったが内部は1bit扱いなのか? sizeof(bool)が1を返すから1byteかと思ったが、1と0以外代入 できないんだね。今知った。
>>71 1bitずつアドレス振ってるわけがないんだし、処理効率を考えても
わざわざ1bit扱いにしているとは、とてもぢゃ無いが考えられん。
昔の機械みたいにメモリ節約にこだわって、1byte内にいろんなフラグを混ぜるとかしてないだろ。
こうやって考えると、intサイズで扱ってると考えるのが自然だと思うぞ。
既出だがboolとenumのサイズは処理系依存
enumはそうだが、boolは違うだろ。
39 名前:デフォルトの名無しさん[sage] 投稿日:03/08/11 21:24 VCでは4よりバージョンが高いのなら1バイト、低いなら4バイト gccでは4バイト 後のコンパイラは知らん
sizeof(bool)が1を返してしまったうちのgcc (GCC) 3.2は逝ってよしですか?
sizeof(enum Foo) != sizeof(int) の処理系って実在する?
gcc -fshort-enums
Thanks. しね>おれ
スカボローフェア
ぱせり、せーじ、ろーずまりー、たいむ
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
84 :
デフォルトの名無しさん :03/08/16 11:13
_Bool は何バイト?
1bit
sizeof(_Bool)は何バイト?
>>86 規定では「0と1を格納できれば十分なサイズ」としか
書かれてないから処理系依存だと思う。
>>86 sizeof(_Bool)=size_tはほとんどの環境でintかunsingned intだろうな。
89 :
デフォルトの名無しさん :03/08/17 02:37
じゃあ #define bool _Bool はうまく働かない場面もあるわけだ…
>>89 なんで?
C++ の bool のサイズも実装依存よ。
>>89 そんなわけない。
#include <stdbool.h>
のことを考えれ。
>>91 なかでintで宣言されてたら爆笑だけどな。
論理型のサイズを気にする必要って何? いまどき論理型に整数型が代入できる言語を使う必要って何?
>>93 bool a = (bool)1;
C++、使いやすいから。
>>93 >論理型のサイズを気にする必要って何?
このクラス4(or 8 or 16...)バイトに収まるといいなっていう時に
sizeof(bool) == 4が成立すると男泣きに泣ける
>いまどき論理型に整数型が代入できる言語を使う必要って何?
論理型に整数型が代入できる必要はないけど
(少なくとも漏れの仕事/興味の分野では)C++に置き換わる言語がない
た、高木ブーリアン
typedef enum{ HOGE_1 = 1, HOGE_2 = 2, HOGE_3 = 3, HOGE_4 = 4 }HOGE;
>>98 あと一個boolをって場合にビットフィールド使ってint級のサイズじゃ役にたたんじゃろ。
アラインメント厳しい環境じゃ同じだろうけど。
というか typedef unsigned char OctalBool; でもいい気がするが。
ほしゅ
ほしゅ
ほしゅ
ほしゅ
かくしん
ぎねん
じゆうみんしゅ
みんしゅ じゆう
108 :
デフォルトの名無しさん :03/09/16 23:06
ああもうイライラする。booleanが1ビットとか1バイトとか、そんなん 関係無いだろう!何を勉強してきたんだおまいら。 bool型は trueか falseの2値しかないの! この2値を、どういう実装で内部表現するかは、処理系依存なの! 1ビットか32ビットか、1か全ビット1か、そんな事は高級言語で プログラミングしている場合は、言語処理系によって隠蔽されてるんだよ! boolをenumとかintで代用したり、あまつさえ強制キャストしてるようなやつは 逝ってくれ!
>>1 ==
>>108 必死だな。
>boolをenumとかintで代用したり
boolやenumをintで代用だろ。
C言語ははたして高級言語か否か?
じゃあ中級
高級でもあり低級でもある。 つまりrangeが広いわけですな、と。
boolはtrue,falseの2つの値しか取らないが、 実際のメモリ領域は1バイト使っているという罠
本物のプログラマはboolなんて使わない あらゆるデータ型はintかその配列で表現できる
本物のプログラマにはなりたくないですね。
文字列とかfloat型までそうするのはキモイ
キモイというか、ただのアホ。まあ
>>114 は明らかに釣りなんだけど。
少なくともパソコンに限ってなら浮動小数点ユニット内蔵してるわけだし。
でもね、bool使える環境なら使うのが当然だよ。
intで返す関数は、0が真なのか0以外が真なのかとか、エラーは0なのか-1なのかとか
使うたびに調べなきゃならないでしょ。
boolならtrueが真、falseが偽って決まってるからね。
高級言語でメモリ占有量を考える必要がない言語でなぜ整数に char, short, int, long, long longなど多様な型があるのか? float, doubleもしかり。
>>117 C言語を使ったことがあるひとなら、
1が真で、それ以外は偽であることを常識として知っているはず。
>>119 1が真であるとは定義されていないとオモタが??
>>118 お金持ち対象の高級車にいろんな車があるのはなぜか?
「一番良いの」が一個あればいいじゃん?ってことか?
メモリ占有量を考えてハァハァしる!! 「俺はいま80byteメモリーを節約してるぅぅぅぅぅうぅぅぅぅ!!」 ハァハァ♥
123 :
デフォルトの名無しさん :03/09/17 20:42
>>119 >C言語を使ったことがあるひとなら、
>1が真で、それ以外は偽であることを常識として知っているはず。
age
>>121 あぁ。沢山ある意味はなく、
見栄とか気分で変えるとかそういうことか。
ばかだなあ。 もじれつでだいようすれば、 trueかfalseかなんて、あたいをみれば いちもくりょうぜんじゃないか
『プログラミング言語C第2版(訳書訂正版)』によるとこのような記述がある。 A7.9関係演算子(P254) 演算子(略)はすべて、指定された関係が成り立たなければ、答えとして0を出し、正しければ1を出す。結果の型はintであり(後略)
へー。 漏れの中では 0 - false !0 - true なんだが、これはどこから来たルールだろ? あとCにかぎらなければ BASIC は -1(全ビット立ってる)が true だったりするよな。 あと C++ だと結果の型は int ではなく bool になる。 C++ で条件式の結果の型として int に拘る必要性は 0 だよな。
おまえら入門書からやり直せ
>>127 > BASIC は -1(全ビット立ってる)が true だったりするよな。
ASCII Code で Delete が 0x7F になった理由が思い浮かんだ。
130 :
デフォルトの名無しさん :03/09/18 23:48
>>114 >>118 そういう人は、アセンプラを使うべし。
わざわざC言語や他の高級言語が存在する意義を分かっていない/分かりたくないならばね。
多様な型は、C++風に言うなら、多様なクラスであるわけよ。
int a=1;
int b=2;
int c;
c=a+b;
において、intはクラスであり、+や=演算子は intクラスで使用出来るメソッドだと
考えるわけだ。intでなくても、floatや、あるいは charなど、いろいろな型に
ついて、「使える」クラスが言語に内包されている、それが高級言語なのよ。
またC++厨を装うJava厨が出た。 日本人を装う在日のように後を絶たないな。
今月のCマガの特集の両方でこのスレの主題に被る話やってますな。
Cにおいて偽は0で、真は0以外。 関係式、等価式、論理式では型はintで偽は0で真は1。
C++にはboolがあるからintで真偽を表すなよ
>>133 ちなみに、NULLポインタは0だから、ポインタも同じことが言える。
Cはうまく出来てるよな。
char *p = malloc(1024);
if( p ) {
‥‥
まだ、
>>133 とか
>>135 みたいに言ってる奴いるのか...。
>>126 みてないのか ?
「真なら 1」 で、「0 以外を真と解釈する」だけのことだろ。
たぶん表現力がないということだと思うけど、いつまでも「真は0以外」とか言ってるとバカみたいだぞ。
ついでに、「NULLポインタは0」もいろいろ物議をかもし出すから、止めとけ。
NULLと0の同一視イクナイ!
NULLを0とか言ってるやつは、COBOLのHIGHVALUEとかLOWVALUEから勉強し直せ。
>>137 演算子以外で論理値を返すやつってなんかある ?
isxxx() が怪しいんだが、ググルと 真/偽 を返すと書いてある奴と 0/0以外を返すと書いてある奴の二通りがある。
規格ではどっちが正しいんだ ?
>>138-139 ほらぁ、もう何匹も寄って来ちゃったジャン。 >
>>135
>>141 論理形を持ってる言語 (例: Pascal) でも if XXX = TRUE then なんて書くやつはバカ。
単にソース上無駄な (=みづらい) だけだからな。
(でもこっちの方が意図が明確に伝わるとか言う奴がいるんだよな...。俺には理解できんが。)
だから、XXX がホントに TRUE/FALSE しか返さないとしても if(XXX == TRUE) なんて書くやつはバカ。
XXX が整数値を返すと知ってて if(XXX == TRUE) とかく奴は、プログラマに向いてない。
C 言語で、TRUE/FALSE に 1/0 以外を定義してる奴は、今すぐ死んだほうがいい。
>>141 IsDiffValue なんていう意味が取りやすい変数名を使ってるにもかかわらず、
TRUEと比較するのはなんでだろ
>>143 ん ?
MS のソースにそういうの (= if(xxx == TRUE)) がいっぱいあるのか ?
できたら、その情報ソースを教えてくれ。
>>144 「IsDiffValueの戻り値は」と書いてあるのもかかわらず、
変数と思っているのはなんでだろ
if (XXX != 0)を使うけどね。 見づらくてバカですか。そうですか。
XXX が整数値ならそれでいいだろ。
>Cにおいて偽は0で、真は0以外。 これの何が馬鹿みたいなんだ?
>>148 0以外は「真」で、「真」は1なんだよ。わかる?
逆も通じるとは限らないのだ。
>>148 ,149
おまいら、言ってることは最終的に一緒なんだからべつにどっちでもいいだろ。
また、ヴァカがでてきたよ...。
>>150 同じに聞こえるか? そうか。でも違うんだよ。よく考えてみな。
わからんか、そうか。じゃあ仕方が無いな。
だから、「馬鹿みたい」って言われるんだな。
150が馬鹿みたいだからといって 馬鹿みたいなのが150とは限らない
>>146 誰かがその書き方をバカだと言ったか?
だが、142を読んでそう思ったのなら、146がバカということになるな。
>>154 そうか。
>>142 は整数型なら
if (XXX == TRUE)
ではなく、
if (XXX)
と書けと言ってるように読めたからね。
まあ、馬鹿なのは否定しないけど。
148と149の言ってることは、理屈的には一緒。でも・・・ a=(b==c); って場合に、aは0か1しか無い。(0=偽、1=真) if(d) って場合は、dが0なら偽、それ以外は真って判定するってことだろ。 これをゴチャゴチャに考えている香具師が大杉ってことなんだよな。
整数型→論理型変換 0は偽 非0は真 論理型→整数型変換 偽は0 真は1
整数型 includes 論理型
論理型 inherits 整数型
論理型 belongs 整数型
Lonly-guy loves 青春.
lonely ?
163 :
デフォルトの名無しさん :03/09/23 23:24
>>142 >論理形を持ってる言語 (例: Pascal) でも if XXX = TRUE then なんて書くやつはバカ。
>>149 >0以外は「真」で、「真」は1なんだよ。わかる?
上2者の言ってる事が正しい。分からないやつは、Cを使うべきではない。
というか、分からないやつは、ここに来る前に勉強すべき事があるだろ。
Cにおいて真は1だと例外もなしに言い切ってしまえる奴は ここに来る前に勉強する事があるんじゃないか?
165 :
デフォルトの名無しさん :03/09/24 00:14
>>164 例外はありませんが、何か?
一連の書き込みを読んでないのか、読んでも理解できない頭なのか・・・
単なる煽り文だけ書いてもむなしいだけだぞ。
166 :
デフォルトの名無しさん :03/09/24 00:22
enumかずき
>>165 if(2){printf("こっちにくる");}else{printf("こっちにこない");}
何か感想は?
168 :
デフォルトの名無しさん :03/09/24 00:28
>>167 それは「0以外は真」だろう
「真は1」というのは、条件式を数値として評価した場合、
・条件式が真の時 1
・条件式が偽の時 0
になることを言っているんじゃないか
0以外は「真」で、「真」は2なんだよ。わかる? 逆も通じるとは限らないのだ。
>>171 日本語おかしいよわかってる?
2は真だが
真は2じゃない。
真は0以外だ。
>0以外は「真」で、「真」は1なんだよ。わかる? 俺にはこれは論理的におかしいとしか思えないのだが 0以外は「真」で、1は「真」なんだよ。わかる? これならわかるんだけど
>>173 俺には2つめの「真」が太字で赤色に見える
175 :
デフォルトの名無しさん :03/09/24 00:50
>>173 はぁ、そうか理解できないか。
じゃあ、こう言いなおそう。
0以外は真として解釈される。
真の値は1である。
つまり、0以外は条件式において1として解釈される。
これならオケ?
繰り返すが、真は1で、これ以外の値をとることはありえない。
int a=2;
a = !!a;
さて、aの値は?
booleanのなかった(過去形)Cではこういった不毛な議論が繰り返されるのです。 彼が自演してまで主張していた事はC99やC++では _Bool(bool)型を整数型に変換するとfalseは0になり、trueは1になる。 と簡単に言い表す事ができます。 でも1は真じゃねーだろ。
問題を整理しよう。以下のように3つの命題を定める。
P:ある変数 x が 0 以外である。
Q:ある変数 x が 1 である。
R:ある変数 x が真である。
P -> R は全員に認められているようだからいいとしよう。
ここで 1 は 0 以外であるから Q -> P は
>>126 の解釈に関係なく成り立つ。
なので P -> R を認めると三段論法により Q -> R もなりたつ。
なので問題は R -> Q と R -> P のどちらが妥当かということになる。
>>126 では R -> Q だという話だがどうか。
ごめんなさい、三段ショウロンポウとかわかりません。
ここで R:ある変数 x が真である を R1:ある変数 x は真と解釈される値である と解釈する派と R2:ある変数 x は真を返す演算結果の値である と解釈する派 がいるのが混乱の元だろう。 R が R1 なら R1 -> P が妥当だし R が R2 なら R2 -> Q が妥当だ。
>>177 ここまでの展開で分からないヤシにはそれは理解できん気がする
三段論法とは今の場合 (Q -> P かつ P -> R) ならば Q -> R が成り立つということ
int型の0はconditionとしてはfalseと解釈される。 int型の1はconditionとしてはtrueと解釈される。 int型の2はconditionとしてはtrueと解釈される。 int型の3はconditionとしてはtrueと解釈される。 以下同上 conditionのtrueはint型の値にすると1になる。 conditionのfalseはint型の値にすると0になる。 0も1も真でも偽でもねぇ、おまいらお型付けちゃんと出来てますか?
>>175 0以外は真として解釈される。
つまり、0以外は条件式において真として解釈される。
これならオケですが、なんで途中で変なの入れる訳?
>>175 IsDiffValue関数の場合
>繰り返すが、真は1で、これ以外の値をとることはありえない。
これはうそになるが?
つまり、視点が違うだけで、どっちも正しいってことでつか? じゃあ、Cにおいて偽は0で、真は0以外。は馬鹿みたいじゃないってことでいいでつね
スレタイ忘れたか? boolをintで代用する奴は氏んだ方がよいってことでいいでつね
188 :
デフォルトの名無しさん :03/09/24 02:44
>>166 それは、そうと
なんで2時とかの時間帯なのに活発なんだ?
仕事は
?
boolやenumをintで田代する奴は氏んだ方がよい いやホントに
>>186 オマエはバカ。
バカはオマエ。
なるほど、どっちも意味は通じるな。じゃあ、それでもいいよ。
>>191 はバカ。
>>191 はオカマ。
なるほど、どっちも意味は通じるな。じゃあ、それでもいいよ。
おまえの物は俺の物 俺の物は俺の物
しかし規格も変に成り立ったら 1 を返すなんて規定しなきゃいいのにね。(
>>126 参照)
素直に、成り立ったら "0 以外" を返す、としとけば問題なかったと思う今日この頃。
どうしても、0, 1 が欲しいときは、(条件式 ? 1 : 0) でいいんだし...。
とにかく、0は偽なんだな。 じゃあいいじゃん。1も含めて0以外を真にしちゃえば。
関係演算子がそうだというだけの話なのに
おまえら氏んだほうがいいよ。
200(σ^▽^)σゲッツ!!
201 :
デフォルトの名無しさん :03/09/26 07:39
Cにおいて偽は0で、真は0以外。 関係式、等価式、論理式では型はintで偽は0で真は1。
boolなんてきもくて使えない。
BOOL以外の値をBOOLで解釈するな
205 :
デフォルトの名無しさん :03/09/26 08:57
でも1は真じゃねーだろ。
1を評価すれば真になる
>>202 だから、なぜわざとひねくれた言い方をするのだ?
0は偽で、0以外は真。これでいいだろう。わざわざ逆の言い方するな。
だから頭悪ーって言われるんだよ。
ぶっちゃけどっちでもいいよ ぶっちゃけ全員氏んだ方がいいよ
ま、とにかく1を真と解釈してもいいからさ、条件式の比較で1と比較さえしなきゃいいのよ。Cにおいては。
if ( 0 == i == 1 ) { printf( "i は 0です\n"); }
boolをつかおう
213 :
デフォルトの名無しさん :03/09/30 21:26
もっとboolを使おう
#define TRUE 1
#define blur bool
みんな vector<bool> はどうしてる? おれは ちょっといやだなあと思いつつも 使っちゃうけど。
boostにdynamic_bitsetってカンジの名前の動的なbitsetがあると聞いた気がする
221 :
デフォルトの名無しさん :03/10/09 01:41
>>221 vector<bool>はSTLではない。
てかそれくらい自分で作れよ。
結局、0以外の数は1ってことですか?
>>210 if (1== (hoge==fuga))
>>224 ゴメン、当たり前すぎて
わざわざ言う事じゃなかったよね。
227 :
デフォルトの名無しさん :03/10/09 22:07
>>222 それが
#define TRUE 1
と何の関係が?
>>216 vector<bool>はSTLではない。
てかそれくらい自分で作れよ。
229 :
デフォルトの名無しさん :03/10/19 15:06
>>228 vector<bool>もないようなショボイ環境使ってんじゃねーよ
230 :
デフォルトの名無しさん :03/10/19 15:11
このスレの名言
************************************************
vector<bool>はSTLではない。
by
>>222 ************************************************
>>229 ハァ?きみオツム足りないの?
>>230 ゴメン、当たり前すぎて
わざわざ言う事じゃなかったよね。
232 :
デフォルトの名無しさん :03/10/19 18:42
233 :
デフォルトの名無しさん :03/10/19 18:49
vector<bool>をいちいち自作する奴は馬鹿
vector<bool>はSTLではないなんて当たり前すぎるよね。 何? プログラミング言語C++第三版のP531 16.3.11に載ってるvector<bool>は何かって? そんなのBjarne Stroustrupが勝手に言ってるだけだろ。 俺がvector<bool>はSTLではないって言ったら、vector<bool>はSTLでは無いんだよ。 分かったか知障ども。
235 :
デフォルトの名無しさん :03/10/19 19:04
vector<bool>は仮にSTLでなくても標準で定義されているわけで、 いちいち自作するのは馬鹿。
>>234 こういう事(詐称)する人って本当にいるんですね。正直怖いしキショい。
もうレス番号つけて書き込みません。
そういうことか。やっと納得した。<vector<bool>
239 :
デフォルトの名無しさん :03/10/19 19:31
std::vector<bool>なんて糞なクラス使わずにboost::dynamic_bitset使え。
240 :
デフォルトの名無しさん :03/10/19 23:40
boost も準標準だと思うが
サポートされていない標準に意味はあるのでしょうか?
結局省略を認めると認識に間違い(?)ができやすいからオレは好きじゃない。 if(a==TRUE)は正直ありだとも思うが、まあ互換性を考えたらやめたほうがいいんだろうな。 上のほうでif(2)は真だからドウのと書いてあるがこれも結局 if( 2 != FALSE ) なだけで、結果真(1)が返るからif構文の中が実行されるのである。 if( 2 == TRUE ) じゃ実行されないからTRUEを比較に使うのはよろしくないな。やっぱ(ワラ
bool型で != false を省略するのはいいが、 他の整数型やポインタでやらないで欲しい。 「もし 顧客情報ポインタ なら処理する。」 「もし 在庫数 なら処理する。」 日本語だったら、こんな風に書くやついないだろ?
日本語じゃないからな。
自然言語では冗長さや言葉足らずがあるからな
>>249 あれは省略ではなく
むしろ付ける方が蛇足というものなんだが
>>250 つまり本物のプログラマは通を気取るために
「もし在庫数でないならば出荷処理する。」
「もし顧客情報ならば顧客情報を表示する。」
とわざと一般人にはわからないように表現するという事ですね?
本物のプログラマはそんな中途半端に冗長な文章なんか書きません。
>>252 馬鹿にもわかりやすいようにコード上での表現を日本語にしてあげたんですけど、
それすらも理解できない馬鹿がいるとは驚きを禁じ得ません。
255 :
デフォルトの名無しさん :03/11/01 04:56
>>253 ( ´_ゝ`)フーン 一般人にソースコード理解してもらって何が嬉しいの?
>>255 if(p) {}
と
if(p!=NLLL){}
と
どっちが判りやすいか、おまえには判るか?
もちろん前者ですね。
俺も前者だな
ポインタの場合は特に if ( p ) や if ( ! p ) の方が自然と理解できる
俺は後者だな。
261 :
デフォルトの名無しさん :03/11/01 12:24
>>256 > if(p) {}
> if(p!=NLLL){}
operator void * () とか
いくつかの cast を overload してたら
意味が同じでなくなるかもね
const もまともに使えない C 厨房が大量にスレに巣食っているな。
>>256 後者だよ。
>>261 このスレはスマートポインタの場合なんて考えられない人ばかりみたいだよ。
それよりも NULL は使わずにあらゆるポインタにキャストできて、その値として 0 を返す Null クラスを作ってそれと比較するほうがいい。
>if(p) {} >if(p!=NLLL){} この二つがコンパイルできて、且つ違う意味になるような多重定義をする奴は糞
>>263 >const もまともに使えない
どっからこんな話でてきた?オマエの勝手な妄想だろ。この妄想厨が。
後者を選択する人はいっぺん医者に見てもらったほうがいいですね。
>>266 前者派だが、そんなことは思わんよ。どっちでもいい。
俺も前者派だが、 if ( NULL != p ) とか書かないなら、別に気にならない
>>266 は、後者選ぶ奴は眼科いけって意味だと思うw
自分で作ったものは前者 ライブラリなんかで 「〜した場合はNULLを返す」 とか説明が書いてある場合は後者
>>270 禿同。俺も、整数型について、
if(n)
とかやるけど、
if(strcmp(...))
はやらない。
>>270 自分が作った関数の説明をどのように書いているか、興味があるんだけど。
>>272 個人でしか使わないが
たいていはoperator bool定義してるから。
void*のほうがいいんだろうけどね。
>>274 NULLが全bit0かどうかは処理系依存だけど
if(NULL)は必ず偽になるし、0を代入するとNULLになるのは規定されてる
>>269 やっとわかった'NLLL'を選んだらダメだろ
>>275 >NULLが全bit0かどうかは処理系依存だけど
プ
まあそりゃ単なるdefineだから1かも2かもしれん罠。
そんなイタズラは別として、おまえ勘違いしてない?
もしくは勘違いしているのは
>>274 かも知れない。
ヌルポインターは必ず0ですよ? Cではね。
たいていは
#define NULL 0
だが、古いコンパイラには
#define NULL (void *)0
なんてのもあるかもね。
しかし、
#define NULL 1
などはありえません。
NULL と「ヌルポインタ」を混同している人がいるような気がします。
NULL と「ヌルポインタ」を同一視できない人がいるような気がします。
「ヌルポインタ定数」と「ヌルポインタ」を(
>>282 何が言いたいの? 知らなかったの? 勉強不足だね(w
NULLの値 と「ヌルポインタの内部表現」を混同している人がいるような気がします。
>>286 正解。
私なわけだが。
逝って来るよ。
そういえば某所に0.0は必ず全ビット0になると言っていたやつがいたな。似たようなものか。
IEEE754ならそうなるが -0.0のことを言ってるのか?
>>289 > IEEE754ならそうなるが
そんなこと言ったら、NULL で全ビット "0" になる処理系なんか腐るほどあるぞ。
>>291 >そんなこと言ったら、NULL で全ビット "0" になる
紛らわしいからおかしなこと書くな。誤解してる奴も多いし、お前も誤解していると思われるかも。
「ヌルポインターの内部表現」と書けば?
>>291 IEEE754のサポート率ってそんなに悪かったっけ?
IEEE754の単精度(4bit),倍精度(8bit)浮動小数点数は 0.0が全ビット0 -0.0がMSBが1で残りの全ビット0 参考までに
ヌルポインタの中の人(ry
>>292 確かにそうだな。
指摘ありがと。
>>293 サポート率がいいからどうしたと言うんだ ?
>>296 > サポート率がいいからどうしたと言うんだ ?
IEEE754非準拠のアーキテクチャは稀だから
0.0は全ビット0でほぼ正解だということ
標準C++にこだわりをもってコーディングしてるのに 浮動少数をゼロフィルしてたら片手落ちと言うものだろ
>>298 > 標準C++にこだわりをもってコーディングしてるのに
すまん
>>288 以下では初耳なのだが
>>297 「ほぼ」正解って何だよ。
そんなこと言ったら、ヌルポインタの内部表現が全ビット "0" って言うのも「ほぼ正解」じゃないのか ?
>>288 は、「必ず」って言う奴がいたからあげつらってんだよ。
>>299 標準C++にこだわりが無いなら
わざわざこんな議論をするまでもなく好きにしたらいいやん
NULL や 0.0 が全ビットゼロでない環境を使っているやつなんてほんとにいるの? 現実劇にはほとんど困らないんじゃねーの? 自己満足的な議論としか思えないんだが。
そういうことを言い出すと basic_string::c_strの領域に書き込んでもいいとか、 ベクタコンテナからT*ポインタを取り出すのにvector<T>::beginを使っていいとか そういうことになるだろ
>>303 > basic_string::c_strの領域に書き込んでもいいとか、
> ベクタコンテナからT*ポインタを取り出すのにvector<T>::beginを使っていいとか
このあたりは、問題の発生する環境を何度も見たが、
今回問題になってるあたりは(一生出会わないくらい)レアなんじゃないのってこと。
実際にゼロでは困る環境を挙げて欲しい。
将来出てくる可能性とか思いつかんのか。オマエはCOBOLerか。
よほど特別な理由がない限り将来国際規格非準拠の処理系が出るとは思えないのだが
将来のハードウェアの進歩によってIEEE754が拡張された規格が出来るとしても 互換性は残すと思われる
じゃあそう思ってていいよ。 自己満足的な議論を吹っかけてくんなボケ。
302の時点で自己満足的な議論と結論付けてる奴が議論しようとしてるのでそれを指摘したまでですが何か?
>>306 >よほど特別な理由がない限り将来国際規格非準拠の処理系が出るとは思えないのだが
NULLポインタの内部表現を全ビット0にするってのは国際規格になりましたか?
>>312 NULLポインタの内部表現は規格以前じゃボケ
全bitが0だと完全に仮定してプログラム書くと何か利益あんの? 大して利益無いから規定されてないものだと思うのだが。 あるとしたらfloatとかポインタとかが詰まってる構造体をmemsetで0埋め出来るぐらいか?
>>315 struct SOMESTRUCT {
UINT cbSize;
... // ポインタ、浮動小数など
};
SOMESTRUCT s = { sizeof(SOMESTRUCT) };
Windowsプログラムだと頻出しないか?
printf("%d", (void *)0); とかね。
>>316 おいおい、それは
SOMESTRUCT s = {sizeof(SOMESTRUCT), 0, 0, 0, /* ..... */};
と等価なんじゃないか?
そういや、整数のゼロは、全ビット0って決まってるの?
分かったから何?そんな話になってたか?
ここって何のスレ? 1.boolやenumをintで代用する奴は氏んだ方がよいと思うスレ 2.Nullポインタとfloatの0.0の内部表現は全ビット0がいいと思うスレ どっち?
>>324 2の補数表現だと決まっているのかどうかが問題なのでは?
1の補数表現でもそうだ
C/C++では数値の内部表現についてまで規定されてないから 直接メモリを弄くって内容を書き換えるのはよくないってことだろ
結局、ゼロ初期化するつもりで memset(&obj, 0, sizeof(obj)) してはいけないってことか。 すげー不便だ。
>>328 objがクラスなら、それは危険だし
古い単純なデータ構造なら
DATA data={0];
obj=data;
これで簡単に0埋めできるよ
>>329 いや,0埋めしたとき浮動小数点数が0.0になるとは限らないとかいうから駄目なわけで
struct A { int i; float f; }; A a = {0}; は A a = {0, 0}; と等価で A a = {0, 0.0}; と等しくなるから、この場合は問題ない。
332 :
デフォルトの名無しさん :03/11/05 03:44
template<class T>inline void zeroset(T&o){o=0;} template<class T>inline void zeroset(T*p,size_t n){while(n--)zeroset(*p++);} classの類は特殊化しちゃえばいいし。 配列を楽に初期化したければマクロになるのかな #define ZEROSET(x) zeroset(x,sizeof(x)/sizeof(x[0])) double array1[N]; ZEROSET(array1); anyclass array2[N]; ZEROSET(array2); このようにして、自分で作った多倍長整数や、任意長浮動小数点数、 どこかで拾ってきたclassやcomplexやvector系など どんなオブジェクトでも同じ扱いでzero初期化すると愉快か。 しかし、そもそも0という数値そのものが 汎用性の無い特殊なマジックナンバーと考えることもできる。 幾何平均を求めるときは0ではなく1で初期化だし。 0といえば初期化、初期化といえば0という固定概念は褒められたものではない。 何も考えずにとりあえず0を入れておくというのはおかしい。 「必要だから、0という意味のある値を意識的に代入する」 という本質を見失わなければ memsetでchar(0x00)を埋めるという代用品は却下だろう。
それじゃクラスはゼロで初期化できないだろ
そもそも0で初期化するのが間違い。 参照や const なポインタをもってて、コンストラクタで設定するようなクラスは どう考えたって0で初期化できないのはわかるだろ?
335 :
デフォルトの名無しさん :03/11/05 09:13
>>333 0で初期化できないだろといっても、
そもそもする必要がないので無問題。
332の template<class T>inline void zeroset(T&o) で
無理矢理したければ、
デフォルトコンストラクターの結果を無理矢理代入するような
スペシャライズをすればいいし
おめでたい奴らばかりだな。 おまいらの関数やクラスは未来永劫使われると思ってるのか? おまいらのプログラムは今のOSに依存してないのか?
だったら?
338 :
デフォルトの名無しさん :03/11/05 12:53
少なくとも
>>336 の関数やクラスは数か月先すら使えないものばかり
再利用できるコード書くのはほどほどにしとけよ そんなの増えたらヘタレプログラマは職を失う
340 :
デフォルトの名無しさん :03/11/05 13:15
>>333 クラスがoperator=(int)持ってりゃ済むことだろう
>>340 わざわざ自分でoperator=(int)を書くくらいなら
はじめから変な初期化機構使わないで
イニシャライザ作るだろ
>>336 典型的なCOBOLer様のご発言です。崇めましょう。
>>336 のどもと過ぎれば熱さ忘れるか... Y2K
あっ、
>>338 の言うとおりなのかな。(藁
344 :
デフォルトの名無しさん :03/11/05 21:12
コボラーは引退しろ 二度と顔見せるな というスレ
345 :
デフォルトの名無しさん :03/11/07 02:57
>>341 そのイニシャライザを使うことと同じ方法で
ファンダメンタルなタイプに対しても初期化ができる?
そもそもファンダメンタルなfloatやdoubleが問題なわけだが。
double d = double(); で何か問題でもあるのか?
>>347 基本型にもコンストラクタがあるんだよね。
やはりC最強
int i = (int)(54.28f * 0.999f); int i = int(54.28f * 0.999f); キャストよりコンストラクタの方が美しいな。
>>350 それはコンストラクタのように見えてコンストラクタではない
class A {...};
class B {
...
operator A()const{}
};
A a;
B b;
b=B(a);
この B(a) がコンストラクタではないように
一見コンストラクタに見えてコンストラクタではないこともある。
>>351 コピーコンストラクタじゃないのかと(ry
353 :
デフォルトの名無しさん :03/11/09 15:12
>>352 operator A() はコピーコンストラクタじゃないだろ
ひさびさにアホ登場
>>353 ヘェー
で、どこでoperator A()が使われてるの?
>>350 それはコンストラクタのように見えてコンストラクタではない。
変換関数だったかなんかそんな名前が付いてる。
>>354 変換関数ってoperator T()のことじゃないの?
>>350 int i = int(54.28f * 0.999f);
は一時オブジェクト作るから無駄だよね
int i = int(54.28f * 0.999f); でoperator T()が機能しているとするとすると、 int i(54.28f * 0.999f); も基本的には同じ仕組みになっているはず。 しかしコンパイラは前者をすんなり通して、後者にだけ暗黙のキャストの警告を出す。 やはり前者は明示的なキャスト(の別表記)と解釈するのが妥当ではないか?
359 :
デフォルトの名無しさん :03/11/09 15:47
>>358 ファンダメンタルはどのような表記をしても
コピーコンストラクターではなくてキャストと同じ
int i = int(54.28f * 0.999f);
int i(54.28f * 0.999f);
この2つのコードはアセンブラレベルで同じになる
>>359 ユーザー定義型でも保障されてなかったっけ。
361 :
デフォルトの名無しさん :03/11/09 15:48
同じになるのは int(54.28f * 0.999f); (int)(54.28f * 0.999f);
362 :
デフォルトの名無しさん :03/11/09 15:49
スレタイよく読め
operator T()にもexplicitつけたいと思うこと無い? たとえば情報が劣化するから明示的に呼び出してもらいたいときとか使えないし。
つれないなぁ・・・ templateとかで不便じゃん。
366 :
デフォルトの名無しさん :03/11/09 16:10
>>363 constructorだけexplicit指定可能ってのは片手落だと思う
標準libraryなど簡単に変更できない位置付けのclassと
それの存在を踏まえた上でのapplicationなclassとの間で型変換をしたいとき
標準library側のclassのconstructorをいじるわけにはいかないから
applicationなclass側で標準library側のclassに対する
変換methodを用意することなるわけだが、
このときexplicit指定できないことによる痛みを実感してしまう
名前付きのmethodにすれば不明瞭さは無くなるが
templateのような場面で汎用性を維持するのが難しくなる
でC#ではキャスト演算子にもexplicitとimplecitが指定できるようになったんだっけ。 C#は奇形児Javaと違ってよいC++の子供だね。
C#はプラプラの子〜♪ Javaの孫ではないわいな〜♪ それが何より証拠には〜♪ なんでもかんでも取り入れる♪
370 :
デフォルトの名無しさん :03/11/09 18:47
畸形ばかりの血統だな
大元のCが美しきBCPLの醜い奇形の子だから。
Cはともかく、C++はブサイク度上がりすぎ
C++ = 肥満児 Java= 無頭児 C# = シャム双生児
>375 ハムの人?
とっとこー(パンを買いに)走るよハム太郎〜♪ ハム太郎の中の人も大変だな。
公 太 郎 美 味 し い !
379 :
デフォルトの名無しさん :03/11/15 20:10
食用ならおけじゃなかったっけ?
アセンブラレベルでいえば、ブールもプールも列挙もラッキョもない。 言い返してやれ。
>>381 大前提:高級言語の話をアセンブラレベルで言うな。
烈しく同意
アセンブラにbool型が無いのと、C言語にbool型が無いのは 同じレベルで話せると思うが
boolのあるCPUは作れるし x86でもキャリーフラグなどはboolと考えてもいいんじゃないか? あとbit系命令でメモリアクセスもできたはず
>>384 Z80のFレジスタはある意味bool型
>>384 で、_Boolできちゃったのよね。
無いと使い物にならない糞言語だって言われる時代が来たのが明白になったから。
この状況をどう同じレベルで話す?
>>387 そう言ってる奴の頭が使い物にならないだけだろ
でも _True / _False はできてないんだよな。 1 / 0 を使う。 なに考えてんだか。
>>389 C厨の頭に真や偽などという人間の発想に近い概念はない。
あるのはただ0か1かのみなのだ。
論理学の真偽ほど人間の発想から遠いものはないよ
>>391 プログラムに必要な真偽値は論理学の真偽じゃねえ。
そうである か そうでない かだけだ。
そしてそれは 0 と 1 では決してない。
is〜 って形の関数は ! is〜 ってなったときちょっと違和感あるよね Ruby や Scheme の 〜? の方が自然でいい感じ
394 :
デフォルトの名無しさん :03/12/23 13:29
>>393 その違和感は慣れでなんとかなりますよ
慣れればいいだけなんですよ
395 :
デフォルトの名無しさん :03/12/23 13:39
>>393 あらゆる場所で
if (! isFull()) {
って書かれてたソースを見たことがある。しかも、「!」使ってない場所は一つも無し。
当然、「!」を取って、メソッド名を isFoundEmpty に変えて、戻り値のboolean値を反転させた。
そのあと、何で「リファクタリング」にこの作業が紹介されてないのか、子一時間悩んだ。
こっちのほうがわかりやすいのに。
>>394 それは言ってはいけない言葉だと知れ。
>>395 !isFull のが分かりやすい。なんで変えたの。
呼び出す側の都合に合わせすぎると疎結合になる。
397 :
デフォルトの名無しさん :03/12/23 16:01
>>395 お前は大馬鹿だ。
満タンの逆は空っぽか?
ガソリンスタンドに行ってガソリンの残りが満タンじゃなきゃ
給油してたのを空っぽになってから給油するのか?
ガソリン空なら車は停止してるわ。
if(isFull()) { /* 一杯のときは何もしない */ } else { ここに処理を書く }
#define Not ! if(Not isFull())
いや、それも変だろ。冗長。
C++ だと not が使えるよ。 if(not isFull()) { ... } is not full の順番にならんがな...。
402 :
デフォルトの名無しさん :03/12/23 16:30
enum って列挙された以外の値も キャストすれば代入できるよね。 内容の保証まではしてない罠。
>>402 C/C++ はキャストすりゃ何でもアリだからな。
でも、bool (C++ の)へのキャストでは ちゃんとした bool 値に変換されるよね。
いや、変換されるとは限らんのか? (bool)1 と (bool)3 が同じ表現を持つと保障する必要性はないのかな? 別に if(b == true) と書いても if(b != false) のように判定するようなコードを吐けばいいだけだし。 どちらにしろ bool だと特に何も問題が起こらないね。
>>396 依存関係は最初によく考えたさ。結合強度が高くなる設計の、
2クラス間でしか使われてないメソッドだった。
にもかかわらず、問い合わせの if(! isFull()) は山ほどあった。
わざわざ
>>398 や
>>399 みたいな冗長な書き方したくなっちまう
定義ってのは、つまるところ定義そのものが間違っている。
修正してやる。
>>397 馬鹿はあんた。
isEmptyじゃないぞ。isFoundEmptyだぞ。空なものが見つかった、だぞ。
俺が問い合わせたいのはな、isFullってのはな、「満室か?」ってことだ。
その逆は、「空きが見つかったか?」だ。
「空っぽか?」じゃないんだよ。何得意げな顔して「空っぽか?」、だ。
お前は本当に頭が空っぽなんじゃないかと問いたい。問い詰めたい。
isFoundEmpty じゃ「発見された空かどうか」じゃないの?
>>406 単語より演算子のほうが読みやすいと思うんだが…
is found empty 空っぽだと判明する。
be + 過去分詞で受動態。
A empty room is found. をJavaちっくに並べ替えたんだよ。 isFoundAEmptyRoom で、長いから isFoundEmpty にしたんだよ。 分かりずらくて悪かったな。直しておくよ。
isNotFull でいいじゃねぇか。 わざわざ違う単語を使うのは混乱の元だ。
あと、満室じゃないのは underoccupied って言うんだ。 でも、この単語を日本人がどれだけ知ってる? こんな単語を使うのは、英語圏の人かただの自己満足だ。
>>415 そんな単語を紹介するのは、頭でっかちの人かただの自己満足だ。
>>403 C#もキャストすれば代入可能。(Javaにはenumはないみたい)
Javaでは1.5からEnumクラスが出来るぞ。 列挙は簡単になるし、C/C++,C#とは違って、 クラスのように継承してタイプコードに実装を統合できるのが魅力だ。 今はEnum用途のクラスを自分で定義するしか無いがな……。 イマニミテオレ。
> C/C++,C#とは違って、 C#とは同じ。JavaのEnumクラスはC#のパクリだからね。
>>419 >JavaのEnumクラスはC#のパクリだからね。
Java1.5のEnumで出来る事は既にC#で実現されているね。
C# と Java はお互い猿真似していることは咎めない。 Java がどんどんシンプルじゃなくなっていく。 大丈夫か? 初心を忘れたんじゃないか。 気が付けば MS の狙いどおりか。。。
シンプル伊豆ベストってのは作る側の論理だからねぇ。 Java作る側にとってはJavaがシンプルだと作りやすいけど、 その分使う側が苦労する。 CISCがシンプルだと作る側が作りやすいけど、 その分人間やコンパイラが苦労するのと同じように。
ところでさメモリーのゼロ番地ってどうやってアクセスするのさ?
>>416 自己満足じゃない!
日本人PGの英語能力の底上げは是非とも必要な事だ!
適切な単語があったらそれを使ったほうがいい!
>>423 > CISCがシンプルだと
それはすでに CISC じゃねーだろ。
430 :
デフォルトの名無しさん :04/01/04 10:50
431 :
デフォルトの名無しさん :04/01/04 12:25
既にと言うより そもそもRISC
(void*)0 は処理系依存ではなかったか?
そもそも0番地というのが処理系に依存してるのだが
(void*)((int*)(sizeof (int)) - 1)
>>431 >>423 が RISC を引き合いに出しているのは誰の目にも明らかだと思うが、主語が CISC なのはおかしいと言ってるだけだろ ?
日本語にしてみな...
「複雑な命令セットを持つコンピュータ (の命令セット) が単純だと作りやすいけど、」
>>424 union{
int *p:
intptr_t i;
};
i=0;
*p=123212321;
intptr_tはポインタと同じサイズの整数型。名前間違ってるかも
(int)0 の内部表現が 0 だというのは 保証されてるんだろうかとか考えることがあるんだけど、 保証されていようがされていまいが、 流石にそうなってない環境なんてないよね? よね?
438 :
デフォルトの名無しさん :04/01/05 15:48
>>437 > (int)0 の内部表現が 0 だというのは
禿しく意味不明。
(void*)0 の内部表現が int の 0 と同じだと言いたいのか?
そうであれば違うアーキテクチャは山ほど存在した。
>>438 違う違う。
例えば負の数はアーキテクチャによって
表現法が変わることがあるでしょ?
それと同じように、0 や正の数でも
表現法が変わることもあるのかどうかってこと。
>>438 整数0のすべてのビットが0であるかどうかと言う問題ではないか?
>>440 内部表現のすべてのビットが、ね。
C の段階では全てのビットは 0 であるとされる筈。
C の段階でのビット表現と
内部表現のビット表現が同じであるということが
保障されていれば何も問題ないんだけど...。
×保障 → ○保証 MS-IME のバカ...。
整数0は全ビット0 ぬるぽはそうとは限らないけど。
7FFFだろ
・ポインタに整定数0を代入するとNULLポインタになる ・ポインタと整定数0を比較するとNULLポインタとの間でだけ一致する だろ。「定数」だけ。 あと、 ・static変数の定義を省略すると=0を付けたのと同じ ・論理値を必要とするところでポインタを書くと==0と付けたことになる から、うまいこと省略して書ける。
>>445 > ・論理値を必要とするところでポインタを書くと==0と付けたことになる
> から、うまいこと省略して書ける。
?
!=0です。失礼しました。
449 :
デフォルトの名無しさん :04/01/14 14:11
要するにぬるぽ
>>449 それ書いた奴はただネット上の意見をまとめただけ
要するにC使い自体が平均的に高飛車なんだよ
FAQに、うざいって文句つけるやつ初めて見た。 ( ゚д゚)ポカーン
453 :
デフォルトの名無しさん :04/01/17 01:37
intのほうが符号拡張がないから速い
そんなもん、実装定義。
455 :
デフォルトの名無しさん :04/01/17 11:03
enumって使いづらくないですか?例えばこういうのをコンパイルすると #include <stdio.h> int main(void){ enum answer {YES, NO, UNKNOWN}; enum voltage {HIGH, LOW, UNKNOWN}; enum answer mine = YES; enum voltage input = HIGH; return 0; }
456 :
デフォルトの名無しさん :04/01/17 11:05
% gcc -o enum_test enum_test.c enum_test.c: In function `main': enum_test.c:5: conflicting types for `UNKNOWN' enum_test.c:4: previous declaration of `UNKNOWN' make: *** [all] Error 1 各enum型変数の持つ値名(なんて呼ぶか分かりませんが)は プログラムで一つの名前空間なの? これって困るんですけど。私の使い方が間違っているのかなあ
457 :
デフォルトの名無しさん :04/01/17 11:33
自分はそれを回避するためにC++でenumを使うときは 構造体(か専用の名前空間)に閉じこめて使ってる。 struct answer { enum Enum{YES , NO , UNKNOWN}; }; struct voltage{ enum Enum{HIGH, LOW, UNKNOWN}; }; とかにしておいて answer::Enum mine = answer::YES; voltage::Enum input = voltage::HIGH; という風に使ってる。(もっとスマートな解決法があるのかもしれんが...)
459 :
デフォルトの名無しさん :04/01/17 14:41
VC買え
460 :
455,456 :04/01/17 16:35
>>457 Thank you!!
>>458 ? namespaceという機能があってそれを使えばstructで
くるまなくても解決できるということ?
>>459 Visual C++だと
>>455 のコードもcompileできるよ、
という意味ですか?すまん、わからん。でもこんなこと
実装依存な分けないしなあ...
462 :
デフォルトの名無しさん :04/01/17 17:30
俺は性格的にbool型関数が使えない・・・。 物事を真と偽に割り切れないタイプ。 #define TRUE 0 #define FALSE 1 #define UNKNOWN 2 とした上でint型関数を呼び出す。
VC7.1でも455はコンパイルできないよ。 error C2365: 'UNKNOWN' : 再定義; 以前の定義は '列挙子' でした。 とエラーが出る
>>464 include した .h ファイルを列挙しろや
466 :
455,456,460 :04/01/17 18:39
>>458 ,
>>461 namespaceはC++の機能ですね。gccでもいけるようなので
#include <stdio.h>
namespace language{enum answer {YES, NO, UNKNOWN};};
namespace electricity{enum voltage {HIGH, LOW, UNKNOWN};};
int main(void){
enum language::answer mine = language::YES;
enum electricity::voltage input = electricity::HIGH;
return 0;
};
とやってみました.これで良いんですかね.
gcc -o enum_test enum_test.cppでコンパイル通りました.
何もやってないのでちゃんと動いているかはまだ分かりませんが。
structは関数中で定義できるからな。
>>462 プログラム書くのやめた方がいい。
エラーなら例外を使え。
>>462 せめて、enum にしろよ。
>>468 > エラーなら例外を使え。
というような決め付けをするような頭の固い奴はプログラマーに向いてないよ。
470 :
デフォルトの名無しさん :04/01/17 18:52
例外は認めません
471 :
デフォルトの名無しさん :04/01/17 18:58
C99では falseは0、trueは1って決まったんじゃないの?
false / trueと、FALSE / TRUEは違うものなので。 とはいえ、TRUEが偽というのは気持ち悪い。
[#1] The header <stdbool.h> defines four macros. [#2] The macro bool expands to _Bool. [#3] The remaining three macros are suitable for use in #if preprocessing directives. They are true which expands to the integer constant 1, false which expands to the integer constant 0, and __bool_true_false_are_defined which expands to the decimal constant 1. [#4] Notwithstanding the provisions of 7.1.3, a program is permitted to undefine and perhaps then redefine the macros bool, true, and false.200)
スレタイと
>>1 の意味がよくわからん
bool型がない古い処理系では、typedef intやenumで
代用するのは普通だと思うが
なんで
>>1 を読んでbool型がないなんて思えるのかわからん
いや、それで
>>1 とスレタイが全然噛みあってないと思ってるわけだが
マネージド使え
ここはヌルヌルと卑猥なC言語ですね
479 :
デフォルトの名無しさん :04/01/19 20:01
卑猥なのは貴様だけだっ
( ・∀・). | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' . V`Д´)/
(_フ彡 /←
>>478
480 :
デフォルトの名無しさん :04/01/19 23:19
受け売りだけど、 #define TRUE (1=1) #define FALSE (!TRUE) でいいんでない?
#define TRUE 1 #define FALSE 0 に対するメリットを述べてください。
コンパイルエラーになる。
>>462 if (〜)
:
else
:
otherwise
:
とかにしろとでも?
いや、UNKNOWN の時は例外を発生すると言うのはどうだろうか。
487 :
デフォルトの名無しさん :04/01/22 00:04
わたしくi487こと「SXってコプロ無効化してあるだけじゃん…」が
>>487 をゲット!
>>486 unknown例外を投げる奴は氏んだ方がよい
になるやかん。
489 :
デフォルトの名無しさん :04/02/11 12:16
ブーリアン!ブーリアン!ブーリアン!ブーリアン!ブーリアン! きっとあなたは帰ってくるだろう!
unknownって何か変じゃねえ? nothing蛇内の? 真偽無だろ?
Exceptional C++ 項目45
492 :
デフォルトの名無しさん :04/02/16 21:16
無は偽なり
Rubyは真、偽、無があるけどbool型はなかったな。確か。
TrueClass, FalseClass, NilClass
仏教だと無は真なり
perlは真,偽,undefで、undefは偽扱い。
色即是空 空即是色
499 :
デフォルトの名無しさん :04/02/22 18:42
未定義と定義してしまった時点で本当の未定義ではないよな。 「無題」という題名の絵が本当に無題なわけではないように。
Rubyだとこういうコードって無限ループになるんだよね
i = 25
while i
puts "逝ってよし!"
i -= 1
end
変数 i の指すオブジェクトの値が0か否かではなく、オブジェクトが存在するか否かが
判定に使われてるわけで、値が0という整数値をとるオブジェクトは存在するわけで。
>>494 bool型は再定義する必要ないし、もしできたら困るでしょう
503 :
デフォルトの名無しさん :04/02/23 09:34
>>496 そんなあいまいなもの論理学を取り扱わなければならない
プログラマにとってはごみ以下である。
voidからboolへの自動変換をC++に追加するだけじゃないか。
ぼくはintをboolやenumのかわりになんてつかいません ちゃんとキャストています。 #define true (float)1 #define false (float)0
507 :
デフォルトの名無しさん :04/06/16 22:40
俺はdoubleだね。 0.0000001 = true 0.0000002 = false これ最強
すごく使いにくそう。 桁落ちとか誤差伝播の処理を解決するのがめんどくさそう
桁落ちとか誤差伝播ってw お前はブール型を数値演算の値として利用しているのか?
言っておくが仏教は曖昧じゃないぞ。 無が真である、というのは、命題全体が偽(空)である、 というレトリック。 つーか、他に解釈のしようもないわけだが。
511 :
デフォルトの名無しさん :04/07/31 14:44
ところでboolをenumで代用する奴はどうなんだ? typdef enum { false, true, } bool;
512 :
デフォルトの名無しさん :04/07/31 17:09
119 :デフォルトの名無しさん:03/09/17(水) 14:19 New!!
>>117 C言語を使ったことがあるひとなら、
1が真で、それ以外は偽であることを常識として知っているはず。
513 :
デフォルトの名無しさん :04/07/31 17:24
>>512 マヌケだよな。
C言語の常識がすべての常識と勘違いしてそうだw
Cの常識じゃないだろ。
>>514 >1が真で、それ以外は偽であることを常識として知っているはず。
なんてことはC言語でも成り立たないから安心してくれ
518 :
デフォルトの名無しさん :04/08/01 17:37
↑夏厨
519 :
デフォルトの名無しさん :04/08/07 16:14
で、結論は出たのか?
520 :
デフォルトの名無しさん :04/08/07 18:42
§r.3.6.1 bool is a unique signed integral type. A bool value may be converted to int by promotion: true converts to 1, false converts to 0. A numeric or pointer value may be implicitly converted to bool. A zero value becomes false; a non zero value becomes true. The relational operators yield bool values. The C++ Programming Language/Bjarne Stroustrup
521 :
デフォルトの名無しさん :04/08/07 18:46
恐ろしい。Stroustrup本を買ってから9年も経つ。が、仕事でC++を使い始めたのはついこないだ。おそろしい。
恐ろしいのはあんたの頭だろう。
恐ろしいのは、 マイク ◆yrBrqfF1Ew の、ゴミさ加減だろう。
>>525 だからいいから、ゴミ(マイク ◆yrBrqfF1Ew)は書き込むな。
>>527 = 沢山
つまんねー煽りいれてんじゃね。
>>528 = 沢山
だからもうわかったから、ゴミ(マイク ◆yrBrqfF1Ew)は書き込むな。
>>529 だからもうわかったから、つまんねー煽りいれてんじゃね。
>>521 俺もそんな感じ
9年前に本で読んで、趣味でしか使ってなかった「プログラム言語の知識」が
今になって役に立つのは、不思議
unixのシェルスクリプトでは0が真
>>533 EXIT_SUCCESSが0だからしょうがねぇべさ。
#しまった、頭悪そうな発言スレ行きか
>>531 よ、
>>521 は9年間の間にC++の言語仕様に加えられた変更に関して、
自分が知識を持っていないことを懸念しているのだと思うのだが。
正直、あんまり変わってないぞ templateもthrowも9年前にあった 実際の処理系に実装されていたかどうかはともかく