[過去ログ]
C言語なら俺に聞け 163 (1002レス)
C言語なら俺に聞け 163 http://mevius.5ch.net/test/read.cgi/tech/1721137434/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
192: デフォルトの名無しさん (ワッチョイ ff63-y7MN) [sage] 2024/09/16(月) 10:51:57.39 ID:yKwOC4kA0 ID:+a4Swf1f0 は、言語に何使おうと生産性が低そう http://mevius.5ch.net/test/read.cgi/tech/1721137434/192
193: デフォルトの名無しさん (ワッチョイ ff2a-48Tr) [] 2024/09/16(月) 11:29:42.22 ID:0nzerU0W0 >>191,192 生産性など、君ら社畜を計る尺度に過ぎんよ。 芸術家は、時間をかけて1行の美しさを追及するものだ。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/193
194: デフォルトの名無しさん (ワッチョイ 1751-z7on) [sage] 2024/09/16(月) 12:43:08.20 ID:T6H9+ne50 >>189 変更可能な左辺値に配列型は含まれないからそれとは違うん?いつポインタに型変換されてんの? http://mevius.5ch.net/test/read.cgi/tech/1721137434/194
195: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L) [sage] 2024/09/16(月) 13:26:14.08 ID:JwEVxA0h0 >>194 6.3.2.1 より > 左辺値がsizeof演算子のオペランド,単項&演算子のオペランド,又は文字配列を初期化するのに使われる文字列リテラルである場合を除いて, > 型“〜型の配列”をもつ式は,型“〜型へのポインタ”の式に型変換する。 式として出てくる配列は一部の例外を除けば問答無用で変換されるので ++ のオペランドに配列が出てくるときも変換後のポインタ (rvalue) に対する演算 (実際には出来ないけど) として解釈されるということでいいと思う。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/195
196: デフォルトの名無しさん (ワッチョイ 1751-z7on) [sage] 2024/09/16(月) 14:56:21.22 ID:T6H9+ne50 >>195 配列オブジェクトの先頭の要素で左辺値じゃないって書いてあるな ということは左辺値の式の中に出てくる配列は左辺値じゃなくなっちゃうということ? なんでそんな仕様になったんだろうね http://mevius.5ch.net/test/read.cgi/tech/1721137434/196
197: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L) [sage] 2024/09/16(月) 16:28:24.01 ID:JwEVxA0h0 >>196 C には配列の要素を指すポインタとは別に配列を指すポインタというものもある。 こんなことが出来る。 int foo[10]; int (*bar)[10] = &foo; このときの bar の型は int(*)[10] ということになるわけだが……。 型情報として長さが含まれるのはかえって邪魔だ。 大抵の配列を受け取る関数 (str系やmem系など) は配列の大きさが固定ではないから。 配列の先頭要素で配列を代表させる (それが簡単な記法にする) ほうが都合がよかったんじゃないかと思う。 配列全体をひとつの値として扱いたい場合のほうが少ないだろうという判断もそれなりに合理的じゃないかな。 いまどきの言語 (Go とか Rust とか) は範囲を表すスライスという概念を導入して解決してるけど、 C の登場時期だと 2 ワードのオブジェクトを基本型にするのってなんかヤじゃない? と思ったとしても仕方ない。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/197
198: デフォルトの名無しさん (スプッッ Sd3f-2MD7) [] 2024/09/16(月) 17:22:11.94 ID:udznqyd1d >>190 横からすまんが、記憶域期間って言葉も変 http://mevius.5ch.net/test/read.cgi/tech/1721137434/198
199: デフォルトの名無しさん (スプッッ Sd3f-2MD7) [] 2024/09/16(月) 17:23:46.99 ID:udznqyd1d >>189 >配列はポインタに型変換される。 それは関数呼び出しの場合だぞ http://mevius.5ch.net/test/read.cgi/tech/1721137434/199
200: デフォルトの名無しさん (ワッチョイ bf79-MnYn) [sage] 2024/09/16(月) 17:29:54.17 ID:E0fXFEgV0 この糞コテは半端知識のかまちょだからNGやスルー推奨 http://mevius.5ch.net/test/read.cgi/tech/1721137434/200
201: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-6w0d) [sage] 2024/09/16(月) 18:10:03.54 ID:JwEVxA0h0 >>199 こっちは根拠になる規格の文面を提示してるんだから違うというなら違うと思う根拠を提示して。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/201
202: デフォルトの名無しさん (アウアウウー Sa5b-E6+g) [sage] 2024/09/16(月) 18:57:26.00 ID:ISRAyNkZa >>188 そらargv[][]では誤りだもんな http://mevius.5ch.net/test/read.cgi/tech/1721137434/202
203: デフォルトの名無しさん (アウアウエー Sadf-N1Zj) [] 2024/09/16(月) 21:32:46.16 ID:NNTpe0yPa >>187 たしかに関数の引数だと違うんだな https://ideone.com/MR7Vqm #include <stdio.h> char *hoge(char fuga[10]) { ++fuga; return fuga; } int main(void) { char hage[10] = {0}; char *p = hoge(hage); printf("%p, %p\n", hage, p); return 0; } // もちろん ++hage は出来ない https://ideone.com/xEP42d http://mevius.5ch.net/test/read.cgi/tech/1721137434/203
204: デフォルトの名無しさん (ワッチョイ bf4f-NiVF) [] 2024/09/16(月) 22:10:35.73 ID:hHcIxSUD0 >>197 流石に言ってる事が的外れ過ぎるのでもうちょっと勉強した方がいいと思うよ http://mevius.5ch.net/test/read.cgi/tech/1721137434/204
205: 警備員[Lv.1][新芽] (ワッチョイ f731-/vo+) [sage] 2024/09/16(月) 22:25:26.45 ID:z+htC2pc0 恥ずかしながら、静的記憶域期間(で合ってるのか?)という言葉を知らなくて、ライフタイムは「静的」に含意されているのかと思ったワ… しかし、記憶域期間って違和感あるなぁ http://mevius.5ch.net/test/read.cgi/tech/1721137434/205
206: 警備員[Lv.1][新芽] (ワッチョイ f731-/vo+) [sage] 2024/09/16(月) 22:30:23.39 ID:z+htC2pc0 わけわからん >>205は撤回します http://mevius.5ch.net/test/read.cgi/tech/1721137434/206
207: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L) [sage] 2024/09/16(月) 22:43:01.97 ID:JwEVxA0h0 >>203 余談だけど配列だけじゃなくて関数型も関数ポインタ型に調整されるよ。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/207
208: デフォルトの名無しさん (ワッチョイ 9f7c-2MD7) [] 2024/09/16(月) 22:52:59.17 ID:TDYyKtgo0 >>201 規格に配列は常にポインタに変換されるなんて書いて無いぞ。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/208
209: デフォルトの名無しさん [sage] 2024/09/16(月) 23:00:53.05 ID:f3T7KT8T0 >>208 「常に」とは書かれていない 「ポインタに変換される」ではなく「ポインタに型変換される」 >>102がまさにそれでしょ E1という配列が関数呼び出しでない場合においてもポインタという型に変換されているから出来ること http://mevius.5ch.net/test/read.cgi/tech/1721137434/209
210: デフォルトの名無しさん (ワッチョイ ff63-y7MN) [sage] 2024/09/16(月) 23:10:52.64 ID:yKwOC4kA0 >char *hoge(char fuga[10]) こう書いてあっても、関数内で10を使う訳ではない 関数内で仮に100個めの要素アクセスするロジック書いてもエラーにはならない (実行時にはエラーになると思う、多分) だから、 >char *hoge(char fuga[]) 添え字無しにしても良いことになる http://mevius.5ch.net/test/read.cgi/tech/1721137434/210
211: デフォルトの名無しさん (ワッチョイ d7cd-qbvN) [sage] 2024/09/17(火) 01:04:31.11 ID:BokinMog0 >>210 元々ローカルでchar hage[10];と定義して10以上をアクセスしてもコンパイル時にはエラーにならないでしょ 引数に[10]と書くとしたら可読性のため(この関数では[0~9]までアクセスする可能性があると明示するため) http://mevius.5ch.net/test/read.cgi/tech/1721137434/211
212: デフォルトの名無しさん (スプッッ Sd3f-2MD7) [] 2024/09/17(火) 10:15:58.36 ID:9gub94Dsd __FILE__ とか __LINE__ は大文字なのになんで __func__ は小文字なん? http://mevius.5ch.net/test/read.cgi/tech/1721137434/212
213: デフォルトの名無しさん (アウアウエー Sadf-N1Zj) [] 2024/09/17(火) 10:17:16.72 ID:TMGdiCOOa 範囲の問題じゃなくて ++hage または hage++ が出来るか出来ないかが問題なんです http://mevius.5ch.net/test/read.cgi/tech/1721137434/213
214: デフォルトの名無しさん (ワッチョイ ff63-y7MN) [sage] 2024/09/17(火) 11:06:41.56 ID:bX/ekV+z0 一見配列を受け渡ししているように見えるけれど、 実際はポインターとして受け渡ししているってことでしょ http://mevius.5ch.net/test/read.cgi/tech/1721137434/214
215: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ d70f-6w0d) [sage] 2024/09/17(火) 11:56:03.91 ID:FRc2ySeD0 >>212 __func__ はマクロではないからだと思う。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/215
216: デフォルトの名無しさん (ワッチョイ ff63-y7MN) [sage] 2024/09/17(火) 12:47:41.54 ID:bX/ekV+z0 #include <stdio.h> char hage[10] = {0}; char *hoge(void) { // ++hage; // error '++' には左辺値が必要です。 // return hage; return &hage[1]; } int main(void) { char *p = hoge(); printf("%p, %p\n", hage, p); return 0; } http://mevius.5ch.net/test/read.cgi/tech/1721137434/216
217: デフォルトの名無しさん (アウアウエー Sadf-N1Zj) [] 2024/09/17(火) 13:07:46.14 ID:TMGdiCOOa >>214 そんなことは判ってるよ (char hage[10]) で hage++ または ++hage 出来ちゃってる(ように観える)のが問題なんでしょ 関数の引数は (char hage[]) または (char *hage) のみにすれば良かった (char hage[10]) はどうみても蛇足(結局境界テストされてないし) http://mevius.5ch.net/test/read.cgi/tech/1721137434/217
218: デフォルトの名無しさん (ワッチョイ ff63-y7MN) [sage] 2024/09/17(火) 13:11:47.81 ID:bX/ekV+z0 問題だと思う人は、使わないようにしましょう 開発サイトでそういうルールを用意するのも手です http://mevius.5ch.net/test/read.cgi/tech/1721137434/218
219: デフォルトの名無しさん (スプッッ Sd3f-2MD7) [] 2024/09/17(火) 17:17:11.73 ID:9gub94Dsd >>215 納得しました。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/219
220: デフォルトの名無しさん (ワッチョイ 9ffd-NiVF) [] 2024/09/17(火) 20:17:27.08 ID:dLWvmxgr0 >>197 そもそもstr系mem系はアドレスを受け取るんであって配列を受け取る関数ではないっていう勘違いがあるんだけど それはともかく大きさがどうのとかなんちゃらが都合がいいとか、本当にC言語でなんかプログラムを書いた事あるの? http://mevius.5ch.net/test/read.cgi/tech/1721137434/220
221: デフォルトの名無しさん (スプッッ Sd3f-2MD7) [] 2024/09/17(火) 20:58:19.23 ID:9gub94Dsd 俺は尻より胸派なんだよね。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/221
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 781 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.016s