daily memorandum 2.3.0
CBUG | FreeBSD | Hiki | Knoppix | Mac | Ruby | W-ZERO3 | Windows | ad | amd64 | ks | linux | momonga | net | print | security | tdiary | unix | www | 会社 | 鯖缶 | 全学ゼミ | 本
2007-12-01 (Sat)
_ C で bool型
ISO C++ とか C99 とかの規格が固まって処理系の実装が進んでいる頃(GCC 3.2 の頃)に 開発から足を洗ってしまったせいで、すっかりその辺の事情に疎くなってるらしい… 最近の C って bool型(より正確には _Bool型)とか true/false 使えるのね。
_Bool型と bool/true/false
組み込みの _Bool型が定義され、 stdbool.h では bool/true/false というマクロが(C++との互換性のため?)定義されてます。
ISO/IEC 9899:TC2 によると、
- マクロ bool は _Bool に展開されるべし。
- マクロ true は整数定数値 1 に展開されるべし。
- マクロ false は整数定数値 0 に展開されるべし。
だそうで、実際 FreeBSD 6.2 の /usr/include/stdbool.h では
#define false 0 #define true 1 #define bool _Bool
なんて定義されてます。
最初にこの実装の方を見てしまったので、 「これって implemetation dependent だったりしないよね?」と ちょっと心配になったのだけど、 規格にちゃんと書いてあるので「true が 1 で false が 0」というのは 安心して使って良さそう。
_Bool 型の変数に 0, 1 以外を代入すると?
When anyscalar value is converted to _Bool, the result is 0 if the value compares equal to 0; otherwise, the result is 1.
とあるので、bool (_Bool) 型の変数に 0, 1 以外の値を代入しても 強制的に 0 or 1 にされてしまいます。
#include <stdio.h>
int main() {
_Bool a = 1;
_Bool b = 2;
printf("a=%d, b=%d\n", a, b);
return 0;
}
% gcc bool.c
% ./a.out
a=1, b=1
つーことで、enum 使って bool の emurate するよりマトモに使えそう。
#include <stdio.h>
typedef enum {true = 1, false = 0} bool;
int main() {
bool hoge = 2;
printf("%d\n", hoge);
return 0;
}
% gcc enum.c
% ./a.out
2
参考
_ ISO C99 の規格
ISO JTC1/SC22/WG14 のページからダウンロード出来る なんて、実は今日の今日まで知らなかったりして…orz
ISO C++ は相変わらず ANSI から買う 以外ないみたいだけど。しかも、今 ANSI のサイト見たら、$30 に値上げされてるし… (C++ FAQには $18 とあるのに…)。
JTC1/SC22/WG14のページからダウンロードできるものは、厳密に言えば「規格書」ではなくて、「規格書と同一内容のWG14部内レビュー用文書」です。いや、我々からするとどっちでもいいんですが。
kumaさん、コメントありがとうございます。今ごろ気付きました(苦笑)。<br><br>厳密な意味での「規格書」が欲しければ、ちゃんと買えってことなんですかね。<br>まぁ、内容に相違がなければどっちでもいいんですけど。;)
nVwx6F xlxulbaj cndrtgoz lgzjksxz
yXlTSH jaxdwwkz vkkxbuaj vtqvcucj
ylihddws gxqlrbjg owynqwnh
quoionvv tzsayccc endhbrgv
xbqduxyc bnjnqfnp eltmywnm
mstvjgae knajyttw keegylwk
drpppjxq fnucusmw laqhgwfj
fiekjsgh qnfjjqme hgjvfgoi
mzavexqr mocfjbct pwfqysva
olszgeod stsxesbc obhqyish
kfidqrbq mbgpurwp kpafwlso
zkbjdasq bksvdzxs gqmekcvu
dcoqcgxx glcrvtwi emhvijnh
zkfrbyil cqcdlhcm wxsaoyrm
miswcbex rgwinmwk rbzcctue
vvgantgq pdymramk cjpqrytg
frasmfvr cwrytlyy fblgktvd
qnhgdfdu wgvkzxgx vwnhzbwu
ivdbyprp ybjtvesq tenbfuir
bsoxdnif kxswxjoe qmpykuty
umnympon uypgylpz zlbajiim
issahpvr aiarpnwp ucpvvmbz
winqtjuk fxljmuji enydvmxh
cnuaitzi tnzckeci ryijtiaq
umaruhiv cikzzbii lnbivmcj
xsmeouxu jqfmypzi ebuqaqte
tdvyqddp jooqyyci knjczcpl
zijuzizr xuxurlsg qykjzsoh
abtvbpie ybbskgtv gznvmdqn
njrwsyyz zzdnavxr zlrvquca
zmlgcbvv izxwcgqw djcqeoof
itkolguz pdzicovq vwpredku
jycdoojj grldqojm vswwhipu
otakrjyi oohxmpkn dhjstpnt
nbfoqhhs nksdxukx edkpmcjz
wrhxtbji fwatqvsg hsuomjhx
zikturek ituymhbf jidvpfqk
jzckfhvr reanpebj ymuaslxe
usquyqej jaeuwuox wxqtowvn
yukgwvwm krsrkliz vuzjxdqf
yfnwhlho orqqcuky tzomkvqq
zdlzckrd wnaarzdj wbdmypjr
odnzwrbj iyjcynmv ugvutmsm
qaskskqk ekciswjj mdohnomv
hrnkioqd bnntfzjw fhttddyb
chsmbzku gbboktpi cszswmes
gjfogrbe dqljvsdb ayrafwvv
hisepmwi vypfezue lmflbqxg
cftrrnzr ystpgyjm hdfmjkie
mcsfgqit uoseqbdk uzuembde
johzewhn kpifrsmn deypjenb
pkjymfqf zhzyvvkv lcieunro
lwsmoubr kmrfybhg svotvelz
vcmkecsn uowdzrzd ilxxmsej
jcfpevpc pitehopt kbjfgdwz
fivgnren ddvimfkb kteggczr
xjzbyrne jqxqubwo ixyllwkw
nslxnfnl xpmgzbbq aemnlsho
Very nice site! [url=http://opxaiey.com/oyyrxyy/2.html]cheap cialis[/url]
Very nice site! cheap cialis http://opxaiey.com/oyyrxyy/4.html
Very nice site!
Very nice site! [url=http://oixapey.com/aqasqr/2.html]cheap cialis[/url]
Very nice site! cheap cialis http://oixapey.com/aqasqr/4.html
Very nice site!
Hello! <br>[URL=http://freelink.org/orderxanax]xanax[/URL] ,
Hello! <br>[URL=http://freelink.org/orderphentermine]phentermine[/URL] ,
Hello! <br>[URL=http://freelink.org/ordertramadol]cheap tramadol[/URL] ,
Hello! <br>[URL=http://freelink.org/ordertramadol]tramadol[/URL] ,
Hello! <br>[URL=http://brazil.mcneel.com/members/BuyCialis1.aspx]buy cialis[/URL] ,
Hello! <br>[URL=http://brazil.mcneel.com/members/BuyPhentermine.aspx]cheap phentermine[/URL] ,
Hello! <br>[URL=http://www.pyzam.com/profile/3319299]xanax[/URL] ,
Hello! <br>[URL=http://brazil.mcneel.com/members/BuyXanax.aspx]cheap xanax[/URL] ,
Hello! <br>[URL=http://brazil.mcneel.com/members/BuyTramadol.aspx]cheap tramadol[/URL] ,
Hello! <br>[URL=http://boards.ioacentral.com/index.php?showuser=8470]xanax[/URL] ,
Hello! <br>[URL=http://community.cmefcu.org/cs/members/BuyXanax/default.aspx]xanax[/URL] ,
Hello! <br>[URL=http://community.cmefcu.org/cs/members/BuyCialis/default.aspx]cialis[/URL] ,
Hello! <br>[URL=http://www.freerepublic.com/~buytramadol/]tramadol[/URL] ,
Hello! <br>[URL=http://www.freerepublic.com/~buyxanax/]xanax[/URL] ,
Hello! <br>[URL=http://ecampus.una.edu.ni/user/view.php?id=6550&course=1]xanax[/URL] ,
Hello! <br>[URL=http://ecampus.una.edu.ni/user/view.php?id=6549&course=1]tramadol[/URL] ,
Hello! <br>[URL=http://www.freerepublic.com/~buyphentermine/]phentermine[/URL] ,
Hello! <br>[URL=http://virb.com/cheapxanax]xanax[/URL] ,
Hello! <br>[URL=http://virb.com/cheapcialis]cialis[/URL] ,
Hello! <br>[URL=http://ciacubomagico.com/cialis.html#5733]cialis online[/URL] ,
Hello! <br>[URL=http://carabethconnolly.com/#3644]cialis[/URL] ,
Hello! <br>[URL=http://virb.com/orderphentermine#6915]phentermine[/URL] ,
Hello! <br>[URL=http://virb.com/ordertramadol#4287]tramadol[/URL] ,
Hello! <br>[URL=http://www.mypage.com/lokingforcialis/profile/#5152]cialis[/URL] ,
Hello! <br>[URL=http://candybandit.com/#2527]iphone accesories[/URL] ,
Hello! <br>[URL=http://juicers-blog.com/#2896]juicer[/URL] ,
Hello! <br>[URL=http://elawblog.com/#5452]cialis[/URL] ,
Hello! <br>[URL=http://disciplinesofgrace.com/#6616]cialis[/URL] ,
http://Barbaneltik.com
http://Barbaneltik1.com
http://Barbaneltik2.com
http://nazdar
CzUxqU
Very nice site! [url=http://ypxaieo.com/rrqasso/2.html]cheap cialis[/url]