C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part148
https://mevius.5ch.net/test/read.cgi/tech/1580471646/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
探検
C++相談室 part149
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/02/18(火) 06:19:41.54ID:xvjipUWj446はちみつ餃子 ◆8X2XSCHEME
2020/03/02(月) 19:58:23.59ID:4ZdkwDZZ447はちみつ餃子 ◆8X2XSCHEME
2020/03/02(月) 20:14:13.91ID:4ZdkwDZZ C++20 では負数は2の補数形式で定義されることになったみたい。
C++ の最新規格に追従しているコンパイラは全部 2 の補数を前提にしてたからもう 1 の補数はええやろみたいな話を聞いた。
そこまで決めるのになんで1バイトの大きさは明記しないんだろ。
1 バイトが 8 ビットじゃないアーキテクチャ (で主要 C++ コンパイラがサポートしている環境) が有るんかね?
C++ の最新規格に追従しているコンパイラは全部 2 の補数を前提にしてたからもう 1 の補数はええやろみたいな話を聞いた。
そこまで決めるのになんで1バイトの大きさは明記しないんだろ。
1 バイトが 8 ビットじゃないアーキテクチャ (で主要 C++ コンパイラがサポートしている環境) が有るんかね?
448はちみつ餃子 ◆8X2XSCHEME
2020/03/02(月) 20:17:54.52ID:4ZdkwDZZ >>445
十分に汎用的とは言えないけど使えないときはコンパイルエラーになるだろうから比較的マシということで勘弁。
十分に汎用的とは言えないけど使えないときはコンパイルエラーになるだろうから比較的マシということで勘弁。
449デフォルトの名無しさん
2020/03/02(月) 20:24:42.94ID:x4CDu4GY >>440
超しょーもねーねらー認めやがったw
超しょーもねーねらー認めやがったw
450デフォルトの名無しさん
2020/03/02(月) 20:26:39.31ID:LGtCkZFK >>447
signedのwrap aroundは定義された?
signedのwrap aroundは定義された?
451はちみつ餃子 ◆8X2XSCHEME
2020/03/02(月) 20:37:53.23ID:4ZdkwDZZ452デフォルトの名無しさん
2020/03/02(月) 20:40:00.58ID:x4CDu4GY453デフォルトの名無しさん
2020/03/02(月) 20:41:39.08ID:LGtCkZFK 敗走したのにもどってくんなよ
455蟻人間 ◆T6xkBnTXz7B0
2020/03/02(月) 21:47:32.89ID:j/GXcJfE 【ソフト名】リソーエディタ
【URL】https://github.com/katahiromz/RisohEditor
【説明】リソースデータを編集できるソフト。
これ、VS2012でビルドしたら、バイナリサイズが10MB超えてるだけど、なんとか6MB以内に縮小できないだろうか?
インラインとか関係ある?
【URL】https://github.com/katahiromz/RisohEditor
【説明】リソースデータを編集できるソフト。
これ、VS2012でビルドしたら、バイナリサイズが10MB超えてるだけど、なんとか6MB以内に縮小できないだろうか?
インラインとか関係ある?
456はちみつ餃子 ◆8X2XSCHEME
2020/03/02(月) 22:01:25.31ID:4ZdkwDZZ457蟻人間 ◆T6xkBnTXz7B0
2020/03/02(月) 22:10:19.07ID:JxKPpJ6p >>456
うん。zip圧縮したサイズがだいたい10MB。UPXも試したけど圧縮後のサイズには効果が薄いみたい。インライン関数がデカいのがまずいのかな?
うん。zip圧縮したサイズがだいたい10MB。UPXも試したけど圧縮後のサイズには効果が薄いみたい。インライン関数がデカいのがまずいのかな?
458デフォルトの名無しさん
2020/03/02(月) 22:31:49.40ID:TcdIMkwU >>457
サイズ優先の最適化オプション試してみたら
サイズ優先の最適化オプション試してみたら
459デフォルトの名無しさん
2020/03/02(月) 23:45:22.71ID:4PGofnEL460デフォルトの名無しさん
2020/03/02(月) 23:53:18.90ID:4PGofnEL >>398
それはバイトの概念を直接扱えないような言語でも使えると言えば使えるかもしれないが、敢えてそんなコードを書く必要はない。
「高級アセンブラ」の名が無く。
自分が知らない処理系に誰かがコンパイルすることを想定していて不安が残る場合には、どこかに
テストコードを書いておけばいい。例えば、次のようにする:
uint32_t a = 0x11223344;
uint8_t *ptr = (uint8_t *)&a;
if ( ptr[0] == 0x44 && ptr[1] == 0x33 && ptr[2] == 0x22 && ptr[3] == 0x11 ) {
// リトルエンディアン
}
else if ( ptr[0] == 0x11 && ptr[1] == 0x22 && ptr[2] == 0x33 && ptr[3] == 0x44 ) {
// ビッグエンディアン
}
else {
// エラー
}
それはバイトの概念を直接扱えないような言語でも使えると言えば使えるかもしれないが、敢えてそんなコードを書く必要はない。
「高級アセンブラ」の名が無く。
自分が知らない処理系に誰かがコンパイルすることを想定していて不安が残る場合には、どこかに
テストコードを書いておけばいい。例えば、次のようにする:
uint32_t a = 0x11223344;
uint8_t *ptr = (uint8_t *)&a;
if ( ptr[0] == 0x44 && ptr[1] == 0x33 && ptr[2] == 0x22 && ptr[3] == 0x11 ) {
// リトルエンディアン
}
else if ( ptr[0] == 0x11 && ptr[1] == 0x22 && ptr[2] == 0x33 && ptr[3] == 0x44 ) {
// ビッグエンディアン
}
else {
// エラー
}
461デフォルトの名無しさん
2020/03/03(火) 00:10:54.51ID:alJFGTdC462デフォルトの名無しさん
2020/03/03(火) 01:43:26.11ID:vE1VkH8+ CではOK、C++ではUB
C/C++コンパイラではたまたま動く場合が多いかもしれないけど、UBはUBなんだし回避方法もあるんだからやめとこう
ただこれだけの話なんだけど
何が気に食わないのか「わかりやすいんだ!汎用的なんだ!Cらしいんだ!俺のコンパイラでは動くんだ!この程度のテクニックも知らんのか!」
ってノリでナイーブにUB書きたがる奴が絶えないのはなんでだろうね
一度でもそういうのが引き起こす地獄みたいなバグに付き合わされたら二度とそんなことしないしさせないって思うもんなんだけどね
幸運にも遭遇したことがないのか、全部他人に解決してもらってるいい身分の人なのか
C/C++コンパイラではたまたま動く場合が多いかもしれないけど、UBはUBなんだし回避方法もあるんだからやめとこう
ただこれだけの話なんだけど
何が気に食わないのか「わかりやすいんだ!汎用的なんだ!Cらしいんだ!俺のコンパイラでは動くんだ!この程度のテクニックも知らんのか!」
ってノリでナイーブにUB書きたがる奴が絶えないのはなんでだろうね
一度でもそういうのが引き起こす地獄みたいなバグに付き合わされたら二度とそんなことしないしさせないって思うもんなんだけどね
幸運にも遭遇したことがないのか、全部他人に解決してもらってるいい身分の人なのか
463デフォルトの名無しさん
2020/03/03(火) 02:22:47.77ID:V4J60F8x > やめとこう
何の権利で指図するんだよ
何の権利で指図するんだよ
464デフォルトの名無しさん
2020/03/03(火) 02:40:53.66ID:vE1VkH8+ 「そんなにお酒飲み過ぎると健康に悪いよ、やめとこう?」
「一生酒を飲むなと命令するのか!何の権利で指図するんだ!」
おおめんどくさい
ただのアドバイスを命令や強要や脅迫に感じるのは鬱の初期症状だから気を付けなよ
「一生酒を飲むなと命令するのか!何の権利で指図するんだ!」
おおめんどくさい
ただのアドバイスを命令や強要や脅迫に感じるのは鬱の初期症状だから気を付けなよ
465デフォルトの名無しさん
2020/03/03(火) 03:15:03.15ID:V4J60F8x お節介なやつは人からそう見られてるんだよ
466デフォルトの名無しさん
2020/03/03(火) 03:39:42.34ID:vE1VkH8+ お節介じゃないよ
俺の関係者がここを見てここのバカに勇気付けられてUB書き散らかすようになると俺が困るから言ってるんだよ
俺のためだ
俺の関係者がここを見てここのバカに勇気付けられてUB書き散らかすようになると俺が困るから言ってるんだよ
俺のためだ
467デフォルトの名無しさん
2020/03/03(火) 03:54:38.06ID:V4J60F8x 逆もしかりだ
チームに入ったばかりの新入りが「UBだ! UBだ!」と喚きだし
「おまえならどうする?」に答えられないゴミには諦めてもらうしかない
どうせunion使わないためにポインタのキャストとかだろくっだらねえ
チームに入ったばかりの新入りが「UBだ! UBだ!」と喚きだし
「おまえならどうする?」に答えられないゴミには諦めてもらうしかない
どうせunion使わないためにポインタのキャストとかだろくっだらねえ
468デフォルトの名無しさん
2020/03/03(火) 04:29:39.93ID:vE1VkH8+ 新入りに危険な書き方を指摘されたら「くっだらねえ」と逆ギレした上に
チームで規格を当たって検討もせずに新入りに解決策を丸投げするのか
最低だなお前
チームで規格を当たって検討もせずに新入りに解決策を丸投げするのか
最低だなお前
469はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 05:43:51.35ID:WsWEE8rZ470はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 06:03:20.43ID:WsWEE8rZ ガチで組み込み環境のシビアなやつだとバイナリのテストの方に時間をかけたりするから
逆に言語に無頓着になる場合があるというのは聞いたことは有る。
1998 年頃の自動車制御とか携帯電話とかの話なんで、
コンパイラの規格準拠具合もそれほどあてにできなかった時代の話だけど。
逆に言語に無頓着になる場合があるというのは聞いたことは有る。
1998 年頃の自動車制御とか携帯電話とかの話なんで、
コンパイラの規格準拠具合もそれほどあてにできなかった時代の話だけど。
471デフォルトの名無しさん
2020/03/03(火) 06:14:57.83ID:jgFG2YH5 数年前に触ったdspは1byte32bitだったなー
472はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 06:36:20.05ID:WsWEE8rZ473デフォルトの名無しさん
2020/03/03(火) 06:43:09.65ID:0/2hhSYY >>468
例えばmemcpyの各プラットフォームごとに向けた最適化(の元のソース)はお前がここで言うようなUBだらけだろうし
boostなんかも各プラットフォーム向けに分けて書かれてる部分が多い
そこまでUBを避けてどんなプラットフォームでも動くように、なんてのもYAGNIの一種だと思うけどね
例えばmemcpyの各プラットフォームごとに向けた最適化(の元のソース)はお前がここで言うようなUBだらけだろうし
boostなんかも各プラットフォーム向けに分けて書かれてる部分が多い
そこまでUBを避けてどんなプラットフォームでも動くように、なんてのもYAGNIの一種だと思うけどね
474デフォルトの名無しさん
2020/03/03(火) 06:46:29.83ID:AJx5UoX4 >>470
ガチな組込みって言うか普通の企業なら開発環境も決め打ちで作ってテストする
ガチな組込みって言うか普通の企業なら開発環境も決め打ちで作ってテストする
475デフォルトの名無しさん
2020/03/03(火) 06:53:54.29ID:AJx5UoX4476デフォルトの名無しさん
2020/03/03(火) 07:14:47.35ID:WkxUfZWu え?
477デフォルトの名無しさん
2020/03/03(火) 07:16:59.86ID:KvGr1Z90 なぜuint8_tを使わないの??、、
478デフォルトの名無しさん
2020/03/03(火) 07:19:47.74ID:uPsaHRM9 >>475
え?
え?
479デフォルトの名無しさん
2020/03/03(火) 07:30:20.60ID:0/2hhSYY 2008年に一応はっきり決まったらしいね
ただしC++ではそうと決めてはいないので一応UB
ただしC++ではそうと決めてはいないので一応UB
480デフォルトの名無しさん
2020/03/03(火) 07:33:02.45ID:2njekV5l481はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 07:36:41.10ID:WsWEE8rZ >>473
各プラットフォームに「対応」できてるなら別にいいんじゃね。
union の未定義がどうこう言ってるのは >>365 程度のことに
あえて各プラットフォームの事情を持ち込むのは割に合わない (そのくらい UB の厄介さには重みがある)
って話題だと俺は理解してる。
ターゲットが完全に固定されてたとしてもコンパイラが吐くコードを把握する自信は俺はないし
たぶん >>468 もないし、 >>473 だって出来れば避けて通りたくない?
その上でどうしてもいじらないといけないくらい速度に厳しい場面とかだったら嫌々やるかもしれないけど、
最初からはやらないって程度の話。 早すぎる最適化は諸悪の根源っていうし。
各プラットフォームに「対応」できてるなら別にいいんじゃね。
union の未定義がどうこう言ってるのは >>365 程度のことに
あえて各プラットフォームの事情を持ち込むのは割に合わない (そのくらい UB の厄介さには重みがある)
って話題だと俺は理解してる。
ターゲットが完全に固定されてたとしてもコンパイラが吐くコードを把握する自信は俺はないし
たぶん >>468 もないし、 >>473 だって出来れば避けて通りたくない?
その上でどうしてもいじらないといけないくらい速度に厳しい場面とかだったら嫌々やるかもしれないけど、
最初からはやらないって程度の話。 早すぎる最適化は諸悪の根源っていうし。
482はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 07:38:19.27ID:WsWEE8rZ483デフォルトの名無しさん
2020/03/03(火) 07:45:28.78ID:0/2hhSYY484デフォルトの名無しさん
2020/03/03(火) 07:47:02.82ID:AJx5UoX4485デフォルトの名無しさん
2020/03/03(火) 07:50:44.52ID:0/2hhSYY >>484
自分で調べろ
自分で調べろ
486デフォルトの名無しさん
2020/03/03(火) 08:03:53.36ID:NOkKAnZ5487デフォルトの名無しさん
2020/03/03(火) 08:07:38.96ID:0/2hhSYY お前もたいがい煽ってると思うが
>終わりにしなよ
俺に言うなよ
>終わりにしなよ
俺に言うなよ
488デフォルトの名無しさん
2020/03/03(火) 08:22:51.66ID:AJx5UoX4489デフォルトの名無しさん
2020/03/03(火) 08:23:01.86ID:Pp/8GnxB >>483
> そこまで言うなら今現在存在する環境でunionによるtype punningが出来ない環境を挙げてみろ
↓こういう例は把握してるの? >>405 みたいな理解だとこんなコードもエイリアス有効という話になっちゃいそうで危ないと思う。
https://wandbox.org/permlink/qrUVwDZbNPRnOQyN
#include <stdio.h>
#include <stdint.h>
int f(uint16_t* u16, uint32_t* u32) { *u16 = 0x1111; *u32 = 0x22222222; return *u16 + *u32; }
union U { uint16_t u16; uint32_t u32; };
int main() { union U u; printf("%08x\n", f(&u.u16, &u.u32)); }
出力 (gcc 9.2.0 -O2):
22223333
> そこまで言うなら今現在存在する環境でunionによるtype punningが出来ない環境を挙げてみろ
↓こういう例は把握してるの? >>405 みたいな理解だとこんなコードもエイリアス有効という話になっちゃいそうで危ないと思う。
https://wandbox.org/permlink/qrUVwDZbNPRnOQyN
#include <stdio.h>
#include <stdint.h>
int f(uint16_t* u16, uint32_t* u32) { *u16 = 0x1111; *u32 = 0x22222222; return *u16 + *u32; }
union U { uint16_t u16; uint32_t u32; };
int main() { union U u; printf("%08x\n", f(&u.u16, &u.u32)); }
出力 (gcc 9.2.0 -O2):
22223333
490はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 08:31:00.08ID:WsWEE8rZ491はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 08:45:51.11ID:WsWEE8rZ >>484
- std::uint8_t は cstdint にある。 (C++17 の 21.4.1)
- cstdint は C 標準ライブラリヘッダの stdint.h と同じように全ての型とマクロを定義する (同上)
- C++17 が参照する C の規格とは C11 (ISO/IEC 9899:2011) である (C++17 の 2)
- uintN_t はオプショナルだが 8, 16, 32, 64 については対応する型が存在するなら提供しなければならない (C11 の 7.20.1.1)
- char が 8bit ならば C++ には uint8_t は必ず存在するはずだがオプショナルであると言ってるから 8bit の型がない (char が 8bit ではない) ことは想定内なんだろう
というのが根拠。
- std::uint8_t は cstdint にある。 (C++17 の 21.4.1)
- cstdint は C 標準ライブラリヘッダの stdint.h と同じように全ての型とマクロを定義する (同上)
- C++17 が参照する C の規格とは C11 (ISO/IEC 9899:2011) である (C++17 の 2)
- uintN_t はオプショナルだが 8, 16, 32, 64 については対応する型が存在するなら提供しなければならない (C11 の 7.20.1.1)
- char が 8bit ならば C++ には uint8_t は必ず存在するはずだがオプショナルであると言ってるから 8bit の型がない (char が 8bit ではない) ことは想定内なんだろう
というのが根拠。
492デフォルトの名無しさん
2020/03/03(火) 08:49:11.40ID:87wKGSsV いわゆる「悪魔の証明」ですか。
493デフォルトの名無しさん
2020/03/03(火) 08:50:30.01ID:0/2hhSYY494はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 09:13:15.69ID:WsWEE8rZ495デフォルトの名無しさん
2020/03/03(火) 10:05:21.19ID:dPHWJmki497デフォルトの名無しさん
2020/03/03(火) 10:43:38.18ID:0/2hhSYY ちなみに>>489の例はunionじゃなくて同じ変数を指すポインタ渡しても同じことになるからね
498デフォルトの名無しさん
2020/03/03(火) 11:04:57.92ID:4ZFJ43jO >>483
> そこまで言うなら今現在存在する環境でunionによるtype punningが出来ない環境を挙げてみろ
今時点では知らないしないだろうな
でも今後もそうなのかはわからない
1byteの定義なんかは処理系がターゲットcpuごとに決めるもの
エンディアンとかも
これは問題視されない
unionに関しては、そういう類いではないだろう
理由は把握してないけど、非podの場合を含めて意味論が決められない、
あるいはaliasingに関係して明確に使うなということなのかもしれない
あえてcと非互換にしているわけで、グレーであることは知っておくべき
ちなみに20からpodという文言が消えると聞いた
さらにcとの乖離が進むのかもしれない
> そこまで言うなら今現在存在する環境でunionによるtype punningが出来ない環境を挙げてみろ
今時点では知らないしないだろうな
でも今後もそうなのかはわからない
1byteの定義なんかは処理系がターゲットcpuごとに決めるもの
エンディアンとかも
これは問題視されない
unionに関しては、そういう類いではないだろう
理由は把握してないけど、非podの場合を含めて意味論が決められない、
あるいはaliasingに関係して明確に使うなということなのかもしれない
あえてcと非互換にしているわけで、グレーであることは知っておくべき
ちなみに20からpodという文言が消えると聞いた
さらにcとの乖離が進むのかもしれない
499デフォルトの名無しさん
2020/03/03(火) 12:22:06.47ID:AJx5UoX4 >>491
で、そのどこにバイトの話があるんだ?
で、そのどこにバイトの話があるんだ?
500デフォルトの名無しさん
2020/03/03(火) 12:36:13.65ID:4ZFJ43jO CHAR_BITS の定義でしょ
自分で確認しろ
自分で確認しろ
501デフォルトの名無しさん
2020/03/03(火) 12:40:22.22ID:ctFzSosi POD=trivial&&standard-layout
ってC++11の時に整理済みでしょ
概念は消えないよ
ってC++11の時に整理済みでしょ
概念は消えないよ
502デフォルトの名無しさん
2020/03/03(火) 12:52:22.33ID:GzyUVdF6 >>489
それはgccのバグに思える。
それはgccのバグに思える。
503デフォルトの名無しさん
2020/03/03(火) 12:59:47.46ID:0/2hhSYY バグじゃないぞ
これがバグだったら最適化にかなりの制限がかかってしまう
strict aliasing ruleでググれ
これがバグだったら最適化にかなりの制限がかかってしまう
strict aliasing ruleでググれ
504デフォルトの名無しさん
2020/03/03(火) 13:01:57.30ID:GzyUVdF6 >>503
最適化しない場合とした場合とで結果が変わってくるのは駄目な最適化。
最適化しない場合とした場合とで結果が変わってくるのは駄目な最適化。
505デフォルトの名無しさん
2020/03/03(火) 13:04:15.59ID:0/2hhSYY だからググれって
鬼の首を取ったかのように叩く奴が出てくる前に教えてやってんのにw
鬼の首を取ったかのように叩く奴が出てくる前に教えてやってんのにw
506はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 13:05:53.55ID:WsWEE8rZ >>499
肝心なことが漏れてた。 すまぬ。
C++17 だと 4.4 の脚注に
> The number of bits in a byte is reported by the macro CHAR_BIT in the header <climits>
とあって、バイトとは char の大きさのことだというのが C++ での考え方だと思っていい。
C11 だと 5.2.4.2.1 の CHAR_BIT の説明のところに
> Their implementation-defined values shall be equal or greater in agnitude
> (absolute value) to those shown, with the same sign.
>
> - number of bits for smallest object that is not a bit-field (byte)
> CHAR_BIT 8
という言い回しがあって、 CHAR_BIT は 8 以上であればいい (8 キッカリとは限らない) と解釈できる。
それと、ポインタを持てる単位がバイトだということが示唆されているとも言える。
肝心なことが漏れてた。 すまぬ。
C++17 だと 4.4 の脚注に
> The number of bits in a byte is reported by the macro CHAR_BIT in the header <climits>
とあって、バイトとは char の大きさのことだというのが C++ での考え方だと思っていい。
C11 だと 5.2.4.2.1 の CHAR_BIT の説明のところに
> Their implementation-defined values shall be equal or greater in agnitude
> (absolute value) to those shown, with the same sign.
>
> - number of bits for smallest object that is not a bit-field (byte)
> CHAR_BIT 8
という言い回しがあって、 CHAR_BIT は 8 以上であればいい (8 キッカリとは限らない) と解釈できる。
それと、ポインタを持てる単位がバイトだということが示唆されているとも言える。
507デフォルトの名無しさん
2020/03/03(火) 13:08:55.41ID:GzyUVdF6 >>491
charのbit数は決まってないが、バイトはコンピュータ用語として8バイトと決まっているはず。
charのbit数は決まってないが、バイトはコンピュータ用語として8バイトと決まっているはず。
508デフォルトの名無しさん
2020/03/03(火) 13:10:50.46ID:GzyUVdF6 >>506
多分、
「The number of bits in a byte is reported by the macro CHAR_BIT in the header <climits>」
は、書き間違いで、正しくは、
The number of bits in a char is reported by the macro CHAR_BIT in the header <climits>
だと思われる。
多分、
「The number of bits in a byte is reported by the macro CHAR_BIT in the header <climits>」
は、書き間違いで、正しくは、
The number of bits in a char is reported by the macro CHAR_BIT in the header <climits>
だと思われる。
509デフォルトの名無しさん
2020/03/03(火) 13:17:56.62ID:GzyUVdF6 >>507
そうか、歴史的には、byteが7bitだったこともあったんだね。
そうか、歴史的には、byteが7bitだったこともあったんだね。
510はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 13:32:49.23ID:WsWEE8rZ >>507
これな。
https://ja.wikipedia.org/wiki/IEC_80000-13
C++ が参照規格として示してないので採用してないんでしょ。
まあそんなこと言ったら英単語の意味だってどうとでもとりようがあったりするからアレだけど、
あらためて C++ の規格の中でバイトについて書いてある以上は C++ 世界では
「コンピュータ用語としてのバイト」を採用してないと解釈するのが自然。
将来的には変更されることもあるかもしれんけども。
>>508
C++20 のドラフトでもそのままなので本気で間違ってると思うなら指摘してあげればいいんじゃね?
>>509
9bit のマシンもあったらしいよ。
https://ja.wikipedia.org/wiki/ACOS-6
これな。
https://ja.wikipedia.org/wiki/IEC_80000-13
C++ が参照規格として示してないので採用してないんでしょ。
まあそんなこと言ったら英単語の意味だってどうとでもとりようがあったりするからアレだけど、
あらためて C++ の規格の中でバイトについて書いてある以上は C++ 世界では
「コンピュータ用語としてのバイト」を採用してないと解釈するのが自然。
将来的には変更されることもあるかもしれんけども。
>>508
C++20 のドラフトでもそのままなので本気で間違ってると思うなら指摘してあげればいいんじゃね?
>>509
9bit のマシンもあったらしいよ。
https://ja.wikipedia.org/wiki/ACOS-6
511デフォルトの名無しさん
2020/03/03(火) 13:48:53.72ID:4ZFJ43jO512はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 14:19:12.58ID:WsWEE8rZ >>511
もう POD という区分が適切な場面はあんまりないから、という意味のことが書いてあるっぽい。
https://botondballo.wordpress.com/2017/11/20/trip-report-c-standards-meeting-in-albuquerque-november-2017/
もう POD という区分が適切な場面はあんまりないから、という意味のことが書いてあるっぽい。
https://botondballo.wordpress.com/2017/11/20/trip-report-c-standards-meeting-in-albuquerque-november-2017/
513デフォルトの名無しさん
2020/03/03(火) 14:41:53.95ID:ctFzSosi trivialは生成解体の話で、standard-layoutはデータ配置の話だから
PODってのはレイヤーの違う性質が混ざってて規格に使う用語としては筋悪なんですわ
PODってのはレイヤーの違う性質が混ざってて規格に使う用語としては筋悪なんですわ
514デフォルトの名無しさん
2020/03/03(火) 16:26:35.30ID:GzyUVdF6 >>510
>C++20 のドラフトでもそのままなので本気で間違ってると思うなら指摘してあげればいいんじゃね?
annotated C++ reference manual, 3.2.1c Integral Limits には、
CHAR_BIT 8 maximum bits in a byte
とあった。
>C++20 のドラフトでもそのままなので本気で間違ってると思うなら指摘してあげればいいんじゃね?
annotated C++ reference manual, 3.2.1c Integral Limits には、
CHAR_BIT 8 maximum bits in a byte
とあった。
515デフォルトの名無しさん
2020/03/03(火) 16:39:36.38ID:GzyUVdF6 >>514
ANSI/ISO, Standard C プログラマーズ リファレンス
P.J. Plauger / Jim Brodie, 日本語訳, ASCII
第一部 第一章 基本整数型 には、
--------------------------------------------------------
表記, 最小範囲, 表現における制限
--------------------------------------------------------
char, [0,128), signed char か unsigned char のどちらかと等しい。
signed char, (-128,128), 少なくとも 8bit 精度の符号付整数
unsigned char, [0, 256), signed charと同じサイズ。負の数は無い。
--------------------------------------------------------
第二部 第二章 標準ヘッダ <limit.h> には、
--------------------------------------------------------
CHAR_BIT
#define CHAR_BIT <#if 式 ≧ 8>
このマクロは、char 型のデータオブジェクトを表現するのに使われているビット数の最大値と置き換わる。
--------------------------------------------------------
とある。
後半は >>514 とは異なり、byte ではなく、char となっている。
ANSI/ISO, Standard C プログラマーズ リファレンス
P.J. Plauger / Jim Brodie, 日本語訳, ASCII
第一部 第一章 基本整数型 には、
--------------------------------------------------------
表記, 最小範囲, 表現における制限
--------------------------------------------------------
char, [0,128), signed char か unsigned char のどちらかと等しい。
signed char, (-128,128), 少なくとも 8bit 精度の符号付整数
unsigned char, [0, 256), signed charと同じサイズ。負の数は無い。
--------------------------------------------------------
第二部 第二章 標準ヘッダ <limit.h> には、
--------------------------------------------------------
CHAR_BIT
#define CHAR_BIT <#if 式 ≧ 8>
このマクロは、char 型のデータオブジェクトを表現するのに使われているビット数の最大値と置き換わる。
--------------------------------------------------------
とある。
後半は >>514 とは異なり、byte ではなく、char となっている。
516デフォルトの名無しさん
2020/03/03(火) 16:46:23.12ID:GzyUVdF6 type punning について、このスレで議論されていた union の場合は、「適合コード」の例とされている:
https://www.jpcert.or.jp/m/sc-rules/c-exp39-c.html
適合コード
以下のコード例では、オブジェクトの有効な型と互換性のある型を持つ union 型を使用している。
union {
short a[2];
int i;
} u;
u.a[0]=0x1111;
u.a[1]=0x1111;
u.i = 0x22222222;
printf("%x %x\n", u.a[0], u.a[1]);
このコード例では確実に "2222 2222" と出力される。
https://www.jpcert.or.jp/m/sc-rules/c-exp39-c.html
適合コード
以下のコード例では、オブジェクトの有効な型と互換性のある型を持つ union 型を使用している。
union {
short a[2];
int i;
} u;
u.a[0]=0x1111;
u.a[1]=0x1111;
u.i = 0x22222222;
printf("%x %x\n", u.a[0], u.a[1]);
このコード例では確実に "2222 2222" と出力される。
517デフォルトの名無しさん
2020/03/03(火) 16:56:05.32ID:GzyUVdF6 union による type punning は、C99やC11では大丈夫になったのではないか。
最後に代入したメンバ以外のメンバからの読み出しは、合法になったようだが。
よく読んでないので分からん:
https://stackoverflow.com/questions/11639947/is-type-punning-through-a-union-unspecified-in-c99-and-has-it-become-specified
最後に代入したメンバ以外のメンバからの読み出しは、合法になったようだが。
よく読んでないので分からん:
https://stackoverflow.com/questions/11639947/is-type-punning-through-a-union-unspecified-in-c99-and-has-it-become-specified
518デフォルトの名無しさん
2020/03/03(火) 16:58:14.25ID:GzyUVdF6 >>517
Finally, one of the changes from C90 to C99 was to remove any restriction on accessing one member of a union when the last store was to a different one.
The rationale was that the behaviour would then depend on the representations of the values.
Since this point is often misunderstood, it might well be worth making it clear in the Standard.
[...]
To address the issue about "type punning", attach a new footnote 78a to the words "named member" in 6.5.2.3#3: 78a
If the member used to access the contents of a union object is not the same as the member last used to store a value in the object,
the appropriate part of the object representation of the value is reinterpreted as an object representation in the new type as described in 6.2.6 (a process sometimes called "type punning").
This might be a trap representation.
Finally, one of the changes from C90 to C99 was to remove any restriction on accessing one member of a union when the last store was to a different one.
The rationale was that the behaviour would then depend on the representations of the values.
Since this point is often misunderstood, it might well be worth making it clear in the Standard.
[...]
To address the issue about "type punning", attach a new footnote 78a to the words "named member" in 6.5.2.3#3: 78a
If the member used to access the contents of a union object is not the same as the member last used to store a value in the object,
the appropriate part of the object representation of the value is reinterpreted as an object representation in the new type as described in 6.2.6 (a process sometimes called "type punning").
This might be a trap representation.
519デフォルトの名無しさん
2020/03/03(火) 20:10:58.79ID:6u3PFyGZ >>515
日本語訳が間違ってる可能性もあるな
日本語訳が間違ってる可能性もあるな
520デフォルトの名無しさん
2020/03/03(火) 21:25:40.77ID:s8qGwiQH >>514
頑なに仕様書読まないのはなぜなのか
頑なに仕様書読まないのはなぜなのか
522デフォルトの名無しさん
2020/03/04(水) 00:45:53.15ID:And/nx/1 C++は間違っているからな
間違いで間違いを正すことはできな
い
間違いで間違いを正すことはできな
い
523デフォルトの名無しさん
2020/03/04(水) 01:36:12.37ID:tHLmVZnX >>515 も仕様書だと思うのだが。
524デフォルトの名無しさん
2020/03/04(水) 08:18:37.27ID:wOgWtFGu それに基づいて作られた製品があればの話だな
525デフォルトの名無しさん
2020/03/04(水) 09:01:59.59ID:obnoKtcJ まあc++の仕様を完全に守ってる実装なんて一つもないしな。
それ確かめるのに工数かかるってどうなん?とは思う。
それ確かめるのに工数かかるってどうなん?とは思う。
526デフォルトの名無しさん
2020/03/04(水) 09:56:46.98ID:0Mjry1zX >>523
それは解説書
それは解説書
527デフォルトの名無しさん
2020/03/04(水) 10:55:23.42ID:wOgWtFGu 仕様を説明していても仕様書かどうかとは別な話だな
528デフォルトの名無しさん
2020/03/04(水) 12:41:56.62ID:tHLmVZnX >>526
実際には、あれは普通の解説書ではなく、コンパイラを実装する人が重宝するようなバッカス記法や決定性オートマトンなどを使って仕様がかなり厳密に書かれた特殊な本。
実際には、あれは普通の解説書ではなく、コンパイラを実装する人が重宝するようなバッカス記法や決定性オートマトンなどを使って仕様がかなり厳密に書かれた特殊な本。
529はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 13:50:02.87ID:BrIasXcf530はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 13:54:01.41ID:BrIasXcf C/C++ の仕様が信用ならんなと思うのは欠陥報告 (Defect Report) の存在だな。
仕様書に書いてないことの確認がとれていても仕様にないとは言い切れない。
把握できるわけないだろ!
仕様書に書いてないことの確認がとれていても仕様にないとは言い切れない。
把握できるわけないだろ!
531デフォルトの名無しさん
2020/03/04(水) 14:10:16.09ID:wOgWtFGu 公文書だかんな
はい発表しましたよ、周知義務よろしく
↑
こういう体質なのは今さら驚いても始まらん
はい発表しましたよ、周知義務よろしく
↑
こういう体質なのは今さら驚いても始まらん
532はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 14:57:19.24ID:BrIasXcf 公文書なら著作権法による保護が及ばないのでそれはそれで利点があるんだけどな。
実際には ISO は民間組織だし、正式な規格票はクソ高価すぎる。
私はドラフトと cpprefjp しか見てないんだけど、買った人いる?
実際には ISO は民間組織だし、正式な規格票はクソ高価すぎる。
私はドラフトと cpprefjp しか見てないんだけど、買った人いる?
533デフォルトの名無しさん
2020/03/04(水) 16:25:27.01ID:tHLmVZnX VS2019 の limits.h のコメントはこうなっている :
#define CHAR_BIT 8 // number of bits in a char
#define CHAR_BIT 8 // number of bits in a char
534はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 16:43:02.53ID:BrIasXcf そうか。
535デフォルトの名無しさん
2020/03/04(水) 16:43:03.91ID:CqUkRGBA VSの想定環境では正しいし何の問題もないな
536デフォルトの名無しさん
2020/03/04(水) 16:58:40.94ID:tHLmVZnX CHAR_BIT なのに本当に「number of bits in a byte」が厳密定義なら、何らかの説明が欲しい所ではある。
ただ、C言語では、charは言語が扱える整数の「最小単位(?)」などと書かれている文書を見たことがある。
だとすれば、Cに高級アセンブラの地位を期待する需要が有る以上、charのbit数がbyteと一致する必要は必ずあるとは思う。
総合的に考えれば、C言語においては、char=byte でなくてはならず、もはやbyteも絶対に8BITでなければならないので
char、byteがいずれも8bit
であることは事実上、必須である。
ただ、C言語では、charは言語が扱える整数の「最小単位(?)」などと書かれている文書を見たことがある。
だとすれば、Cに高級アセンブラの地位を期待する需要が有る以上、charのbit数がbyteと一致する必要は必ずあるとは思う。
総合的に考えれば、C言語においては、char=byte でなくてはならず、もはやbyteも絶対に8BITでなければならないので
char、byteがいずれも8bit
であることは事実上、必須である。
537デフォルトの名無しさん
2020/03/04(水) 17:05:12.53ID:tHLmVZnX Wikipediaの「整数型」のところで、C言語では、何があろうとsizeof(char)は必ず1になると決められており、たとえ16BITワード単位のアーキテクチャでも、CHAR_BIT は 16になるが、sizeof(char)は必ず1になるのだそうだ。
一方、sizeof(X)は、Xの「バイト数」だとされているわけだけど、はっきりいってこんな状況では総合的に考えて、charを8BIT以外には出来ない。
一方、sizeof(X)は、Xの「バイト数」だとされているわけだけど、はっきりいってこんな状況では総合的に考えて、charを8BIT以外には出来ない。
538はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 17:14:44.63ID:BrIasXcf >>536
Rationale の 6.5.3.4 に記述がある。
http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
sizeof(char) は 1 を返す。
たとえこの単位が 36bit 幅であっても。
C 用語の「バイト」はストレージの最小単位であることを意味する。
Rationale の 6.5.3.4 に記述がある。
http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
sizeof(char) は 1 を返す。
たとえこの単位が 36bit 幅であっても。
C 用語の「バイト」はストレージの最小単位であることを意味する。
539デフォルトの名無しさん
2020/03/04(水) 17:16:32.37ID:tHLmVZnX540はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 17:18:06.36ID:BrIasXcf ポインタを作れる単位を最小単位にするのは理に適ってるんじゃないの。
541デフォルトの名無しさん
2020/03/04(水) 17:20:06.24ID:tHLmVZnX 「bit-field以外のオブジェクトの最小単位」
なわけだから、ポインタが指しうるアドレスの最小単位でもあるわけだ。
言葉が変かも知れないが。
なわけだから、ポインタが指しうるアドレスの最小単位でもあるわけだ。
言葉が変かも知れないが。
542デフォルトの名無しさん
2020/03/04(水) 17:35:08.28ID:obnoKtcJ 気にするような環境にない奴に限ってこういうこと気にするのな。
543デフォルトの名無しさん
2020/03/04(水) 17:39:54.09ID:tHLmVZnX 個人的には、ソース配布してダウンロードした人が各自勝手にコンパイルするようにするようなプログラムを書いたことが無い。
必ずバイナリレベルでテストして十分デバッグ済みだと思ってからバイナリを配布してきたから。
ソース配布文化は別世界。
必ずバイナリレベルでテストして十分デバッグ済みだと思ってからバイナリを配布してきたから。
ソース配布文化は別世界。
544デフォルトの名無しさん
2020/03/04(水) 18:59:40.00ID:Py0/41jA だから何だ
結局何が言いたいんだ
規格が間違ってるって言うならISOのWGに意見書出せよ
情報は歓迎だぞ
結局何が言いたいんだ
規格が間違ってるって言うならISOのWGに意見書出せよ
情報は歓迎だぞ
545デフォルトの名無しさん
2020/03/04(水) 20:23:54.51ID:3yz+4Wbb■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否 [夜のけいちゃん★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★5 [ぐれ★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 「タワマン天国」に飛びつく若者…SNSに転がる「成功体験」に続けるのか 湾岸エリアの業者が語った現実 [蚤の市★]
- フランス「G7に習近平主席を呼びたい」ドイツ「良い考えだ」 高市さん...? [237216734]
- 麻生太郎氏、高市政権と距離を置きはじめる(´・ω・`) [399259198]
- 【悲報】中国営業に熱心な日本人タレントたち、中国のイベントが続々と中止に… まだ予定中のアイドルとか歌手とかたくさんいるけど [452836546]
- 自閉症が「んなっしょい」と連呼するお🏡
- 押井守の映画「天使のたまご」が4Kリマスターされて上映されるみたいなんだけどこれ面白いの? [268718286]
- 【悲報】高市効果で「1ドル=160円」が相場へwwwwwwwwwwwwwwwwwwwwwwwwwwwww 止まらぬ高市円安💥💥 [871926377]
