[過去ログ] C言語なら俺に聞け 163 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
245(1): (ブーイモ MMbf-GITO) 2024/09/19(木)15:36 ID:bQAYIDF0M(1) AAS
cは洗練された型システム持ってないんだからそんなところ頑張っても無駄なんだよ
この悟りに至って始めて脱初級
原則語るならそれからにしてくれ
246: (ワッチョイ ff63-y7MN) 2024/09/19(木)15:40 ID:cPR7xA8Z0(1/3) AAS
Cは一部の洗練された型システム持つ言語よりも遙かに自由度が高い
そこが分かってようやく中級レベル
あとは本人の努力次第で空も飛べるし海も潜れる
247: (ワッチョイ bfda-GITO) 2024/09/19(木)15:50 ID:c2v//UgT0(1/2) AAS
おいおい
そのぶん危険なんだから持ち上げる部分でもないだろ
お前も初級
248(1): (ワッチョイ ff63-y7MN) 2024/09/19(木)17:19 ID:cPR7xA8Z0(2/3) AAS
ナイフは危険だが有用
不器用者は使わない方が良い
249(1): (ワッチョイ b766-qbvN) 2024/09/19(木)17:44 ID:8NYyNXbk0(1) AAS
>>244
typedefは新たな型を作るわけじゃない別名を定義するだけから
void foo(char hage[10])
と
void foo(HAGE_TBL hage)
は同じことだよ
250: (ワッチョイ bf29-GITO) 2024/09/19(木)20:28 ID:c2v//UgT0(2/2) AAS
>>248
c言語ってとっくの昔から自由にキャストしまくれる言語じゃないの知ってるか?
さぁお前はなんと答える?
251: (ワッチョイ ff63-y7MN) 2024/09/19(木)20:47 ID:cPR7xA8Z0(3/3) AAS
そんなに怖がるなよ
食われるわけじゃないんだから
252: (アウアウエー Sadf-3vlU) 2024/09/19(木)21:11 ID:/CBFTgYsa(1/2) AAS
>>245
悟った人は全部void*
253: (ワッチョイ ff4c-KlCL) 2024/09/19(木)21:52 ID:j90utfqH0(1) AAS
文字も数字も全部intでいいやん
254: (アウアウエー Sadf-3vlU) 2024/09/19(木)21:56 ID:/CBFTgYsa(2/2) AAS
getch() は int
255: (ワッチョイ 9f1e-S785) 2024/09/20(金)07:15 ID:dn4N5ANS0(1) AAS
>>249
それが不満なようだから「HAGE_TBL * にしたら何ができるか考えてみては?」ということでは?
256: (ササクッテロ Sp47-i443) 2024/09/24(火)10:26 ID:/2yiAcKTp(1) AAS
昔のコンピュータはメモリー少ないから、intで文字持つなんて贅沢だったんだよ
257: (ワッチョイ 1e2b-VArp) 2024/09/24(火)11:12 ID:CARZyoOh0(1) AAS
次のジジイの的外れな言いたいだけコメントを先取り
intは16bit以上だぞ
258: (ササクッテロ Sp47-i443) 2024/09/24(火)11:31 ID:QMMOdtbOp(1) AAS
違うよ、intは処理系依存だから8ビットの場合もある
259: (スプッッ Sd52-L8o3) 2024/09/24(火)11:49 ID:vvKB2ofDd(1) AAS
規格書読め
260: (ブーイモ MM32-VArp) 2024/09/24(火)11:54 ID:kMxfGMRcM(1) AAS
次のジジイ
getcharがなぜintを返すか
261(1): (ワッチョイ d6f5-K4S3) 2024/09/24(火)19:39 ID:tv/lKhnI0(1/2) AAS
>>174
> char* foo = "hoge";
>
> のようなケースではポインタ foo は文字列リテラルを指してる
(単に端折っただけかもしれないけれど、)文字列リテラルに関してCには非常に込み入った事情(Rationale Rev. 5.10 6.4.5 冒頭-l.26, N1256 Annex J.5.5)があり、厳密に言えば foo は "hoge" によって初期化された無名の配列を指している(N1256 6.7.8-32)。
C99RationaleV5.10
外部リンク[pdf]:www.open-std.org
テンプレ入りキボンヌ
>>皆の衆
ともあれ、込み入った事情に該当しなければ
const char afoo[] = "hoge";
あるいは
const char * const ccfoo = "hoge";
場合によって
const char *cfoo = "hoge";
と書いて、うっかり書き換え防止に勇往邁進するのじゃ。
262: 261 (ワッチョイ d6f5-K4S3) 2024/09/24(火)19:51 ID:tv/lKhnI0(2/2) AAS
>>158
件の意味論は 6.7.8-32 を介して 6.7.8-14,15 に帰結するように思われる一方で、文字列リテラルが 6.4.5-5 で自ら初期化した(やはり)無名の配列の代名詞だとすると 6.7.8-11 が適用されるという解釈も成り立ちそう。
char *gfoo1 = "hoge"; // (1)
char *gfoo2 = "hoge"; // (2)
void f() {
char *foo1 = "hoge"; // (3)
char *foo2 = "hoge"; // (4)
}
>>261 で触れた文字列リテラル書き換え派の場合、(1)〜(4)は別物なので、各々初期化しなければならないため前者の解釈。この時、(3), (4)が automatic storage duration でも良いように 6.7.8-32 では storage duration を定めていないのだと思う。
他方、文字列リテラル不変派の場合、(1)〜(4)は同一で良いので、初期化を一回で済ませて後者の解釈。
結局、前後者両方の解釈が出来るようになっているように見える。
263: (ワッチョイ de79-sesJ) 2024/09/25(水)19:34 ID:8eNfi/Op0(1) AAS
まだやってるキモ…
いくら話題無いからってこれは誰も幸せにならない
264(1): (ワッチョイ 727d-rNKn) 2024/09/25(水)23:05 ID:YARyzAjz0(1) AAS
ええんちゃう別に
どうせ5chに答えを求めてやって来る人なんてもうおらんのやし
265: (ワッチョイ 1663-7cnK) 2024/09/25(水)23:07 ID:1jKu7Jqx0(1) AAS
青い鳥を探してます
ここに来れば教えてくれると聞いて来ました
266(1): (ワッチョイ 022d-w5sm) 2024/09/26(木)09:49 ID:oesVQEFi0(1/2) AAS
PythonとかC++のスレで規格持ち出して言い合いしてるのを見たことないが
何故かここではよく起こるな
267: (ワッチョイ ebbe-i443) 2024/09/26(木)10:19 ID:944iXMZC0(1) AAS
Cなんてのは対象CPUの違いとかでも標準とかけ離れた実装して来るのにね
268: (アウアウエー Saaa-rNKn) 2024/09/26(木)10:58 ID:R5lWYvWFa(1) AAS
>>264
これ++
269(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ e332-Pvcq) 2024/09/26(木)12:24 ID:B+Au+yIB0(1/2) AAS
>>266
じゃあ何を根拠にしてるの?
妄想?
270: (ワントンキン MM42-LD7o) 2024/09/26(木)14:46 ID:oxN8/Up7M(1) AAS
perlあたりで頼む
271(1): (ワッチョイ 022d-w5sm) 2024/09/26(木)16:39 ID:oesVQEFi0(2/2) AAS
>>269
君の問題点は規格読んでるの間違えてるとこだよ
272: はちみつ餃子◆8X2XSCHEME (ワッチョイ e332-Pvcq) 2024/09/26(木)16:48 ID:B+Au+yIB0(2/2) AAS
>>271
規格を根拠にしてたら間違えてる箇所は間違えていると反論できるだろ。
根拠がないよりは良い。
ところでどこに間違いがあった?
273(2): (ワッチョイ 63e3-VZV9) 2024/09/26(木)23:55 ID:jCy2QsTx0(1) AAS
>>235
これの1行目は文字列長によらず固定値にならない?
char* と char[] を区別できてないように思う
// これは (ヌル文字を含む) 4バイトのデータがスタック上に作られる
// sizeof(a1) の結果は文字列数により変わる
char a1[] = "abc";
// こう書いた場合、文字列の実体は静的な領域 (テキスト領域) に確保され、
// a2にはそのアドレスが渡される。
// sizeof(a2) はポインタのサイズであり、値は文字列長によらず固定
char* a2 = "abc";
274: (ワッチョイ 63e3-VZV9) 2024/09/27(金)00:02 ID:ju4/Ooeg0(1/2) AAS
char* でも char[] でも、a[n] と書けばn文字目を参照するのは変わらない
これはポインタの [] 演算子は「ポインタをn個進めた位置の要素を参照する」ため、結果的には配列と変わらないから
だけど前述の a1 と a2 は違う型なので、そこは注意が必要
たぶん VS Code でC言語の拡張を入れてれば、上記のように書いた変数のところにカーソルを当たるとヒントが出るので、それで確認できると思う
それか実際に動かして sizeof の結果を見るか
上下前次1-新書関写板覧索設栞歴
あと 728 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.011s