09/03/29 13:18:32
粘着乙
801:デフォルトの名無しさん
09/03/29 13:54:11
char だと 0x80 の値が使えないかもしれないジャマイカ
802:デフォルトの名無しさん
09/03/29 13:57:04
charが9ビット以上である可能性がな・・・
803:デフォルトの名無しさん
09/03/29 13:57:58
>>801
いや、もともとcharで切ってたならcharとしての使い方しかしないでしょ。
なんでuint8_tにするの?ってことなんだけど。
804:デフォルトの名無しさん
09/03/29 14:11:03
>>803
何言っているか意味がわからんが?
> charとしての使い方しかしないでしょ。
ここはC++スレじゃないぜ?
805:デフォルトの名無しさん
09/03/29 18:55:14
C++が何で関係あるのか分からんが
もともとcharで切ってる事自体、
本当によく考え抜かれたものか怪しいことは確か
806:デフォルトの名無しさん
09/03/29 19:05:34
結局 >>788 批判ですかw
807:デフォルトの名無しさん
09/03/29 20:06:01
C++が何で関係あるのか分からんやつは答えなくてよろし
808:デフォルトの名無しさん
09/03/29 21:02:11
みなさま、ご回答ありがとうございます。
intとcharは例が悪かったかも知れませんが、
相談の主旨は
union U { t1 m1; t2 m2; } u;
(ただしt1とt2はcompatibleでない)
に対して、u.m1に書き込んだ値をu.m2で読み込んだときの
言語仕様についてでした。
例だと、
uの表すobjectのeffective typeはunion U
u.m1の表すobjectのeffective typeはt1
u.m2の表すobjectのeffective typeはt2
になるわけですが、u.m1とu.m2の表すobjectが同じものと考えれば、
1つのobjectがt1とt2という2つのeffective typeを持つ。
だから、u.m1に書き込んだ値をu.m2で読み込むのは許される。
ただし、読み込まれる値については未規定である。
という理解でよいのでしょうか?
809:デフォルトの名無しさん
09/03/29 22:29:36
そだね。
810:デフォルトの名無しさん
09/03/29 22:32:37
CとC++でcharの扱いが全く違うことは、
まあスレ違いなんで知らなくてもいいけど、
Cのcharがintegral typeでintegral promotionの対象、
ANSIでも"as is"が認められているだけってことは知っておかないと。
811:デフォルトの名無しさん
09/03/29 23:44:30
>>809
適当なことを言わないように
812:デフォルトの名無しさん
09/03/31 08:00:10
Cの言語仕様というと、俺はいまだにK&Rなんだが。
813:デフォルトの名無しさん
09/04/01 22:59:50
>>788
どうせおもいっきり環境依存なんだから、
面倒なことしないで、
char a[4]; にセットして
*(int*)a で読んじゃえ。
814:デフォルトの名無しさん
09/04/01 23:08:51
>808
> になるわけですが、u.m1とu.m2の表すobjectが同じものと考えれば、
とあるが、共用体のメンバに対応するオブジェクトはすべて同じなのか?
大きさも型も違うのに。
むしろ同じアドレスだけど、オブジェクトは別と考えるのが自然だと思う。
815:デフォルトの名無しさん
09/04/01 23:15:21
static_assert(期待通りの値が入ってるかどうか) をどっかに入れておけばいい。
816:デフォルトの名無しさん
09/04/01 23:15:40
>>813
strict aliasing rule違反じゃね?どうなの?
817:デフォルトの名無しさん
09/04/01 23:30:28
>>816
大丈夫なCPUとダメなCPUがある。
x86系は大丈夫。
逆の方が適用可能な範囲が広いか。
int a; を ((char*)&a)[0~3] で書く。
818:デフォルトの名無しさん
09/04/02 02:58:14
>>816
違反。
逆に int a; を用意して (char*)&a 経由でセットし、その後 a を読むのなら OK 。
819:デフォルトの名無しさん
09/04/05 00:23:29
なんでC言語には累乗計算の為の演算子がないのですか?
820:デフォルトの名無しさん
09/04/05 00:43:38
累乗計算命令を積んでるCPUが少ないからだ