[過去ログ]
C言語なら俺に聞け 163 (1002レス)
C言語なら俺に聞け 163 http://mevius.5ch.net/test/read.cgi/tech/1721137434/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
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
222: デフォルトの名無しさん (ワッチョイ d7cd-qbvN) [sage] 2024/09/18(水) 00:42:28.78 ID:wcwImUMc0 >>217 この場合に限らずcでは範囲チェックなどされないでしょ 必要なら自分でチェックするのが原則 void aaa(char hage[10],int idx) { if((UINT)idx < sizeof(hage)/sizeof(hage[0])) printf("%d=%d¥n",idx,hage[idx]); else printf("%dは範囲外だhage¥n",idx); } これなら[10]に意味が出る http://mevius.5ch.net/test/read.cgi/tech/1721137434/222
223: デフォルトの名無しさん (ワッチョイ bfee-GITO) [sage] 2024/09/18(水) 01:22:58.84 ID:9DvoA/Ly0 ド素人w http://mevius.5ch.net/test/read.cgi/tech/1721137434/223
224: デフォルトの名無しさん (ワッチョイ d712-IGT5) [sage] 2024/09/18(水) 05:59:54.60 ID:Y3+kk9yU0 >>222 c faq 6.21 (英文が詳しい) https://c-faq.com/aryptr/aryparmsize.html >>207 の'調整'は'adjust'だろう N1256を'adjust'で検索するのじゃ Look, a new day has begun. http://mevius.5ch.net/test/read.cgi/tech/1721137434/224
225: デフォルトの名無しさん (ワッチョイ d710-SKTh) [sage] 2024/09/18(水) 07:51:55.61 ID:9Z5pFVfx0 8/16bit時代の1バイトでも、1ステップでも減らせってのを経験した人と 最近の可読性、移植性、安全性優先設計が当たり前世代とのギャップ。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/225
226: デフォルトの名無しさん (ワッチョイ bf32-GITO) [sage] 2024/09/18(水) 08:59:57.51 ID:9DvoA/Ly0 ギャップの問題じゃねーから 文脈すら理解できないじじいはすっこんでろ http://mevius.5ch.net/test/read.cgi/tech/1721137434/226
227: デフォルトの名無しさん (ワッチョイ 5701-vU+L) [sage] 2024/09/18(水) 09:30:25.30 ID:Qk7JHPx80 専門板によくいるアスペだな http://mevius.5ch.net/test/read.cgi/tech/1721137434/227
228: デフォルトの名無しさん (ワッチョイ ff63-y7MN) [sage] 2024/09/18(水) 10:34:45.37 ID:UYQxUcxO0 225 は釣りでしょう http://mevius.5ch.net/test/read.cgi/tech/1721137434/228
229: 警備員[Lv.2][新芽] (ワッチョイ bfd9-/vo+) [sage] 2024/09/18(水) 13:08:51.24 ID:eTGNACyx0 >>222 sizeof(hage) で配列のサイズが求まるの? と思ったら、「char * (ポインタ)の大きさを返すよ」みたいな警告が @gcc http://mevius.5ch.net/test/read.cgi/tech/1721137434/229
230: デフォルトの名無しさん (ワッチョイ ff63-y7MN) [sage] 2024/09/18(水) 13:15:29.42 ID:UYQxUcxO0 釣りだか天然だか、分からなくなってきた 笑 http://mevius.5ch.net/test/read.cgi/tech/1721137434/230
231: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L) [sage] 2024/09/18(水) 13:35:28.77 ID:td/rS/wM0 今どきの統合開発環境を使ってるなら変数の型くらい見れると思うけれど 古典的な手法としてあえてエラーにしてメッセージを読むという型の確認方法がある。 void foo(char bar[10]) {} int main(void) { int baz = foo; } こんなコードをたとえば gcc でコンパイルを試みると error: initialization of 'int' from 'void (*)(char *)' makes integer from pointer without a cast というエラーになる。 foo の型が void (*)(char *) であることがわかる。 foo は関数型の式 (関数指示子) なので暗黙に関数ポインタに型変換されているのと bar に相当する箇所の型が char* になってるのがわかる。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/231
232: 警備員[Lv.3][新芽] (ワッチョイ bfa6-/vo+) [sage] 2024/09/18(水) 13:51:08.91 ID:eTGNACyx0 なるほど 勉強になります http://mevius.5ch.net/test/read.cgi/tech/1721137434/232
233: デフォルトの名無しさん (スプッッ Sd3f-2MD7) [] 2024/09/18(水) 14:54:11.13 ID:LEoKOQZWd >>222 >この場合に限らずcでは範囲チェックなどされないでしょ >必要なら自分でチェックするのが原則 > >void aaa(char hage[10],int idx) >{ > if((UINT)idx < sizeof(hage)/sizeof(hage[0])) > printf("%d=%d¥n",idx,hage[idx]); > else > printf("%dは範囲外だhage¥n",idx); >} > >これなら[10]に意味が出る printf("%uz\n", sizeof(hage)/sizeof(hage[0])); の結果ってどんな値表示されるの? http://mevius.5ch.net/test/read.cgi/tech/1721137434/233
234: デフォルトの名無しさん (スプッッ Sd3f-2MD7) [] 2024/09/18(水) 14:56:10.00 ID:LEoKOQZWd 書式のとのuzじゃなくてzuだっけ?zだけでよかったっけ? ま、主旨はそこじゃないからいっか。 http://mevius.5ch.net/test/read.cgi/tech/1721137434/234
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 768 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.016s