トップページ⇒tech
537コメント123KB

boolやenumをintで代用する奴は氏んだ方がよい

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
命名規約もドキュメントもなく何型かわかるはずもないのに
「チミはなんで勝手にboolなぞという型で受け取ってるのかね!これは列挙型だよ!君のせいで修正が大変だ」
とか言われると心底ムカつく。

みんなはどうよ?
0446デフォルトの名無しさんNGNG
>>445
> ・論理値を必要とするところでポインタを書くと==0と付けたことになる
> から、うまいこと省略して書ける。
?
0447デフォルトの名無しさんNGNG
>>445
!=0 ?
0448445NGNG
!=0です。失礼しました。
0449デフォルトの名無しさんNGNG
http://www.catnet.ne.jp/kouno/c_faq/c5.html

同でも良いが
これ書いた奴ウザ過ぎ
何様のつもりだろうか
0450デフォルトの名無しさんNGNG
要するにぬるぽ
0451デフォルトの名無しさんNGNG
>>449
それ書いた奴はただネット上の意見をまとめただけ
要するにC使い自体が平均的に高飛車なんだよ
0452デフォルトの名無しさんNGNG
FAQに、うざいって文句つけるやつ初めて見た。 ( ゚д゚)ポカーン
0453デフォルトの名無しさんNGNG
intのほうが符号拡張がないから速い
0454デフォルトの名無しさんNGNG
そんなもん、実装定義。
0455デフォルトの名無しさんNGNG
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;
}
0456デフォルトの名無しさんNGNG
% 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型変数の持つ値名(なんて呼ぶか分かりませんが)は
プログラムで一つの名前空間なの?
これって困るんですけど。私の使い方が間違っているのかなあ
0457デフォルトの名無しさんNGNG
自分はそれを回避するために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;
という風に使ってる。(もっとスマートな解決法があるのかもしれんが...)
0458デフォルトの名無しさんNGNG
>>457 namespace
0459デフォルトの名無しさんNGNG
VC買え
0460455,456NGNG
>>457 Thank you!!
>>458 ? namespaceという機能があってそれを使えばstructで
くるまなくても解決できるということ?
>>459 Visual C++だと>>455のコードもcompileできるよ、
という意味ですか?すまん、わからん。でもこんなこと
実装依存な分けないしなあ...
0461458NGNG
>>460
そう
0462デフォルトの名無しさんNGNG
俺は性格的にbool型関数が使えない・・・。
物事を真と偽に割り切れないタイプ。
#define TRUE 0
#define FALSE 1
#define UNKNOWN 2
とした上でint型関数を呼び出す。
0463デフォルトの名無しさんNGNG
>>462
すげークソな定義だな。
0464デフォルトの名無しさんNGNG
VC7.1でも455はコンパイルできないよ。
error C2365: 'UNKNOWN' : 再定義; 以前の定義は '列挙子' でした。
とエラーが出る
0465デフォルトの名無しさんNGNG
>>464
include した .h ファイルを列挙しろや
0466455,456,460NGNG
>>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でコンパイル通りました.
何もやってないのでちゃんと動いているかはまだ分かりませんが。
0467デフォルトの名無しさんNGNG
structは関数中で定義できるからな。
0468デフォルトの名無しさんNGNG
>>462
プログラム書くのやめた方がいい。
エラーなら例外を使え。
0469デフォルトの名無しさんNGNG
>>462
せめて、enum にしろよ。

>>468
> エラーなら例外を使え。

というような決め付けをするような頭の固い奴はプログラマーに向いてないよ。
0470デフォルトの名無しさんNGNG
例外は認めません
0471デフォルトの名無しさんNGNG
C99では
falseは0、trueは1って決まったんじゃないの?
0472デフォルトの名無しさんNGNG
false / trueと、FALSE / TRUEは違うものなので。
とはいえ、TRUEが偽というのは気持ち悪い。
0473デフォルトの名無しさんNGNG

[#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)
0474デフォルトの名無しさんNGNG
スレタイと>>1の意味がよくわからん

bool型がない古い処理系では、typedef intやenumで
代用するのは普通だと思うが
0475デフォルトの名無しさんNGNG
なんで>>1を読んでbool型がないなんて思えるのかわからん
0476デフォルトの名無しさんNGNG
いや、それで>>1とスレタイが全然噛みあってないと思ってるわけだが
0477デフォルトの名無しさんNGNG
マネージド使え
0478デフォルトの名無しさんNGNG
ここはヌルヌルと卑猥なC言語ですね
0479デフォルトの名無しさんNGNG
卑猥なのは貴様だけだっ
  ( ・∀・). | | ガッ
 と    ) | |
   Y /ノ 人
    / ) <  >__Λ∩
  _/し'  . V`Д´)/
 (_フ彡      /←>>478
0480デフォルトの名無しさんNGNG
受け売りだけど、
#define TRUE (1=1)
#define FALSE (!TRUE)
でいいんでない?
0481デフォルトの名無しさんNGNG
#define TRUE 1
#define FALSE 0
に対するメリットを述べてください。
0482デフォルトの名無しさんNGNG
コンパイルエラーになる。
0483デフォルトの名無しさんNGNG
>>480
エラー
0484デフォルトの名無しさんNGNG
>>480
馬鹿の馬鹿による馬鹿のための定義!
0485デフォルトの名無しさんNGNG
>>462
 if (〜)
   :
 else
   :
 otherwise
   :

とかにしろとでも?
0486デフォルトの名無しさんNGNG
いや、UNKNOWN の時は例外を発生すると言うのはどうだろうか。
0487デフォルトの名無しさんNGNG
わたしくi487こと「SXってコプロ無効化してあるだけじゃん…」が>>487をゲット!
0488デフォルトの名無しさんNGNG
>>486
unknown例外を投げる奴は氏んだ方がよい
になるやかん。
0489デフォルトの名無しさんNGNG
ブーリアン!ブーリアン!ブーリアン!ブーリアン!ブーリアン!
きっとあなたは帰ってくるだろう!
0490デフォルトの名無しさんNGNG
unknownって何か変じゃねえ?
nothing蛇内の?
真偽無だろ?
0491デフォルトの名無しさんNGNG
Exceptional C++ 項目45
0492デフォルトの名無しさんNGNG
無は偽なり
0493デフォルトの名無しさんNGNG
>>489
ヒデキ〜!
0494デフォルトの名無しさんNGNG
Rubyは真、偽、無があるけどbool型はなかったな。確か。
0495デフォルトの名無しさんNGNG
TrueClass, FalseClass, NilClass
0496デフォルトの名無しさんNGNG
仏教だと無は真なり
0497デフォルトの名無しさんNGNG
perlは真,偽,undefで、undefは偽扱い。
0498デフォルトの名無しさんNGNG
色即是空
空即是色
0499デフォルトの名無しさんNGNG
未定義と定義してしまった時点で本当の未定義ではないよな。
「無題」という題名の絵が本当に無題なわけではないように。
0500デフォルトの名無しさんNGNG
これはパイプではない。
ttp://perso.wanadoo.fr/wibo/nedry/supinfocom/p2/zoom/strator/magrittebg.htm
0501500NGNG
こっちのほうにしとくんだった。
ttp://www.uwrf.edu/history/prints/magritte-pipe.html
0502デフォルトの名無しさんNGNG
Rubyだとこういうコードって無限ループになるんだよね

i = 25
while i
 puts "逝ってよし!"
 i -= 1
end

変数 i の指すオブジェクトの値が0か否かではなく、オブジェクトが存在するか否かが
判定に使われてるわけで、値が0という整数値をとるオブジェクトは存在するわけで。


>>494
bool型は再定義する必要ないし、もしできたら困るでしょう
0503デフォルトの名無しさんNGNG
>>496
そんなあいまいなもの論理学を取り扱わなければならない
プログラマにとってはごみ以下である。
0504デフォルトの名無しさんNGNG
>>503
>>499
0505デフォルトの名無しさんNGNG
voidからboolへの自動変換をC++に追加するだけじゃないか。
0506デフォルトの名無しさんNGNG
ぼくはintをboolやenumのかわりになんてつかいません
ちゃんとキャストています。
#define true (float)1
#define false (float)0
0507デフォルトの名無しさんNGNG
俺はdoubleだね。
0.0000001 = true
0.0000002 = false
これ最強
0508デフォルトの名無しさんNGNG
すごく使いにくそう。
桁落ちとか誤差伝播の処理を解決するのがめんどくさそう
0509デフォルトの名無しさんNGNG
桁落ちとか誤差伝播ってw
お前はブール型を数値演算の値として利用しているのか?
0510デフォルトの名無しさんNGNG
言っておくが仏教は曖昧じゃないぞ。
無が真である、というのは、命題全体が偽(空)である、
というレトリック。
つーか、他に解釈のしようもないわけだが。
0511デフォルトの名無しさんNGNG
ところでboolをenumで代用する奴はどうなんだ?
typdef enum {
  false,
  true,
} bool;
0512デフォルトの名無しさんNGNG
119 :デフォルトの名無しさん:03/09/17(水) 14:19    New!!
>>117

C言語を使ったことがあるひとなら、
1が真で、それ以外は偽であることを常識として知っているはず。
0513デフォルトの名無しさんNGNG
>>449
どういうところが?
0514デフォルトの名無しさんNGNG
>>512
マヌケだよな。
C言語の常識がすべての常識と勘違いしてそうだw
0515デフォルトの名無しさんNGNG
Cの常識じゃないだろ。
0516デフォルトの名無しさんNGNG
>>514
>1が真で、それ以外は偽であることを常識として知っているはず。
なんてことはC言語でも成り立たないから安心してくれ
0517デフォルトの名無しさんNGNG
たしかに>>1は偽だな
0518デフォルトの名無しさんNGNG
↑夏厨
0519デフォルトの名無しさんNGNG
で、結論は出たのか?
0520デフォルトの名無しさんNGNG
§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
0521デフォルトの名無しさんNGNG
恐ろしい。Stroustrup本を買ってから9年も経つ。が、仕事でC++を使い始めたのはついこないだ。おそろしい。
0522マイク ◆yrBrqfF1Ew NGNG
恐ろしいのはあんたの頭だろう。
0523デフォルトの名無しさんNGNG
>>522
つまんねー煽りいれてんじゃね。
0524デフォルトの名無しさんNGNG
恐ろしいのは、
マイク ◆yrBrqfF1Ew
の、ゴミさ加減だろう。
0525デフォルトの名無しさんNGNG
>>521 == >>523-524

つまんねー煽りいれてんじゃね。
0526デフォルトの名無しさんNGNG
>>521 == >>523-524 || >>522
つまんねー煽りいれてんじゃね。
0527デフォルトの名無しさんNGNG
>>525
だからいいから、ゴミ(マイク ◆yrBrqfF1Ew)は書き込むな。

0528デフォルトの名無しさんNGNG
>>527 = 沢山
つまんねー煽りいれてんじゃね。
0529デフォルトの名無しさんNGNG
>>528 = 沢山
だからもうわかったから、ゴミ(マイク ◆yrBrqfF1Ew)は書き込むな。
0530デフォルトの名無しさんNGNG
>>529
だからもうわかったから、つまんねー煽りいれてんじゃね。
0531デフォルトの名無しさんNGNG
>>521
俺もそんな感じ

9年前に本で読んで、趣味でしか使ってなかった「プログラム言語の知識」が
今になって役に立つのは、不思議
0532デフォルトの名無しさんNGNG
>>531
不思議なのはあんたの頭だろう。
0533デフォルトの名無しさんNGNG
unixのシェルスクリプトでは0が真
0534デフォルトの名無しさんNGNG
>>533
EXIT_SUCCESSが0だからしょうがねぇべさ。
#しまった、頭悪そうな発言スレ行きか
0535デフォルトの名無しさんNGNG
>>531よ、>>521は9年間の間にC++の言語仕様に加えられた変更に関して、
自分が知識を持っていないことを懸念しているのだと思うのだが。
0536デフォルトの名無しさんNGNG
正直、あんまり変わってないぞ
templateもthrowも9年前にあった
実際の処理系に実装されていたかどうかはともかく
0537デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/prog/1082154544/l50
■ このスレッドは過去ログ倉庫に格納されています