[過去ログ] C言語なら俺に聞け 160 (946レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1: (ワッチョイ ff63-dxp0) 2022/12/28(水)10:40 ID:PyoNDBFu0(1) AAS
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
外部リンク:paiza.io
外部リンク:ideone.com
外部リンク:codepad.org

C17
外部リンク[pdf]:www.open-std.org
省14
917
(2): (ワッチョイ 2d63-r2C4) 2023/04/12(水)14:05 ID:NgkNjGWQ0(2/7) AAS
struct X;
void func(struct X[]); //error

struct Y { int a; };
void func(struct Y[]); //ok

不完全型の場合、仮引数の[]はポインタにならない??
ちな、gccではエラー、clでは通る
918: (スップ Sd82-qF+M) 2023/04/12(水)14:17 ID:mayblUPzd(1) AAS
C++だと通ったね
gcc/clangのCだとX[]は許されないけどX*は許される

関数宣言より前にX型の定義がないとコンパイルが通らなかった
919
(1): (ワッチョイ 2d63-r2C4) 2023/04/12(水)14:55 ID:NgkNjGWQ0(3/7) AAS
どっちが正しいのかね
920: 2023/04/12(水)15:04 ID:219MxBT/0(1/2) AAS
>>907
馬鹿な私に少しだけアドバイスを

それってsize_tのビット幅 < システム(OS)のビット幅と言う条件下での話なんでしょうか?
size_tがシステム(OS)のビット幅と同じならメモリで管理できるものは必然的にsize_tでも表現できると思うのですが
メモリ上で管理できているゼロ終端文字列をsize_tで表現できない場合ってあるんですか?
まあ一部の組み込みとかならあるかも知れませんが……
けどそういう環境の場合strlenなどのsize_tで返す場合でも表現できなくなるわけで、結局size_tに依存することになってどっちでも同じじゃないかと思うんですがどうなんでしょうか?
921
(1): (ワッチョイ 6ecf-Rzwh) 2023/04/12(水)15:07 ID:gccG0Jwg0(1/2) AAS
>>919
規格は知らんけど配列とポインタは違うんだからエラーで弾くのは正論だと思うけどね
通す処理系はその後の整合性をユーザーが担保する前提の思想なんでしょ
922
(1): (ワッチョイ 2d63-r2C4) 2023/04/12(水)15:09 ID:NgkNjGWQ0(4/7) AAS
>>921
仮引数に限っては*と[]は同じはず
不完全型だけ例外というのは気持ち悪い
923: 2023/04/12(水)15:15 ID:219MxBT/0(2/2) AAS
>>908
もう一つ無知なる私にアドバイスをお願いします

size_t len までは文字を格納出来ると>>907から読み取りましたが
sizeof(size_t)==sizeof(int) の場合
vector v のサイズがINT_MAX以上だった場合、 i < (int)v.size() ではプログラマーが予期しない動作になりませんか?
924: (ワッチョイ 412d-dXWb) 2023/04/12(水)15:27 ID:7SV2gFKB0(1) AAS
size_t が符号なし整数型
int が符号付き整数型
925
(1): (ワッチョイ 6ecf-Rzwh) 2023/04/12(水)15:34 ID:gccG0Jwg0(2/2) AAS
>>922
はずだかなんだか知らねーけど、そんなことはどうでも良くてサイズの分からないオブジェクトの配列は作れんって言ってんだよ
操作上の違いはともかく配列として宣言したんなら関数内では配列として扱うってことを示唆してるわけだろ
仮にそのfuncだかって名前の関数の中にX[3]とかX+5って書かれたらどうやってアドレス出すんだってことよ
動作に違いがあるってことは規格がそれを許してる箇所なんだろうけど弾いてる処理系はそういう考えなんだろう
926: (ワッチョイ 2d63-r2C4) 2023/04/12(水)15:53 ID:NgkNjGWQ0(5/7) AAS
>>925
仮引数はその場に配列を作り出したりはしないという基本が合意できない以上
これ以上おまえさんと話すのは無駄だな
927: (ワッチョイ 2d63-r2C4) 2023/04/12(水)15:53 ID:NgkNjGWQ0(6/7) AAS
> 規格は知らんけど

この時点で気付くべきだった
928: (ワッチョイ a910-Ay2p) 2023/04/12(水)15:55 ID:1mphmeyq0(1) AAS
Cはアセンブラの代用言語。
929
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 423e-/aea) 2023/04/12(水)16:36 ID:bThMVtxz0(1) AAS
>>917
規格的には (関数定義の一部ではない) 宣言の段階なら不完全型であることを許しているように読める。
C99 だと 6.7.5.3 の第 12 段落に書かれている。

> If the function declarator is not part of a definition of that function,
> parameters may have incomplete type and may use the [*] notation in their sequences of
> declarator specifiers to specify variable length array types.

> 関数宣言子が関数定義の一部ではない場合,仮引数の型は不完全型でもよく,
> また宣言指定子列に [*] を使って可変長配列型を指定してもよい。

ちなみに GCC だと以下のようなものもエラーだが MSVC だと通る。

struct X;
省1
930: (ワッチョイ 2d63-r2C4) 2023/04/12(水)16:59 ID:NgkNjGWQ0(7/7) AAS
>>929
㌧X

安心した
931
(1): (ワッチョイ 495f-/aea) 2023/04/12(水)23:57 ID:ysjFLZAD0(1) AAS
>>917
Cではエラーになるのが規格準拠の動作。
ただし宣言の形式を変えるだけで通る理不尽な制約でありC++では許されるように改められている。
外部リンク:stackoverflow.com
932
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 423e-/aea) 2023/04/13(木)00:37 ID:y5cvZaYN0(1) AAS
>>931
そこでも言及されてるけど
型調整 (配列がポインタに読み替えられる) が優先されるか配列宣言子としての解釈が優先されるかって曖昧じゃない?
読み替えより先に配列宣言子として解釈すべきと確信できるような記述ってある?
常識的には曖昧なら厳しい側の制約で解釈すべきだわなーとは思うけど陽には書かれてないように思う。
933: (ワッチョイ 02ad-Ay2p) 2023/04/13(木)02:04 ID:o3x890Fi0(1/2) AAS
>>907
昔々の PASCAL はそんな感じだったな。先頭1バイトに文字列のバイト数が入っていてその後に文字列がある。
当然それだと255バイトまでしか入らないのでもっと長い文字列を扱いたい時に苦しむことになる。
まあでも 8 bit とか 16 bit CPU のマイコンやパソコンにそういう高い要求は最初の頃はあまりなかったのでなんとかなっていた。
934: (ワッチョイ 495f-/aea) 2023/04/13(木)02:23 ID:jklAk1E50(1) AAS
>>932
プログラム内に制約 (constraint) 違反がある状態なので、前後関係がどっちだろうと
少なくとも制約違反について診断メッセージを出力しないと規格準拠とは言えない。
> A conforming implementation shall produce at least one diagnostic message ...
> ... if a preprocessing translation unit or translation unit contains a violation
> of any syntax rule or constraint, ...

「通る」が警告も出ずプログラム実行までできる状態と解釈してたけど、
エラーにはならないものの警告が出ているならそれも規格準拠とは言えそう。
935: (ワッチョイ 2d63-r2C4) 2023/04/13(木)08:28 ID:zEEI4t8g0(1/2) AAS
外部リンク[html]:www.open-std.org

仮引数の[]は、一旦は配列として受理し、その後でポインタに調整されるってことか
936: (ワッチョイ 2d63-r2C4) 2023/04/13(木)08:28 ID:zEEI4t8g0(2/2) AAS
VCで通るのは、VLAがないからってこと?
937: (スップ Sd82-VdbI) 2023/04/13(木)23:35 ID:DvwX4ZoKd(1) AAS
間違ってる
938: (ワッチョイ 6e63-Ay2p) 2023/04/13(木)23:48 ID:wWKtbXV/0(1/2) AAS
マスク無死でラーメン食いたい奴は、まず住所を書いて見てよ
その場所にノーマスクで食えるラーメン屋作らないといけないんだろ?
政府が作るのかな?
939: (ワッチョイ 6e63-Ay2p) 2023/04/13(木)23:55 ID:wWKtbXV/0(2/2) AAS
ごめん、誤爆
940: (ワッチョイ 02ad-Ay2p) 2023/04/13(木)23:55 ID:o3x890Fi0(2/2) AAS
はあ
941: (ワッチョイ 424b-jq58) 2023/04/14(金)01:01 ID:E99e4anP0(1) AAS
そのキモいレスをどこで発表するつもりだったのか
942: ◆QZaw55cn4c (ワッチョイ 07e6-DPrL) 2023/04/15(土)19:42 ID:JbgATxBi0(1) AAS
最近のLANカードで他力給電のものばかりのようですね、クロスケーブルでピアツーピアできるPCIe のカードって存在しないものですかね…
結局 hub を使っちまった、もったいないなあ
943: ◆QZaw55cn4c (ワッチョイ bfba-DPrL) 2023/04/16(日)20:11 ID:4UlFU6Wr0(1) AAS
chatGPTって面白いね…もうgoogle はいらないや
944: はちみつ餃子◆8X2XSCHEME (ワッチョイ 5f3e-S3w6) 2023/04/16(日)21:13 ID:Ot5nnykg0(1) AAS
C スレで言うことか?
945: (ワッチョイ 2763-2Cuq) 2023/04/16(日)21:23 ID:H2kHWHvu0(1) AAS
人工知能とはなんたるや、これがわかってないやつ多いのは仕方ないけど
ム板でこれは由々しきことだな
946: (ワッチョイ 7f63-sFbk) 2023/04/16(日)21:48 ID:zHRI9OsR0(1) AAS
煽ってるだけやろ
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.013s