1 名前:デフォルトの名無しさん (ワッチョイ 0f63-sFbk) mailto:sage [2023/04/21(金) 14:05:20.18 ID:rqj2HSDF0.net] !extend:checked:vvvvv:1000:512 (新スレ立ての際上記コマンドを2行書き込んでください) C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C17 www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C23 最新ドラフト https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ ※前スレ C言語なら俺に聞け 160 https://mevius.5ch.net/test/read.cgi/tech/1672191630/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
382 名前:デフォルトの名無しさん (アウアウウー Sa9d-mBaV) [2023/08/07(月) 10:19:25.16 ID:wl/Lx6N5a.net] >>378 の主張だと typedef struct { int y; char b[]; } B; B *q = (B *)malloc(sizeof(B) - 1 + N); でなければならないのかな
383 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0) mailto:sage [2023/08/07(月) 11:05:26.04 ID:U9It/DCQ0.net] >>379 配列の大きさとして 1 を指定して可変長のように扱うやり方については ちょっと不明瞭なんだが仕様に厳密にいうと準拠してない方法だと考えられている。 https://c-faq.com/struct/structhack.html 配列の大きさが 0 より大きくなければならないということについては 例外を見つけられないのでどこであろうと 0 を指定したら未定義と解釈していいと思う。 GNU C では構造体メンバの最後の配列要素に 0 を指定した場合は C99 でフレキシブル配列メンバにしたときとほぼ同じような扱いになることがドキュメント化されてる。 https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html つまり GNU C では 0 を指定していいわけだが……結果が同じならあえてやる必要もないな。 GNU C でも構造体の最後の要素を除いて配列の大きさに 0 を指定するのは (可能だが) 推奨されていない。 アクセスした結果は未定義なのでなんの役に立つのかようわからん。