【初心者お断り】ガチ規格準拠C専用スレ Part133at TECH
【初心者お断り】ガチ規格準拠C専用スレ Part133 - 暇つぶし2ch800:デフォルトの名無しさん
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が少ないからだ


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch