◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C言語なら俺に聞け 163 YouTube動画>1本 ->画像>2枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1721137434/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん (ワッチョイ 7bba-Lem2)
2024/07/16(火) 22:43:54.18ID:ZrsCjURC0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 162
http://2chb.net/r/tech/1698653580/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2デフォルトの名無しさん (アウアウエー Sa02-hIhh)
2024/07/16(火) 23:09:40.55ID:zAWhziLLa
O2
3 警備員[Lv.4][新芽] (ワッチョイ 5a73-fQmy)
2024/07/17(水) 00:38:03.50ID:x2xsFX7F0
"甲乙丙丁"[1];
4デフォルトの名無しさん (ワッチョイ b132-HYxY)
2024/07/17(水) 02:16:43.37ID:rcKIBlXh0
C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3096.pdf
5デフォルトの名無しさん (スプッッ Sda5-cSaw)
2024/07/19(金) 12:09:58.52ID:7xb1gIFBd
C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf
6デフォルトの名無しさん (ワッチョイ be2d-Xdjv)
2024/08/13(火) 10:33:10.70ID:0tpsfiHy0
C99以降のC言語では、main関数が正常に終了した場合、
明示的にreturn 0;を記述しなくても、コンパイラが自動的にreturn 0;を
挿入することが規定されています。
これにより、main関数の最後にreturn文を省略することが可能になりました。

これまじ?
いや省略できるのは知ってたけど
書かなくても言語仕様的に正しいってことなのでは
7デフォルトの名無しさん (ワッチョイ 2e2a-Fna2)
2024/08/13(火) 10:54:13.55ID:rWI8dcbL0
>>6
> 省略できる

これまじ? ってやってみたら省略できた。知らんかった。
8デフォルトの名無しさん (ワッチョイ c25c-PXPr)
2024/08/13(火) 11:02:03.46ID:zgXpATPx0
C++の方は最初からそうじゃなかったっけ?
9デフォルトの名無しさん (ワッチョイ 2e63-mJNK)
2024/08/13(火) 11:04:04.36ID:iZOfVN0Y0
ところで、main以外はどうなんだろう
mainだけ特別って事なのかな?OSとも絡むし
10はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-6HV9)
2024/08/13(火) 11:58:17.89ID:ZDyvNux60
>>9
retunr 0; が補われるルールは main だけの特別扱いだけど……。

関連する変な規則として C では関数の返却値の型が void ではないときに return せずに } に到達、かつ、関数の呼び出し元が値を使おうとするのは未定義ということになってる。
逆に言えば } に到達するだけなら OK ってことね。
C++ だと関数の返却値の型が void でないときに return せずに } に到達するだけで駄目という違いがある。
11デフォルトの名無しさん (ワッチョイ 6e83-2R4J)
2024/08/13(火) 20:38:38.66ID:Yor/eSuX0
>>9
値を返さない関数ならreturnは省略できる
値を返す関数だと戻り値が不定になる
(多分コンパイルでwarningが出るか最近のではerrorになるだろうな)
そのくらい一度も試したことないのか?
12デフォルトの名無しさん (アウアウエー Sa4a-ZlnX)
2024/08/14(水) 08:45:20.95ID:92pG5tQ9a
CPUが最後に処理したアキュムレータの内容が
戻り値として有効になってるケースが多い
違う実装があったら教えてくれ
13デフォルトの名無しさん (ワッチョイ 65c8-tndV)
2024/08/14(水) 09:29:38.29ID:o5Tm+MCf0
戻さないで自動的に挿入されるのならvoidでいいやん
14デフォルトの名無しさん (ワッチョイ 6e83-2R4J)
2024/08/14(水) 16:14:28.35ID:91FNum+40
>>12
CPUでも最適化レベルでも変わるのでその情報は無意味だ
素直にvoidにしとけばいいじゃん
15デフォルトの名無しさん (ワッチョイ 42ad-ZlnX)
2024/08/17(土) 12:40:14.00ID:P2kCpMMm0
>>12
じゃあお前に教えるために
これからそういうの作ろう
16はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-6HV9)
2024/08/17(土) 17:19:02.88ID:w43wc/GB0
>>12
最適化が絡むとなんでも起こる。
GCC でやってみた。
https://godbolt.org/z/rzoEqdYWz

インライン化と合わさったときはおそらく
「なんでもいいなら事前に適当な定数 (この場合はゼロ) に置き換えてええやろ」ということが起こってる。
インライン化を抑止したらそのときに入ってたでたらめな値になる。
17デフォルトの名無しさん (ワッチョイ 9f2a-0AGY)
2024/08/18(日) 12:47:05.86ID:z2E2wJpW0
CGCのサイクル
C言語なら俺に聞け 163 YouTube動画>1本 ->画像>2枚
18デフォルトの名無しさん (ワッチョイ 7fad-9uNt)
2024/08/19(月) 14:50:35.14ID:2a6IfSVu0
CCG
https://dic.pixiv.net/a/CCG
19デフォルトの名無しさん (ワッチョイ ff63-bHMQ)
2024/08/19(月) 15:05:46.71ID:V1kjWLO50
アキュムレータって呼び名、いかにも電卓っぽい
20デフォルトの名無しさん (スプッッ Sdc1-qo4T)
2024/08/26(月) 18:48:30.29ID:cPELMU3ld
ヘッダファイルちゃんとincludeしようよ。
21デフォルトの名無しさん (ワッチョイ 6e63-wgTk)
2024/08/26(月) 19:32:21.98ID:0fQF2fer0
ヘッダーファイルインクルードする1行だけのプログラム見たことがある

#include /dev/tty
22デフォルトの名無しさん (ワッチョイ 72d5-KJKb)
2024/08/27(火) 00:49:35.29ID:9npsKRkS0
それヘッダファイルじゃないです
23デフォルトの名無しさん (ワッチョイ 6e2a-EI2W)
2024/08/27(火) 08:24:35.00ID:apM/pcD70
エラー: #include は "FILENAME" または <FILENAME> が必要です
24デフォルトの名無しさん (アウアウエー Sa0a-PBPb)
2024/08/27(火) 14:09:22.45ID:oHcafaf7a
<>を入力すると消えるブラウザというか掲示板も流行ったなHTMLは糞だわ
25デフォルトの名無しさん (ワッチョイ 2910-Xwm8)
2024/08/27(火) 17:58:59.59ID:K+iNaUMP0
大抵最初の開発者は誰かが修正してくれるだろうと適当な仕様で設計して、
その後引き継いだ開発者はなにか意図があるのだろうと思ってそのまま維持していくという悪循環・・・。
26デフォルトの名無しさん (ワッチョイ 427c-qo4T)
2024/08/28(水) 01:09:19.85ID:E82+IHOF0
>>25
あるある過ぎる
27デフォルトの名無しさん (ワッチョイ f9d1-j0Zy)
2024/08/28(水) 01:32:44.54ID:ZIniGH7S0
ちち、どっかいけ
28デフォルトの名無しさん (ワッチョイ f9d1-j0Zy)
2024/08/28(水) 01:35:08.84ID:ZIniGH7S0
ごばくした、ごめん
29デフォルトの名無しさん (ワッチョイ 6e63-wgTk)
2024/08/28(水) 09:35:19.18ID:22YTSKRT0
アーニャにはここはまだ早い
30デフォルトの名無しさん (オイコラミネオ MM1b-qpqo)
2024/09/02(月) 15:52:36.13ID:VEiLzJptM
RustがCより速くなるベンチマークは見たことがない

Nim2.0のORCは明示的にオブジェクトプールを使ったプログラミングが必要ですが
ベンチマークがCより2倍以上速くなって、特にハードなリアルタイムシステム向け
のチューニングもできるようになってるみたい
https://zenn.dev/dum...icles/af2b2b9f8fd890

Nim2.0がCより2倍以上速くなって、しかもORCでメモリ安全も担保されているなら
Rustを使う意味がなくなると思うのですが、このベンチマークは本当なのでしょうか?

NimはCのソースコード吐けるからから、Nimの手動メモリ管理はCの手動メモリ管理と
同じとして、Nim2.0のORCで明示的にオブジェクトプールを使ったプログラミングと
比較した場合のベンチマークが2倍以上速くなってるからCより速いと言ってる
https://github.com/Araq/fosdem2020

人間がCの手動メモリ管理したプログラムだと限界があるNimのムーブセマンティクスの
アルゴリズムでメモリの最適化をしてるから、人間では到底太刀打ちできない事を証明
した論文があるオブジェクトプール版のNimから生成したCのコードは人間には書けない

Nim2.0のムーブセマンティクスの本当に優れた最適化とORCで明示的にオブジェクトプールでプログラミングすることによって、人間がCの手動メモリ管理したベンチマークより2倍以上速くできる
https://zenn.dev/dumblepy/articles/af2b2b9f8fd890
31デフォルトの名無しさん (ワッチョイ 0701-gNE8)
2024/09/02(月) 22:08:58.52ID:DccWFR9v0
Rustを褒めて自尊心保つやつの次はNim版が出てきたのか
32デフォルトの名無しさん (ワッチョイ 5f5a-HmUJ)
2024/09/02(月) 23:12:40.71ID:3HuFqT9S0
Nim推しは以前から変なやつ多かったから
33デフォルトの名無しさん (ワッチョイ 27eb-mtNr)
2024/09/02(月) 23:28:27.10ID:09ZYUS090
Nim言語の良し悪しは分からんが、メモリ管理に関しては理想的だわ
ムーブ後のオブジェクトにアクセスするとRustだとコンパイルエラーで面倒な事になるけど、Nimは参照カウントを使って解決するので少し遅くなるだけだ
そっちの方が絶対良い
気になる場合は後で直せる
34デフォルトの名無しさん (ワッチョイ c770-bfwh)
2024/09/03(火) 18:51:27.81ID:xAVNzrUq0
>>33
コンパイルエラー?
35デフォルトの名無しさん (ワッチョイ 27eb-mtNr)
2024/09/04(水) 01:03:52.03ID:c5l8yfTZ0
>>34
だからなんだ?
Rustでムーブ後のオブジェクトにアクセスしてみろよ
36デフォルトの名無しさん (ワッチョイ 6780-e6xt)
2024/09/04(水) 09:34:28.92ID:eBGcFHFx0
>>33
どこにコンパイル時期にメモリの不正アクセス検知できるコンパイラーがあるんだよ
便利すぎないか
37デフォルトの名無しさん (ワッチョイ 5fc1-mtNr)
2024/09/04(水) 09:42:59.71ID:uvDwCGK/0
>>36
ムーブ(所有権の移動)の概念知らない奴かよw
38デフォルトの名無しさん (ワッチョイ bfe0-5+wm)
2024/09/04(水) 11:20:54.96ID:yycwJMQK0
時代に取り残されたじじい
39デフォルトの名無しさん (ワッチョイ 7f63-hbJw)
2024/09/04(水) 11:26:12.60ID:6FkHz3Id0
今どきのヤングはどの辺を走っているのかな?
40デフォルトの名無しさん (アウアウエー Sa1f-XN8b)
2024/09/05(木) 00:07:48.49ID:/oUqYYg3a
RefCellのborrowとかborrow_mutがCより速い訳がないだろ
41デフォルトの名無しさん (ワッチョイ c770-bfwh)
2024/09/05(木) 06:20:13.32ID:IMzSmyWL0
アセンブラ使ったことない子供たちにはわからんのだろ
42デフォルトの名無しさん (ワッチョイ 7f0e-D/hx)
2024/09/05(木) 08:53:17.49ID:oYH6V42M0
Aiの時代にこんなレトロ言語に夢中になってる場合でもないだろ
43デフォルトの名無しさん (ワッチョイ 8710-D/hx)
2024/09/05(木) 09:42:51.26ID:00qJ+IF20
ペイントソフト溢れた時代にエクセルで描いて絶賛される時代。
44デフォルトの名無しさん (ワッチョイ c770-bfwh)
2024/09/05(木) 13:27:55.60ID:IMzSmyWL0
AIなんて究極的には予備知識なしで使えるようになるもんだろ
いま必死で呪文を覚えてる奴らには気の毒だがw
プログラムの学習はそれとは逆だぞ
45デフォルトの名無しさん (ワッチョイ 0701-CMA8)
2024/09/05(木) 13:41:12.34ID:YoL+MCk60
AIにはアセンブラかCで書かせた方が効率がいいじゃん
46デフォルトの名無しさん (ワッチョイ 5fc1-mtNr)
2024/09/05(木) 20:45:06.75ID:mduO1G690
今はアニメもCGで作る時代だけど、だからデッサン力なんて不要と言ってるのに近いなw
47デフォルトの名無しさん (ワッチョイ 27d1-XcdZ)
2024/09/06(金) 02:12:25.16ID:ObPC8Kit0
AIなら直接機械語書けそうだけど最低限人間がコードを読めるようにするためにCで出力するのが流行りそう
48デフォルトの名無しさん (ワッチョイ 7f0e-D/hx)
2024/09/06(金) 17:06:00.74ID:3sxDLHxZ0
もはやプログラマはAIにどう質問するかだけが求められてる時代
ビックデータが前提なのはわかってるけどchatAIと画像AIはマジでオーパーツだわとても0と1だけで実現されてる技術と思えん・・・
49デフォルトの名無しさん (ワントンキン MM3f-cmcv)
2024/09/06(金) 17:30:18.67ID:bUa4C6AFM
ここはAIの質問スレになる予定です
50デフォルトの名無しさん (ワッチョイ 7fe0-bfwh)
2024/09/06(金) 17:59:38.15ID:wWap9ofG0
>>48
Cやアセンブラを知らなかったらコンピューター自体が魔法に思えるんだろうなw
51デフォルトの名無しさん (ワッチョイ 8710-D/hx)
2024/09/06(金) 18:14:44.45ID:fzo/g0jk0
プログラム上での比較が、未だに変数2つの比較(if(A=B)とか )しかイメージ出来ないので
AIのアルゴリズムどころか、2つのサイズの違う画像比較ってのさえどうやるのか検討もつかん・・・。
52デフォルトの名無しさん (ワッチョイ bf9c-H9U1)
2024/09/06(金) 18:37:17.18ID:4wqfzUPa0
3Blue1BrownJapanのディープラーニング解説動画


現在chapter6まで和訳されてる(本家英語版は7が出た)
53デフォルトの名無しさん (ワッチョイ 7fe0-bfwh)
2024/09/06(金) 21:13:32.20ID:wWap9ofG0
>>51
引き算してその絶対値が一定以内だったら同じとみなす
if(abs(A-B)<C){…
それぐらいならわかるだろ?
54デフォルトの名無しさん (ワッチョイ 47b1-D/hx)
2024/09/06(金) 21:19:53.07ID:eMGejp5m0
点でしか見れない人に面を理解させる手法・・・
55デフォルトの名無しさん (ワッチョイ 274e-XcdZ)
2024/09/06(金) 21:46:42.59ID:ObPC8Kit0
この世界もほぼ陽子と中性子と電子だけで出来てるのにこれだけ複雑なんだから0と1だけで複雑な演算出来ても不思議ではない
56デフォルトの名無しさん (ワッチョイ 5fad-WCFq)
2024/09/06(金) 21:53:29.16ID:H8MSdYGz0
ようこちゃんとでんこちゃんは知っているけど
中性子って子は知らない
57デフォルトの名無しさん (ワンミングク MM3f-cmcv)
2024/09/06(金) 22:09:25.96ID:aKdHJjI6M
光子ちゃんも忘れないであげて
58デフォルトの名無しさん (ワッチョイ 5fc1-mtNr)
2024/09/07(土) 00:47:09.38ID:mFTEs+Pq0
0と1だけじゃないけどな
その他に位(くらい)という概念がある
これによって無限の数を表現できる
むしろ位の概念によって数が表現されている
それさえ有れば記号なんて何でもいい
59デフォルトの名無しさん (ワッチョイ 47b1-D/hx)
2024/09/07(土) 20:51:59.47ID:XGt+Z3l/0
どこかの国だか村では両手の指の数以上を表現する言葉がないって話をどこかで・・・。
60デフォルトの名無しさん (ワンミングク MM3f-cmcv)
2024/09/07(土) 22:06:43.98ID:GNvzZpYIM
ムカデは100進数で数えている
61デフォルトの名無しさん (ワッチョイ f94a-865n)
2024/09/08(日) 00:25:53.15ID:zd6RlSMM0
>>59
位の概念が無いから10までしか数えられない
位を考慮すると両手で1023まで数えられる
62デフォルトの名無しさん (ワッチョイ f94a-865n)
2024/09/08(日) 00:30:46.43ID:zd6RlSMM0
指を曲げる伸ばすの2通りとすると1023だが、指を完全に曲げる、伸ばす、半分まで伸ばす(曲げる)の3通りとすると3^10-1=59,048まで表現できるなw
63デフォルトの名無しさん (ワッチョイ 662a-Vk/b)
2024/09/08(日) 07:38:58.99ID:LXYiwE7e0
>>60
ヒトを含めた四肢類は4進法なの?
64デフォルトの名無しさん (ワッチョイ bd5f-FAeb)
2024/09/08(日) 10:08:59.05ID:mVbg4wOX0
>>61-62
人差し指と薬指を伸ばして、かつ中指と小指を曲げるのは難易度がやや高いぜ。
(親指を伸ばせば『グワシ』)
65デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/08(日) 10:25:56.18ID:IhFVsGpe0
グワシは古語
66デフォルトの名無しさん (ワッチョイ a510-IFMZ)
2024/09/08(日) 15:41:04.82ID:aTNFTtUw0
とりあえず、他人の投稿で言ってもいない単語や解釈を勝手に加えてマウント取ろうとするのはどうかと思うぞ。
67デフォルトの名無しさん (ワッチョイ a6e0-RtM0)
2024/09/08(日) 23:23:27.00ID:6gnZvy5A0
問題はギャグとしてつまらないという点だ
68デフォルトの名無しさん (ワッチョイ fa2d-2PHd)
2024/09/09(月) 17:06:32.51ID:ft14UVke0
lvalueに関してエラーが出るんだけど、どうしてこれがだめなのかわからないです

#include <stdio.h>

int main()
{
char s[] = "hoge";
char t[100];
while (*t++ = *s++)
;
printf("%s", t);
}
69デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/09(月) 17:17:50.19ID:JnQxQHVK0
>>68
 char *p = s;
 char *q = t;
 while (*q++ = *p++)

こう書けば通る。何故かはちょっと考えて ;
70はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/09(月) 17:19:13.64ID:XH4OT6yj0
>>68
s の型は char[5] 、 t の型は char[100] だというのはわかる?
だけど式に出てくる配列は原則として配列の先頭要素を指すポインタ (この場合に型でいえば char*) に型変換される。
変換後に出てくるポインタは rvalue なのでインクリメントの対象に出来ない。

rvalue ってのは式の評価をする間に一時的に生まれて評価が終わったら消えるものなので
仮にインクリメント出来たとしても何にも使えない。

配列が勝手にポインタに変換されるっていうのが変則的で分かり難いポイントだけど
これは C を使ってたら避けようがない。
71デフォルトの名無しさん (ワッチョイ 9e79-auhz)
2024/09/09(月) 18:22:38.82ID:zvC05GrM0
ポインタと同じ表記が使えるだけでポインタに変換されるわけではないぞ老害
72デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/09(月) 18:25:50.23ID:JnQxQHVK0
 char *s = "hoge";
 char t[100];
 int i = 0;
 while (*(t+i) = *s++)
  i++;

sを配列ではなく、ポインタに変える、
tもポインタにしたいところだが、格納先確保が目的なら
先頭アドレスからのオフセット指定で格納する様に変更
73デフォルトの名無しさん (ワッチョイ eaad-Pebh)
2024/09/09(月) 18:30:55.08ID:D7I9z5W00
それなら while (*(t+i) = *(s+i)) って書くかな
74デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/09(月) 18:36:50.90ID:JnQxQHVK0
s[]、t[100]と書いたとき、sやtはメモリー上の特定の位置を指す
ラベルのようなものなので書き換える事は出来ない。ポインタ定数とも言う。
一方ポインタ変数は、任意のアドレスを指す変数、変更も操作できる
constとか、突っ込まんでください
75はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/09(月) 18:57:03.60ID:XH4OT6yj0
>>71
規格には「型変換する」と明瞭に書いてあって変換しないと解釈できる余地はない。
7668 (ワッチョイ fa2d-2PHd)
2024/09/10(火) 07:06:02.36ID:fwzKZR690
色々教えてくれてありがとう
s[]の先頭を指すポインタ*sを++で進めることができちゃったら
s[0]もズレちゃうのでだめだってことだよね
そりゃだめだわ
77デフォルトの名無しさん (ワッチョイ 1e6e-Qzc4)
2024/09/10(火) 07:45:50.17ID:ZXVJVLjy0
s[], t[100]; って宣言したなら、s[idx], t[idx] って使おうよ
78デフォルトの名無しさん (ワッチョイ a6b5-RtM0)
2024/09/10(火) 08:09:53.27ID:oAzej4EH0
そこはこだわらんでもいいだろ
79 警備員[Lv.5][新芽] (ワッチョイ f969-ztXh)
2024/09/10(火) 09:09:59.70ID:H8O84G940
sやtは constということでもないのか
80デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/10(火) 10:14:17.88ID:WwqiNfks0
立て札は移動禁止です
81デフォルトの名無しさん (アウアウエー Sa52-t/33)
2024/09/10(火) 13:19:09.36ID:KGjTz1X0a
>sやtは const
constっていつからあったか知らんけど
constない頃からsもtも*pや*qとは扱いが違ったんじゃね
82はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/10(火) 14:04:37.40ID:rqI1GpSt0
lvalue の概念は K&R 1st の頃からあったよ。
lvalue という用語はちょっとどうなの……と思うけど。
Rust だと place と呼んでるみたいだね。
83デフォルトの名無しさん (ワッチョイ eafd-BHET)
2024/09/10(火) 21:10:52.20ID:UL+jlunn0
お前は変な事ばかり言ってるからもう引っ込んどけよ
84デフォルトの名無しさん (ワッチョイ adba-mB8c)
2024/09/10(火) 21:22:40.00ID:OwUxLa4s0
ポインタそのものを変えないやつと
指す先を変えないやつの書き方で
未だに迷うっていう
85はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/10(火) 21:35:00.77ID:rqI1GpSt0
キーワードを並べる順序で意味が変わるのは迷うけど
順序をどうならべても良い場合もそれはそれでびっくりする。

int const long foo;

みたいに変数を宣言して良い。
まあそんなことをするやつはいないと思うけど。
86デフォルトの名無しさん (ワッチョイ a6ee-865n)
2024/09/10(火) 22:53:26.23ID:BKdRZcpD0
consr char*は本当はchar const*と書くべきなんだよね
これでもコンパイルは通って同じ結果になる
読む時は右から読めばいい
pointer to const char
これだと指す先がconstなのが分かりやすい
ポインター自体をconstにするには
char* constとして、同じく右からconst pointer to charと読む
両方constは
char const* const
となるけど、最初のconstは左に書けるので
const char* const
とも書ける
これが分かれば迷う事は無くなる
87デフォルトの名無しさん (ワッチョイ a6b2-Z1Qu)
2024/09/11(水) 01:20:44.10ID:ZbZmMQbl0
それ前橋氏のポインタ完全制覇で知った
88デフォルトの名無しさん (ワッチョイ a6b5-RtM0)
2024/09/11(水) 08:00:07.84ID:eq6A6T9x0
>>81
アセンブラにして考えるとわかりやすい

char s[] = "hoge";
アセンブラの表現↓
s:
   .db "hoge¥0"


char *s = "hoge";
アセンブラの表現↓
s_org:
   .db "hoge¥0"
s:
   .dw s_org


上の場合書き換えようにもsには実体がない
アドレス定義ラベルでしかない

*ただし完全に最適化されると下も上と同じになる
   
89 警備員[Lv.1][新芽] (ワッチョイ 1ea1-ztXh)
2024/09/11(水) 09:16:47.77ID:IhX3t9qv0
ここでいう sには実体がない、とはどういうことですか?
90はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/11(水) 09:19:23.27ID:Zm39E+090
大元の質問が >>68 なので低レイヤからの説明はあまり筋が良くないと思う。
エラーメッセージの意味を読み取れるようにならないから。
91デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/11(水) 09:30:46.32ID:dQ20XCdF0
8ビットCPUのメモリ保護されてない頃だと
配列どころか、プログラムコードも書換できました笑
92デフォルトの名無しさん (ワッチョイ a510-IFMZ)
2024/09/11(水) 09:49:35.14ID:h52e7Ahm0
> sには実体がない、とはどういうことですか?
変数エリアに書き込まれていない数値、データ。
プログラム上で要求された時にコンパイル時や関数によってその都度作られる仕様・・・かな?しらんけど。

>91
>プログラムコードも書換できました
それはむしろ”技術”扱いだったな。
サブルーチンでジャンプ先やIOポートを書き換えて・・・て。
昔はCPU等のバグ利用がテクニックだったけど、今じゃバグの温床、セキュリティホール扱いだね。
93デフォルトの名無しさん (ワッチョイ 1e3e-42jK)
2024/09/11(水) 15:02:12.18ID:DEx1pDDa0
こんだけいて>>77くらいしかまともな回答者がいないとかひどいなあ
94デフォルトの名無しさん (ブーイモ MM45-bJfQ)
2024/09/11(水) 15:25:16.11ID:1n/VD1trM
そんなのこだわっても結局関数の引数で配列型では渡せないんだからその程度は受け入れて慣れたほうがいい
95デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/11(水) 15:58:54.52ID:dQ20XCdF0
ここは、「聞け」とはあるが、「回答する」とは書いていない
96デフォルトの名無しさん (ワッチョイ 1e45-Qzc4)
2024/09/11(水) 16:44:23.62ID:+qxKgs2P0
こっちが自然だろ
t[100]を*(t+idx)なんてやる方が何の拘りだよ
97デフォルトの名無しさん (ワッチョイ 5ec2-bJfQ)
2024/09/11(水) 16:55:25.58ID:tx1pt4w10
その程度どっちでもいい
98 警備員[Lv.4][新芽] (ワッチョイ 8afb-ztXh)
2024/09/11(水) 20:45:08.11ID:l6JSnCmY0
配列は外部リンケージのときも注意が必要なんだよね
あまりそういう使い方しないから、すぐにはピンとこないや
99デフォルトの名無しさん (ワッチョイ 65cd-RtM0)
2024/09/11(水) 22:04:51.93ID:+V4MmH6p0
>>93
別にまともでもない
配列で定義してポインタで操作できるのがCの柔軟性だから
idxにこだわると簡単な操作を複雑にしかねない
100デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/11(水) 23:11:00.81ID:dQ20XCdF0
> while (*(t+i) = *s++)

これは、

> while (*t++ = *s++)
;これがエラーになるのは何故かと言う質問から始まったからです

t++がエラーで、t+iなら大丈夫が理解できれば解決だと思う
ポインタの理解というのは壁にはなりますが、
乗り越えれば意外と簡単です、がんばれ!
101 警備員[Lv.7][新芽] (ワッチョイ f931-ztXh)
2024/09/12(木) 00:58:15.86ID:QGeKjVfA0
>>92 ありがとうございました(sには実態がない)

gcc -S test.c
で .s を出力して眺めてみると、そのような感じになっていました
最適化と、AT&Tのオペランドが逆なのに慣れず読みにくかったですが

"hoge" は「実体」が .data に置かれ、実行時にスタックにコピーされるのかと想像してましたが、実装がどうあれ、スタッフ上に "hoge" を置くための元を実体というのは違うと思いました

実際、"hoge" は .db でアロケートされず、4字は 32ビットの数値定数とされ、スタックに即値で転記されていました(実行時に生成されていました)

# とても伝わりにくいと思いますが…
102はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/12(木) 08:54:43.60ID:TbaO6N6i0
誰も説明してなかったことに気づいた。
E1[E2] が (*((E1)+(E2))) と等価であるというルールがある。
103デフォルトの名無しさん (ワッチョイ 8a5c-8qrK)
2024/09/12(木) 21:59:57.92ID:m7IlJoP80
それいにしえからのバカ発見器なんだが2024年になってもまだ動いてるとはC言語おそるべし
104 警備員[Lv.3][新芽] (ワッチョイ b68a-ztXh)
2024/09/12(木) 23:41:05.77ID:+nQe2m720
次の方どうぞ
105デフォルトの名無しさん (ワッチョイ a6ee-865n)
2024/09/12(木) 23:43:09.62ID:sEtsUeoh0
>>103
その自由度があるからC++でhtbl["key"]の様な事が出来る
Cじゃ意味ない仕様だけど、禁止する必要も無かろう
106デフォルトの名無しさん (ワッチョイ 65cd-RtM0)
2024/09/13(金) 08:23:17.89ID:ykZRrldI0
>>101
"hoge"は長さちょうど32ビットだから即値でスタックに書き込むようになってるということなら
最適化によってそこまで省略されてるわけでsに実体がない件とはあまり関係ないな
最適化オフにするかもっと長い文字列で実験してみては
107 警備員[Lv.5][新芽] (ワッチョイ 1eeb-ztXh)
2024/09/13(金) 09:12:47.27ID:cjEIJ97r0
>>106
ありがとうございます

もう少し正確に書けばよかったのですが、4字と '\0' の2回に分けて転記していました
また、hogeを長くして(10字くらい?)試すと、やはり 4字ずつ整数にパックして即値で転記していました

もっと長大な文字列試せば、別にアロケートされたそれをコピーするコードが吐かれたかもしれませんが、>>92 の指摘通り、実体がなく実行時に生成されることを確認できたとして打ち切ってしまいました
108はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 65e8-hr+9)
2024/09/13(金) 10:12:57.71ID:9XTDQHQm0
C の仕様は抽象機械の動作として記述される。
抽象機械の動作をどのように実際の機械と対応させるかは自由で、見かけ上の動作が同じならどういう機械語になってもいい。
生成された機械語から言語仕様を理解しようとすべきではないよ。

低レイヤプログラミングするならどう対応付くか知る必要がある場合もあるのは否定しないけど……
109デフォルトの名無しさん (ブーイモ MM45-bJfQ)
2024/09/13(金) 10:23:10.52ID:OBSQyTYbM
その抽象機械の定義はしょせん後付け
c言語のソースから生成されるマシン語の想像が付くようになるのはいいこと
110デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/13(金) 10:25:26.12ID:y2ap91b60
C言語ハンドコンパイラ
111はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 65e8-hr+9)
2024/09/13(金) 11:25:36.89ID:9XTDQHQm0
>>109
機械語の想像がつくのが不要とも悪いとも言ってないよ。
そこから言語仕様を理解しようとすべきじゃないと述べてる。
できないから。
112デフォルトの名無しさん (ワッチョイ a510-IFMZ)
2024/09/13(金) 11:46:29.60ID:HT/On1VB0
所詮部外者の推測。
113デフォルトの名無しさん (ワンミングク MM7a-k+ON)
2024/09/13(金) 12:46:10.11ID:CiewPVvpM
今日は患者が多いですね
114デフォルトの名無しさん (ブーイモ MM45-bJfQ)
2024/09/13(金) 12:53:56.59ID:OBSQyTYbM
>>111
無用な心配
Xに溢れてるクソリプと同じ
115 警備員[Lv.1][新芽] (ワッチョイ 1e86-ztXh)
2024/09/13(金) 13:50:08.30ID:cjEIJ97r0
>>108
ありがとうございます

そもそも >>88 で sの実体がないとはどういうことか、というのが疑問だったためで、言語の仕様(というか実装)がどうかには着目していませんでした

printf("%s\n", s); が .sではputs(s); に置き換えられていたり
そうだよな~
116 警備員[Lv.1][新芽] (ワッチョイ 1e49-ztXh)
2024/09/13(金) 13:59:45.58ID:cjEIJ97r0
あー、実装には注目してるのか>自分
117はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-hr+9)
2024/09/13(金) 14:32:38.41ID:7dvxgxgq0
この場合に限っては言語仕様としての理屈もあんまり違わんけどな。
ただ、正式な用語を知ってると細かいことを調べやすいみたいなのはあるので便利。
118デフォルトの名無しさん (JP 0H3e-voeu)
2024/09/13(金) 16:10:44.34ID:HymUJJD5H
gccは配列に確保した短い文字列は最適化無しでもレジスターに載せてしまってるな
ポインター文字列は最適化してもレジスターには載らない
なので配列は配列として使った方が最適化で高速化される可能性があるという事だな
119はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/13(金) 16:26:39.79ID:7dvxgxgq0
ポインター文字列って変な言葉だな。
この場の造語だと思うけど
char *foo = "bar";
みたいなやつのことだよね?

文字列リテラルは静的記憶域期間 (寿命はプログラムの最初から最後まで) を持つオブジェクト。
どこかにある文字列をポインタで指しているという状況。
そのどこかにある文字は他のどこかから指し示されることもありうるので簡単には消えられない。

その一方で、配列の初期化子は配列を初期化する以外に使われる可能性がない。
120デフォルトの名無しさん (アウアウエー Sa52-t/33)
2024/09/13(金) 16:36:31.22ID:bblj+c3pa
>>93
それのどこがマトモなんだよ

>>94 の言い分の方が正しい
配列型が無いんだから
121デフォルトの名無しさん (アウアウエー Sa52-t/33)
2024/09/13(金) 16:38:54.03ID:bblj+c3pa
>>96
>t[100]を*(t+idx)
t[100]を100[t]
よりはマシ

>>97
だよな
122デフォルトの名無しさん (JP 0H3e-voeu)
2024/09/13(金) 17:26:56.71ID:HymUJJD5H
>>119
んなこたーない
char foo[] = "hoge";
char* bar = &foo[1]; /* 敢えてずらしてみる */
printf("bar -> %s\n", bar);
で中身は何度も参照されるぞ
gccで試してみたら敢えてずらしてポインターに代入されたとしても、レジスターに文字列を保持したままprintfに渡すというトリッキーなコードが生成されたw
スタックに文字列を書き込んでそのアドレスを渡してるっぽい
123デフォルトの名無しさん (JP 0H3e-voeu)
2024/09/13(金) 17:45:50.36ID:HymUJJD5H
短い配列文字列をポインターに代入したらレジスターに保持する最適化を諦めるかと思ったら、そうじゃなくて意地でもレジスターに保持したまま処理を進めるgccスゲーよw
clangの場合はポインターも配列も常に静的に文字列を定義したものを使ってた
124デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/13(金) 18:12:32.57ID:y2ap91b60
最近のCPUはレジスターに文字列格納できるんだな
何バイトくらいなら入るんだろうか
125デフォルトの名無しさん (JP 0H3e-voeu)
2024/09/13(金) 18:26:19.17ID:HymUJJD5H
gccの場合だと64bitだと8バイトだから最大7文字かなと思ったらレジスターを複数使ってでも載せようとしてたw
取り敢えず50文字まで試したけど全部レジスタに載ってた
でもこの辺はレジスタの空き具合にもよるのか?詳しくは分からん
126デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/13(金) 18:41:27.03ID:y2ap91b60
何か執念みたいなのを感じました笑
127デフォルトの名無しさん (JP 0H3e-voeu)
2024/09/13(金) 18:50:06.89ID:HymUJJD5H
スマン…間違えた…orz
正確にはアセンブリコードに書かれてると言うべきだった
movabsq $3833745473465760056, %rdx
movabsq $3978425819141910832, %rax
movq %rdx, 40(%rsp)
movabsq $3544395820347831604, %rdx
movq %rdx, 56(%rsp)
↑こんな感じで文字列が直値で表現されてて、スタックに積んで使ってた
だったら静的に確保した方が速い気がするけど、やっぱりレジスターから直接使う事が有るのか?
取り敢えずコンパイラーが出力するコードに深入りしない方が良いって事は分かったw
128はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/13(金) 18:59:17.17ID:7dvxgxgq0
>>122
その場合に参照されるのは foo であって、 "hoge" というリテラルではない。
"hoge" は foo を初期化する以外の用途に使われていない。
129デフォルトの名無しさん (ワッチョイ 65cd-RtM0)
2024/09/13(金) 20:11:25.22ID:ykZRrldI0
>>127
データセグメントに確保するよりも
コードセグメントに書いたほうがすでにキャッシュに載ってるから高速なのかもな
130 警備員[Lv.5][新芽] (ワッチョイ 1e21-ztXh)
2024/09/13(金) 20:41:46.32ID:cjEIJ97r0
速度の最適化か、生成されるオブジェクトの小ささかのトレードオフなんだろうね
テスト用のコードは小さいから、後者は気にせずゴリゴリやってるのかな…
131デフォルトの名無しさん (ワッチョイ fa2d-2PHd)
2024/09/13(金) 23:38:57.27ID:uRdGeQ4y0
世の中CやめてRustにしろだとか
OpenAIの新AIが競プロで上位1割のプログラマに匹敵とか言うじゃない
今更人間がCを続ける意義ってなんなんだろう
132デフォルトの名無しさん (ワッチョイ 714e-/njq)
2024/09/14(土) 00:03:48.69ID:UIMFiyQN0
COBOLみたくロストテクノロジーを理解出来る貴重な人になれる
133はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-hr+9)
2024/09/14(土) 00:19:19.91ID:N2YvcTj50
低レイヤに関わる資料が C を前提に書かれていたりするのは普通のことなのでたとえ C でプログラミングしなくてもある程度は身に付いてないと困ることはあるだろう。
134デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 00:39:08.66ID:0gsw2riP0
>>128
初期化する以外に参照されてないってのはおかしいだろ
printfで中身が表示されてんだから
ポインター変数のbar経由で中身を参照してるけど、中身は初期化で渡された文字列そのものだ
そもそもリテラルが参照されてないという言い方もおかしい
リテラルは単なる定数の簡略表記に過ぎず、ソースコード上だけの用語だ
実行時に消えてると言いたいのか?
そんなわけない、全く消えてない
135デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/14(土) 00:51:01.21ID:8t7wdnSS0
>>132
CobolやFortranはこれからも生き残るよ

多分
136デフォルトの名無しさん (ワッチョイ 2a7c-9vXG)
2024/09/14(土) 08:27:14.72ID:QgTfRJpW0
>>134
言ってることが意味不明。
textセグメントとかbssとかdataセグメントとか知らんの?
137はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/14(土) 08:59:02.76ID:N2YvcTj50
>>134
> printfで中身が表示
意味が解らん。
表示されてる中身というのは foo の中身であってリテラルじゃないだろ。

> リテラルは単なる定数の簡略表記
整数リテラルなどは右辺値だが文字列リテラルに限っては左辺値。
文字列リテラルは実行フェイズにおいてオブジェクトとしての性質を持つということ。 (抽象機械の上では。)
ただし、この文字列リテラルが型変換された結果によって生まれるポインタはアドレス定数の要件を満たす。
138デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 10:32:56.64ID:0gsw2riP0
>>137
int i = 1;
printf("i -> %d\n", i);
この1は同じ様にリテラル表記以外に参照されてないというのか?
139はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/14(土) 10:49:21.06ID:N2YvcTj50
>>138
前述の通り整数リテラルは右辺値 (rvalue)。
文字列リテラルは例外的な存在だ。

まず、 C の用語では「オブジェクト」と「値」は違う意味を持つ。
メモリ上のビットパターンがオブジェクトで、値は式の結果だ。
(規格用語では data storage だがここではあえてカジュアルな用語で言うことにする。)

そして式の結果は lvalue と rvalue に区分される。
オブジェクトに結び付いている値が lvalue だと考えていい。
個々に規定があるので詳細は割愛するが、
式の中で変数名だとか単項 * 演算だとか [] とかがあればそれはメモリ上に存在してるのは明白だろ?
そういうのが lvalue 。

たとえば 1+3+5 みたいな式があれば途中で 4 という値が生じるが、これは「どこ」にある?
場所に結び付いておらず、式が終われば破棄されることになってる。
こういうのが rvalue 。

ちなみに lvalue も rvalue が要求される文脈では rvalue に変換される。 (メモリから値が読みだされる。)
140はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/14(土) 12:58:36.93ID:N2YvcTj50
>>138
このときの 1 というリテラルは (rvalue の) 1 を返す式で、その値が i にコピーされた後で寿命を終えて消滅する。
printf の引数の i で取り出される 1 は i に入っている 1 であってリテラルの 1 じゃない。
整数リテラルはあくまでも整数を返す (生成すると言ってもいいかも?) 式であって、メモリ上のどこかにあるオブジェクトというわけじゃない。
141デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 13:32:49.89ID:0gsw2riP0
>>140
1は破棄されて"hoge"は破棄されないんだろ?
だから参照されてんじゃん
142はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-hr+9)
2024/09/14(土) 13:40:20.14ID:N2YvcTj50
>>141
>>122 の bar が参照しているのは文字列リテラルからコピーされた配列であって文字列リテラルではない。
文字列リテラルが破棄されないこととは独立した話だよ。
143デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 13:43:47.04ID:0gsw2riP0
>>142
barは配列のコピーじゃないだろ
ポインターなんだから
コピーしてるのはアドレス値だぞ
144はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-hr+9)
2024/09/14(土) 13:55:39.65ID:N2YvcTj50
>>143
そのポインタが指しているという意味で参照してると言ってる。
なにを言いたいんだ?
論点は「配列の初期化子として現れる文字列リテラルは配列の初期化以外に使われる可能性がない」という話だろ。
145デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/14(土) 14:05:45.99ID:8t7wdnSS0
> char foo[] = "hoge";
> char* bar = &foo[1]; /* 敢えてずらしてみる */

> bar が参照しているのは文字列リテラルからコピーされた配列であって文字列リテラルではない。

説明がよく分からないが、barは、fooではなく、どこかにコピーした別の文字列なり配列を参照していると言うことか?
146はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/14(土) 14:20:52.41ID:N2YvcTj50
>>145
bar はどうでもいいよ。 それは要らん間接参照を入れて例としてよくわからんようになってるから
飛び飛びになってる私の書いてることをあらためてまとめると

・ char foo[] = "hoge"; といったような記述があれば "hoge" によって foo を初期化する。
・ このときの文字列リテラル "hoge" は foo を初期化するだけに使われて他からアクセスされる可能性がない。
・ 言語規格の建前上は文字列リテラルの寿命はプログラムの最初から最後までだが……
・ この場合は他からアクセスされる可能性がないから機械語レベルでは文字列リテラルは最適化で消えて (即値としてコードに埋め込んで) も問題にならない。
147デフォルトの名無しさん (ブーイモ MM0a-bJfQ)
2024/09/14(土) 16:37:38.90ID:kHQOYHTcM
つまり
>>118 でgccが文字列を即値にする最適化の条件を推察したら
はちみつ餃子が規格の観点で説明が不適切ってぼこってるわけか?
前者の情報のほうが有益だわ
148はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-hr+9)
2024/09/14(土) 16:47:20.53ID:N2YvcTj50
>>147
補足したつもりだが。
どう最適化するにしても規格に反する挙動にしてはならない (したら規格に対応しているとは名乗れない) からどうしてそれで規格に反しないのかの観点から説明した。
149デフォルトの名無しさん (ワッチョイ 8af5-/VPw)
2024/09/14(土) 17:01:46.57ID:5H/bnNk90
最適化でどうなるかを考えながらC書くくらいならもうアセンブリ書いたほうが良いと思う
150デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 17:07:34.51ID:0gsw2riP0
>>146
はちみつは文字列リテラルがアセンブリソースの段階で"hoge"と書かれてなければ消えてると思ってんだなw
例え命令コードの即値で書かれていても消えてる訳じゃないからー!残念!
だから話が噛み合わなかったんだw
まぁ強いて言えば、最適化でデータの表現法方を変えても構わないって言えば良い
151デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 17:14:48.19ID:0gsw2riP0
x = 1; ← 最適化で消えても構わない
x = 2;
最適化で消えても構わないってこういうことを言うんだよ
char foo[] = "hoge";
"hoge"は消えて良い訳ないだろw
gccは実際、命令コードに文字列を埋め込んでスタックに生成してるが、その文字列はポインター変数を使えば参照可能だ
152はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/14(土) 17:26:48.38ID:N2YvcTj50
>>149
それはそう。 原則としては言語の理屈に従っておくのが良い。
繰り返すけど、少なくとも初心者に対して低レイヤの観点で C を説明するのは筋が悪いと思う。
153はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/14(土) 17:33:13.32ID:N2YvcTj50
>>151
> 参照可能だ

その時参照してるのはスタック上にある配列であって、文字列リテラルではないってのを俺は何度書けばいいんだ?
文字列リテラルは本来は「プログラムの開始から終わりまでの寿命を持つオブジェクト」としてあらねばならないのが、
実際には文字列リテラルではない形になってることを「消えてる」と表現したのは確かに微妙な表現だったかもしれないが、
有るべき場所から消えてるんだからそんくらいわかるだろ。

そもそも最初は char* foo = "hoge"; との対比で言ってたんだから。
154デフォルトの名無しさん (ワッチョイ 8a56-/VPw)
2024/09/14(土) 18:13:05.20ID:5H/bnNk90
はちみつ餃子の説明はたぶん、C++ の考え方が混ざっていないか
C で配列の初期化子に文字列リテラルが書けるのはあくまで文字列リテラル限定であって、それは式として扱われるのではなく、lvalue も rvalue もクソもないということだと思うが
155はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/14(土) 18:35:19.29ID:N2YvcTj50
>>154
初期化子の文法の一部であって式の規則の適用範囲外じゃないの?ってことだよね?
6.7.8 を見てこの場合でも式だと解釈してるけど、そういわれたらちょっと自信がないかも。
156デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 18:53:38.72ID:0gsw2riP0
>>153
その配列に格納されているデータが文字列リテラルから生成された文字列(の実体)だろ
厳密に言いたいなら、文字列リテラルはコンパイル時に存在さえしてれば良いものなんだよ
何しろ「リテラル」だから
それを生存期間だの実行時の実体とごっちゃにしてるから訳分かんないことになんだよ
コンパイル時にさえ存在してれば良いという事を実行時には消えてても良いとか言っちゃってんでしょ?
157デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 19:03:33.67ID:0gsw2riP0
char foo[] = { 'h', 'o', 'g', 'e', 0 };
文字列リテラルは↑のシンタックスシュガーだ
初期化子は消えても構わないのか?
初期化子が生成した文字列は参照出来ないと言うのか?
158デフォルトの名無しさん (ワッチョイ 8a56-/VPw)
2024/09/14(土) 19:10:37.88ID:5H/bnNk90
>>155
https://en.cppreference.com/w/c/language/array_initialization
ここ参考にしてたから文法定義の時点で式じゃないと思ってたけど、ちゃんと規格上は式としてのパースではあったね、すまない
改めて C99(でいいんだよね、6.7.8 ってことは)の draft 読んでみたけど、文字列リテラルで初期化できるのは 6.7.8.14,15 で特殊に定義された意味論であって、やっぱり式扱いじゃないんじゃないかね
159はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-hr+9)
2024/09/14(土) 19:58:20.45ID:N2YvcTj50
>>154
結果的な挙動からするとどっちでも良いから書いてないだけかも。
160デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/14(土) 20:16:47.07ID:8t7wdnSS0
皆拘らずに使っているのに言うのもあれなんだが
C言語にはC++で言う参照はありません
161デフォルトの名無しさん (ワッチョイ a6b2-Z1Qu)
2024/09/14(土) 21:01:12.02ID:NQ2pFzob0
hogeは破棄されないって一人がんばってるID:0gsw2riP0を救済して差し上げたいが……自分も完全にわかってないのでできない。
162デフォルトの名無しさん (ワッチョイ 65cd-RtM0)
2024/09/14(土) 21:04:22.62ID:tDLmxNl+0
実在するのはfoo[]だけで
文字列"hoge"は破壊どころか最初からあっても無くてもいいというのがここまでにわかったことだろ
163デフォルトの名無しさん (ワッチョイ 7910-VVra)
2024/09/14(土) 22:15:49.35ID:zMI9sEnq0
配列と別に文字列もどこか別に確保しといて何の意味があるんだよ
この形で配列作る度に二倍メモリ食うことになるじゃないか
164はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/14(土) 22:32:05.03ID:N2YvcTj50
>>163
せやで。 だから最適化の余地があるという話をしてる。
165デフォルトの名無しさん (ワッチョイ 6663-QZ+t)
2024/09/14(土) 22:34:31.27ID:8t7wdnSS0
ここで最適化の話は混ぜない方が良い
166デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 23:00:09.33ID:0gsw2riP0
>>163
clangは配列でも文字列リテラルは残ってるよ
ここって想像だけで語るアホばっかだなw
リテラルはコンパイル時のみに必要
それとは別に実行時にリテラルを実体化した値が存在する
基本的にrvalueだ
でないと当然初期化が出来ない
この値をはちみつは無視して語っている
167デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 23:04:40.23ID:0gsw2riP0
はちみつはリテラルはコンパイル時にのみ必要な事と、実行時には必要な初期値(rvalue)を最適化で命令コードに埋め込む事を消えたと表現して、ごっちゃにしてるアホ
これが結論
168デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 23:11:36.67ID:0gsw2riP0
リテラルは参照されないと言ってるのがその証拠
そりゃコンパイル時にのみに必要なその場でデータ構造を表現するリテラルを、実行時に参照出来る訳ないだろw
それが出来るのはコードをデータとして表現してるLisp だけだ
C++のテンプレートでも無理
C++のconstevalなら可能になった
std::formatはそれで実装可能になった
実行時には初期化の為のrvalueが絶対に存在する
169デフォルトの名無しさん (ワッチョイ a6e1-865n)
2024/09/14(土) 23:13:53.14ID:0gsw2riP0
constevalも文字列リテラルを参照可能なのはコンパイル時のみだった…
やっぱり真に実行時に文字列リテラルを参照可能なのはLisp だけだな
170デフォルトの名無しさん (ワッチョイ 8a56-/VPw)
2024/09/14(土) 23:40:13.14ID:5H/bnNk90
>>1 の C17 ドラフトのリンク C++17 のやつじゃん
次スレ立てるならこれに変えといて

https://web.archive.org/web/20181230041359/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf
171はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-IU9Y)
2024/09/14(土) 23:53:27.27ID:N2YvcTj50
>>167
起きていることは >>127 でこれ以上なく具体的に説明されてるんだから改めて厳密に表現しないと理解できないとは思わなかったんだよ。

>>168
文字列リテラルが静的記憶域期間を持つことは 6.4.5 に書かれてる。
実行フェイズに存在するオブジェクトだよ。 (最適化を抜きにして仕様通りに解釈すれば。)

配列の初期化子として現れる文字列リテラルの扱いは微妙かもという話が >>154 >>158 の指摘だが、
記憶域期間についての記述は文脈を指定せず文字列リテラル全部を対象にした記述に見える。
172デフォルトの名無しさん (ワッチョイ d7cd-qbvN)
2024/09/15(日) 00:57:56.19ID:/wZr5+b/0
>>163
そりゃ書き換える場合があるからでしょー
一個しかなかったら関数呼ばれるたびに初期値も書き換わってしまう
なんで悩んでるのこの人?
constつけたら一個ですむだろ多分
173デフォルトの名無しさん (ワッチョイ ffe1-1pYN)
2024/09/15(日) 01:17:55.27ID:STy65/7c0
>>171
> 実行フェイズに存在するオブジェクトだよ。
存在してんじゃねーかよ!
これが最適化で消えて良いかの話だよ!
gccの場合は命令コードに埋め込んでるけど、消えてる訳じゃないし、別のポインターから参照可能だ
174はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L)
2024/09/15(日) 01:30:47.17ID:B6k8li/O0
>>173
配列とその初期化子として現れる文字列リテラルが別の存在だってことが俺が何度も書いてることだよ。
これがそんなに何度も何度も何度も何度も書かないと理解できないようなことか?
別のポインタは配列を指せるが、その初期化子として現れる文字列リテラルを指せるわけじゃない。

char* foo = "hoge";

のようなケースではポインタ foo は文字列リテラルを指してるということと対比しての話だぞ。
175デフォルトの名無しさん (ワッチョイ ffe1-1pYN)
2024/09/15(日) 01:32:35.13ID:STy65/7c0
ちなみに「文字列リテラル」が「実行時」に存在してる訳では全くない
はちみつはそこを勘違いしてる
静的記憶期間というのはスコープの事だ
まぁエクステントと言った方が正確だが
それはコンパイラーが理解できるものだが、それと「実行時」に存在する値を結びつけてはいけないし関係無い
DLLだとしたら静的記憶期間の変数も実行時には存在しない可能性もある
スレッドローカルストレージの変数もそうだな

要するに文字列リテラルで生成されたデータは実行時には確実にアクセス可能で、消えてるなんて全くあり得ない
それをずっと言ってる
176デフォルトの名無しさん (ワッチョイ ffe1-1pYN)
2024/09/15(日) 01:38:12.52ID:STy65/7c0
>>174
> 文字列リテラルを指せるわけじゃない。
はい、これが間違いの全て
文字列リテラルはコンパイラーだけが理解できる「構文」に過ぎない
それを実行時にさせないとはこれいかに?w
文字列リテラルは「実行時」には何て名前になってんだ?
配列でもないぞ
配列に代入される前のrvalueの事だ
まぁ文字列は例外的にlvalueにもなれるが、rvalueであることには違いない
177デフォルトの名無しさん (ワッチョイ 9f56-3vlU)
2024/09/15(日) 01:45:15.62ID:hg9QOZOF0
>>171
なんかいろいろ書いたけど最終的には自分もそれで合っていると思う
実用上は正直どこで役に立つのかあまり思いつかないが、規格上どういう建て付けになってるのかはとりあえず理解できたかも
というか、実用上あんまり役に立つわけじゃないから今まで調べもしなかったというか

規格上は「リテラル」は存在せず integer/enumeration/floating/character は定数なんですね
それで定数は記憶域期間を持たない
文字列リテラルは静的記憶域期間を持つ
複合リテラルは関数本体の外か中かに応じて静的/自動記憶域期間を持つ、と

うーんでもなあ
某言語でいきなり &1 とか書けるの知ってたら別に定数にも記憶域期間持たせればいいじゃんとか思っちゃうなあ
とりあえずそうなっているというだけか
178はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L)
2024/09/15(日) 01:46:17.50ID:B6k8li/O0
>>175
> 静的記憶期間というのはスコープの事

ちがう。 記憶域期間はオブジェクトの寿命の区分。
6.2.4 を参照のこと。
寿命の区分が設定されている以上はオブジェクト (メモリ上のどこかにある) のこと。

> 文字列リテラルで生成されたデータは実行時には確実にアクセス可能で、消えてるなんて全くあり得ない

関数 (C のプログラムは関数の集合なので実質的にプログラムの全て) はオブジェクトではない。
私が「消える」と表現したのはこの意識があったからだが、機械語のレベルでどこかには存在するという意味ではそりゃ存在するだろう。
(同じ内容が連続する配列だったらループで書き込むような形にすることもあるかもしれない。)
配列の初期化子としての文字列リテラルは本来あるべき場所 (オブジェクト) から最適化で消えてるし、ポインタで指すことは出来ない。
179はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L)
2024/09/15(日) 01:53:34.48ID:B6k8li/O0
>>177
C++ の右辺値参照も左辺値参照も左辺値なんだよね。
参照を経由したら左辺値になるなら最初からそう出来ないか? と思ったことはある。
180デフォルトの名無しさん (ワッチョイ ffe1-1pYN)
2024/09/15(日) 01:58:39.53ID:STy65/7c0
>>178
> ちがう。 記憶域期間はオブジェクトの寿命の区分。
だからエクステントと書いてんだろ!
もしかして理解出来なかったか?

> 配列の初期化子としての文字列リテラルは本来あるべき場所 (オブジェクト) から最適化で消えてるし
本来あるべき場所(オブジェクト)って何だよ?!
目茶苦茶だなw
これがコンパイラーと実行時に存在すべき値(rvalue)をごっちゃにした成れの果てだなw
181デフォルトの名無しさん (ワッチョイ ffe1-1pYN)
2024/09/15(日) 02:33:43.11ID:STy65/7c0
初期化に使われた(文字列)リテラルが実行時にrvalueになったものに名前を付けるべきだな
これは最適化でも消えることはない(当たり前だが…)
名前がないとまたリテラルは消えるから参照出来ない野郎が発生しかねないw
182デフォルトの名無しさん (スッップ Sdbf-2MD7)
2024/09/15(日) 12:24:08.15ID:WkBCL5VYd
>>174
>char* foo = "hoge";

>のようなケースではポインタ foo は文字列リテラルを指してる

その表現が間違ってる。
fooは静的記憶域を指してるが正しい。

intptr_t *bar = 0xAABB;
この場合数値リテラルを指すなんて言わんだろ。
183 警備員[Lv.2][新芽] (ワッチョイ 5707-/vo+)
2024/09/15(日) 13:50:20.31ID:krajCak80
>>char* foo = "hoge";
>>
>>のようなケースではポインタ foo は文字列リテラルを指してる

>その表現が間違ってる。
>fooは静的記憶域を指してるが正しい。

彼も文字列リテラルは静的記憶域に置かれると言ってなかったっけ
僕にはこの2つの違いが分からないや
勘違いだったらごめんなさい
184デフォルトの名無しさん (ブーイモ MM8f-GITO)
2024/09/15(日) 16:04:15.59ID:7leD3hDGM
もっと中身のある話しようぜ
185デフォルトの名無しさん (ワッチョイ 9794-z7on)
2024/09/15(日) 17:53:23.56ID:V70NGKYC0
>>68
規格に後置++演算子は実数型とポインタ型にしか使えないとあったけどそれの関係じゃないの?
規格でそう決まってるだけの話では?
186デフォルトの名無しさん (スプッッ Sd3f-2MD7)
2024/09/15(日) 18:13:20.02ID:/tCGodXOd
それだな
187デフォルトの名無しさん (ワッチョイ d7cd-qbvN)
2024/09/15(日) 21:42:32.09ID:/wZr5+b/0
ちなみに
int main(int argc, char *argv[])
と定義しても
argvは++できる
188デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/15(日) 23:27:23.69ID:dUpBu3ui0
main の引数だけど、人によって好みがある
*argv[]だったり、 **argvだったり、
さすがにargv[][]はいないと思う
189はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L)
2024/09/16(月) 08:22:23.81ID:JwEVxA0h0
>>185
配列はポインタに型変換される。 だから型は合うんだよ。
変更可能な左辺値でなければならないという制約に違反してる。
190はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L)
2024/09/16(月) 08:28:07.90ID:JwEVxA0h0
>>182-183
静的記憶域期間ってのは静的+記憶域期間なんだよ。 静的記憶域+期間じゃないんだよ。

まあ静的記憶域期間を持つオブジェクトが配置されている場所を静的記憶域と呼んでもカジュアルな場面ではそんなに不自然ではないとは思うけど。
実装上は専用のセクションに配置するのが普通だし。
191デフォルトの名無しさん (ワッチョイ 776e-SKTh)
2024/09/16(月) 08:30:39.50ID:+a4Swf1f0
ここまでのまとめ

Cは生産性が低い
C使いも生産性が低い
192デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/16(月) 10:51:57.39ID:yKwOC4kA0
ID:+a4Swf1f0 は、言語に何使おうと生産性が低そう
193デフォルトの名無しさん (ワッチョイ ff2a-48Tr)
2024/09/16(月) 11:29:42.22ID:0nzerU0W0
>>191,192
生産性など、君ら社畜を計る尺度に過ぎんよ。
芸術家は、時間をかけて1行の美しさを追及するものだ。
194デフォルトの名無しさん (ワッチョイ 1751-z7on)
2024/09/16(月) 12:43:08.20ID:T6H9+ne50
>>189
変更可能な左辺値に配列型は含まれないからそれとは違うん?いつポインタに型変換されてんの?
195はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L)
2024/09/16(月) 13:26:14.08ID:JwEVxA0h0
>>194

6.3.2.1 より
> 左辺値がsizeof演算子のオペランド,単項&演算子のオペランド,又は文字配列を初期化するのに使われる文字列リテラルである場合を除いて,
> 型“〜型の配列”をもつ式は,型“〜型へのポインタ”の式に型変換する。

式として出てくる配列は一部の例外を除けば問答無用で変換されるので ++ のオペランドに配列が出てくるときも変換後のポインタ (rvalue) に対する演算 (実際には出来ないけど) として解釈されるということでいいと思う。
196デフォルトの名無しさん (ワッチョイ 1751-z7on)
2024/09/16(月) 14:56:21.22ID:T6H9+ne50
>>195
配列オブジェクトの先頭の要素で左辺値じゃないって書いてあるな
ということは左辺値の式の中に出てくる配列は左辺値じゃなくなっちゃうということ?
なんでそんな仕様になったんだろうね
197はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L)
2024/09/16(月) 16:28:24.01ID:JwEVxA0h0
>>196
C には配列の要素を指すポインタとは別に配列を指すポインタというものもある。
こんなことが出来る。

int foo[10];
int (*bar)[10] = &foo;

このときの bar の型は int(*)[10] ということになるわけだが……。
型情報として長さが含まれるのはかえって邪魔だ。
大抵の配列を受け取る関数 (str系やmem系など) は配列の大きさが固定ではないから。
配列の先頭要素で配列を代表させる (それが簡単な記法にする) ほうが都合がよかったんじゃないかと思う。
配列全体をひとつの値として扱いたい場合のほうが少ないだろうという判断もそれなりに合理的じゃないかな。

いまどきの言語 (Go とか Rust とか) は範囲を表すスライスという概念を導入して解決してるけど、
C の登場時期だと 2 ワードのオブジェクトを基本型にするのってなんかヤじゃない? と思ったとしても仕方ない。
198デフォルトの名無しさん (スプッッ Sd3f-2MD7)
2024/09/16(月) 17:22:11.94ID:udznqyd1d
>>190
横からすまんが、記憶域期間って言葉も変
199デフォルトの名無しさん (スプッッ Sd3f-2MD7)
2024/09/16(月) 17:23:46.99ID:udznqyd1d
>>189
>配列はポインタに型変換される。

それは関数呼び出しの場合だぞ
200デフォルトの名無しさん (ワッチョイ bf79-MnYn)
2024/09/16(月) 17:29:54.17ID:E0fXFEgV0
この糞コテは半端知識のかまちょだからNGやスルー推奨
201はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-6w0d)
2024/09/16(月) 18:10:03.54ID:JwEVxA0h0
>>199
こっちは根拠になる規格の文面を提示してるんだから違うというなら違うと思う根拠を提示して。
202デフォルトの名無しさん (アウアウウー Sa5b-E6+g)
2024/09/16(月) 18:57:26.00ID:ISRAyNkZa
>>188
そらargv[][]では誤りだもんな
203デフォルトの名無しさん (アウアウエー Sadf-N1Zj)
2024/09/16(月) 21:32:46.16ID: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
204デフォルトの名無しさん (ワッチョイ bf4f-NiVF)
2024/09/16(月) 22:10:35.73ID:hHcIxSUD0
>>197
流石に言ってる事が的外れ過ぎるのでもうちょっと勉強した方がいいと思うよ
205 警備員[Lv.1][新芽] (ワッチョイ f731-/vo+)
2024/09/16(月) 22:25:26.45ID:z+htC2pc0
恥ずかしながら、静的記憶域期間(で合ってるのか?)という言葉を知らなくて、ライフタイムは「静的」に含意されているのかと思ったワ…
しかし、記憶域期間って違和感あるなぁ
206 警備員[Lv.1][新芽] (ワッチョイ f731-/vo+)
2024/09/16(月) 22:30:23.39ID:z+htC2pc0
わけわからん
>>205は撤回します
207はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L)
2024/09/16(月) 22:43:01.97ID:JwEVxA0h0
>>203
余談だけど配列だけじゃなくて関数型も関数ポインタ型に調整されるよ。
208デフォルトの名無しさん (ワッチョイ 9f7c-2MD7)
2024/09/16(月) 22:52:59.17ID:TDYyKtgo0
>>201
規格に配列は常にポインタに変換されるなんて書いて無いぞ。
209デフォルトの名無しさん
2024/09/16(月) 23:00:53.05ID:f3T7KT8T0
>>208
「常に」とは書かれていない
「ポインタに変換される」ではなく「ポインタに型変換される」

>>102がまさにそれでしょ
E1という配列が関数呼び出しでない場合においてもポインタという型に変換されているから出来ること
210デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/16(月) 23:10:52.64ID:yKwOC4kA0
>char *hoge(char fuga[10])

こう書いてあっても、関数内で10を使う訳ではない
関数内で仮に100個めの要素アクセスするロジック書いてもエラーにはならない
(実行時にはエラーになると思う、多分)

だから、
>char *hoge(char fuga[])
添え字無しにしても良いことになる
211デフォルトの名無しさん (ワッチョイ d7cd-qbvN)
2024/09/17(火) 01:04:31.11ID:BokinMog0
>>210
元々ローカルでchar hage[10];と定義して10以上をアクセスしてもコンパイル時にはエラーにならないでしょ

引数に[10]と書くとしたら可読性のため(この関数では[0~9]までアクセスする可能性があると明示するため)
212デフォルトの名無しさん (スプッッ Sd3f-2MD7)
2024/09/17(火) 10:15:58.36ID:9gub94Dsd
__FILE__ とか __LINE__ は大文字なのになんで __func__ は小文字なん?
213デフォルトの名無しさん (アウアウエー Sadf-N1Zj)
2024/09/17(火) 10:17:16.72ID:TMGdiCOOa
範囲の問題じゃなくて
++hage または hage++ が出来るか出来ないかが問題なんです
214デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/17(火) 11:06:41.56ID:bX/ekV+z0
一見配列を受け渡ししているように見えるけれど、
実際はポインターとして受け渡ししているってことでしょ
215はちみつ餃子 ◆8X2XSCHEME (ワッチョイ d70f-6w0d)
2024/09/17(火) 11:56:03.91ID:FRc2ySeD0
>>212
__func__ はマクロではないからだと思う。
216デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/17(火) 12:47:41.54ID: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;
}
217デフォルトの名無しさん (アウアウエー Sadf-N1Zj)
2024/09/17(火) 13:07:46.14ID:TMGdiCOOa
>>214
そんなことは判ってるよ
(char hage[10]) で hage++ または ++hage 出来ちゃってる(ように観える)のが問題なんでしょ
関数の引数は (char hage[]) または (char *hage) のみにすれば良かった
(char hage[10]) はどうみても蛇足(結局境界テストされてないし)
218デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/17(火) 13:11:47.81ID:bX/ekV+z0
問題だと思う人は、使わないようにしましょう
開発サイトでそういうルールを用意するのも手です
219デフォルトの名無しさん (スプッッ Sd3f-2MD7)
2024/09/17(火) 17:17:11.73ID:9gub94Dsd
>>215
納得しました。
220デフォルトの名無しさん (ワッチョイ 9ffd-NiVF)
2024/09/17(火) 20:17:27.08ID:dLWvmxgr0
>>197
そもそもstr系mem系はアドレスを受け取るんであって配列を受け取る関数ではないっていう勘違いがあるんだけど
それはともかく大きさがどうのとかなんちゃらが都合がいいとか、本当にC言語でなんかプログラムを書いた事あるの?
221デフォルトの名無しさん (スプッッ Sd3f-2MD7)
2024/09/17(火) 20:58:19.23ID:9gub94Dsd
俺は尻より胸派なんだよね。
222デフォルトの名無しさん (ワッチョイ d7cd-qbvN)
2024/09/18(水) 00:42:28.78ID: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]に意味が出る
223デフォルトの名無しさん (ワッチョイ bfee-GITO)
2024/09/18(水) 01:22:58.84ID:9DvoA/Ly0
ド素人w
224デフォルトの名無しさん (ワッチョイ d712-IGT5)
2024/09/18(水) 05:59:54.60ID:Y3+kk9yU0
>>222

c faq 6.21 (英文が詳しい)
https://c-faq.com/aryptr/aryparmsize.html
>>207 の'調整'は'adjust'だろう
N1256を'adjust'で検索するのじゃ
Look, a new day has begun.
225デフォルトの名無しさん (ワッチョイ d710-SKTh)
2024/09/18(水) 07:51:55.61ID:9Z5pFVfx0
8/16bit時代の1バイトでも、1ステップでも減らせってのを経験した人と
最近の可読性、移植性、安全性優先設計が当たり前世代とのギャップ。
226デフォルトの名無しさん (ワッチョイ bf32-GITO)
2024/09/18(水) 08:59:57.51ID:9DvoA/Ly0
ギャップの問題じゃねーから
文脈すら理解できないじじいはすっこんでろ
227デフォルトの名無しさん (ワッチョイ 5701-vU+L)
2024/09/18(水) 09:30:25.30ID:Qk7JHPx80
専門板によくいるアスペだな
228デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/18(水) 10:34:45.37ID:UYQxUcxO0
225 は釣りでしょう
229 警備員[Lv.2][新芽] (ワッチョイ bfd9-/vo+)
2024/09/18(水) 13:08:51.24ID:eTGNACyx0
>>222
sizeof(hage) で配列のサイズが求まるの?
と思ったら、「char * (ポインタ)の大きさを返すよ」みたいな警告が @gcc
230デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/18(水) 13:15:29.42ID:UYQxUcxO0
釣りだか天然だか、分からなくなってきた 笑
231はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-vU+L)
2024/09/18(水) 13:35:28.77ID: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* になってるのがわかる。
232 警備員[Lv.3][新芽] (ワッチョイ bfa6-/vo+)
2024/09/18(水) 13:51:08.91ID:eTGNACyx0
なるほど
勉強になります
233デフォルトの名無しさん (スプッッ Sd3f-2MD7)
2024/09/18(水) 14:54:11.13ID: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]));
の結果ってどんな値表示されるの?
234デフォルトの名無しさん (スプッッ Sd3f-2MD7)
2024/09/18(水) 14:56:10.00ID:LEoKOQZWd
書式のとのuzじゃなくてzuだっけ?zだけでよかったっけ?
ま、主旨はそこじゃないからいっか。
235はちみつ餃子 ◆8X2XSCHEME (ワッチョイ d7e2-6w0d)
2024/09/18(水) 15:47:33.09ID:3rwci13t0
>>233
sizeof(char*)/sizeof(char) ということになる。
sizeof(char) は確実に 1 だから結果としては単に char* のバイト数ってことだね。

この場合は「『もし 10 に意味があるとしても』境界チェックはされないことに変わりないのでなんの役にも立ってない。 役に立てるとしたらここまで書かなきゃならない」というのが主旨なのであくまでもしもの話。
実際の値はどうでもよい文脈だと思う。
236デフォルトの名無しさん (ワッチョイ d7cd-qbvN)
2024/09/18(水) 16:33:08.44ID:wcwImUMc0
>>224
ああそうなの
昔のことだから記憶違いをしてたようだ
237デフォルトの名無しさん (スプッッ Sd3f-2MD7)
2024/09/18(水) 16:43:30.74ID:LEoKOQZWd
>>235
>>222 の「これなら[10]に意味が出る」ってのは間違いってことね。
238デフォルトの名無しさん (ワッチョイ d7cd-qbvN)
2024/09/18(水) 18:00:34.97ID:wcwImUMc0
'ここの10は意味ありませんよ'
って警告を出してもいいじゃんってことでしょ
それなら例えば

typedef char HAGE_TBL[10];
void foo(HAGE_TBL hage) {}
(毎回10とか書くのは危険なのでこういう使い方が多いと思う)

などとした場合に毎回警告が出てうざいことになるんじゃないか
239デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/18(水) 18:07:31.49ID:UYQxUcxO0
警告ならまだ笑っていられるが、
明らかに書いた奴の意図とは違って誤動作してるだろ
240デフォルトの名無しさん (スプッッ Sd3f-2MD7)
2024/09/18(水) 18:30:29.69ID:LEoKOQZWd
>>222 のバグを晒すスレはここですか?
241デフォルトの名無しさん (スプッッ Sd3f-2MD7)
2024/09/18(水) 18:46:04.44ID:LEoKOQZWd
C言語は難しいな
242デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/18(水) 20:53:02.12ID:UYQxUcxO0
void aaa()の中で、
引数で渡された値が何かを確かめて見ると良い
それと、 sizeof(hage)やsizeof(hage[0])の値も

プログラム書いた人の意図としては、
sizeof(hage)/sizeof(hage[0])が10になるはずなんだが
さてさていくつだろうか?
243デフォルトの名無しさん (ワッチョイ 9f7c-2MD7)
2024/09/19(木) 00:15:21.84ID:5H+5PGV10
もうやめて!>>222 のライフはゼロよ!
244デフォルトの名無しさん (ワッチョイ 9f1e-S785)
2024/09/19(木) 06:32:15.59ID:zdFAvN1E0
本人が新たなネタを出してくるんだもん。
>>238 でもわざわざ
typedef char HAGE_TBL[10];
ってやっておきながら、なんで
void foo(HAGE_TBL hage)
なの? 構造体と同じように
void foo(HAGE_TBL *hage)
ってしてみたら新たな何かが見えてこないかい?
245デフォルトの名無しさん (ブーイモ MMbf-GITO)
2024/09/19(木) 15:36:15.62ID:bQAYIDF0M
cは洗練された型システム持ってないんだからそんなところ頑張っても無駄なんだよ
この悟りに至って始めて脱初級
原則語るならそれからにしてくれ
246デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/19(木) 15:40:30.12ID:cPR7xA8Z0
Cは一部の洗練された型システム持つ言語よりも遙かに自由度が高い
そこが分かってようやく中級レベル
あとは本人の努力次第で空も飛べるし海も潜れる
247デフォルトの名無しさん (ワッチョイ bfda-GITO)
2024/09/19(木) 15:50:31.78ID:c2v//UgT0
おいおい
そのぶん危険なんだから持ち上げる部分でもないだろ
お前も初級
248デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/19(木) 17:19:57.71ID:cPR7xA8Z0
ナイフは危険だが有用
不器用者は使わない方が良い
249デフォルトの名無しさん (ワッチョイ b766-qbvN)
2024/09/19(木) 17:44:18.26ID:8NYyNXbk0
>>244
typedefは新たな型を作るわけじゃない別名を定義するだけから

void foo(char hage[10])

void foo(HAGE_TBL hage)
は同じことだよ
250デフォルトの名無しさん (ワッチョイ bf29-GITO)
2024/09/19(木) 20:28:27.65ID:c2v//UgT0
>>248
c言語ってとっくの昔から自由にキャストしまくれる言語じゃないの知ってるか?
さぁお前はなんと答える?
251デフォルトの名無しさん (ワッチョイ ff63-y7MN)
2024/09/19(木) 20:47:13.84ID:cPR7xA8Z0
そんなに怖がるなよ
食われるわけじゃないんだから
252デフォルトの名無しさん (アウアウエー Sadf-3vlU)
2024/09/19(木) 21:11:19.13ID:/CBFTgYsa
>>245
悟った人は全部void*
253デフォルトの名無しさん (ワッチョイ ff4c-KlCL)
2024/09/19(木) 21:52:43.48ID:j90utfqH0
文字も数字も全部intでいいやん
254デフォルトの名無しさん (アウアウエー Sadf-3vlU)
2024/09/19(木) 21:56:05.41ID:/CBFTgYsa
getch() は int
255デフォルトの名無しさん (ワッチョイ 9f1e-S785)
2024/09/20(金) 07:15:20.20ID:dn4N5ANS0
>>249
それが不満なようだから「HAGE_TBL * にしたら何ができるか考えてみては?」ということでは?
256デフォルトの名無しさん (ササクッテロ Sp47-i443)
2024/09/24(火) 10:26:30.49ID:/2yiAcKTp
昔のコンピュータはメモリー少ないから、intで文字持つなんて贅沢だったんだよ
257デフォルトの名無しさん (ワッチョイ 1e2b-VArp)
2024/09/24(火) 11:12:54.47ID:CARZyoOh0
次のジジイの的外れな言いたいだけコメントを先取り
intは16bit以上だぞ
258デフォルトの名無しさん (ササクッテロ Sp47-i443)
2024/09/24(火) 11:31:50.53ID:QMMOdtbOp
違うよ、intは処理系依存だから8ビットの場合もある
259デフォルトの名無しさん (スプッッ Sd52-L8o3)
2024/09/24(火) 11:49:08.20ID:vvKB2ofDd
規格書読め
260デフォルトの名無しさん (ブーイモ MM32-VArp)
2024/09/24(火) 11:54:52.88ID:kMxfGMRcM
次のジジイ
getcharがなぜintを返すか
261デフォルトの名無しさん (ワッチョイ d6f5-K4S3)
2024/09/24(火) 19:39:49.05ID:tv/lKhnI0
>>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
https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
テンプレ入りキボンヌ

>>皆の衆
ともあれ、込み入った事情に該当しなければ
const char afoo[] = "hoge";
あるいは
const char * const ccfoo = "hoge";
場合によって
const char *cfoo = "hoge";
と書いて、うっかり書き換え防止に勇往邁進するのじゃ。
262261 (ワッチョイ d6f5-K4S3)
2024/09/24(火) 19:51:57.01ID:tv/lKhnI0
>>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:19.49ID:8eNfi/Op0
まだやってるキモ…
いくら話題無いからってこれは誰も幸せにならない
264デフォルトの名無しさん (ワッチョイ 727d-rNKn)
2024/09/25(水) 23:05:12.18ID:YARyzAjz0
ええんちゃう別に
どうせ5chに答えを求めてやって来る人なんてもうおらんのやし
265デフォルトの名無しさん (ワッチョイ 1663-7cnK)
2024/09/25(水) 23:07:41.16ID:1jKu7Jqx0
青い鳥を探してます
ここに来れば教えてくれると聞いて来ました
266デフォルトの名無しさん (ワッチョイ 022d-w5sm)
2024/09/26(木) 09:49:09.10ID:oesVQEFi0
PythonとかC++のスレで規格持ち出して言い合いしてるのを見たことないが
何故かここではよく起こるな
267デフォルトの名無しさん (ワッチョイ ebbe-i443)
2024/09/26(木) 10:19:33.26ID:944iXMZC0
Cなんてのは対象CPUの違いとかでも標準とかけ離れた実装して来るのにね
268デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/26(木) 10:58:03.72ID:R5lWYvWFa
>>264
これ++
269はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e332-Pvcq)
2024/09/26(木) 12:24:13.03ID:B+Au+yIB0
>>266
じゃあ何を根拠にしてるの?
妄想?
270デフォルトの名無しさん (ワントンキン MM42-LD7o)
2024/09/26(木) 14:46:28.31ID:oxN8/Up7M
perlあたりで頼む
271デフォルトの名無しさん (ワッチョイ 022d-w5sm)
2024/09/26(木) 16:39:09.57ID:oesVQEFi0
>>269
君の問題点は規格読んでるの間違えてるとこだよ
272はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e332-Pvcq)
2024/09/26(木) 16:48:57.66ID:B+Au+yIB0
>>271
規格を根拠にしてたら間違えてる箇所は間違えていると反論できるだろ。
根拠がないよりは良い。

ところでどこに間違いがあった?
273デフォルトの名無しさん (ワッチョイ 63e3-VZV9)
2024/09/26(木) 23:55:11.03ID:jCy2QsTx0
>>235
これの1行目は文字列長によらず固定値にならない?
char* と char[] を区別できてないように思う

// これは (ヌル文字を含む) 4バイトのデータがスタック上に作られる
// sizeof(a1) の結果は文字列数により変わる
char a1[] = "abc";

// こう書いた場合、文字列の実体は静的な領域 (テキスト領域) に確保され、
// a2にはそのアドレスが渡される。
// sizeof(a2) はポインタのサイズであり、値は文字列長によらず固定
char* a2 = "abc";
274デフォルトの名無しさん (ワッチョイ 63e3-VZV9)
2024/09/27(金) 00:02:43.63ID:ju4/Ooeg0
char* でも char[] でも、a[n] と書けばn文字目を参照するのは変わらない
これはポインタの [] 演算子は「ポインタをn個進めた位置の要素を参照する」ため、結果的には配列と変わらないから
だけど前述の a1 と a2 は違う型なので、そこは注意が必要

たぶん VS Code でC言語の拡張を入れてれば、上記のように書いた変数のところにカーソルを当たるとヒントが出るので、それで確認できると思う
それか実際に動かして sizeof の結果を見るか
275はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e332-Pvcq)
2024/09/27(金) 00:16:01.96ID:dEIfxD4z0
>>273
> これの1行目は文字列長によらず固定値にならない?

その通りだよ。 固定値になってたぶん意図通りではない。
その話は >>222 がボコボコに言われてもう終わったよ。
276デフォルトの名無しさん (ワッチョイ d27c-tavX)
2024/09/27(金) 00:20:08.16ID:qUi2cfOF0
もう >>222 を晒すのはやめてあげて......
277デフォルトの名無しさん (ワッチョイ 1663-7cnK)
2024/09/27(金) 00:22:55.64ID:xb00usC10
222は釣りでしょう
278はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e332-Pvcq)
2024/09/27(金) 00:23:40.17ID:dEIfxD4z0
あ、ひょっとすると >>273 は話題を誤解してるのか。
「仮引数が配列形式だった場合にポインタに調整されるルール」が話題の中心。
仮引数として現れないと意味ない。
279デフォルトの名無しさん (ワッチョイ 63e3-VZV9)
2024/09/27(金) 07:31:58.10ID:ju4/Ooeg0
>>278
すまん自分が直近のレスだけ見て話題を早とちりしてた
だいたい流れは分かった
280デフォルトの名無しさん (ワッチョイ 2b65-ebyo)
2024/10/15(火) 13:20:49.22ID:+DYHSMWW0
初歩的な質問で申し訳ないんだけど
プログラムをユーザーの入力によって一時停止させるのってどうしたら良い?
pauseで入力待ちにするとかフラグを間に挿入するとかではなくユーザーからの入力があった場合のみ一時停止したい
281デフォルトの名無しさん (ブーイモ MM7f-tEjz)
2024/10/15(火) 13:29:34.78ID:WZg8MP0BM
まずメインの処理を一時停止可能な作りに変える
282デフォルトの名無しさん (ワッチョイ 3b80-C3fO)
2024/10/15(火) 13:32:02.14ID:nD7e5Gmv0
>>280
ソースコードの中にファイル名がpauseのファイルが存在するかを判断するロジックを追加
もし存在するならループに入りそれが消えるまで待てばいい
283デフォルトの名無しさん (ブーイモ MM7f-tEjz)
2024/10/15(火) 13:32:39.39ID:WZg8MP0BM
あとコンソールプログラムなのか?
環境を正確に書きな
284はちみつ餃子 ◆8X2XSCHEME (ワッチョイ fb32-aM+D)
2024/10/15(火) 13:37:01.44ID:C4BE9tl00
>>280
C は言語として規定している範囲はかなり狭くて、細々とした制御には環境依存の方法が必要になることが多い。
ホスト環境によって作法が違う。
285デフォルトの名無しさん (ワッチョイ 2b65-ebyo)
2024/10/15(火) 13:47:40.16ID:+DYHSMWW0
>>281
根本からなのね
>>282
初心者なもんで、一つのファイル内で完結したら嬉しいなーなんて
>>283
とりあえずコンソールで作ってる
環境はVS2022だけでおk?
>>284
ちょっと前古いサイト参照してたら環境違いすぎて苦労したし古い言語の宿命なんすかね
286デフォルトの名無しさん (ササクッテロ Sp0f-0GI8)
2024/10/15(火) 13:51:52.41ID:9xoHIO4Lp
環境依存でデバイス依存だからなぁ
287デフォルトの名無しさん (ブーイモ MM7f-tEjz)
2024/10/15(火) 14:34:22.10ID:UH8LrgydM
やりたいことがnon blockingでgetcharしたいってことだとするとwindowsだconsole apiを使う
例えばwindowsのreadline互換実装であるwineditlineを見るといい
288デフォルトの名無しさん (ブーイモ MM7f-tEjz)
2024/10/15(火) 14:36:11.97ID:UH8LrgydM
ただめんどうなので今回のように止めたいだけならこういう簡易的なやりかたがある
https://stackoverflow.com/questions/21294713/non-blocking-i-o-in-c-windows
289デフォルトの名無しさん (ワッチョイ 2b65-ebyo)
2024/10/15(火) 20:06:43.67ID:+DYHSMWW0
>>287
一行目の通りで合ってると思う
念の為やりたいことを挙げておくと、メディア再生中の一時停止とかゲーム中のポーズ画面みたいなものだと思ってもらえれば良い
ただ、2行目のreadlineは日本語でググったりヘルプで検索かけたけどよくわからん
>>288
すごい簡単だね、これなら作れるかもしれない
入門書に記載がないのが唯一の不満だよ
290はちみつ餃子 ◆8X2XSCHEME (ワッチョイ fb32-UOzH)
2024/10/15(火) 21:39:15.79ID:C4BE9tl00
>>285
言語の古さというより用途だろう。
低レイヤ部分を実装する用途に使う言語だから重厚なランタイムサポートを必要とする機能は入れられない。
291デフォルトの名無しさん (ワッチョイ 0b02-xPbt)
2024/10/30(水) 01:54:25.92ID:BzmMNap80
いにしえの議論掘り返してすまんが、>>182の例示による説明が最も本質を突いてるように思う、感謝のレス

文字列リテラルは配列初期化子の構文糖でありながら、また文字列をも表すという二義性を持つ、という云うのはあくまで言語設計の為の汚いハックでしかなかろ?
292デフォルトの名無しさん (ササクッテロ Spc5-O2Yz)
2024/10/30(水) 10:28:23.97ID:BRGgIRAsp
Cの変数の型指定なんて気休めだからなぁ
293デフォルトの名無しさん (ワッチョイ 0b02-xPbt)
2024/11/01(金) 06:24:42.85ID:+lXxXu7p0
気休めじゃなくて気疲れの間違いだろ
長さやsignednessでわけわからん変換しやがるバグの根源と言ってもいい
294デフォルトの名無しさん (ワッチョイ 8b63-IjZm)
2024/11/01(金) 11:11:58.05ID:YgeQjLzz0
訳が理解できるようになるまで、お前は使用禁止
295デフォルトの名無しさん (ワッチョイ 622d-CyeO)
2024/11/03(日) 13:27:09.33ID:N1lOck0q0
https://togetter.com/li/1471386
こんな事本当にあるのか?
296デフォルトの名無しさん (ワッチョイ f6b7-UxC2)
2024/11/03(日) 13:36:34.35ID:e8fWHn4Q0
もともとバグってたのを対処療法で回避しただけじゃねーの?
そんな驚愕するほどのこととは思わんな
スペースは文字列に加えるってことだろ
297デフォルトの名無しさん (ワッチョイ 5e63-kEEx)
2024/11/03(日) 13:45:35.99ID:WzNRcFfL0
ちゃんとソースを公開すればみんなで治してくれるよ
298デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/03(日) 16:06:15.80ID:XxnHrPnRa
バイバイおさるさん
299デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/03(日) 17:27:36.06ID:4RaSizfZ0
char []s = "うんこ"
s[20] = 0; // どっか判り難いとこにこんなのが紛れてる
回答「(sに)もっとスペースを追加して!」
300デフォルトの名無しさん (ワッチョイ 5e63-kEEx)
2024/11/03(日) 17:39:48.03ID:WzNRcFfL0
どこか知らない国で "うんこ" が40バイトくらいある所があったりして
301はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-JeGG)
2024/11/03(日) 19:33:15.95ID:/vDzNoeA0
業務だとヨソの担当のモジュールに口出しするのがめんどいから対処療法で握りつぶすみたいなことはあるのかもしれん。
302 警備員[Lv.1][新芽] (ワッチョイ 1259-WgI6)
2024/11/03(日) 20:22:14.37ID:5dhdDFeF0
s("※んこ"の値)は読み取り専用になるんじゃないかな
処理系によるかもしれないけど
303デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/04(月) 01:39:12.77ID:rgFUj3k30
>「ここにスペースを入れてみて」「もっと沢山、もっともっと」
この辺りコピペ怪文書にしか思えないんだが
境界チェックしない言語ならありふれたバグだし、元文書はちんぽとかだったんじゃないだろうか
304デフォルトの名無しさん (ササクッテロラ Sp79-P7MY)
2024/11/04(月) 13:45:59.93ID:UGhFqLBmp
どうせメモリーリークだろうな
データ位置を変えると現象が変わるなんて典型的だろ
305 警備員[Lv.5][新] (ワッチョイ 757b-WgI6)
2024/11/04(月) 13:48:37.25ID:nJwTTfVk0
>>302
誤りでした
306デフォルトの名無しさん (ワッチョイ 5e63-kEEx)
2024/11/04(月) 14:02:09.24ID:SHEOgeyw0
パンパース当てるのが正しい
307デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/04(月) 20:44:45.70ID:rgFUj3k30
おむつってあんま進化してないよな
吸収率だとか漏れだとかそんなのは上がってるだろうが、基本的な機能は変わらない
介護業界でも排泄介助っていう高齢者の汚物処理って割と大変な部類だと思うんだが
そろそろおもつ革命を起こさないと業界崩壊するんじゃないの
プログラミングでなんとかできませんかね
308デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/04(月) 20:51:48.25ID:rgFUj3k30
高齢者に限らず若い子でもうんこ漏らす時は漏らすし、そういう緊急時にも安心できるぐらいのものがそろそろ欲しいな
紙ベースで吸収率だとかで脳が退化してるおむつメーカーではおむつ革命はとても期待できないだろう
309デフォルトの名無しさん (ワッチョイ 0920-pds3)
2024/11/04(月) 21:52:48.49ID:lap6rdZH0
介護対象に飲ませるうんこがあまり臭くなくなる薬みたいな技術は進化してるぞ
310デフォルトの名無しさん (ワッチョイ f532-Q1tn)
2024/11/04(月) 22:10:34.76ID:TtMQ1IOc0
薬で臭くなくしたうんこだからといって介護対象に飲ませるのはどうかと思うぞ。
311デフォルトの名無しさん (ワッチョイ 0920-pds3)
2024/11/04(月) 22:15:25.35ID:lap6rdZH0
>>295
こんなんじゃね

#include <stdio.h>
#include <string.h>
#include <limits.h>

int main(void)
{
  char s[] = ""; // ←スペースを11個入れる
  sprintf(s, "%d", INT_MIN);
  puts(s);
}
312デフォルトの名無しさん (ワッチョイ 0920-pds3)
2024/11/04(月) 22:17:04.25ID:lap6rdZH0
>>310
完全に臭くなくなる訳ではないのでおk
313デフォルトの名無しさん (ワッチョイ 01c3-bxGr)
2024/11/04(月) 22:57:47.13ID:nqjJRhEX0
ニホンゴ ムズカシイネ
314デフォルトの名無しさん (ワッチョイ 92ad-guIA)
2024/11/05(火) 05:14:52.21ID:srt1vo+S0
逆に考えるんだ。うんこはどうしても出てしまう。だったらそれはそのままにしておけ。
介護する側がそれを気にせず処理出来るのであれば問題は消滅する。だから介護者が
それを気にならなくなるような精神に効く薬を作れば良いんだ。
315デフォルトの名無しさん
2024/11/05(火) 06:59:24.91ID:tCS75Iej0
>>295って実行時エラーの話なのかコンパイル時エラーの話なのかもわからなくない?
316デフォルトの名無しさん (ワッチョイ b5b4-8Jbz)
2024/11/05(火) 15:17:41.47ID:wPeW8RQX0
NASAはネットなんてなかった1970年代にボイジャー1号打ち上げて
240億km離れててもプログラムを送受信してるのに俺らときたら
317デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/05(火) 21:46:02.31ID:JaQWNq5Na
どうみても脳筋エラー
318デフォルトの名無しさん (ワッチョイ 8101-Q1tn)
2024/11/05(火) 21:49:31.93ID:qHb8dozk0
脳筋がCを使いません
319デフォルトの名無しさん (ワッチョイ 5e63-kEEx)
2024/11/05(火) 22:03:42.83ID:MR2KM4Hj0
240億kmの伝書鳩
320デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/06(水) 09:37:06.45ID:csbv8Qbd0
1970年代にもテレビやラヂオはあったわけでね…
321デフォルトの名無しさん (ワッチョイ 5e63-kEEx)
2024/11/07(木) 17:53:15.92ID:RjbHlnZn0
1960年代はラジオ少年が秋葉原詣でしてたな
322デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/07(木) 22:04:17.92ID:E5qLHtEE0
質問失礼

LPTSTR lptStr = TEXT("テスト");
って書くとE0144とC2044ってエラーを吐くんだがプロパティの文字セットって項目を設定なしにすると正常に処理されるのはどういう理屈なの?
const wchar_t[]からLPTSTRに変換できませんってメッセージ出るし型が違うのかなと思うが
だとしたら何故文字設定いじれば解消するのかもよくわからない
323 警備員[Lv.1][新芽] (ワッチョイ e9eb-WgI6)
2024/11/07(木) 22:09:23.47ID:QiubzAbP0
LPCTSTR ではダメですか?
当てずっぽうですが
324 警備員[Lv.1][新芽] (ワッチョイ e9eb-WgI6)
2024/11/07(木) 22:10:11.25ID:QiubzAbP0
>>323
そういうことじゃないのか、ごめんなさい
325デフォルトの名無しさん (ワッチョイ f637-UxC2)
2024/11/08(金) 09:56:22.05ID:tVfxyvn80
>>322
設定変えても依然エラーだが
VS Community 2022
326デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 10:31:35.11ID:+8UCAN2P0
>>324
気持ちだけで十分よ
327デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 10:32:35.47ID:+8UCAN2P0
>>325
2022だと設定項目見つからなかったから2012でやった、そしたら上記の結果になるんすよねえ
328デフォルトの名無しさん (ササクッテロラ Sp79-P7MY)
2024/11/08(金) 10:36:22.46ID:ce4XJJ6Np
最近のVSはCの当たり前な構文が通用しないから困るよな
329デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 10:51:18.29ID:+8UCAN2P0
>>328
Visual Studio側の問題なのこれ?
330デフォルトの名無しさん (ブーイモ MM96-UxC2)
2024/11/08(金) 11:51:09.67ID:y6pbbxPDM
>>327
2022で設定変えたって書いただろ
あほなのか
331デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/08(金) 12:18:22.14ID:F9yTI1pla
LPTSTR lptStr = L"テスト";
332デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/08(金) 12:20:09.93ID:F9yTI1pla
あと
#define UNICODE
#define _UNICODE
だったかな
333デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/08(金) 12:28:34.80ID:F9yTI1pla
それでもだめなら
文字コードが違うんじゃないですかね
334デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 12:59:02.56ID:+8UCAN2P0
>>330
どストレートな罵倒は久しぶりに聞いたよ
高校上がってからは聞かなくなったけどね
335デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 13:00:18.41ID:+8UCAN2P0
>>331
ありがとう、だけどダメそうだ
文字コード関連のエラーなんだろうけどどうしたものか
336はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-Q1tn)
2024/11/08(金) 13:02:23.75ID:Me1tPYCI0
char と wchar_t の不整合じゃなくて const の有無の問題じゃないの?

C++ で文字列リテラルまわりの扱いで仕様変更があったからそれに関係してるのかも?
C++ での文字列リテラルの型は const char[] (ワイド文字リテラルの場合は const wchar_t[]) だが、文字列リテラルから直接変換する場合に限り char* (ワイド文字リテラルの場合は wchar_t*) に暗黙に変換して構わないというルールが C++03 まではあって、このルールは C++11 で削除されたという経緯がある。
つまり C++11 以降は文字列リテラルから暗黙には const を剥がすことが出来ない。 (キャストを書けば出来るけど。)

C では文字列リテラルの型は元から char[] で、 const が付いてない。
だから const まわりの制限とは関係ないんだが、これは C の仕様のほうがおかしいし、 C++ と同様の判定をしたほうが理に適っているとマイクロソフトが考えることはあるかもしれない。
337デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/08(金) 13:18:44.37ID:F9yTI1pla
E0144 エンティティの初期化
型”cont wchar_t *"の値を使用して"wchar_t *"のエンティティを初期化することはできません

C2044は関係無い
338デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 14:51:25.22ID:+8UCAN2P0
>>336
なるほどね、LPTSTRがchar*だから代入できないって話になるのか
それがわかったらエラー文にかいてあることが理解出来るね

昔の仕様だとconst charに見えて実際は違かったってこと?
それなら今回のコードもエラー吐かないし悩まなくてよかったのに
339デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 14:52:37.02ID:+8UCAN2P0
>>337
関係ないの?LPSTRに代入できませんって言ってるように見えるけど
340デフォルトの名無しさん (ササクッテロラ Sp79-P7MY)
2024/11/08(金) 16:25:31.55ID:1lsgaMlnp
signedとunsignedでも怒り狂うからなぁw
いいんだよ、こっちは中身しってんだから余計なエラー吐くなよ
341はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-Q1tn)
2024/11/08(金) 17:24:12.05ID:Me1tPYCI0
>>338
> 昔の仕様だとconst charに見えて実際は違かったってこと?

C の規格としては本来的に文字列リテラルの型には const は付かない。
これは今も昔も同じ。 変更はない。

なので何かが変わったとしたらマイクロソフトの独自仕様。
私はそのへんに詳しいわけじゃないけど C++ の規格改定に引きずられた可能性は想像できるなぁというぼんやりした予想なので経緯はわからぬ。

でもまあ結果的に const の問題ってのは妥当なみたいだね。
342デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/09(土) 14:04:43.61ID:L+GgUCLJ0
LPTSTR lptStr = (LPTSTR)TEXT("テスト"); で警告出たりするのかな?
糞面倒だけどキャストで通るならそれ以上の対応不用
343デフォルトの名無しさん (ワッチョイ f648-UxC2)
2024/11/09(土) 14:22:07.15ID:12zpUv7J0
VS使ってるからたぶんCじゃなくてC++
こういうボンクラの自覚ないボンクラは相手しても疲れるだけ
344デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/09(土) 18:12:46.73ID:IeEwNzSH0
>>341
理解した
constは付かないはずなのにリテラルにVisual Studioが勝手に付いてることにしてくるってことね
わざわざありがとうスッキリしたよ
345デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/09(土) 18:13:16.97ID:IeEwNzSH0
>>342
いけた
たしかに面倒だけど仕方ないね
346デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/09(土) 18:17:26.89ID:IeEwNzSH0
>>343
そんなこと言いながら何回もレスくれるなんて
347デフォルトの名無しさん (ワッチョイ 0920-pds3)
2024/11/09(土) 18:29:31.05ID:mxjkBfxb0
>>315
どっちもいける

実行時エラー
https://wandbox.org/permlink/r9w30EwoyKVxIguC
> Segmentation fault

コンパイル時エラー
https://wandbox.org/permlink/yPJz2UPs8xHYPLAr
> prog.c: In function 'main':
> prog.c:8:17: error: '%d' directive writing 11 bytes into a region of size 1 [-Werror=format-overflow=]
> 8 | sprintf(s, "%d", INT_MIN);
> | ^~
> prog.c:8:5: note: 'sprintf' output 12 bytes into a destination of size 1
> 8 | sprintf(s, "%d", INT_MIN);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
348デフォルトの名無しさん (ワッチョイ cdd5-MfT4)
2024/11/10(日) 00:27:12.07ID:dkv1a77w0
左辺をLPCTSTRにすれば良くない?
リテラルの文字列を可変にすること自体が本来は不要だし、右辺を可変にキャストするよりは左辺を不変として (LPCTSTRとして) 受け取れば良いと思う
349はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-4Bi2)
2024/11/10(日) 09:35:26.26ID:a6nPaG4v0
>>344
オンラインコンパイラで VS17.10 を確かめてみたが文字列リテラルには const は付かないぞ。
お前が間違って C++ を使ってるという >>343 の意見に一票。
350デフォルトの名無しさん (ワッチョイ e520-2uFP)
2024/11/10(日) 15:28:44.44ID:E/UouhcZ0
>>322
・Microsoft Visual Studio Community 2022 (64 ビット) を使用し「C++コンソールアプリ」で新規プロジェクト作成
・ソリューションエクスプローラーでソースファイルにあるファイル名を*.cppから*.cへ変更
・ファイル名を変更したファイルに下記をコピペ
#include <windows.h>

int main(void)
{
LPTSTR lptStr = TEXT("テスト");
}
・ビルド(B)→ソリューションのビルド(R) でフツーにビルド通ったわ。
351デフォルトの名無しさん (アウアウエー Sa13-vkNS)
2024/11/11(月) 11:10:09.47ID:RXw/cl7Za
つまりスレタイ嫁ということか
352デフォルトの名無しさん (ワッチョイ b507-4Bi2)
2024/11/11(月) 11:32:56.82ID:CKwZRMfb0
>>343 は速攻ぶったたいてるが、学生か初学者はこういう経験しとくもんだ
Cは汗に似て泥臭いんだよ

俺もあとで追試しよっと テキトーでやってて知識整理できてないわ
353デフォルトの名無しさん (ワッチョイ 23ab-v1sd)
2024/11/12(火) 18:11:56.60ID:bmRwPCyO0
>>322
コンパイラオプションを見れば明らかになるじゃろう。
354デフォルトの名無しさん (JP 0H93-qgn8)
2024/11/13(水) 18:56:16.48ID:5p447UHqH?2BP(1000)

EchoAPIがVS Codeのワークフローにピッタリで、APIテストの能力がグッとアップしったって聞いて
355デフォルトの名無しさん (アウアウエー Sa13-vkNS)
2024/11/15(金) 18:07:01.60ID:yZ5Bkpe2a
まるちんこしね
356デフォルトの名無しさん (ワッチョイ 3b2d-hB9O)
2024/11/22(金) 19:50:13.47ID:KyG89VCU0
Q.
doubleをprintfで表示するには%lfでいいの?

A.
double 型を printf で表示する場合、%lf ではなく %f を使用するのが一般的です。

理由:
printf の可変長引数において、float 型は double 型に自動的に昇格されます。
そのため、%f は double 型の値も受け取ることができます。

%lf は scanf で double 型の値を読み込む際に使用されますが、
printf では %f と同じ意味として扱われます (C99規格以降)。
357デフォルトの名無しさん (ワッチョイ bf5f-FO3g)
2024/11/24(日) 19:40:17.88ID:g9nxxeRj0
これが同じ値書いてくれないのは普通だったんだっけ.

#include <stdio.h>

int main() {
int s=31;
unsigned long i = 1 << 31;
unsigned long j = 1 << 31;
unsigned long k;

while(i) {
k = 1 << s;
printf("%lu,%lu,%lu¥n",i,j,k);
i = (unsigned)i>>1;
j >>= 1;
s--;
}

return 0;
}
358デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/24(日) 19:55:59.76ID:VUrUqN1f0
手元にあるGCCとMS-C(32bit)は
同じ値が出てました
359デフォルトの名無しさん (ワッチョイ d7d8-7ouQ)
2024/11/24(日) 20:09:10.15ID:KIy2cazo0
質問失礼します
ダイアログボックスについて学習しようとしているのですが、サンプルのリソースをコピペしたところ、ダイアログボックスのIDが認識されなく手詰まりになってしまっています。
どなたかご助力ください。

TEST DIALOG (座標を書くと書き込みできない)
C2059
C2061

以上のソースでエラーを吐いてしまいます。リソースをベタ打ちで記述する参考サイトが少ないので判断がつきません。
360デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/24(日) 20:28:06.09ID:VUrUqN1f0
記述に文法上の誤りがあるって事です。
コピペで失敗しているのか、
元々のサンプルに誤りがあるかは
これだけでは分かりません
文法の基本から学び直して
自分で見つけるしかないかもしれません
361デフォルトの名無しさん (ワッチョイ bf5f-FO3g)
2024/11/24(日) 20:47:32.93ID:Hl1pEu0p0
>> 358
試していただきありがとうございます.
FreeBSD clang version 18.1.6 (https://github.com/llvm/llvm-project.git llvmorg-18.1.6-0-g1118c2e05e67)
Target: x86_64-unknown-freebsd14.1
と,gccは共に jの値がおかしいのです.
試しに,
unsigned long j = 1 << 31;

unsigned int j = 1 << 31;
にすると同じ値になる.

これはコンパイラのBUGかなぁ.
362 警備員[Lv.1][新芽] (ワッチョイ 9fe5-fjqo)
2024/11/24(日) 22:17:04.46ID:/KMFo2rr0
よく分からないけど
unsigned long i = 1 << 31;
unsigned long j = 1 << 31;

unsigned long i = 1L << 31;
unsigned long j = 1L << 31;
とするとうまくいく? clang

どちらでも同じ結果になりそうだけど
見当違いだったらごめんなさい
363 警備員[Lv.1][新芽] (ワッチョイ 9fe5-fjqo)
2024/11/24(日) 22:25:28.27ID:/KMFo2rr0
gcc -S
でアセンブラ出してみてみたけど、
いや、アセンブラよくわからないんだけど、
修正前の iと jは初期化時にいずれも符号拡張されて大きな値になっていて
その後なぜか iの方は下32ビットで、jの方は64ビットで計算されているようで、正しいのはむしろ jのように見えたがごめんなさい
本当にアセンブラ分からないので多分間違ってます…
364デフォルトの名無しさん (ワッチョイ 9f61-vAaR)
2024/11/24(日) 22:26:25.59ID:zY64cYUd0
gcc, clang
sizeof(int) == 32
sizeof(unsigned long) == 64
での出力

18446744071562067968,18446744071562067968,18446744071562067968
1073741824,9223372035781033984,1073741824
536870912,4611686017890516992,536870912

省略

8,68719476728,8
4,34359738364,4
2,17179869182,2
1,8589934591,1

これはこれで正しいと思うが
365 警備員[Lv.2][新芽] (ワッチョイ 9fe5-fjqo)
2024/11/24(日) 22:45:06.29ID:/KMFo2rr0
あ、iは unsigned (int)でキャストしてるのか
366デフォルトの名無しさん (ワッチョイ bf5f-FO3g)
2024/11/24(日) 23:09:31.94ID:Hl1pEu0p0
わかりやすく,intのものとcastかけたのにしてみました.
これだとやはり,pの値だけ変でした.

元々は,binaryで数を8bit 16bit 32bitで表示する関数が,8,16が普通で32だけ変なので気がついたのでした.なんでintだと符合拡張されなくてlongだとされるかが謎.

#include <stdio.h>

int main() {
int s=31;
unsigned long i = 1 << 31;
unsigned int j = 1 << 31;
unsigned long p = 1 << 31;
unsigned long k;

while(i) {
k = 1 << s;
printf("%lu,%u,%lu,%lu¥n",i,j,k,p);
i = (unsigned)i>>1;
j >>= 1;
p >>= 1;
s--;
}

return 0;
}
367デフォルトの名無しさん (ワッチョイ bf5f-FO3g)
2024/11/24(日) 23:16:12.94ID:Hl1pEu0p0
unsigned long p = 1 << 31;

unsigned long p = 1L << 31;
にしたら同じ値になりました.

ううむ,なぜ
unsigned int j = 1 << 31;
だとうまくいって,longだと1Lにしないとうまくいかんのだ.
368 警備員[Lv.4][新芽] (ワッチョイ b72e-fjqo)
2024/11/24(日) 23:36:41.28ID:BVpPJ8iH0
右辺が 1<<31だと
左辺が intだと0x80000000がそのまま、
longだと 0xffffffff80000000に拡張されて転記されるからでは
369 警備員[Lv.4][新芽] (ワッチョイ b72e-fjqo)
2024/11/24(日) 23:49:31.80ID:BVpPJ8iH0
unsigned long i = (unsigned long) 1 << 31;
とすれば iは 0x80000000になるかと
370 警備員[Lv.4][新芽] (ワッチョイ b72e-fjqo)
2024/11/24(日) 23:50:27.79ID:BVpPJ8iH0
1lとするのと同じだけど
371はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-hCSs)
2024/11/25(月) 02:42:55.67ID:EAdMpn4b0
>>367
言語仕様的に解釈すると……

シフト演算子の結果の型は左オペランドを整数拡張した後の型と同じになる。
整数リテラルは int の範囲で表せる限り int なので 1 は int 。
int は整数拡張の必要がないので 1<<31 の結果の型も int 。

そして結果の型が signed かつ結果の値が結果の型で表現可能な範囲にないときの動作は未定義なので
2147483648 が int (おそらく質問者の環境では 32 ビット) の最大値である 2147483647 を越えていて未定義の挙動となる。

不定とか処理系定義ではなく未定義と明記されてる。
つまり言語仕様上は何が起きても良いということ。
372デフォルトの名無しさん (ワッチョイ ffd6-G09H)
2024/11/25(月) 07:22:58.48ID:NtppUMW10
6.3.1.3のこれじゃないの
Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or
subtracting one more than the maximum value that can be represented in the new type
until the value is in the range of the new type.
373デフォルトの名無しさん (ワッチョイ bf5f-FO3g)
2024/11/25(月) 08:27:04.40ID:qsrJNZhH0
6.3.1.3

符号付き整数型及び符号無し整数型 整数型の値を̲Bool型以外の他の整数型に変換する場合,

その値が新しい型で表現可能なとき,値は変化しない。

新しい型で表現できない場合,新しい型が符号無し整数型であれば,新しい型で表現しうる最大の数に

1加えた数を加えること又は減じることを,新しい型の範囲に入るまで繰り返すことによって得られる値

に変換する(49)。

なるほど,1がintで<<31すると負の最大値となって,unsignedとして表せないからか.

皆様,ありがとうございました.
374はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-hCSs)
2024/11/25(月) 09:22:18.85ID:EAdMpn4b0
>>372-373
いいえ。
シフト演算の段階で既に未定義を踏んでいるので型変換は関係ないです。
6.5.7 をご覧ください。
375デフォルトの名無しさん (ワッチョイ 9fc2-ZGYG)
2024/11/25(月) 09:32:20.82ID:SsaYg1Am0
科学 + ンニュース 5ch

保守派もリベラル派も「自分の政治的信念に合致したニュース」を信じやすいという研究結果 [すらいむ★]
http://2chb.net/r/scienceplus/1732447647

コメントも含めて読むと
陰謀論が収まら無い理由が判明する
376デフォルトの名無しさん (ワッチョイ ffd6-G09H)
2024/11/25(月) 09:46:02.42ID:NtppUMW10
なるほど、32bitのみでやるときも1u<<31にしないといけないのか
377デフォルトの名無しさん (ササクッテロ Spcb-8bf6)
2024/11/25(月) 10:29:04.22ID:G+C3M6QHp
なぜ浮動小数型をシフトしようとした?
378デフォルトの名無しさん (ワッチョイ bfdf-FO3g)
2024/11/25(月) 13:39:22.46ID:YjGMGS1I0
>> 374 なるほど,そっちで既に未定義だったか.

6.5.7
ビット単位のシフト演算子
構文規則
シフト式:
加減式
シフト式 << 加減式
シフト式 >> 加減式
制約 各オペランドは,整数型をもたなければならない。
意味規則 整数拡張を各オペランドに適用する。結果の型は,左オペランドを拡張した後の型とする。右オペランドの値が負であるか,又は拡張した左オペランドの幅以上の場合,その動作は,未定義とする。
E1<<E2の結果は,E1をE2ビット分左にシフトした値とする。空いたビットには0を詰める。E1が符号無し整数型をもつ場合,結果の値は,E1×2E2の,結果の型で表現可能な最大値より1大きい値を法と
する剰余とする。E1が符号付き整数型と非負の値をもち,E1×2E2が結果の型で表現可能である場合,それが結果の値となる。それ以外の場合,その動作は未定義とする。

E1>>E2の結果は,E1をE2ビット分右にシフトした値とする。E1が符号無し整数型をもつ場合,又はE1が符号付き整数型と非負の値をもつ場合,結果の値は,E1/2E2の商の整数部分とする。E1が符号付き整数型と負の値をもつ場合,結果の値は処理系定義とする。
379デフォルトの名無しさん (JP 0Hdf-6m00)
2024/11/26(火) 22:12:07.51ID:JxXv+doZH
VS CodeでEchoAPIを使うと、ツールを切り替えずにAPIテストをシームレスに管理できるようになったよ!
380デフォルトの名無しさん (ワッチョイ d761-7ouQ)
2024/11/29(金) 15:48:48.81ID:QX01Nly20
以下のサンプルプログラムが理解できず困っています。
該当プログラムは、コマンドラインから読み込んだBMPの色データを矩形として並べていくというものの一部を抜粋しています。

以下のfor文は
カラーテーブルの数を取得する→
ブラシを設定する→
先頭の構造体メンバからiCount先の構造体メンバを指定→
iCountにインクリメント

という流れだと考えられると思うのですが、1に対し1カラービット分左シフトとなっている部分がどういったロジックによって数の取得が実現されているのかわかりません。
質問は2点あり、どのようにしてテーブル数を取得しているのか、コードの理解は正しいのかについてお答えしていただければと思います。


サンプルコード

#include <windows.h>

BITMAPFILEHEADER bmpFileHeader;
BITMAPCOREHEADER bmpCoreHeader;
RGBTRIPLE *prtColor;

for ( ; iCount < (1 << bmpCoreHeader.bcBitCount) ; iCount++) {
SelectObject(hdc , CreateSolidBrush(
RGB( (prtColor + iCount)->rgbtRed ,
(prtColor + iCount)->rgbtGreen ,
(prtColor + iCount)->rgbtBlue
))
381デフォルトの名無しさん (スプッッ Sd3f-G09H)
2024/11/29(金) 16:12:14.82ID:YWo8X0edd
bcBitCountはピクセルあたりビット数で1,4,8,24だそう
nビットで表せる値は2^n通りで、これは左シフト1<<nで計算できる
382デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/29(金) 23:08:43.43ID:5pZynS2U0
# 質問されていない部分だけど…
iCountと比較する値はループ内で変動しないよね?
だったら毎回計算せずにループ前で計算して別変数に記憶しておくほうがよくないかい?
383デフォルトの名無しさん (ワッチョイ ffd6-G09H)
2024/11/30(土) 00:28:19.69ID:b6kb1MmL0
今時のコンパイラは十分賢いので気にすることない
384デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/30(土) 00:37:35.21ID:VtvuoLT+0
ユーザーの犯したバグも直してくれるとありがたいなあ
385デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/30(土) 00:47:56.34ID:k7UOR52k0
シフトでも掛算でもどっちでもいいけど
質問者のように読んで悩むのは問題
コメント書いておけ

ループ内毎回計算か最適化でループ外に出したかは
コンパイル後の逆アセンブルとかで確認するの?
だったら間違いないようにループ外に出す方が良い癖にもなると思うのだが
386デフォルトの名無しさん (ワッチョイ bf79-q0Tp)
2024/11/30(土) 09:43:24.89ID:54hbVEvk0
380の知能では最適化したつもりが新たなバグを埋め込む事になるかもしれん
自身の身の丈に合ったコードにしとけ
未来の自分が賢くなってる事を信じて
387デフォルトの名無しさん (アウアウエー Sadf-wjfe)
2024/11/30(土) 09:49:47.60ID:l0dFcapba
#include <windows.h>

BITMAPFILEHEADER bmpFileHeader;
BITMAPCOREHEADER bmpCoreHeader;
RGBTRIPLE *prtColor;

この間に何も描かれてないのは投稿者が勝手に削除したの?元から無いの?

for ( ; iCount < (1 << bmpCoreHeader.bcBitCount) ; iCount++) {
SelectObject(hdc , CreateSolidBrush(
RGB( (prtColor + iCount)->rgbtRed ,
(prtColor + iCount)->rgbtGreen ,
(prtColor + iCount)->rgbtBlue
))
388デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/30(土) 11:23:36.84ID:k7UOR52k0
なんでこんなに読めないのか理由がわかった
変数名や字下げや「,」前のブランクなど
論理そのもの以前にコーディングの美しさが全然無い
389デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/30(土) 11:53:49.47ID:VtvuoLT+0
この掲示板書き込むと、スペースやタブは消されちゃうんだよな。
だから綺麗に整形した状態でソース載せたいなら、
全角スペース使うしかない。
あるいはソース公開出来るサイトにアップロードして、
そのリンクを張るなりする。
そういうサイトは、>>1 に書いてある。
390デフォルトの名無しさん (ワッチョイ bfd9-6oxW)
2024/11/30(土) 12:18:13.55ID:tlb45efI0
美しさとか言い出したら自転車置き場の議論なるからやめとけ
391デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/30(土) 12:21:38.32ID:VtvuoLT+0
http://2chb.net/r/tech/1402617355/

色々試し書きしたいなら、テストスレがあるから、そこでやって
392デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/30(土) 15:56:34.50ID:k7UOR52k0
python自体のスタイルPEP8に加えてCについてのPEP7も整備されているのに
https://peps.python.org/pep-0007/
あえてそれに背くコーディングをする理由が見つからない
GNUのへんてこコーディングも規約文章は整備されている
393デフォルトの名無しさん (ワッチョイ bf79-q0Tp)
2024/11/30(土) 16:28:54.09ID:54hbVEvk0
他人のふんどしででかい顔のpythonは存在自体がきしょくってぇ
そんなもん使ってる奴の押し付けに従う気にはとてもなれないって感じぃ
394はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-hCSs)
2024/11/30(土) 16:41:54.15ID:VBYh6hCP0
自分の使ってるテキストエディタにコピペして整形を実行したら一瞬でどうとでもなるんだからどうでもいいだろ。
395デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/30(土) 17:05:29.66ID:k7UOR52k0
func(a , b , c );
func(a, b, c);
上から下への変換はインデントとは異なりやっかい
396はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-hCSs)
2024/11/30(土) 17:22:56.29ID:VBYh6hCP0
>>395
どんな古臭いフォーマッタを使ってるんだ?
397デフォルトの名無しさん (ワッチョイ d761-7ouQ)
2024/11/30(土) 17:25:06.78ID:9y3I76FS0
>>381
シフト演算を行った場合、10進数の1に対して乗算を行うわけではなく、2進数に対して行うという認識で良いでしょうか?
すなわち、この場合を10進数で表すと、1ではなくて2に対して、1,4,8,24、のいずれかを冪乗し、何通りの色の組み合わせがあるのかを確かめることができるというわけですね。

>>382
コピペしただけなのでとりあえず理解をと思い書き込みました。自身で書くときはそうしたほうがわかりやすいかもしれませんね。
398デフォルトの名無しさん (ワッチョイ d761-7ouQ)
2024/11/30(土) 17:25:18.86ID:9y3I76FS0
>>385
少し別添えで記述されてはいたのですが、それだけでは理解に至らなく書き込みした次第です。


>>386
そうなんです、私も身の丈に合うコードにしたいのは山々なのです。
ところで、初級者向けのGUI作成の手引書を教えていだだけませんか?もちろん、ここ5年以内の環境で

>>387
勝手ながら削除しています。素人考えなのは承知です。
仕事柄、利権や法にはうるさくあらねばなりませんので、リスク回避です。
399デフォルトの名無しさん (ワッチョイ bf79-q0Tp)
2024/11/30(土) 18:05:05.65ID:54hbVEvk0
Cは知っといた方がいいけど
GUIをやりたいならこのスレに居るのは時間の無駄なんだが
そのBITMAPなんちゃらも以下の環境では気にしなくていい

GUI開発おすすめ言語
iOS macOSアプリ Swift、Objective-C
Androidアプリ Kotlin、Java
Webアプリ Kotlin、Java
Windows C#
なおWeb系はHTML/CSS、JavaScript/TypeScriptは必須と思って頂きたい
400デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/30(土) 18:12:39.34ID:VtvuoLT+0
Windowsの内部構造を知るのは時間の無駄なのか
401デフォルトの名無しさん (ワッチョイ bf79-q0Tp)
2024/11/30(土) 18:17:30.16ID:54hbVEvk0
BITMAPなんちゃらに詳しくなった所でWindowsの内部構造を知ったことにはならないんだがぁ?
現行Windows11の内部構造なんてきしょすぎてそもそも知りたくもないわ
402デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/30(土) 18:33:02.64ID:VtvuoLT+0
そういう人はソフト開発に向いてないよ
403デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/30(土) 18:37:21.74ID:k7UOR52k0
これだけ見て分かるわけ無いよ
max = 1 << bmpCoreHeader.bcBitCount;
for (iCountの初期値が無いよ、普通0からだよね; iCount < max; iCount++) {
  // テーブルRGB値をブラシの色に設定?
  brush = CreateSolidBrush(...);
  // RGBで色指定したブラシで塗る?hdcが変わらんようだが何回も呼ぶ意味があるの?
  SelectObject(hdc, brush);
  // これ以降があるのか…
}
404デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/30(土) 18:53:59.75ID:k7UOR52k0
bmpCoreHeader.bcBitCount の範囲チェックが必要そう
uint64_t max;
max = 1 << 64; // max == 0x8000000000000000 で意味がありそう
max = 1 << 65; // これ64bit整数の範囲超えているよね、プロセッサ依存の値になる予感
405デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/30(土) 19:19:34.08ID:k7UOR52k0
64bitシフトでも溢れた
これ難しいね
uint64_t seed, max
seed = 1;
max = seed << 63; // 0x80000000 で期待どおり
max = 1ull << 63; // 0x80000000 これも期待どおり
max = 1 << 63; // 即値1のレジスタ範囲が足りない?
max = 1 << 63; // 即値1だと32bitなのか
406デフォルトの名無しさん (スプッッ Sd8b-G09H)
2024/11/30(土) 19:23:29.64ID:ePDG6JlId
カラーパレットを使うのは1,4,8って決まってるんだが
407青木康善 (アウアウウー Sa5b-8bf6)
2024/11/30(土) 19:52:07.91ID:exhSsXMya
トリプルポインタが理解不能です。
408デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/30(土) 20:06:07.06ID:k7UOR52k0
1, 4, 8以外のエラー処理が無ければ手抜きプログラムだよ
409デフォルトの名無しさん (ワッチョイ bf79-q0Tp)
2024/11/30(土) 21:42:40.50ID:54hbVEvk0
これが俗に言う無能な働き者かぁ…
410デフォルトの名無しさん (ワッチョイ 57c3-EYTo)
2024/11/30(土) 22:31:58.70ID:cI+uLRSv0
粘着キショい
411デフォルトの名無しさん (ササクッテロロ Sp10-8wrk)
2024/12/01(日) 11:20:07.96ID:HNZEO20Lp
>>407
理解してる俺でもデバッグん時に面倒だから使わない
412デフォルトの名無しさん (ワッチョイ 9663-WFUB)
2024/12/01(日) 11:21:42.42ID:+XByeWPN0
理解するな、感じるんだ!
413デフォルトの名無しさん (ワッチョイ fb6e-Qs+Z)
2024/12/02(月) 07:39:26.68ID:UIzNnBqa0
スマホ世代もCってるなんて頼もしい限りだな
C言語なら俺に聞け 163 YouTube動画>1本 ->画像>2枚
414デフォルトの名無しさん (ササクッテロロ Sp10-8wrk)
2024/12/02(月) 10:00:18.95ID:cKcAe5N2p
なんだその数字w
415はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bd32-LsAq)
2024/12/02(月) 12:52:17.82ID:5A4jg9rQ0
>>413
なんていうアプリで書いてるんだろ?
416デフォルトの名無しさん
2024/12/02(月) 16:27:58.74ID:sZTu4RGZ0
>>415
アマゾンにあった
「 モバイル C { C/C++ コンパイラ } 」だって
¥1,546
/dp/B00MFXHPBW
417デフォルトの名無しさん (ワッチョイ 9663-WFUB)
2024/12/02(月) 16:44:39.99ID:mvW+hvRB0
無料版もあるみたいだ。違いは分からなかった。

/dp/B01CEZQGX8
418デフォルトの名無しさん (JP 0Haa-DO+T)
2024/12/04(水) 22:39:06.18ID:QlqtMMMjH?2BP(1000)

なんかEchoAPI、さまざまなAPIシナリオをモックするのに役立って、フロントエンドの作業を独立して行えるようになるよ
419デフォルトの名無しさん (ワッチョイ 62ad-sHi4)
2024/12/05(木) 08:13:19.15ID:XxVPE2wx0
前はAIDEってのもあったような
自分も購入済みだったけどストアから消えた
420デフォルトの名無しさん (ワッチョイ ca48-Q86W)
2024/12/05(木) 08:18:47.93ID:GShkk8fF0
>>418ならただの宣伝マルチポストなのでさっさとNGしておくように
421デフォルトの名無しさん (アウアウ Sa4f-f5HH)
2024/12/08(日) 09:05:36.00ID:NBQmwlWPa
char text[32] = "count="
sptintf(text, "%s%d", text, 100);


↑これって問題ない? 
422デフォルトの名無しさん (ワッチョイ a794-InQL)
2024/12/08(日) 09:31:43.48ID:ukMyBbJC0
オーバーフローを懸念。
423デフォルトの名無しさん (ワッチョイ bf5e-dt5O)
2024/12/08(日) 12:39:42.22ID:xllqP0wk0
snprintf
424はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4732-B9Rp)
2024/12/08(日) 13:05:39.35ID:6js3fqHP0
>>421
sprintf のことだよね?
問題はある。
領域が重なるオブジェクト間でコピーが行われるときの動作は未定義とするという仕様になってる。

それと関数シグネチャを見ればわかるが引数のところに restrict ってついてるでしょ。
その性質上、他の引数がこれと領域が被ってはいけないというサインだ。
まあ引数を使わない関数であれば restrict 修飾されたポインタが指す領域がかぶってもただちに違反ではないが、常識的には渡す以上は使われるものと想定すべきだよね。
425デフォルトの名無しさん (ワッチョイ e7fa-jsat)
2024/12/08(日) 16:35:15.95ID:iOnFgjmu0
>>421
問題ありだ。1行目末尾にセミコロンがないじゃないか
あと、学校の宿題の答えをこんなところで聞いちゃいかんぞ
426デフォルトの名無しさん (ワッチョイ 7f63-xJXv)
2024/12/08(日) 20:16:31.35ID:rVbvHhAN0
最近の小学校ではこんな宿題出るのか
末恐ろしいと言うか、頼もしいというか
427デフォルトの名無しさん
2024/12/09(月) 01:07:25.53ID:ToKnc/9y0
コンピュータの授業とか普通にあるんだろ?今って
俺からすると羨ましい限りだわ
でもダンスの授業はいらん
428デフォルトの名無しさん (ワッチョイ bf79-/9Tr)
2024/12/09(月) 01:41:05.76ID:izrgU9L90
元々芸術科目や体育は面倒な存在だし
ダンスはそれらが合わさって一見最強に見えるだけで専門科目に比べれば実は大した内容じゃない
子供は加減の付け方を知らないから物凄い壁に見えるんだろう
429はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 67c7-B9Rp)
2024/12/09(月) 01:48:04.91ID:hHB0rnnr0
1990 年代頃なら中学校でコンピュータの授業はあったがプログラミングがちょっとでも出来るようになるほどではなく使い方に慣れるという程度だったと思う。
ただ、学校に設備や資料はあったから興味があれは詳しくなれるチャンスはあった。
設備をどのくらい解放するかは学校の体制によるだろうけど。
430デフォルトの名無しさん (ワッチョイ dfad-pQ4B)
2024/12/09(月) 10:00:06.94ID:hbK9EAUD0
>>427
踊りながら英語でコンピュータを使え
431デフォルトの名無しさん (ワッチョイ dff4-tB0+)
2024/12/09(月) 13:23:27.80ID:wWCmXoxS0
科学 + 5ch

【AI】AIはわずか2時間の対話で人間の性格をコピーできる [すらいむ★]
http://2chb.net/r/scienceplus/1733576027/

コメントに面白いことが書かれている
432デフォルトの名無しさん (ワッチョイ 7f63-xJXv)
2024/12/09(月) 13:52:01.90ID:IOR7vjsa0
2時間で初等教育から大学院レベルまで学習完了したら
人間要らなくなりそうだな
433デフォルトの名無しさん (ワッチョイ e701-f5HH)
2024/12/09(月) 18:02:12.33ID:rC3URswf0
>>429
たしか教師がクソすぎて失敗したんだよなw
434デフォルトの名無しさん (ワッチョイ dfad-pQ4B)
2024/12/09(月) 19:36:33.91ID:hbK9EAUD0
やがて全ての仕事がAIに直結されたロボットによって置き換えられ、人類絶滅。
地球はAIのみが存在する世界になり、真空でもそのまま動くロボットが宇宙征服。
435デフォルトの名無しさん (ワッチョイ 6761-/Pym)
2024/12/09(月) 21:34:01.67ID:OpvCpgOo0
チェックボックスとかラジオボタンの状態を保存したいんだけどなんて調べればええんすの?
現状ウィンドウを破棄する前にコントロールの内容を取得して状態に合わせた変数を初期化ファイルに保存、再起動時に変数に対応した状態に再設定するみたいなのしか思いつかん
冗長になって見づらいだろうし代替案を知りたい
436デフォルトの名無しさん (ワッチョイ 7f63-xJXv)
2024/12/09(月) 21:38:21.41ID:IOR7vjsa0
その通りで良いと思います
437デフォルトの名無しさん (JP 0H9f-uiwC)
2024/12/09(月) 21:39:24.19ID:XfZ/p96kH?2BP(1000)

www最近、EchoAPIを使い始めたところ、効率的なAPIテストツールを提供してくれるおかげで、開発プロセスが向上した!
438デフォルトの名無しさん (ワッチョイ 6761-/Pym)
2024/12/10(火) 09:40:44.51ID:9vz9QL6n0
>>436
これで行くしかないのか
439デフォルトの名無しさん (ワッチョイ e707-f5HH)
2024/12/10(火) 10:01:08.05ID:gzrtf0Gl0
対応表をだーっと並べる、control_state_read_and_write(bool is_write, ...) みたいな関数を置く、など
割り切ってしまえば工夫のしがいはある

ただ、そのときはよくても、あとになってみたら黒魔術でしかなかったりする
愚直なのもいいぞ
440デフォルトの名無しさん (ワッチョイ ff5a-gNLw)
2024/12/10(火) 17:10:24.87ID:TsXGEoU20
>>435
何がどう"冗長になって見づらい"のか?
441デフォルトの名無しさん (ワッチョイ bf79-/9Tr)
2024/12/10(火) 19:03:49.02ID:ruXLR+AW0
属人化だとか 尻アナルライブだとかあったような
442デフォルトの名無しさん (ワッチョイ 7f63-xJXv)
2024/12/10(火) 19:06:39.85ID:RLBTgK1d0
身体に刻む学習方法
443デフォルトの名無しさん (アウアウ Sa4f-f5HH)
2024/12/10(火) 21:11:22.07ID:RajTC0DHa
>>422-424
ありがとん
444デフォルトの名無しさん (アウアウ Sa4f-f5HH)
2024/12/10(火) 21:43:52.59ID:RajTC0DHa
これでなんか機能した

TCHAR buf[255];
this->GetWindowText(title, 255);

int len = _tcsclen(buf);
_sntprintf(buf + len, 255, " %d", uiWindowCount);

this->SetWindowText(buf);
445デフォルトの名無しさん (ワッチョイ bf79-/9Tr)
2024/12/10(火) 21:51:03.48ID:ruXLR+AW0
this->
ナニコレ
もしかしてC言語スレでC++使えるぞあぴーるですか!
すげー
446はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4732-f5HH)
2024/12/10(火) 22:13:12.06ID:ujXLUuNp0
>>443-444
もし C++ の話なら上述 (>>424) の restrict の説明が役に立たない。
C++ に restrict は無いから。
447デフォルトの名無しさん (アウアウ Sa4f-f5HH)
2024/12/11(水) 07:46:28.90ID:P/b6xwK7a
API自体はC言語なんでそこらへんはスルーでお願い
448はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4732-B9Rp)
2024/12/11(水) 14:36:37.44ID:fIut9/tx0
>>447
C の snprintf と C++ の snprintf は違うという話をしてるんやが
(最終的に同じものが呼び出される実装の場合はあるにしても。)
449デフォルトの名無しさん (JP 0H9f-uiwC)
2024/12/11(水) 20:35:15.94ID:GrIf7glWH?2BP(1000)

最近のRESTful APIについての議論に触発されてEchoAPIを試してみたところ、エンドポイントのシミュレーションツールがテストプロセスを非常に効率化してくれました。
450デフォルトの名無しさん (ワッチョイ 7f63-xJXv)
2024/12/11(水) 23:04:37.50ID:xKzgcnaC0
MSは採用していないのかな?
なんでこんなにバグが多いんだろう
451デフォルトの名無しさん (ワッチョイ 33b8-iztn)
2024/12/15(日) 15:13:40.89ID:jrfqO5QN0
1つめのプロシージャで宣言した変数を2つ目のプロシージャで使うって頑張れば可能?
それともグローバル変数宣言したほうがいい?
452デフォルトの名無しさん (ワッチョイ a301-aNNs)
2024/12/15(日) 15:17:17.63ID:Vq+PRAKz0
引数で渡せばいいんじゃね
453デフォルトの名無しさん (ワッチョイ 33b8-iztn)
2024/12/15(日) 15:23:28.37ID:jrfqO5QN0
>>452
それも考えたんだけど、プロシージャ作るときライブラリ側が指定した引数以外渡せないんじゃない?
454デフォルトの名無しさん (ワッチョイ be63-Vy5I)
2024/12/15(日) 15:31:40.27ID:wmU+aa0b0
そのプロシージャーを同一モジュール内lに記述して、
変数をスタティック宣言する、とか
455デフォルトの名無しさん (ワッチョイ 33b8-iztn)
2024/12/15(日) 15:38:22.49ID:jrfqO5QN0
>>454
そんなことできるんかよ知らなかった
{}内かつ、他のswitchと干渉しないところにベタ書きすればいいってことよね?
456デフォルトの名無しさん (ワッチョイ be63-Vy5I)
2024/12/15(日) 15:45:22.53ID:wmU+aa0b0
ちょっと違う様な気がする
そのファイル内にある全ての関数から参照出来る宣言です
スタティック宣言を調べて見て
457デフォルトの名無しさん (ワッチョイ 33b8-iztn)
2024/12/15(日) 15:46:49.05ID:jrfqO5QN0
>>456
ごめん、スタティックはわかってる
モジュール内への記述の方
言葉足らずですまん
458デフォルトの名無しさん (ワッチョイ 33b8-iztn)
2024/12/15(日) 16:32:34.62ID:jrfqO5QN0
調べてみたけど関数内に別の関数の処理はかけないっぽい?
とりあえず自前のソース書き換えてみたけどC2275が出てしまう
459デフォルトの名無しさん (ブーイモ MM8a-1w4P)
2024/12/15(日) 16:54:06.72ID:Wjdp3H7kM
モジュールとかプロシージャはc言語の用語ではないよ
誤解を生むからなるべく正しい用語で
あるいはソース書け
460デフォルトの名無しさん (ワッチョイ a301-2Zui)
2024/12/15(日) 17:04:08.92ID:5Q71kCB70
Cで作ったソフトにアイコンをつける方法ありますか?
コンパイラはmingw
461はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0f32-782k)
2024/12/15(日) 17:07:42.25ID:SAQ/jMe00
>>460
リソーススクリプトを書いて windres コマンドでコンパイルしてリンク。
462デフォルトの名無しさん (ワッチョイ 3338-UX28)
2024/12/15(日) 17:11:49.15ID:jrfqO5QN0
>>459
ウィンドウプロシージャでおk?
463はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0f32-782k)
2024/12/15(日) 17:25:02.46ID:SAQ/jMe00
>>462
windows の話?
ウィンドウプロシージャにデータを結びつけたいのなら必要なのは SetProp じゃないかな。
464デフォルトの名無しさん (ワッチョイ 4a12-O1Z7)
2024/12/15(日) 20:08:51.95ID:7bvd8wX+0
>>458
よくある質問に書いてあんだからそれを読めよ
465デフォルトの名無しさん (ワッチョイ 4aa2-SaU4)
2024/12/15(日) 21:32:26.28ID:8K4C8OcF0
2つ目のプロシージャってなんやねん
466デフォルトの名無しさん (オッペケ Srb3-aNNs)
2024/12/16(月) 07:18:55.27ID:Y4GCxOlhr
今北
何のデータかわからんが、だれに属しているデータなのやら

「全然関係ないところ」には、置かないほうがいいぞ少なくとも
467デフォルトの名無しさん (ワッチョイ 3369-iztn)
2024/12/16(月) 18:03:11.25ID:o/MtQx1A0
下記のコードのsizeof(buf)/sizeof(TCHAR)ってなんの意味があるの?
ただのsizeof(buf)じゃだめ?

static int num;
TCHAR buf[8];
stprintf_s(buf,sizeof(buf)/sizeof(TCHAR), TEXT("%d"), num);
468デフォルトの名無しさん (ワッチョイ 3369-iztn)
2024/12/16(月) 18:17:40.10ID:o/MtQx1A0
>>463
なるほどね、それで行けるかありがとう
469デフォルトの名無しさん (ワッチョイ 3369-iztn)
2024/12/16(月) 18:18:31.53ID:o/MtQx1A0
>>466
自分の知識だと外に置くくらいしか思いつかんかった
470デフォルトの名無しさん (ワッチョイ 666d-1w4P)
2024/12/16(月) 18:20:09.41ID:/03Ox5VG0
TCHARは_UNICODEのマクロの定義の有無によって16bitまたは8bitになる
471はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0f32-aNNs)
2024/12/16(月) 18:26:34.86ID:26oXJeTE0
>>467
> ただのsizeof(buf)じゃだめ?

だめ。

TCHAR はコンパイル時に ANSI モードか Unicode モードかで定義が切り替わる。
ANSI モードのときは char で Unicode モードのときは WCHAR と同じ。

_stprintf_s も ANSI モードのときは sprintf_s に置き換えられて Unicode モードのときは swprintf_s になる。
swprintf_s のときの第一引数は文字数 (この場合は UTF-16 でのコードポイントの数) なのでバイト数である sizeof(buf) を渡しても駄目。

ANSI モードでしかコンパイルしないのであれば別に割らなくても大丈夫だけど、それならそもそも切り替えを前提としたマクロを使う必要ないしな……。
472デフォルトの名無しさん (ワッチョイ 3369-iztn)
2024/12/16(月) 22:06:23.18ID:o/MtQx1A0
Unicodeになるとなんで割る必要が出てくるのかいまいち掴めないなあ
BuffのサイズをTCHARのサイズで割ってどうしてサイズが出せるの?
473デフォルトの名無しさん (ワッチョイ 666d-1w4P)
2024/12/16(月) 22:41:01.10ID:/03Ox5VG0
>>472
ごちゃごちゃ考えてないで
とっととデバッガ使って値を確認しな
474はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0f32-782k)
2024/12/16(月) 22:48:31.98ID:26oXJeTE0
配列の大きさを得るために配列のバイト数を配列要素のバイト数で割るのはごく一般的なイディオムなので何がわからないのかわからない。
475デフォルトの名無しさん (JP 0Hff-K+1m)
2024/12/16(月) 22:57:30.45ID:Q04ymynwH?2BP(1000)

これらのアイデアを実装するために取り組んでいる中で、EchoAPIが設計ワークフローを本当に効率化してくれた
476デフォルトの名無しさん
2024/12/17(火) 00:02:56.65ID:KLd2kDAJ0
>>472
Unicodeの場合、2バイトで1文字を表現
①①②②③③④④⑤⑤⑥⑥⑦⑦⑧⑧⑨⑨ で9文字、18バイト

ANSIの場合、
①②③④⑤⑥⑦⑧⑨ で9文字、9バイト

> sizeof(buf)/sizeof(TCHAR)

sizeof(buf)が指すのはバイト数、Unicodeなら18、ANSIなら9
sizeof(TCHAR)が指すのは1文字のバイト数、Unicodeなら2、ANSIなら1

そして stprintf_s の引数 sizeOfBufferはバイト数ではなく「格納する最大文字数」であること

引数がバイト数ならsizeof(buf)でいいけど、引数が文字数を求めているならsizeof(buf)ではおかしくなる
上の例で言えば、Unicodeは18バイト9文字で本来は9とするところを18と指定してしまうことになる
すると関数側はバッファが18文字分(バイトで32バイト)あると勘違いするわけでバッファオーバーフローを起こす

sizeof(buf)/sizeof(TCHAR) は18バイトの領域があって、それを1文字のバイト数で割って「9文字」ということ
477デフォルトの名無しさん
2024/12/17(火) 00:05:50.03ID:KLd2kDAJ0
丸付き数字自体が1文字1バイトって意味じゃないからな
内部表現を表すために使用しただけで数字がx文字目として見て
478デフォルトの名無しさん (アウアウエー Sae2-N2kD)
2024/12/17(火) 10:25:09.48ID:hEkGaD6xa
_countof()
479デフォルトの名無しさん (ワッチョイ 666d-1w4P)
2024/12/17(火) 12:09:40.76ID:2fZmW/080
いやvc++使ってんならstd::sizeでいい
480デフォルトの名無しさん (ササクッテロロ Spb3-DtHK)
2024/12/17(火) 12:36:10.86ID:5c2Y3gwMp
C言語スレだろw
481デフォルトの名無しさん (ワッチョイ be63-Vy5I)
2024/12/17(火) 12:49:19.32ID:6SQ8uEd20
そこは禁欲しましょう
482デフォルトの名無しさん (ワッチョイ 33ef-iztn)
2024/12/18(水) 01:25:30.31ID:ILkVh3nA0
>>476
朝わかりやすいね
でもANSIって1バイトと2バイト混合できるよね?どうなっちゃうんだろう
483デフォルトの名無しさん
2024/12/18(水) 02:49:26.43ID:NqM0X43U0
>>482
ANSIはバイト=文字数
そもそも論理的な文字数じゃなくて処理単位での文字数ね
だから strlen("あいう") = 6
strlen("123あ67い0") = 10 // 数字は半角(1バイト)、ひらがなは全角(2バイト)

Unicodeの場合でも正しい文字数になるわけじゃない、サロゲートペアの場合に文字数は2(4バイト)になる
484はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0f32-782k)
2024/12/18(水) 09:23:44.77ID:w442kBzm0
Unicode だとサロゲートペアを脇においても異体字だの合成だのといったものがあるし、人間が紙の上に書くときの直感的な感覚で言うところの「文字数」とは定義が違うので、各文字コードの仕組みを知っておくしか仕方がない。
485デフォルトの名無しさん (ワッチョイ 3339-iztn)
2024/12/18(水) 17:31:07.70ID:ILkVh3nA0
>>483
>>484
つまりこの方法だとコンパイル時に気をつけるしか無いってことか、大変だね
テキストエディタみたいなの作ろうとすると禿げ上がりそう
486デフォルトの名無しさん (ワッチョイ 8b93-1p0V)
2024/12/18(水) 17:41:39.49ID:NuF84nX60
文字コード問題よりC言語で作れってほうがハゲりそうだ
487デフォルトの名無しさん (ワンミングク MMda-UGgi)
2024/12/18(水) 17:56:26.27ID:2i1n2GHXM
固定長ならそこまで禿げないかと
488デフォルトの名無しさん (ワッチョイ 66be-1w4P)
2024/12/18(水) 18:24:42.01ID:ccS3E3GJ0
>>485
方法が大変?
お前まだ理解できてないぞ
一般論として文字コードの扱いは大変だがTCHARの仕組みは単純だ
489デフォルトの名無しさん (ワッチョイ 2679-qWVo)
2024/12/18(水) 18:25:51.62ID:U+/f/ac80
CがC++だったとしても変わらんでしょ
VSCodeはレンダリングの都合でWebルレームワークとjavascriptで作られてるからC/C++製エディタと比較して遅いというデメリットがある
490デフォルトの名無しさん (ワッチョイ 66be-1w4P)
2024/12/18(水) 18:34:50.50ID:ccS3E3GJ0
c言語で文字列処理はクソ面倒でしょ
ライブラリの整備からやる必要がある上にコードがとっ散らかる
491デフォルトの名無しさん (ワッチョイ 2679-qWVo)
2024/12/18(水) 18:36:51.22ID:U+/f/ac80
Windowsの場合使用フォントに応じて描画幅を返すAPIに丸投げできるから大した手間にならないが
メモ帳の「右端で折り返す」相当を実装する場合右端のどこで切るかでその人センスが露になる
492デフォルトの名無しさん (ワッチョイ 2679-qWVo)
2024/12/18(水) 18:41:35.77ID:U+/f/ac80
>>480
何か誤解があるみたいだが開発言語にCを選ぶようなやつがそんなのを面倒に感じる事はないんだよ
493はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0f32-aNNs)
2024/12/18(水) 22:35:54.78ID:w442kBzm0
アプリケーションを作るにあたって TCHAR が必要になる状況はそれほどない。
Unicode 対応をきちんとやるならそれとは別に ANSI 版も作るという必要性はないし、両方を作る必要性がないなら切り替えを意識する必要もないから。
最初から WCHAR で書けばよい。

ライブラリとしてまとめるならどちらにも対応したほうが良いこともあるかもしれんけど。
494デフォルトの名無しさん (ワッチョイ be63-Vy5I)
2024/12/18(水) 23:14:04.02ID:1nhczz8f0
テキストエディタ、アセンブラで作った奴いるだろう
ハゲてはいなかったと思う
495デフォルトの名無しさん (アウアウエー Sae2-N2kD)
2024/12/19(木) 15:05:41.21ID:p9TYuGiMa
>>483
strlen("123あ67い0") == 12 // utf-8
496デフォルトの名無しさん (ワッチョイ be63-Vy5I)
2024/12/19(木) 15:35:21.01ID:boHB/shj0
strcat()、実装大変そうだな
497デフォルトの名無しさん (ワッチョイ eaad-NYGQ)
2024/12/19(木) 18:03:52.50ID:KNZC4rFA0
UTF-8のバイト数ではなく文字列の長さを調べるソース
https://drive.google.com/drive/folders/10jgzKVUYPXQhC566bBmrqnnBLJI4pEbL
498デフォルトの名無しさん (ブーイモ MMbf-1w4P)
2024/12/19(木) 18:29:36.25ID:ByBpVqn8M
>>497
Unicodeで文字列の長さって何?
書記素クラスタか?

って突っ込まれるから知ったかぶらないほうがいいぞ
499デフォルトの名無しさん (ワッチョイ eaad-NYGQ)
2024/12/19(木) 18:32:55.82ID:KNZC4rFA0
>>498
文字数を数えられるように自分で書いたのだけど?
文字数数えられるけど知ったかとは?
500デフォルトの名無しさん (ワッチョイ 4a5b-SaU4)
2024/12/19(木) 18:34:44.41ID:hCGKCs/t0
👩🏽‍👩🏿‍👧🏻‍👧🏽
501デフォルトの名無しさん (ブーイモ MMbf-1w4P)
2024/12/19(木) 18:41:15.54ID:ByBpVqn8M
>>499
それがまさに知ったか
unicodeの基礎すらわかってない
そんなやつのライブラリなんで誰が使うんだよ
502デフォルトの名無しさん (ワッチョイ eaad-NYGQ)
2024/12/19(木) 18:45:26.23ID:KNZC4rFA0
>>501
基礎ってなに?
ただ文字数数えれるプログラムとしてだしたのに
503デフォルトの名無しさん (ブーイモ MMbf-1w4P)
2024/12/19(木) 18:50:39.22ID:ByBpVqn8M
>>502
それは書記素クラスタか?ときいてるだろ
でもその言葉の意味がわからんのだろ?
504デフォルトの名無しさん (ワッチョイ eaad-NYGQ)
2024/12/19(木) 18:52:55.31ID:KNZC4rFA0
>>503
なんで書記素クラスタって言葉にこだわってるの?
もしかして教科通りにU+数字じゃないから言ってるだけ?
505デフォルトの名無しさん (ワッチョイ 4a5b-SaU4)
2024/12/19(木) 19:11:26.12ID:hCGKCs/t0
﷽は1文字か?
506デフォルトの名無しさん (ワッチョイ eaad-NYGQ)
2024/12/19(木) 19:27:41.47ID:KNZC4rFA0
>>505
1文字 3バイトみたいだね
ソースを変えて出力してみた
507デフォルトの名無しさん (ワッチョイ 4a5b-SaU4)
2024/12/19(木) 19:38:58.12ID:hCGKCs/t0
そうなんだ
よかったね

https://www.unicode.org/Public/emoji/latest/emoji-zwj-sequences.txt
508デフォルトの名無しさん (ワッチョイ 66fc-1w4P)
2024/12/19(木) 19:46:58.36ID:zv08w2oi0
main関数用のヘッダファイル用意してて草
509デフォルトの名無しさん (ワッチョイ b704-1exS)
2024/12/19(木) 19:59:42.44ID:iU+Lg9qY0
unicode怖ひ
510デフォルトの名無しさん (オッペケ Srb3-aNNs)
2024/12/19(木) 20:00:17.69ID:y/hB6qNpr
退勤前に>>497見て、
ああ、"フロッピーディスク"って入れたら8が返り、"ハードディスク"って入れたら2.5が返るような関数だろ。
って思いつつ帰宅したら、またお前らときたら
511はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0f32-782k)
2024/12/19(木) 22:28:22.60ID:uLfYubV70
>>509
自然言語がぶっ壊れてるんだよ。
Unicode は自然言語のぶっ壊れをどうにかこうにかコンピュータで扱える形にしただけ。
512デフォルトの名無しさん (ワッチョイ eb78-RqoG)
2024/12/20(金) 15:28:36.64ID:raronLtC0
JAIST、「並行量子通信プロトコル」の完全な自動形式検証を実現
http://news.mynavi.jp/techplus/article/20241220-3090485/
513デフォルトの名無しさん (JP 0Hff-K+1m)
2024/12/20(金) 23:42:16.35ID:yXvtHThaH?2BP(1000)

最近のRESTful APIについての議論に触発されてEchoAPIを試してみたところ、エンドポイントのシミュレーションツールがテストプロセスを非常に効率化してくれた
514デフォルトの名無しさん (ワッチョイ 3351-iztn)
2024/12/21(土) 07:13:36.08ID:37tGDg2N0
IsWindowVisible
IsWindowEnabled
EnableWindow
のダイアログ版教えてくりゃ
515デフォルトの名無しさん (アウアウエー Sae2-N2kD)
2024/12/21(土) 10:49:43.14ID:bIHzWCsda
GetWindowHandle
516デフォルトの名無しさん (ワッチョイ 3351-iztn)
2024/12/21(土) 21:59:52.73ID:37tGDg2N0
>>515
つまりどういうことだってばよ
517デフォルトの名無しさん (ワッチョイ 66bf-1w4P)
2024/12/21(土) 22:49:23.50ID:Bjr5M2i00
>>516
Win32の板できけ
518デフォルトの名無しさん (ワッチョイ eb53-XATa)
2024/12/22(日) 02:23:50.05ID:SmvDArN50
>>517
なるほど
519デフォルトの名無しさん (ワッチョイ 8a2d-f1r3)
2024/12/29(日) 08:16:36.48ID:5Nra/jss0
%*d
こんなの初めて知った
B1.3 Formatted Inputに載ってたけど読んでなかった
520 警備員[Lv.1][新芽] (アウアウウー Sac7-QgLT)
2024/12/29(日) 10:03:55.05ID:RHfwjsVRa
(s)scanfのフォーマット引数もパターンマッチのように使えて便利だったり
521デフォルトの名無しさん (ワッチョイ 9aad-Udw9)
2024/12/30(月) 16:23:40.30ID:QwWcwTek0
>>519
俺はそれ20年以上前に知ったような気がする。
フォーマットの文字列をわざわざ別に作らなくて済んで素晴らしいと思った記憶がある。
522デフォルトの名無しさん (アウアウエー Sa52-fscC)
2024/12/31(火) 13:18:32.28ID:dvbSbmj1a
実は正規表現が使えるんだぜ
523デフォルトの名無しさん (ワッチョイ 4e63-3FWJ)
2024/12/31(火) 13:46:40.77ID:KJy4fxay0
ネイピア数や円周率を誤差ナシで扱えると嬉しい
524デフォルトの名無しさん (ワッチョイ 0e76-+EE9)
2025/01/02(木) 15:48:37.33ID:8mwDch1n0
円周率って math.h とかに入っているの?
それとも
pi = 4.0 * atan(1.0);
とかで持ってくるものなの?
525はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9732-mOud)
2025/01/02(木) 19:46:55.76ID:dC27qXct0
>>524
言語仕様にはないが、処理系によっては有ることもある。
特定の環境でコンパイル・実行できればよいならそれを使えばいいし、そうでないなら工夫も必用だろうし……
どのくらい移植性に配慮するかによるんじゃないの。
526はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9732-mOud)
2025/01/02(木) 19:58:10.79ID:dC27qXct0
double の精度が有限な以上は無理数を誤差なく扱うのは不可能だし、どうしてもやりたいなら数値計算ではなく解析的な計算をするしかない。
ただ、工学的な用途だと誤差をゼロにする意味はあまりないことが多くて、誤差の程度が保証されることが需要。
たとえば分子一個分より小さい桁の部分で正確でも何にも使えないから考えるだけ無駄でしょ。
527デフォルトの名無しさん (ワッチョイ 0e76-+EE9)
2025/01/02(木) 22:08:15.15ID:8mwDch1n0
ちょっと解析的な計算というのが正確にわかっていない

数値的な計算というのは有限差分法とか用いて近似的な解を求める方法だよね?

解析的な計算というのは a *x^2 + b * x + c = 0 なら手計算で解けるよというやり方?
使ったこと無いけどマスマティカとかそういうソフトだっけ?
528はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9732-mOud)
2025/01/02(木) 23:00:55.85ID:dC27qXct0
>>527
そう。 要は数式の変形で解くやりかたってこと。
どのくらいのものを扱いたいかによるけど四則演算と巾乗くらいからなる簡単な式を扱えればよいなら C で書いてもそれほど高度というほどではない。
リスト構造を作って切り貼りするってだけなので。
とはいえ、計算を始めたいときにやる下準備としてはかなり面倒臭いだろうとは思うけど。
529デフォルトの名無しさん (ワッチョイ 0e76-+EE9)
2025/01/03(金) 13:18:29.38ID:4R6C6cdS0
なるほどね、解を公式化しておいて虚数が必要か判定する感じだろうね
530デフォルトの名無しさん (アウアウエー Sa23-Y8TR)
2025/01/05(日) 10:58:58.82ID:8kdOFrcZa
πをπのまま計算して最後にmπで出力してくれれば良いのにと思うことは多い
531はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9932-8Wha)
2025/01/05(日) 11:04:48.60ID:caTYcs4C0
数式処理の基礎の基礎ならこのあたりがオススメできると思う。

C言語による標準アルゴリズム事典
https://gihyo.jp/book/2018/978-4-7741-9690-9
532高卒工員 ◆rysjzJ5XpQ (ドコグロ MMde-pbJa)
2025/01/13(月) 10:59:54.95ID:EpHsvAOYM
「」
533デフォルトの名無しさん (アウアウウー Sa91-HZB4)
2025/01/17(金) 16:58:25.38ID:GO6/DX25a
Cの糞仕様でmath.hインクルードしてなくても
int hoge(int) って解釈されるから
本当は double hoge(double) だったり float hoge(float) だったりしても
コンパイルだけ通ってリンク後に問題起こすってのが昔はあったな
534デフォルトの名無しさん (ワッチョイ 862a-Zdzc)
2025/01/17(金) 18:21:44.43ID:eoeaxZuy0
error: implicit declaration of function 'hoge' にならないの?
535デフォルトの名無しさん (ワッチョイ 555b-pCI4)
2025/01/17(金) 18:47:49.86ID:is0uPVRE0
1のサンプルコードでコンパイル通らなかったから2のコードのようにキャストしたんだけど動き的には同じだよね?

1,pStrIndex = malloc(sizeof(TCHAR*) * count);
2,pStrIndex = (TCHAR**)malloc(sizeof(TCHAR*) * count);
536デフォルトの名無しさん (ワッチョイ 6a17-wArI)
2025/01/17(金) 19:25:43.49ID:aSzNgrb80
だまってC++のスレいけよ
537デフォルトの名無しさん (ワッチョイ 8663-Z6+G)
2025/01/17(金) 19:31:42.24ID:frJzdCet0
先に心療内科の外来に相談した方が良い
538はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2932-puiI)
2025/01/17(金) 21:10:14.26ID:SH5Lw3P50
>>533
厳密に言うと extern int hoge(); と暗黙に宣言したかのように扱うルールだった。 C89 では。
C99 で削除されたルールだけど今でも警告付きで通してしまう処理系はあるな。
539はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2932-puiI)
2025/01/17(金) 23:50:49.72ID:SH5Lw3P50
>>535
C では void* から他のポインタへ暗黙の型変換が許されるが C++ では許されない。
コンパイルエラーになってるならたぶん C++ を書いてる。
(処理系によってはオプションでエラーや警告を制御できることもあるけど。)
540デフォルトの名無しさん (ワッチョイ cf76-7Mnr)
2025/01/19(日) 13:12:34.18ID:pnTgRmOE0
二次方程式を式変形で解くのは「代数的」な解法な気がする

「数値的」解法はコンピュータ利用?、「解析的」解法?
541デフォルトの名無しさん (ブーイモ MM1f-Bxv4)
2025/01/19(日) 13:18:38.18ID:ix4t29qjM
そんな用語の意味ごとき自分で調べてわからんか?
542デフォルトの名無しさん (アウアウウー Saa7-C2Lh)
2025/01/20(月) 13:48:58.08ID:G+ryJ45Ga
「二次方程式を式変形で解く」の意味が
ax^2+bx+c=0 の解 α, β をそれぞれ a, b, c の式で表す
という意味なら代数的解法か?単に構文解析の気もするが
α, β を浮動小数点数(複素数を含む)で表す
という意味なら数値的解法か?解析的解法か?
単に解の公式に代入してるなら解析的解法の訳が無い罠
543デフォルトの名無しさん (ワッチョイ 7f9a-eCkH)
2025/01/20(月) 15:06:20.10ID:rx9N4QIY0
元の発言はたぶん円周率を近似値に置き換えないぐらいのことが言いたかっただけでしょ
5chのコテハンなんだからたいして考えてモノ言ってるわけじゃないだろうよ
544デフォルトの名無しさん (ワッチョイ cf63-uhza)
2025/01/20(月) 17:55:23.24ID:CIg2w/Qm0
円周率は大体3
545デフォルトの名無しさん (ワッチョイ bf2d-nfRJ)
2025/01/20(月) 20:30:52.25ID:pd7YCKBV0
奥村先生のアルゴリズム事典に二次方程式を解くコードが載ってる
解の公式だけで解くと桁落ちが生じるので解と係数の関係も使ってる。
546デフォルトの名無しさん (ワッチョイ ff60-pJ9J)
2025/01/20(月) 23:33:08.85ID:acq30m6X0
ポインタについて分かりやすく説明してくんろ
547デフォルトの名無しさん (アウアウウー Saa7-C2Lh)
2025/01/21(火) 08:28:35.17ID:yRL5l1cZa
最近どっかで観た流れだな
はちみつのコピペか
548デフォルトの名無しさん (ワッチョイ cf49-7Mnr)
2025/01/21(火) 19:43:21.46ID:OWL66YDB0
コンピュータのマシン語は高級言語で言うところの「変数名」による識別子は存在しない
なにによって識別するかは
レジスタの固有名詞か
メモリでの記憶場所を示すメモリアドレス

メモリアドレスを記憶させる変数やレジスタを
特にポインタ変数やポインタレジスタと呼んでいる
549デフォルトの名無しさん (ワッチョイ 7f07-BCxs)
2025/01/22(水) 00:18:16.97ID:4EbDFbn90
生ポは人類には早かったってばっちゃんが言ってた
550 警備員[Lv.1][新芽] (ワッチョイ ff87-PqgH)
2025/01/22(水) 01:06:34.38ID:pXnIX9Zj0
ポインタには型があってだな、
intとか自分で定義した構造体とかの型が

ポインタが指すアドレスを起点にそれらの型(ポインタの型)が配置されているかのようにメモリにアクセスするできるようにすることだよ

アドレスには型がないけど(変な言い方だけど)そこにintがあるとかFILE構造体があるとか、そこにその型があるとしてポインタが指すからある
そうでなければただのバイトの列

intとかcharなどのプリミティブな型でなく、構造体からイメージした方が分かりやすくないかな
551デフォルトの名無しさん (ワッチョイ cf49-7Mnr)
2025/01/22(水) 01:50:31.22ID:NkElh8NB0
そうだね p++ で数値が sizeof(*p)増える
552デフォルトの名無しさん (ワッチョイ cf49-7Mnr)
2025/01/22(水) 17:48:11.49ID:NkElh8NB0
CもだけどC++やJavaなり関数や変数、メソッドやメンバーを参照できる範囲を絞って
安全を確保しようとしているよね

でもコンパイル後の実行コードで関数や変数のスコープチェックとかしていないしできないよね
スコープがどうであれポインタ経由で場所がわかっちゃうんだし

無能プログラマの糞コード避けにはなるけどマルウェア対策にはならないということかな
553デフォルトの名無しさん (ワッチョイ ff79-EhoM)
2025/01/22(水) 19:26:53.41ID:6faY8jOE0
ぬるぽ
554デフォルトの名無しさん (ワッチョイ cf63-uhza)
2025/01/22(水) 19:44:26.98ID:9LZoVYPp0
このスレで良い度胸してるぜ笑
555はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4397-kbno)
2025/01/23(木) 00:44:38.67ID:fx1H86wZ0
>>546
ポインタをテーマにした本がある。
丁寧に説明しようとすれば本一冊分程度の分量は語れるってことだ。
それを掲示板で書ける程度の分量でより分かりやすくするのは無理だよ。
まずは入門書を読んだ上でわからないことがあれば具体的に質問して。
556デフォルトの名無しさん (ワッチョイ 0301-BCxs)
2025/01/23(木) 19:20:25.44ID:ruQDamXZ0
ポインタがすっと理解できない人はC言語は向いてないと思う
557デフォルトの名無しさん (ワッチョイ d3a3-85Rc)
2025/01/23(木) 19:58:25.66ID:vkyBSe+H0
メモリの番地を直接指してるってだけの話なのに文法が意味不明なのが悪い
558デフォルトの名無しさん (ワッチョイ cf63-uhza)
2025/01/23(木) 20:11:15.05ID:aOKdPI1Y0
Basicみたいに配列で操作すれば分かりやすいぞ 笑
559デフォルトの名無しさん (ワッチョイ cf76-7Mnr)
2025/01/23(木) 20:41:15.58ID:1Dl3E2N00
前橋和弥って人の本読んで理解した 長らく絶版だったようだが後継本がある
560デフォルトの名無しさん (ワッチョイ cf91-Mwn+)
2025/01/23(木) 21:30:26.88ID:auGoEn4C0
>>559
私もあれで学んだ ドロイド君みたいな表紙の旧版
わかりやすいと思う
561デフォルトの名無しさん (ワッチョイ bf2d-nfRJ)
2025/01/25(土) 14:13:44.88ID:6VZytBSB0
秘伝C言語問答 ポインタ編
562デフォルトの名無しさん (ワッチョイ cf2a-wVPw)
2025/01/25(土) 20:08:03.53ID:ZNC43F5H0
ポインタと云うは死ぬ事と見付けたり
563デフォルトの名無しさん (ワッチョイ cf63-uhza)
2025/01/25(土) 20:36:32.21ID:KsLTQwZH0
ポインタには殺傷能力があります。
使う人は銃器の取扱免許が必須です。
564デフォルトの名無しさん (アウアウエー Sa52-FFa5)
2025/01/26(日) 22:56:06.95ID:s+0AyHDZa
ただのアドレッシング
++したり+=1したら判る
565デフォルトの名無しさん (ササクッテロラ Sp3b-7ROj)
2025/01/28(火) 10:28:12.96ID:q8xQ82Vup
ねえよ
おまえらなら配列ですら殺傷能力あるだろw
566デフォルトの名無しさん (ワッチョイ 1759-y8H9)
2025/01/28(火) 14:54:54.74ID:CBv6ZpxK0
配列で死ぬ奴は四天王でも最弱な奴
567デフォルトの名無しさん (ワッチョイ 0e76-Vgbt)
2025/01/28(火) 20:42:19.32ID:C7gY9jH/0
だからさぁ 変数や関数スコープって アドレスでアクセスされたら
アクセス拒否できる仕組みは無いよね?
568デフォルトの名無しさん (ワッチョイ 0b01-cjCd)
2025/01/29(水) 06:54:15.10ID:NyAjG/eE0
で?
569デフォルトの名無しさん (ワッチョイ 1aae-qYXa)
2025/01/29(水) 15:06:45.80ID:S8KruiE+0
あったらCの柔軟性が失われると思います
570デフォルトの名無しさん (ササクッテロラ Sp3b-7ROj)
2025/01/29(水) 15:10:06.13ID:8Al2cjCTp
さすがにセグメント違反は弾かれるぞ
まあ、CPUやOSの機能だけどな
571デフォルトの名無しさん (ワッチョイ fa07-cjCd)
2025/01/29(水) 15:25:45.05ID:ViyYX/ol0
雑談として
いろいろチェックのついたポインタがあっても、それをOFFにできれば問題ないんだぞ

スピードの要らないところにもCは使われているので、そういう部分は、「ごてごて」でもいいんだよ
572デフォルトの名無しさん (ワッチョイ 0e76-Vgbt)
2025/01/29(水) 19:33:45.26ID:0piGtrVr0
いやポインタのはなしをしたいのではなくて
高級言語で設計制限を行うことで可読性や設計ミスが高まるという言説があるよね
構造化プログラミングやオブジェクト指向の類

でも実際稼働するのはコンパイル後のマシン語で
gotoというかジャンプ命令もあれば
プライベートへのアクセスを実行時にチェックする機構とか無いわけでしょ

不具合調査はソースコードも大事だけどマシン語の流れも追わなけば
本当のところはわからんよね
更には投機実行や分岐予測もあるわけで
実際の稼働はソースコードによらないしマシン語とも異なる可能性が存在する
573デフォルトの名無しさん (ササクッテロラ Sp3b-7ROj)
2025/01/29(水) 19:43:26.10ID:4AeLlQVLp
え?
最終的にCPUはマシン語として解釈して動くだけだからなぁ
人間がどう捉えようがそこは変えようが無いんだ
574デフォルトの名無しさん (ワッチョイ 4e63-W7nG)
2025/01/29(水) 22:18:59.64ID:Ow/mCh010
会話として成立していますか?
575デフォルトの名無しさん (ワッチョイ 0e76-Vgbt)
2025/01/30(木) 00:57:38.52ID:dOgLqtqk0
例えば goto文を可能な限り排除して構造化プログラミングというものが提唱されてきた
でもコンパイル後のマシン語にはむき出しのジャンプ命令が使われる
構造化されたループや分岐も実際はジャンプ命令
処理のトレースでもデバッグでもソースコードとマシン語と両方追う必要があるが
goto文を排除した理念の意味が…
ソースコードは見やすいがマシン語はそうではないよね?っていう愚痴のようなもの
576デフォルトの名無しさん (ワッチョイ 4e2a-cFDo)
2025/01/30(木) 08:50:49.07ID:w2UDYxPo0
むき出しのジャンプ命令...
赤裸々なMovとか、一糸まとわぬAdd とか。
577デフォルトの名無しさん (ワッチョイ a75f-7ROj)
2025/01/30(木) 09:29:28.34ID:x87hbq3s0
コンパイラひバグが無いかぎりは高級言語のソース通りに動くから大丈夫だぞ
昔のファミコン並みに処理ステップ数に要するクロックを数えてラインスクロールさせるとかでもしない限りタイミングも気にする必要無いし
578デフォルトの名無しさん (ワッチョイ fa07-cjCd)
2025/01/30(木) 11:48:21.95ID:1fx7BZxf0
むしろマルチコアの問題のほうがでかい 自分も、高効率に書ける自信がない
579デフォルトの名無しさん (ワッチョイ 0e00-BqhG)
2025/01/30(木) 12:22:11.10ID:K2FsQpfY0
C言語に限らずJavaでもPythonでもLispでも最終的にはブランチしまくりヒープアクセスしまくりなマシン語で動いてるんだから心配しても意味ない。
たまたまC言語はマシン語に近い距離にある言語なのでマシン語「でも」デバッグできてしまうだけの話。
580デフォルトの名無しさん (ワッチョイ 0e76-Vgbt)
2025/01/30(木) 16:25:32.68ID:dOgLqtqk0
コンパイラ最適化の時点で追うのが難しい
ましてや投機実行とくると…
581デフォルトの名無しさん (ワッチョイ 0e76-Vgbt)
2025/01/30(木) 16:27:29.00ID:dOgLqtqk0
思い出した continue や break は優遇されている印象
582デフォルトの名無しさん
2025/01/31(金) 01:34:44.08ID:5fFn3R6V0
Pythonだって安全じゃないしな
俺この間自作したPythonプログラム動かしたら数秒後PCが落ちた
XPとかWindows7とかじゃないぜ、Windows11の最新が突如電源が切れたんだよプツンて
まじでビビった

ちなみに原因は日本語フォントを読み込むコードをカメラキャプチャのループ内(数十から数百ミリ秒ぐらい?)で実行していた
C言語のポインタは危険とか言うけどさ、一番危険なのは俺みたいな馬鹿なコード書く奴の存在だよ
583デフォルトの名無しさん (ワッチョイ 4e63-W7nG)
2025/01/31(金) 09:59:26.90ID:4ClqIqkw0
君のPCが落ちる程度は許容範囲
584デフォルトの名無しさん (ワッチョイ fa07-cjCd)
2025/01/31(金) 11:00:00.59ID:uHjOTXCx0
考えようによっては、タチの悪いDoSじゃないかw
カメラごときで全体落としてんじゃねえよ > カーネル層

ロジックバグなんだろうけど、こういうのはしかし難しいね
585デフォルトの名無しさん (ササクッテロラ Sp3b-7ROj)
2025/01/31(金) 11:20:36.48ID:h9+hJoTPp
ドライバの秘孔を突いただけだから
586デフォルトの名無しさん (ワッチョイ 4e63-W7nG)
2025/01/31(金) 11:30:08.08ID:4ClqIqkw0
ドライバーに致命的不具合があったとしても
ブルスクになる程度で
電源断まで行くと言うのは考え難い
587デフォルトの名無しさん (ササクッテロラ Sp3b-7ROj)
2025/01/31(金) 11:49:46.06ID:h9+hJoTPp
ドライバの秘孔を突いてカメラに搭載のチップが電源ライン直結になったとかじゃね?
588デフォルトの名無しさん
2025/01/31(金) 18:44:56.94ID:5fFn3R6V0
原因はそっち(ドライバ)ではなくスリープなしのループ内でフォントファイルに連続攻撃したことだぜ、たぶん
簡単に書くとこんな感じ

fontpath ='C:\\Windows\\Fonts\\DFJGOTEB.TTC'
while True:
 put_ja(point, text)

def put_ja(point, text):
 font = ImageFont.truetype(fontpath, 32)
 draw.text(point, text, fill=color, font=font)

実際にはwhileじゃなくてafterでループさせてたけど
日本語出力の時、出力のたびにフォントファイル読み込んでたようで結果PCが落ちた
残像攻撃を受けた感じだったのかもしれん、コロ先生の分身みたいなやつ
589デフォルトの名無しさん (ワッチョイ 0e00-BqhG)
2025/01/31(金) 19:36:45.83ID:R7Zj8Mog0
プリエンプティブカーネル使っててスリープなしのループごときでそんなことあり得るのか?
逆にそうなった仕組みが知りたい。
590デフォルトの名無しさん (ワッチョイ 9a79-x7zn)
2025/01/31(金) 19:40:58.83ID:1pwkweKb0
インテルのTurboBoostだかで負荷もブーストされて排熱が間に合わずMBにダメージ与えつつ逝ったんじゃないの
PC買い換えた方がいいよ
591デフォルトの名無しさん (ワッチョイ b6fc-jays)
2025/01/31(金) 19:54:38.13ID:R/wyJ37S0
ブルースクリーンもなしにおちるなんてハード不良
592デフォルトの名無しさん
2025/01/31(金) 20:00:56.86ID:5fFn3R6V0
スレチで申し訳ないが、

俺も気にはなってるけどPC痛めつけてまでやる気にはなれない
試したいなら試してくれ、ただしどうなっても責任は負わんぞw

MicrosoftストアのPython Software Foundationってとこの奴
Python 3.13.1 (tags/v3.13.1:0671451, Dec 3 2024, 19:06:28) [MSC v.1942 64 bit (AMD64)] on win32

 OpenCVで日本語表示
 https://monomonotech.jp/kurage/raspberrypi/opencv_japanese.html
ここのputText_japaneseを参考にした(パスとかwindows用に書き換え)
んで、それを
 【簡単】QRコードの作成と読み取り in Python
 https://qiita.com/PoodleMaster/items/0afbce4be7e442e75be6
のcv2.putTextと置き換えるように書き換えたんよ
引数のfontはなくしてフォントサイズだけを渡す
ImageFont.truetypeがフォントサイズも引数にしているから、こうすれば動的なフォントサイズ変更にも対応できるな、ヨシ!って思ってね
それ実行したらPC落ちた
それでも数回やって問題なかった記憶はあるんだけどね(ただし数十秒程度の起動時間だった)
ちょっと長めに起動させたままにしたからリソース食いつぶしたのかな?と思ってる
593デフォルトの名無しさん (アウアウエー Sa52-FFa5)
2025/02/01(土) 12:06:57.91ID:Dm0gVBeEa
負荷掛け過ぎてコンデンサが爆発したんだろ

lud20250202143045
このスレへの固定リンク: http://5chb.net/r/tech/1721137434/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C言語なら俺に聞け 163 YouTube動画>1本 ->画像>2枚 」を見た人も見ています:
C言語なら俺に聞け 156
C言語なら俺に聞け 144
C言語なら俺に聞け 147
C言語なら俺に聞け 146
LinuxカーネルはC言語なのにオブジェクト指向
【悲報】C言語なら10秒で終わる処理、Pythonだと11分かかった
100人に聞いた最初に学んだプログラミング 3位「C言語」、2位「Java」、1位は「Phthon」
C言語って…
c言語的にjavaを教えて
[システム]プログラム言語など学習スレ[初心者]
C言語を勉強中の大学1回生だが
無知の俺にC言語について教えてくれ。
C#とか言うなんちゃてC言語wwww
訪日外国人観光客「えっ、わざわざ土人民族の言語なんか覚える必要ある?土人は土人らしく我々「人間」の言葉に合わせなさいよ」
ポルトガル語、ネパール語など多言語で避難呼びかけ 兵庫の放送局の津波ニュース対応に称賛「素晴らしい」 SNSでも映像を配信。 [朝一から閉店までφ★]
【急募】勇者さん助けて;;C言語です
プログラミングBASIC言語について。
高校生3人がc言語初心者からゲーム作る
8ビットCPUでC言語?ないないありえないっしょ! 5
C言語でテトリス作れる人来て!👾
クラシックMacでプログラミング [C言語] [その他]
最長不倒関数■C言語でmain関数に全コードを入れる
【教えて】C言語勉強してるんだけど、ポインタがあとわからん
【】流行り廃りはあるけれど、結局C言語に回帰するんだよね。C言語最強なんだよね
MS「C言語は脆弱だな。改良してやんよ」→標準化! [無断転載禁止]
なぜこれまでなかった? C言語の公式ホームページが新たに公開、テキスト中心の簡潔な内容 [朝一から閉店までφ★]
【SE】「C言語…?どこかで見た程度でOK」 名古屋のアテック、求人広告が話題に エンジニアの人材不足、面白求人でカバーできる?★2
【話題】 フランス選手による日本人侮辱問題 言語学者(75) 「ひろゆき(44)は『論破王』ではなく、『論理破綻王』の間違いですね」★3 [ベクトル空間★]
ひろゆき(44)が言語学者・小島剛一氏(F爺)に反論「論点を逸らそうとひたすら長文をブログに書いてるのはあなたです」「勉強不足」★3 [Anonymous★]
【八街・児童5人死傷】被害児童の祖母「“視力が無い、味覚も無い、言語もわからない、生きてるだけかもしれない”と医者に言われた…」★3 [potato★]
言語スレ
もし言語で
認知言語学
言語自由詩
世界の言語差別
関東弁は土人の言語
プログラム言語
人工言語を作りたい
関東弁はバカの言語
愚民の話す言語の翻訳は難しい
世界で共通する言語は3つ
人工言語アルカその6
認知言語学総合スレ
糞言語が天下を取る理由
プログラム言語を作ろう
英語って欠陥言語じゃね?
人造言語を作りたいスレ
言語って目と関係性あるの?
アフリカの言語で話すスレ
多言語間の完全自動翻訳技術
人工言語インターリングア
【悲報】日本語、欠陥言語だった
関数型言語一般 [無断転載禁止]
RubyでSQLを作ろう! 最強DSL言語
小林製薬の言語センスwwww
子音が多い人工言語を作ろう
駅の切り替わる多言語表示やめろ!
言語学板を復興させる方法は?
言語学やってる奴ちょっと来てくれ
おま国おま値おま言語スレ
言語のギミックを製造したよ
遊戯王やってる奴スレ多言語版
印欧語族と北米先住民の言語の関係性
言語学板の顔面・米津玄師について
関東弁はバカの言語 [無断転載禁止]
文化進化論言語活音質音楽
07:54:59 up 51 days, 8:53, 1 user, load average: 6.82, 7.13, 7.36

in 1.4662098884583 sec @1.4662098884583@0b7 on 060720