[過去ログ] C言語なら俺に聞け 163 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
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 の結果を見るか
275: はちみつ餃子◆8X2XSCHEME (ワッチョイ e332-Pvcq) 2024/09/27(金)00:16 ID:dEIfxD4z0(1/2) AAS
>>273
> これの1行目は文字列長によらず固定値にならない?
その通りだよ。 固定値になってたぶん意図通りではない。
その話は >>222 がボコボコに言われてもう終わったよ。
276: (ワッチョイ d27c-tavX) 2024/09/27(金)00:20 ID:qUi2cfOF0(1) AAS
もう >>222 を晒すのはやめてあげて......
277: (ワッチョイ 1663-7cnK) 2024/09/27(金)00:22 ID:xb00usC10(1) AAS
222は釣りでしょう
278(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ e332-Pvcq) 2024/09/27(金)00:23 ID:dEIfxD4z0(2/2) AAS
あ、ひょっとすると >>273 は話題を誤解してるのか。
「仮引数が配列形式だった場合にポインタに調整されるルール」が話題の中心。
仮引数として現れないと意味ない。
279: (ワッチョイ 63e3-VZV9) 2024/09/27(金)07:31 ID:ju4/Ooeg0(2/2) AAS
>>278
すまん自分が直近のレスだけ見て話題を早とちりしてた
だいたい流れは分かった
280(2): (ワッチョイ 2b65-ebyo) 2024/10/15(火)13:20 ID:+DYHSMWW0(1/3) AAS
初歩的な質問で申し訳ないんだけど
プログラムをユーザーの入力によって一時停止させるのってどうしたら良い?
pauseで入力待ちにするとかフラグを間に挿入するとかではなくユーザーからの入力があった場合のみ一時停止したい
281(1): (ブーイモ MM7f-tEjz) 2024/10/15(火)13:29 ID:WZg8MP0BM(1/2) AAS
まずメインの処理を一時停止可能な作りに変える
282(1): (ワッチョイ 3b80-C3fO) 2024/10/15(火)13:32 ID:nD7e5Gmv0(1) AAS
>>280
ソースコードの中にファイル名がpauseのファイルが存在するかを判断するロジックを追加
もし存在するならループに入りそれが消えるまで待てばいい
283(1): (ブーイモ MM7f-tEjz) 2024/10/15(火)13:32 ID:WZg8MP0BM(2/2) AAS
あとコンソールプログラムなのか?
環境を正確に書きな
284(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ fb32-aM+D) 2024/10/15(火)13:37 ID:C4BE9tl00(1/2) AAS
>>280
C は言語として規定している範囲はかなり狭くて、細々とした制御には環境依存の方法が必要になることが多い。
ホスト環境によって作法が違う。
285(1): (ワッチョイ 2b65-ebyo) 2024/10/15(火)13:47 ID:+DYHSMWW0(2/3) AAS
>>281
根本からなのね
>>282
初心者なもんで、一つのファイル内で完結したら嬉しいなーなんて
>>283
とりあえずコンソールで作ってる
環境はVS2022だけでおk?
>>284
ちょっと前古いサイト参照してたら環境違いすぎて苦労したし古い言語の宿命なんすかね
286: (ササクッテロ Sp0f-0GI8) 2024/10/15(火)13:51 ID:9xoHIO4Lp(1) AAS
環境依存でデバイス依存だからなぁ
287(1): (ブーイモ MM7f-tEjz) 2024/10/15(火)14:34 ID:UH8LrgydM(1/2) AAS
やりたいことがnon blockingでgetcharしたいってことだとするとwindowsだconsole apiを使う
例えばwindowsのreadline互換実装であるwineditlineを見るといい
288(1): (ブーイモ MM7f-tEjz) 2024/10/15(火)14:36 ID:UH8LrgydM(2/2) AAS
ただめんどうなので今回のように止めたいだけならこういう簡易的なやりかたがある
外部リンク:stackoverflow.com
上下前次1-新書関写板覧索設栞歴
あと 714 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.018s