C言語なら俺に聞け 163

レス数が1000を超えています。これ以上書き込みはできません。
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
https://mevius.5ch.net/test/read.cgi/tech/1698653580/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2デフォルトの名無しさん (アウアウエー Sa02-hIhh)
垢版 |
2024/07/16(火) 23:09:40.55ID:zAWhziLLa
O2
2024/07/17(水) 00:38:03.50ID:x2xsFX7F0
"甲乙丙丁"[1];
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
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
> 省略できる

これまじ? ってやってみたら省略できた。知らんかった。
2024/08/13(火) 11:02:03.46ID:zgXpATPx0
C++の方は最初からそうじゃなかったっけ?
2024/08/13(火) 11:04:04.36ID:iZOfVN0Y0
ところで、main以外はどうなんだろう
mainだけ特別って事なのかな?OSとも絡むし
2024/08/13(火) 11:58:17.89ID:ZDyvNux60
>>9
retunr 0; が補われるルールは main だけの特別扱いだけど……。

関連する変な規則として C では関数の返却値の型が void ではないときに return せずに } に到達、かつ、関数の呼び出し元が値を使おうとするのは未定義ということになってる。
逆に言えば } に到達するだけなら OK ってことね。
C++ だと関数の返却値の型が void でないときに return せずに } に到達するだけで駄目という違いがある。
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が最後に処理したアキュムレータの内容が
戻り値として有効になってるケースが多い
違う実装があったら教えてくれ
2024/08/14(水) 09:29:38.29ID:o5Tm+MCf0
戻さないで自動的に挿入されるのならvoidでいいやん
2024/08/14(水) 16:14:28.35ID:91FNum+40
>>12
CPUでも最適化レベルでも変わるのでその情報は無意味だ
素直にvoidにしとけばいいじゃん
15デフォルトの名無しさん (ワッチョイ 42ad-ZlnX)
垢版 |
2024/08/17(土) 12:40:14.00ID:P2kCpMMm0
>>12
じゃあお前に教えるために
これからそういうの作ろう
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のサイクル
https://www.cgcjapan.co.jp/recruit/images/system/cgc-system.jpg
18デフォルトの名無しさん (ワッチョイ 7fad-9uNt)
垢版 |
2024/08/19(月) 14:50:35.14ID:2a6IfSVu0
CCG
https://dic.pixiv.net/a/CCG
2024/08/19(月) 15:05:46.71ID:V1kjWLO50
アキュムレータって呼び名、いかにも電卓っぽい
20デフォルトの名無しさん (スプッッ Sdc1-qo4T)
垢版 |
2024/08/26(月) 18:48:30.29ID:cPELMU3ld
ヘッダファイルちゃんとincludeしようよ。
2024/08/26(月) 19:32:21.98ID:0fQF2fer0
ヘッダーファイルインクルードする1行だけのプログラム見たことがある

#include /dev/tty
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は糞だわ
2024/08/27(火) 17:58:59.59ID:K+iNaUMP0
大抵最初の開発者は誰かが修正してくれるだろうと適当な仕様で設計して、
その後引き継いだ開発者はなにか意図があるのだろうと思ってそのまま維持していくという悪循環・・・。
26デフォルトの名無しさん (ワッチョイ 427c-qo4T)
垢版 |
2024/08/28(水) 01:09:19.85ID:E82+IHOF0
>>25
あるある過ぎる
2024/08/28(水) 01:32:44.54ID:ZIniGH7S0
ちち、どっかいけ
2024/08/28(水) 01:35:08.84ID:ZIniGH7S0
ごばくした、ごめん
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
2024/09/02(月) 22:08:58.52ID:DccWFR9v0
Rustを褒めて自尊心保つやつの次はNim版が出てきたのか
2024/09/02(月) 23:12:40.71ID:3HuFqT9S0
Nim推しは以前から変なやつ多かったから
2024/09/02(月) 23:28:27.10ID:09ZYUS090
Nim言語の良し悪しは分からんが、メモリ管理に関しては理想的だわ
ムーブ後のオブジェクトにアクセスするとRustだとコンパイルエラーで面倒な事になるけど、Nimは参照カウントを使って解決するので少し遅くなるだけだ
そっちの方が絶対良い
気になる場合は後で直せる
2024/09/03(火) 18:51:27.81ID:xAVNzrUq0
>>33
コンパイルエラー?
2024/09/04(水) 01:03:52.03ID:c5l8yfTZ0
>>34
だからなんだ?
Rustでムーブ後のオブジェクトにアクセスしてみろよ
2024/09/04(水) 09:34:28.92ID:eBGcFHFx0
>>33
どこにコンパイル時期にメモリの不正アクセス検知できるコンパイラーがあるんだよ
便利すぎないか
2024/09/04(水) 09:42:59.71ID:uvDwCGK/0
>>36
ムーブ(所有権の移動)の概念知らない奴かよw
2024/09/04(水) 11:20:54.96ID:yycwJMQK0
時代に取り残されたじじい
2024/09/04(水) 11:26:12.60ID:6FkHz3Id0
今どきのヤングはどの辺を走っているのかな?
40デフォルトの名無しさん (アウアウエー Sa1f-XN8b)
垢版 |
2024/09/05(木) 00:07:48.49ID:/oUqYYg3a
RefCellのborrowとかborrow_mutがCより速い訳がないだろ
2024/09/05(木) 06:20:13.32ID:IMzSmyWL0
アセンブラ使ったことない子供たちにはわからんのだろ
2024/09/05(木) 08:53:17.49ID:oYH6V42M0
Aiの時代にこんなレトロ言語に夢中になってる場合でもないだろ
2024/09/05(木) 09:42:51.26ID:00qJ+IF20
ペイントソフト溢れた時代にエクセルで描いて絶賛される時代。
2024/09/05(木) 13:27:55.60ID:IMzSmyWL0
AIなんて究極的には予備知識なしで使えるようになるもんだろ
いま必死で呪文を覚えてる奴らには気の毒だがw
プログラムの学習はそれとは逆だぞ
2024/09/05(木) 13:41:12.34ID:YoL+MCk60
AIにはアセンブラかCで書かせた方が効率がいいじゃん
2024/09/05(木) 20:45:06.75ID:mduO1G690
今はアニメもCGで作る時代だけど、だからデッサン力なんて不要と言ってるのに近いなw
2024/09/06(金) 02:12:25.16ID:ObPC8Kit0
AIなら直接機械語書けそうだけど最低限人間がコードを読めるようにするためにCで出力するのが流行りそう
2024/09/06(金) 17:06:00.74ID:3sxDLHxZ0
もはやプログラマはAIにどう質問するかだけが求められてる時代
ビックデータが前提なのはわかってるけどchatAIと画像AIはマジでオーパーツだわとても0と1だけで実現されてる技術と思えん・・・
2024/09/06(金) 17:30:18.67ID:bUa4C6AFM
ここはAIの質問スレになる予定です
2024/09/06(金) 17:59:38.15ID:wWap9ofG0
>>48
Cやアセンブラを知らなかったらコンピューター自体が魔法に思えるんだろうなw
2024/09/06(金) 18:14:44.45ID:fzo/g0jk0
プログラム上での比較が、未だに変数2つの比較(if(A=B)とか )しかイメージ出来ないので
AIのアルゴリズムどころか、2つのサイズの違う画像比較ってのさえどうやるのか検討もつかん・・・。
2024/09/06(金) 18:37:17.18ID:4wqfzUPa0
3Blue1BrownJapanのディープラーニング解説動画
https://www.youtube.com/watch?v=tc8RTtwvd5U
現在chapter6まで和訳されてる(本家英語版は7が出た)
2024/09/06(金) 21:13:32.20ID:wWap9ofG0
>>51
引き算してその絶対値が一定以内だったら同じとみなす
if(abs(A-B)<C){…
それぐらいならわかるだろ?
2024/09/06(金) 21:19:53.07ID:eMGejp5m0
点でしか見れない人に面を理解させる手法・・・
2024/09/06(金) 21:46:42.59ID:ObPC8Kit0
この世界もほぼ陽子と中性子と電子だけで出来てるのにこれだけ複雑なんだから0と1だけで複雑な演算出来ても不思議ではない
2024/09/06(金) 21:53:29.16ID:H8MSdYGz0
ようこちゃんとでんこちゃんは知っているけど
中性子って子は知らない
2024/09/06(金) 22:09:25.96ID:aKdHJjI6M
光子ちゃんも忘れないであげて
2024/09/07(土) 00:47:09.38ID:mFTEs+Pq0
0と1だけじゃないけどな
その他に位(くらい)という概念がある
これによって無限の数を表現できる
むしろ位の概念によって数が表現されている
それさえ有れば記号なんて何でもいい
2024/09/07(土) 20:51:59.47ID:XGt+Z3l/0
どこかの国だか村では両手の指の数以上を表現する言葉がないって話をどこかで・・・。
2024/09/07(土) 22:06:43.98ID:GNvzZpYIM
ムカデは100進数で数えている
2024/09/08(日) 00:25:53.15ID:zd6RlSMM0
>>59
位の概念が無いから10までしか数えられない
位を考慮すると両手で1023まで数えられる
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進法なの?
2024/09/08(日) 10:08:59.05ID:mVbg4wOX0
>>61-62
人差し指と薬指を伸ばして、かつ中指と小指を曲げるのは難易度がやや高いぜ。
(親指を伸ばせば『グワシ』)
2024/09/08(日) 10:25:56.18ID:IhFVsGpe0
グワシは古語
2024/09/08(日) 15:41:04.82ID:aTNFTtUw0
とりあえず、他人の投稿で言ってもいない単語や解釈を勝手に加えてマウント取ろうとするのはどうかと思うぞ。
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);
}
2024/09/09(月) 17:17:50.19ID:JnQxQHVK0
>>68
 char *p = s;
 char *q = t;
 while (*q++ = *p++)

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

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

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

sを配列ではなく、ポインタに変える、
tもポインタにしたいところだが、格納先確保が目的なら
先頭アドレスからのオフセット指定で格納する様に変更
2024/09/09(月) 18:30:55.08ID:D7I9z5W00
それなら while (*(t+i) = *(s+i)) って書くかな
2024/09/09(月) 18:36:50.90ID:JnQxQHVK0
s[]、t[100]と書いたとき、sやtはメモリー上の特定の位置を指す
ラベルのようなものなので書き換える事は出来ない。ポインタ定数とも言う。
一方ポインタ変数は、任意のアドレスを指す変数、変更も操作できる
constとか、突っ込まんでください
2024/09/09(月) 18:57:03.60ID:XH4OT6yj0
>>71
規格には「型変換する」と明瞭に書いてあって変換しないと解釈できる余地はない。
2024/09/10(火) 07:06:02.36ID:fwzKZR690
色々教えてくれてありがとう
s[]の先頭を指すポインタ*sを++で進めることができちゃったら
s[0]もズレちゃうのでだめだってことだよね
そりゃだめだわ
2024/09/10(火) 07:45:50.17ID:ZXVJVLjy0
s[], t[100]; って宣言したなら、s[idx], t[idx] って使おうよ
2024/09/10(火) 08:09:53.27ID:oAzej4EH0
そこはこだわらんでもいいだろ
2024/09/10(火) 09:09:59.70ID:H8O84G940
sやtは constということでもないのか
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とは扱いが違ったんじゃね
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
お前は変な事ばかり言ってるからもう引っ込んどけよ
2024/09/10(火) 21:22:40.00ID:OwUxLa4s0
ポインタそのものを変えないやつと
指す先を変えないやつの書き方で
未だに迷うっていう
2024/09/10(火) 21:35:00.77ID:rqI1GpSt0
キーワードを並べる順序で意味が変わるのは迷うけど
順序をどうならべても良い場合もそれはそれでびっくりする。

int const long foo;

みたいに変数を宣言して良い。
まあそんなことをするやつはいないと思うけど。
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
とも書ける
これが分かれば迷う事は無くなる
2024/09/11(水) 01:20:44.10ID:ZbZmMQbl0
それ前橋氏のポインタ完全制覇で知った
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には実体がない
アドレス定義ラベルでしかない

*ただし完全に最適化されると下も上と同じになる
   
2024/09/11(水) 09:16:47.77ID:IhX3t9qv0
ここでいう sには実体がない、とはどういうことですか?
2024/09/11(水) 09:19:23.27ID:Zm39E+090
大元の質問が >>68 なので低レイヤからの説明はあまり筋が良くないと思う。
エラーメッセージの意味を読み取れるようにならないから。
2024/09/11(水) 09:30:46.32ID:dQ20XCdF0
8ビットCPUのメモリ保護されてない頃だと
配列どころか、プログラムコードも書換できました笑
2024/09/11(水) 09:49:35.14ID:h52e7Ahm0
> sには実体がない、とはどういうことですか?
変数エリアに書き込まれていない数値、データ。
プログラム上で要求された時にコンパイル時や関数によってその都度作られる仕様・・・かな?しらんけど。

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

これは、

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

t++がエラーで、t+iなら大丈夫が理解できれば解決だと思う
ポインタの理解というのは壁にはなりますが、
乗り越えれば意外と簡単です、がんばれ!
2024/09/12(木) 00:58:15.86ID:QGeKjVfA0
>>92 ありがとうございました(sには実態がない)

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

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

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

# とても伝わりにくいと思いますが…
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言語おそるべし
2024/09/12(木) 23:41:05.77ID:+nQe2m720
次の方どうぞ
2024/09/12(木) 23:43:09.62ID:sEtsUeoh0
>>103
その自由度があるからC++でhtbl["key"]の様な事が出来る
Cじゃ意味ない仕様だけど、禁止する必要も無かろう
2024/09/13(金) 08:23:17.89ID:ykZRrldI0
>>101
"hoge"は長さちょうど32ビットだから即値でスタックに書き込むようになってるということなら
最適化によってそこまで省略されてるわけでsに実体がない件とはあまり関係ないな
最適化オフにするかもっと長い文字列で実験してみては
2024/09/13(金) 09:12:47.27ID:cjEIJ97r0
>>106
ありがとうございます

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

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

低レイヤプログラミングするならどう対応付くか知る必要がある場合もあるのは否定しないけど……
2024/09/13(金) 10:23:10.52ID:OBSQyTYbM
その抽象機械の定義はしょせん後付け
c言語のソースから生成されるマシン語の想像が付くようになるのはいいこと
2024/09/13(金) 10:25:26.12ID:y2ap91b60
C言語ハンドコンパイラ
2024/09/13(金) 11:25:36.89ID:9XTDQHQm0
>>109
機械語の想像がつくのが不要とも悪いとも言ってないよ。
そこから言語仕様を理解しようとすべきじゃないと述べてる。
できないから。
2024/09/13(金) 11:46:29.60ID:HT/On1VB0
所詮部外者の推測。
2024/09/13(金) 12:46:10.11ID:CiewPVvpM
今日は患者が多いですね
2024/09/13(金) 12:53:56.59ID:OBSQyTYbM
>>111
無用な心配
Xに溢れてるクソリプと同じ
2024/09/13(金) 13:50:08.30ID:cjEIJ97r0
>>108
ありがとうございます

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

printf("%s\n", s); が .sではputs(s); に置き換えられていたり
そうだよな〜
2024/09/13(金) 13:59:45.58ID:cjEIJ97r0
あー、実装には注目してるのか>自分
2024/09/13(金) 14:32:38.41ID:7dvxgxgq0
この場合に限っては言語仕様としての理屈もあんまり違わんけどな。
ただ、正式な用語を知ってると細かいことを調べやすいみたいなのはあるので便利。
2024/09/13(金) 16:10:44.34ID:HymUJJD5H
gccは配列に確保した短い文字列は最適化無しでもレジスターに載せてしまってるな
ポインター文字列は最適化してもレジスターには載らない
なので配列は配列として使った方が最適化で高速化される可能性があるという事だな
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
だよな
2024/09/13(金) 17:26:56.71ID:HymUJJD5H
>>119
んなこたーない
char foo[] = "hoge";
char* bar = &foo[1]; /* 敢えてずらしてみる */
printf("bar -> %s\n", bar);
で中身は何度も参照されるぞ
gccで試してみたら敢えてずらしてポインターに代入されたとしても、レジスターに文字列を保持したままprintfに渡すというトリッキーなコードが生成されたw
スタックに文字列を書き込んでそのアドレスを渡してるっぽい
2024/09/13(金) 17:45:50.36ID:HymUJJD5H
短い配列文字列をポインターに代入したらレジスターに保持する最適化を諦めるかと思ったら、そうじゃなくて意地でもレジスターに保持したまま処理を進めるgccスゲーよw
clangの場合はポインターも配列も常に静的に文字列を定義したものを使ってた
2024/09/13(金) 18:12:32.57ID:y2ap91b60
最近のCPUはレジスターに文字列格納できるんだな
何バイトくらいなら入るんだろうか
2024/09/13(金) 18:26:19.17ID:HymUJJD5H
gccの場合だと64bitだと8バイトだから最大7文字かなと思ったらレジスターを複数使ってでも載せようとしてたw
取り敢えず50文字まで試したけど全部レジスタに載ってた
でもこの辺はレジスタの空き具合にもよるのか?詳しくは分からん
2024/09/13(金) 18:41:27.03ID:y2ap91b60
何か執念みたいなのを感じました笑
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
2024/09/13(金) 18:59:17.17ID:7dvxgxgq0
>>122
その場合に参照されるのは foo であって、 "hoge" というリテラルではない。
"hoge" は foo を初期化する以外の用途に使われていない。
2024/09/13(金) 20:11:25.22ID:ykZRrldI0
>>127
データセグメントに確保するよりも
コードセグメントに書いたほうがすでにキャッシュに載ってるから高速なのかもな
2024/09/13(金) 20:41:46.32ID:cjEIJ97r0
速度の最適化か、生成されるオブジェクトの小ささかのトレードオフなんだろうね
テスト用のコードは小さいから、後者は気にせずゴリゴリやってるのかな…
2024/09/13(金) 23:38:57.27ID:uRdGeQ4y0
世の中CやめてRustにしろだとか
OpenAIの新AIが競プロで上位1割のプログラマに匹敵とか言うじゃない
今更人間がCを続ける意義ってなんなんだろう
2024/09/14(土) 00:03:48.69ID:UIMFiyQN0
COBOLみたくロストテクノロジーを理解出来る貴重な人になれる
2024/09/14(土) 00:19:19.91ID:N2YvcTj50
低レイヤに関わる資料が C を前提に書かれていたりするのは普通のことなのでたとえ C でプログラミングしなくてもある程度は身に付いてないと困ることはあるだろう。
2024/09/14(土) 00:39:08.66ID:0gsw2riP0
>>128
初期化する以外に参照されてないってのはおかしいだろ
printfで中身が表示されてんだから
ポインター変数のbar経由で中身を参照してるけど、中身は初期化で渡された文字列そのものだ
そもそもリテラルが参照されてないという言い方もおかしい
リテラルは単なる定数の簡略表記に過ぎず、ソースコード上だけの用語だ
実行時に消えてると言いたいのか?
そんなわけない、全く消えてない
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セグメントとか知らんの?
2024/09/14(土) 08:59:02.76ID:N2YvcTj50
>>134
> printfで中身が表示
意味が解らん。
表示されてる中身というのは foo の中身であってリテラルじゃないだろ。

> リテラルは単なる定数の簡略表記
整数リテラルなどは右辺値だが文字列リテラルに限っては左辺値。
文字列リテラルは実行フェイズにおいてオブジェクトとしての性質を持つということ。 (抽象機械の上では。)
ただし、この文字列リテラルが型変換された結果によって生まれるポインタはアドレス定数の要件を満たす。
2024/09/14(土) 10:32:56.64ID:0gsw2riP0
>>137
int i = 1;
printf("i -> %d\n", i);
この1は同じ様にリテラル表記以外に参照されてないというのか?
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 に変換される。 (メモリから値が読みだされる。)
2024/09/14(土) 12:58:36.93ID:N2YvcTj50
>>138
このときの 1 というリテラルは (rvalue の) 1 を返す式で、その値が i にコピーされた後で寿命を終えて消滅する。
printf の引数の i で取り出される 1 は i に入っている 1 であってリテラルの 1 じゃない。
整数リテラルはあくまでも整数を返す (生成すると言ってもいいかも?) 式であって、メモリ上のどこかにあるオブジェクトというわけじゃない。
2024/09/14(土) 13:32:49.89ID:0gsw2riP0
>>140
1は破棄されて"hoge"は破棄されないんだろ?
だから参照されてんじゃん
2024/09/14(土) 13:40:20.14ID:N2YvcTj50
>>141
>>122 の bar が参照しているのは文字列リテラルからコピーされた配列であって文字列リテラルではない。
文字列リテラルが破棄されないこととは独立した話だよ。
2024/09/14(土) 13:43:47.04ID:0gsw2riP0
>>142
barは配列のコピーじゃないだろ
ポインターなんだから
コピーしてるのはアドレス値だぞ
2024/09/14(土) 13:55:39.65ID:N2YvcTj50
>>143
そのポインタが指しているという意味で参照してると言ってる。
なにを言いたいんだ?
論点は「配列の初期化子として現れる文字列リテラルは配列の初期化以外に使われる可能性がない」という話だろ。
2024/09/14(土) 14:05:45.99ID:8t7wdnSS0
> char foo[] = "hoge";
> char* bar = &foo[1]; /* 敢えてずらしてみる */

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

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

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

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

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

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

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

char* foo = "hoge";

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

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

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

うーんでもなあ
某言語でいきなり &1 とか書けるの知ってたら別に定数にも記憶域期間持たせればいいじゃんとか思っちゃうなあ
とりあえずそうなっているというだけか
2024/09/15(日) 01:46:17.50ID:B6k8li/O0
>>175
> 静的記憶期間というのはスコープの事

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

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

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

> 配列の初期化子としての文字列リテラルは本来あるべき場所 (オブジェクト) から最適化で消えてるし
本来あるべき場所(オブジェクト)って何だよ?!
目茶苦茶だなw
これがコンパイラーと実行時に存在すべき値(rvalue)をごっちゃにした成れの果てだなw
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;
この場合数値リテラルを指すなんて言わんだろ。
2024/09/15(日) 13:50:20.31ID:krajCak80
>>char* foo = "hoge";
>>
>>のようなケースではポインタ foo は文字列リテラルを指してる

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

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

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

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

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

式として出てくる配列は一部の例外を除けば問答無用で変換されるので ++ のオペランドに配列が出てくるときも変換後のポインタ (rvalue) に対する演算 (実際には出来ないけど) として解釈されるということでいいと思う。
2024/09/16(月) 14:56:21.22ID:T6H9+ne50
>>195
配列オブジェクトの先頭の要素で左辺値じゃないって書いてあるな
ということは左辺値の式の中に出てくる配列は左辺値じゃなくなっちゃうということ?
なんでそんな仕様になったんだろうね
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
>配列はポインタに型変換される。

それは関数呼び出しの場合だぞ
2024/09/16(月) 17:29:54.17ID:E0fXFEgV0
この糞コテは半端知識のかまちょだからNGやスルー推奨
2024/09/16(月) 18:10:03.54ID:JwEVxA0h0
>>199
こっちは根拠になる規格の文面を提示してるんだから違うというなら違うと思う根拠を提示して。
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
流石に言ってる事が的外れ過ぎるのでもうちょっと勉強した方がいいと思うよ
2024/09/16(月) 22:25:26.45ID:z+htC2pc0
恥ずかしながら、静的記憶域期間(で合ってるのか?)という言葉を知らなくて、ライフタイムは「静的」に含意されているのかと思ったワ…
しかし、記憶域期間って違和感あるなぁ
2024/09/16(月) 22:30:23.39ID:z+htC2pc0
わけわからん
>>205は撤回します
2024/09/16(月) 22:43:01.97ID:JwEVxA0h0
>>203
余談だけど配列だけじゃなくて関数型も関数ポインタ型に調整されるよ。
208デフォルトの名無しさん (ワッチョイ 9f7c-2MD7)
垢版 |
2024/09/16(月) 22:52:59.17ID:TDYyKtgo0
>>201
規格に配列は常にポインタに変換されるなんて書いて無いぞ。
2024/09/16(月) 23:00:53.05ID:f3T7KT8T0
>>208
「常に」とは書かれていない
「ポインタに変換される」ではなく「ポインタに型変換される」

>>102がまさにそれでしょ
E1という配列が関数呼び出しでない場合においてもポインタという型に変換されているから出来ること
2024/09/16(月) 23:10:52.64ID:yKwOC4kA0
>char *hoge(char fuga[10])

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

だから、
>char *hoge(char fuga[])
添え字無しにしても良いことになる
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++ が出来るか出来ないかが問題なんです
2024/09/17(火) 11:06:41.56ID:bX/ekV+z0
一見配列を受け渡ししているように見えるけれど、
実際はポインターとして受け渡ししているってことでしょ
2024/09/17(火) 11:56:03.91ID:FRc2ySeD0
>>212
__func__ はマクロではないからだと思う。
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]) はどうみても蛇足(結局境界テストされてないし)
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
俺は尻より胸派なんだよね。
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]に意味が出る
2024/09/18(水) 01:22:58.84ID:9DvoA/Ly0
ド素人w
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.
2024/09/18(水) 07:51:55.61ID:9Z5pFVfx0
8/16bit時代の1バイトでも、1ステップでも減らせってのを経験した人と
最近の可読性、移植性、安全性優先設計が当たり前世代とのギャップ。
2024/09/18(水) 08:59:57.51ID:9DvoA/Ly0
ギャップの問題じゃねーから
文脈すら理解できないじじいはすっこんでろ
2024/09/18(水) 09:30:25.30ID:Qk7JHPx80
専門板によくいるアスペだな
2024/09/18(水) 10:34:45.37ID:UYQxUcxO0
225 は釣りでしょう
2024/09/18(水) 13:08:51.24ID:eTGNACyx0
>>222
sizeof(hage) で配列のサイズが求まるの?
と思ったら、「char * (ポインタ)の大きさを返すよ」みたいな警告が @gcc
2024/09/18(水) 13:15:29.42ID:UYQxUcxO0
釣りだか天然だか、分からなくなってきた 笑
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* になってるのがわかる。
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だけでよかったっけ?
ま、主旨はそこじゃないからいっか。
2024/09/18(水) 15:47:33.09ID:3rwci13t0
>>233
sizeof(char*)/sizeof(char) ということになる。
sizeof(char) は確実に 1 だから結果としては単に char* のバイト数ってことだね。

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

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

などとした場合に毎回警告が出てうざいことになるんじゃないか
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言語は難しいな
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 のライフはゼロよ!
2024/09/19(木) 06:32:15.59ID:zdFAvN1E0
本人が新たなネタを出してくるんだもん。
>>238 でもわざわざ
typedef char HAGE_TBL[10];
ってやっておきながら、なんで
void foo(HAGE_TBL hage)
なの? 構造体と同じように
void foo(HAGE_TBL *hage)
ってしてみたら新たな何かが見えてこないかい?
2024/09/19(木) 15:36:15.62ID:bQAYIDF0M
cは洗練された型システム持ってないんだからそんなところ頑張っても無駄なんだよ
この悟りに至って始めて脱初級
原則語るならそれからにしてくれ
2024/09/19(木) 15:40:30.12ID:cPR7xA8Z0
Cは一部の洗練された型システム持つ言語よりも遙かに自由度が高い
そこが分かってようやく中級レベル
あとは本人の努力次第で空も飛べるし海も潜れる
2024/09/19(木) 15:50:31.78ID:c2v//UgT0
おいおい
そのぶん危険なんだから持ち上げる部分でもないだろ
お前も初級
2024/09/19(木) 17:19:57.71ID:cPR7xA8Z0
ナイフは危険だが有用
不器用者は使わない方が良い
2024/09/19(木) 17:44:18.26ID:8NYyNXbk0
>>244
typedefは新たな型を作るわけじゃない別名を定義するだけから

void foo(char hage[10])

void foo(HAGE_TBL hage)
は同じことだよ
2024/09/19(木) 20:28:27.65ID:c2v//UgT0
>>248
c言語ってとっくの昔から自由にキャストしまくれる言語じゃないの知ってるか?
さぁお前はなんと答える?
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
2024/09/20(金) 07:15:20.20ID:dn4N5ANS0
>>249
それが不満なようだから「HAGE_TBL * にしたら何ができるか考えてみては?」ということでは?
2024/09/24(火) 10:26:30.49ID:/2yiAcKTp
昔のコンピュータはメモリー少ないから、intで文字持つなんて贅沢だったんだよ
2024/09/24(火) 11:12:54.47ID:CARZyoOh0
次のジジイの的外れな言いたいだけコメントを先取り
intは16bit以上だぞ
2024/09/24(火) 11:31:50.53ID:QMMOdtbOp
違うよ、intは処理系依存だから8ビットの場合もある
2024/09/24(火) 11:49:08.20ID:vvKB2ofDd
規格書読め
2024/09/24(火) 11:54:52.88ID:kMxfGMRcM
次のジジイ
getcharがなぜintを返すか
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";
と書いて、うっかり書き換え防止に勇往邁進するのじゃ。
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)は同一で良いので、初期化を一回で済ませて後者の解釈。
結局、前後者両方の解釈が出来るようになっているように見える。
2024/09/25(水) 19:34:19.49ID:8eNfi/Op0
まだやってるキモ…
いくら話題無いからってこれは誰も幸せにならない
2024/09/25(水) 23:05:12.18ID:YARyzAjz0
ええんちゃう別に
どうせ5chに答えを求めてやって来る人なんてもうおらんのやし
2024/09/25(水) 23:07:41.16ID:1jKu7Jqx0
青い鳥を探してます
ここに来れば教えてくれると聞いて来ました
2024/09/26(木) 09:49:09.10ID:oesVQEFi0
PythonとかC++のスレで規格持ち出して言い合いしてるのを見たことないが
何故かここではよく起こるな
2024/09/26(木) 10:19:33.26ID:944iXMZC0
Cなんてのは対象CPUの違いとかでも標準とかけ離れた実装して来るのにね
268デフォルトの名無しさん (アウアウエー Saaa-rNKn)
垢版 |
2024/09/26(木) 10:58:03.72ID:R5lWYvWFa
>>264
これ++
2024/09/26(木) 12:24:13.03ID:B+Au+yIB0
>>266
じゃあ何を根拠にしてるの?
妄想?
2024/09/26(木) 14:46:28.31ID:oxN8/Up7M
perlあたりで頼む
271デフォルトの名無しさん (ワッチョイ 022d-w5sm)
垢版 |
2024/09/26(木) 16:39:09.57ID:oesVQEFi0
>>269
君の問題点は規格読んでるの間違えてるとこだよ
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 の結果を見るか
2024/09/27(金) 00:16:01.96ID:dEIfxD4z0
>>273
> これの1行目は文字列長によらず固定値にならない?

その通りだよ。 固定値になってたぶん意図通りではない。
その話は >>222 がボコボコに言われてもう終わったよ。
276デフォルトの名無しさん (ワッチョイ d27c-tavX)
垢版 |
2024/09/27(金) 00:20:08.16ID:qUi2cfOF0
もう >>222 を晒すのはやめてあげて......
2024/09/27(金) 00:22:55.64ID:xb00usC10
222は釣りでしょう
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で入力待ちにするとかフラグを間に挿入するとかではなくユーザーからの入力があった場合のみ一時停止したい
2024/10/15(火) 13:29:34.78ID:WZg8MP0BM
まずメインの処理を一時停止可能な作りに変える
2024/10/15(火) 13:32:02.14ID:nD7e5Gmv0
>>280
ソースコードの中にファイル名がpauseのファイルが存在するかを判断するロジックを追加
もし存在するならループに入りそれが消えるまで待てばいい
2024/10/15(火) 13:32:39.39ID:WZg8MP0BM
あとコンソールプログラムなのか?
環境を正確に書きな
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
ちょっと前古いサイト参照してたら環境違いすぎて苦労したし古い言語の宿命なんすかね
2024/10/15(火) 13:51:52.41ID:9xoHIO4Lp
環境依存でデバイス依存だからなぁ
2024/10/15(火) 14:34:22.10ID:UH8LrgydM
やりたいことがnon blockingでgetcharしたいってことだとするとwindowsだconsole apiを使う
例えばwindowsのreadline互換実装であるwineditlineを見るといい
2024/10/15(火) 14:36:11.97ID:UH8LrgydM
ただめんどうなので今回のように止めたいだけならこういう簡易的なやりかたがある
ttps://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
すごい簡単だね、これなら作れるかもしれない
入門書に記載がないのが唯一の不満だよ
2024/10/15(火) 21:39:15.79ID:C4BE9tl00
>>285
言語の古さというより用途だろう。
低レイヤ部分を実装する用途に使う言語だから重厚なランタイムサポートを必要とする機能は入れられない。
2024/10/30(水) 01:54:25.92ID:BzmMNap80
いにしえの議論掘り返してすまんが、>>182の例示による説明が最も本質を突いてるように思う、感謝のレス

文字列リテラルは配列初期化子の構文糖でありながら、また文字列をも表すという二義性を持つ、という云うのはあくまで言語設計の為の汚いハックでしかなかろ?
2024/10/30(水) 10:28:23.97ID:BRGgIRAsp
Cの変数の型指定なんて気休めだからなぁ
2024/11/01(金) 06:24:42.85ID:+lXxXu7p0
気休めじゃなくて気疲れの間違いだろ
長さやsignednessでわけわからん変換しやがるバグの根源と言ってもいい
2024/11/01(金) 11:11:58.05ID:YgeQjLzz0
訳が理解できるようになるまで、お前は使用禁止
295デフォルトの名無しさん (ワッチョイ 622d-CyeO)
垢版 |
2024/11/03(日) 13:27:09.33ID:N1lOck0q0
https://togetter.com/li/1471386
こんな事本当にあるのか?
2024/11/03(日) 13:36:34.35ID:e8fWHn4Q0
もともとバグってたのを対処療法で回避しただけじゃねーの?
そんな驚愕するほどのこととは思わんな
スペースは文字列に加えるってことだろ
2024/11/03(日) 13:45:35.99ID:WzNRcFfL0
ちゃんとソースを公開すればみんなで治してくれるよ
298デフォルトの名無しさん (アウアウエー Sada-GGiU)
垢版 |
2024/11/03(日) 16:06:15.80ID:XxnHrPnRa
バイバイおさるさん
2024/11/03(日) 17:27:36.06ID:4RaSizfZ0
char []s = "うんこ"
s[20] = 0; // どっか判り難いとこにこんなのが紛れてる
回答「(sに)もっとスペースを追加して!」
2024/11/03(日) 17:39:48.03ID:WzNRcFfL0
どこか知らない国で "うんこ" が40バイトくらいある所があったりして
2024/11/03(日) 19:33:15.95ID:/vDzNoeA0
業務だとヨソの担当のモジュールに口出しするのがめんどいから対処療法で握りつぶすみたいなことはあるのかもしれん。
2024/11/03(日) 20:22:14.37ID:5dhdDFeF0
s("※んこ"の値)は読み取り専用になるんじゃないかな
処理系によるかもしれないけど
2024/11/04(月) 01:39:12.77ID:rgFUj3k30
>「ここにスペースを入れてみて」「もっと沢山、もっともっと」
この辺りコピペ怪文書にしか思えないんだが
境界チェックしない言語ならありふれたバグだし、元文書はちんぽとかだったんじゃないだろうか
2024/11/04(月) 13:45:59.93ID:UGhFqLBmp
どうせメモリーリークだろうな
データ位置を変えると現象が変わるなんて典型的だろ
2024/11/04(月) 13:48:37.25ID:nJwTTfVk0
>>302
誤りでした
2024/11/04(月) 14:02:09.24ID:SHEOgeyw0
パンパース当てるのが正しい
2024/11/04(月) 20:44:45.70ID:rgFUj3k30
おむつってあんま進化してないよな
吸収率だとか漏れだとかそんなのは上がってるだろうが、基本的な機能は変わらない
介護業界でも排泄介助っていう高齢者の汚物処理って割と大変な部類だと思うんだが
そろそろおもつ革命を起こさないと業界崩壊するんじゃないの
プログラミングでなんとかできませんかね
2024/11/04(月) 20:51:48.25ID:rgFUj3k30
高齢者に限らず若い子でもうんこ漏らす時は漏らすし、そういう緊急時にも安心できるぐらいのものがそろそろ欲しいな
紙ベースで吸収率だとかで脳が退化してるおむつメーカーではおむつ革命はとても期待できないだろう
2024/11/04(月) 21:52:48.49ID:lap6rdZH0
介護対象に飲ませるうんこがあまり臭くなくなる薬みたいな技術は進化してるぞ
2024/11/04(月) 22:10:34.76ID:TtMQ1IOc0
薬で臭くなくしたうんこだからといって介護対象に飲ませるのはどうかと思うぞ。
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
2024/11/04(月) 22:57:47.13ID:nqjJRhEX0
ニホンゴ ムズカシイネ
314デフォルトの名無しさん (ワッチョイ 92ad-guIA)
垢版 |
2024/11/05(火) 05:14:52.21ID:srt1vo+S0
逆に考えるんだ。うんこはどうしても出てしまう。だったらそれはそのままにしておけ。
介護する側がそれを気にせず処理出来るのであれば問題は消滅する。だから介護者が
それを気にならなくなるような精神に効く薬を作れば良いんだ。
2024/11/05(火) 06:59:24.91ID:tCS75Iej0
>>295って実行時エラーの話なのかコンパイル時エラーの話なのかもわからなくない?
2024/11/05(火) 15:17:41.47ID:wPeW8RQX0
NASAはネットなんてなかった1970年代にボイジャー1号打ち上げて
240億km離れててもプログラムを送受信してるのに俺らときたら
2024/11/05(火) 21:46:02.31ID:JaQWNq5Na
どうみても脳筋エラー
2024/11/05(火) 21:49:31.93ID:qHb8dozk0
脳筋がCを使いません
2024/11/05(火) 22:03:42.83ID:MR2KM4Hj0
240億kmの伝書鳩
2024/11/06(水) 09:37:06.45ID:csbv8Qbd0
1970年代にもテレビやラヂオはあったわけでね…
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に変換できませんってメッセージ出るし型が違うのかなと思うが
だとしたら何故文字設定いじれば解消するのかもよくわからない
2024/11/07(木) 22:09:23.47ID:QiubzAbP0
LPCTSTR ではダメですか?
当てずっぽうですが
2024/11/07(木) 22:10:11.25ID:QiubzAbP0
>>323
そういうことじゃないのか、ごめんなさい
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でやった、そしたら上記の結果になるんすよねえ
2024/11/08(金) 10:36:22.46ID:ce4XJJ6Np
最近のVSはCの当たり前な構文が通用しないから困るよな
329デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
垢版 |
2024/11/08(金) 10:51:18.29ID:+8UCAN2P0
>>328
Visual Studio側の問題なのこれ?
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
ありがとう、だけどダメそうだ
文字コード関連のエラーなんだろうけどどうしたものか
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に代入できませんって言ってるように見えるけど
2024/11/08(金) 16:25:31.55ID:1lsgaMlnp
signedとunsignedでも怒り狂うからなぁw
いいんだよ、こっちは中身しってんだから余計なエラー吐くなよ
2024/11/08(金) 17:24:12.05ID:Me1tPYCI0
>>338
> 昔の仕様だとconst charに見えて実際は違かったってこと?

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

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

でもまあ結果的に const の問題ってのは妥当なみたいだね。
2024/11/09(土) 14:04:43.61ID:L+GgUCLJ0
LPTSTR lptStr = (LPTSTR)TEXT("テスト"); で警告出たりするのかな?
糞面倒だけどキャストで通るならそれ以上の対応不用
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
そんなこと言いながら何回もレスくれるなんて
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として) 受け取れば良いと思う
2024/11/10(日) 09:35:26.26ID:a6nPaG4v0
>>344
オンラインコンパイラで VS17.10 を確かめてみたが文字列リテラルには const は付かないぞ。
お前が間違って C++ を使ってるという >>343 の意見に一票。
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
つまりスレタイ嫁ということか
2024/11/11(月) 11:32:56.82ID:CKwZRMfb0
>>343 は速攻ぶったたいてるが、学生か初学者はこういう経験しとくもんだ
Cは汗に似て泥臭いんだよ

俺もあとで追試しよっと テキトーでやってて知識整理できてないわ
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
まるちんこしね
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;
}
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

以上のソースでエラーを吐いてしまいます。リソースをベタ打ちで記述する参考サイトが少ないので判断がつきません。
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かなぁ.
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

どちらでも同じ結果になりそうだけど
見当違いだったらごめんなさい
2024/11/24(日) 22:25:28.27ID:/KMFo2rr0
gcc -S
でアセンブラ出してみてみたけど、
いや、アセンブラよくわからないんだけど、
修正前の iと jは初期化時にいずれも符号拡張されて大きな値になっていて
その後なぜか iの方は下32ビットで、jの方は64ビットで計算されているようで、正しいのはむしろ jのように見えたがごめんなさい
本当にアセンブラ分からないので多分間違ってます…
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

これはこれで正しいと思うが
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にしないとうまくいかんのだ.
2024/11/24(日) 23:36:41.28ID:BVpPJ8iH0
右辺が 1<<31だと
左辺が intだと0x80000000がそのまま、
longだと 0xffffffff80000000に拡張されて転記されるからでは
2024/11/24(日) 23:49:31.80ID:BVpPJ8iH0
unsigned long i = (unsigned long) 1 << 31;
とすれば iは 0x80000000になるかと
2024/11/24(日) 23:50:27.79ID:BVpPJ8iH0
1lとするのと同じだけど
2024/11/25(月) 02:42:55.67ID:EAdMpn4b0
>>367
言語仕様的に解釈すると……

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

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

不定とか処理系定義ではなく未定義と明記されてる。
つまり言語仕様上は何が起きても良いということ。
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として表せないからか.

皆様,ありがとうございました.
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

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

コメントも含めて読むと
陰謀論が収まら無い理由が判明する
2024/11/25(月) 09:46:02.42ID:NtppUMW10
なるほど、32bitのみでやるときも1u<<31にしないといけないのか
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
))
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と比較する値はループ内で変動しないよね?
だったら毎回計算せずにループ前で計算して別変数に記憶しておくほうがよくないかい?
2024/11/30(土) 00:28:19.69ID:b6kb1MmL0
今時のコンパイラは十分賢いので気にすることない
2024/11/30(土) 00:37:35.21ID:VtvuoLT+0
ユーザーの犯したバグも直してくれるとありがたいなあ
2024/11/30(土) 00:47:56.34ID:k7UOR52k0
シフトでも掛算でもどっちでもいいけど
質問者のように読んで悩むのは問題
コメント書いておけ

ループ内毎回計算か最適化でループ外に出したかは
コンパイル後の逆アセンブルとかで確認するの?
だったら間違いないようにループ外に出す方が良い癖にもなると思うのだが
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
))
2024/11/30(土) 11:23:36.84ID:k7UOR52k0
なんでこんなに読めないのか理由がわかった
変数名や字下げや「,」前のブランクなど
論理そのもの以前にコーディングの美しさが全然無い
2024/11/30(土) 11:53:49.47ID:VtvuoLT+0
この掲示板書き込むと、スペースやタブは消されちゃうんだよな。
だから綺麗に整形した状態でソース載せたいなら、
全角スペース使うしかない。
あるいはソース公開出来るサイトにアップロードして、
そのリンクを張るなりする。
そういうサイトは、>>1 に書いてある。
2024/11/30(土) 12:18:13.55ID:tlb45efI0
美しさとか言い出したら自転車置き場の議論なるからやめとけ
2024/11/30(土) 12:21:38.32ID:VtvuoLT+0
https://mevius.5ch.net/test/read.cgi/tech/1402617355/

色々試し書きしたいなら、テストスレがあるから、そこでやって
2024/11/30(土) 15:56:34.50ID:k7UOR52k0
python自体のスタイルPEP8に加えてCについてのPEP7も整備されているのに
https://peps.python.org/pep-0007/
あえてそれに背くコーディングをする理由が見つからない
GNUのへんてこコーディングも規約文章は整備されている
2024/11/30(土) 16:28:54.09ID:54hbVEvk0
他人のふんどしででかい顔のpythonは存在自体がきしょくってぇ
そんなもん使ってる奴の押し付けに従う気にはとてもなれないって感じぃ
2024/11/30(土) 16:41:54.15ID:VBYh6hCP0
自分の使ってるテキストエディタにコピペして整形を実行したら一瞬でどうとでもなるんだからどうでもいいだろ。
2024/11/30(土) 17:05:29.66ID:k7UOR52k0
func(a , b , c );
func(a, b, c);
上から下への変換はインデントとは異なりやっかい
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
勝手ながら削除しています。素人考えなのは承知です。
仕事柄、利権や法にはうるさくあらねばなりませんので、リスク回避です。
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は必須と思って頂きたい
2024/11/30(土) 18:12:39.34ID:VtvuoLT+0
Windowsの内部構造を知るのは時間の無駄なのか
2024/11/30(土) 18:17:30.16ID:54hbVEvk0
BITMAPなんちゃらに詳しくなった所でWindowsの内部構造を知ったことにはならないんだがぁ?
現行Windows11の内部構造なんてきしょすぎてそもそも知りたくもないわ
2024/11/30(土) 18:33:02.64ID:VtvuoLT+0
そういう人はソフト開発に向いてないよ
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);
  // これ以降があるのか…
}
2024/11/30(土) 18:53:59.75ID:k7UOR52k0
bmpCoreHeader.bcBitCount の範囲チェックが必要そう
uint64_t max;
max = 1 << 64; // max == 0x8000000000000000 で意味がありそう
max = 1 << 65; // これ64bit整数の範囲超えているよね、プロセッサ依存の値になる予感
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なのか
2024/11/30(土) 19:23:29.64ID:ePDG6JlId
カラーパレットを使うのは1,4,8って決まってるんだが
2024/11/30(土) 19:52:07.91ID:exhSsXMya
トリプルポインタが理解不能です。
2024/11/30(土) 20:06:07.06ID:k7UOR52k0
1, 4, 8以外のエラー処理が無ければ手抜きプログラムだよ
2024/11/30(土) 21:42:40.50ID:54hbVEvk0
これが俗に言う無能な働き者かぁ…
2024/11/30(土) 22:31:58.70ID:cI+uLRSv0
粘着キショい
2024/12/01(日) 11:20:07.96ID:HNZEO20Lp
>>407
理解してる俺でもデバッグん時に面倒だから使わない
2024/12/01(日) 11:21:42.42ID:+XByeWPN0
理解するな、感じるんだ!
2024/12/02(月) 07:39:26.68ID:UIzNnBqa0
スマホ世代もCってるなんて頼もしい限りだな
https://pbs.twimg.com/media/GdrvuRtWgAA1DOe.jpg
2024/12/02(月) 10:00:18.95ID:cKcAe5N2p
なんだその数字w
2024/12/02(月) 12:52:17.82ID:5A4jg9rQ0
>>413
なんていうアプリで書いてるんだろ?
2024/12/02(月) 16:27:58.74ID:sZTu4RGZ0
>>415
アマゾンにあった
「 モバイル C { C/C++ コンパイラ } 」だって
¥1,546
/dp/B00MFXHPBW
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シナリオをモックするのに役立って、フロントエンドの作業を独立して行えるようになるよ
2024/12/05(木) 08:13:19.15ID:XxVPE2wx0
前はAIDEってのもあったような
自分も購入済みだったけどストアから消えた
2024/12/05(木) 08:18:47.93ID:GShkk8fF0
>>418ならただの宣伝マルチポストなのでさっさとNGしておくように
2024/12/08(日) 09:05:36.00ID:NBQmwlWPa
char text[32] = "count="
sptintf(text, "%s%d", text, 100);


↑これって問題ない? 
2024/12/08(日) 09:31:43.48ID:ukMyBbJC0
オーバーフローを懸念。
2024/12/08(日) 12:39:42.22ID:xllqP0wk0
snprintf
2024/12/08(日) 13:05:39.35ID:6js3fqHP0
>>421
sprintf のことだよね?
問題はある。
領域が重なるオブジェクト間でコピーが行われるときの動作は未定義とするという仕様になってる。

それと関数シグネチャを見ればわかるが引数のところに restrict ってついてるでしょ。
その性質上、他の引数がこれと領域が被ってはいけないというサインだ。
まあ引数を使わない関数であれば restrict 修飾されたポインタが指す領域がかぶってもただちに違反ではないが、常識的には渡す以上は使われるものと想定すべきだよね。
2024/12/08(日) 16:35:15.95ID:iOnFgjmu0
>>421
問題ありだ。1行目末尾にセミコロンがないじゃないか
あと、学校の宿題の答えをこんなところで聞いちゃいかんぞ
2024/12/08(日) 20:16:31.35ID:rVbvHhAN0
最近の小学校ではこんな宿題出るのか
末恐ろしいと言うか、頼もしいというか
2024/12/09(月) 01:07:25.53ID:ToKnc/9y0
コンピュータの授業とか普通にあるんだろ?今って
俺からすると羨ましい限りだわ
でもダンスの授業はいらん
2024/12/09(月) 01:41:05.76ID:izrgU9L90
元々芸術科目や体育は面倒な存在だし
ダンスはそれらが合わさって一見最強に見えるだけで専門科目に比べれば実は大した内容じゃない
子供は加減の付け方を知らないから物凄い壁に見えるんだろう
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時間の対話で人間の性格をコピーできる [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1733576027/

コメントに面白いことが書かれている
2024/12/09(月) 13:52:01.90ID:IOR7vjsa0
2時間で初等教育から大学院レベルまで学習完了したら
人間要らなくなりそうだな
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
チェックボックスとかラジオボタンの状態を保存したいんだけどなんて調べればええんすの?
現状ウィンドウを破棄する前にコントロールの内容を取得して状態に合わせた変数を初期化ファイルに保存、再起動時に変数に対応した状態に再設定するみたいなのしか思いつかん
冗長になって見づらいだろうし代替案を知りたい
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
これで行くしかないのか
2024/12/10(火) 10:01:08.05ID:gzrtf0Gl0
対応表をだーっと並べる、control_state_read_and_write(bool is_write, ...) みたいな関数を置く、など
割り切ってしまえば工夫のしがいはある

ただ、そのときはよくても、あとになってみたら黒魔術でしかなかったりする
愚直なのもいいぞ
2024/12/10(火) 17:10:24.87ID:TsXGEoU20
>>435
何がどう"冗長になって見づらい"のか?
2024/12/10(火) 19:03:49.02ID:ruXLR+AW0
属人化だとか 尻アナルライブだとかあったような
2024/12/10(火) 19:06:39.85ID:RLBTgK1d0
身体に刻む学習方法
2024/12/10(火) 21:11:22.07ID:RajTC0DHa
>>422-424
ありがとん
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);
2024/12/10(火) 21:51:03.48ID:ruXLR+AW0
this->
ナニコレ
もしかしてC言語スレでC++使えるぞあぴーるですか!
すげー
2024/12/10(火) 22:13:12.06ID:ujXLUuNp0
>>443-444
もし C++ の話なら上述 (>>424) の restrict の説明が役に立たない。
C++ に restrict は無いから。
2024/12/11(水) 07:46:28.90ID:P/b6xwK7a
API自体はC言語なんでそこらへんはスルーでお願い
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を試してみたところ、エンドポイントのシミュレーションツールがテストプロセスを非常に効率化してくれました。
2024/12/11(水) 23:04:37.50ID:xKzgcnaC0
MSは採用していないのかな?
なんでこんなにバグが多いんだろう
451デフォルトの名無しさん (ワッチョイ 33b8-iztn)
垢版 |
2024/12/15(日) 15:13:40.89ID:jrfqO5QN0
1つめのプロシージャで宣言した変数を2つ目のプロシージャで使うって頑張れば可能?
それともグローバル変数宣言したほうがいい?
2024/12/15(日) 15:17:17.63ID:Vq+PRAKz0
引数で渡せばいいんじゃね
453デフォルトの名無しさん (ワッチョイ 33b8-iztn)
垢版 |
2024/12/15(日) 15:23:28.37ID:jrfqO5QN0
>>452
それも考えたんだけど、プロシージャ作るときライブラリ側が指定した引数以外渡せないんじゃない?
2024/12/15(日) 15:31:40.27ID:wmU+aa0b0
そのプロシージャーを同一モジュール内lに記述して、
変数をスタティック宣言する、とか
455デフォルトの名無しさん (ワッチョイ 33b8-iztn)
垢版 |
2024/12/15(日) 15:38:22.49ID:jrfqO5QN0
>>454
そんなことできるんかよ知らなかった
{}内かつ、他のswitchと干渉しないところにベタ書きすればいいってことよね?
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が出てしまう
2024/12/15(日) 16:54:06.72ID:Wjdp3H7kM
モジュールとかプロシージャはc言語の用語ではないよ
誤解を生むからなるべく正しい用語で
あるいはソース書け
460デフォルトの名無しさん (ワッチョイ a301-2Zui)
垢版 |
2024/12/15(日) 17:04:08.92ID:5Q71kCB70
Cで作ったソフトにアイコンをつける方法ありますか?
コンパイラはmingw
2024/12/15(日) 17:07:42.25ID:SAQ/jMe00
>>460
リソーススクリプトを書いて windres コマンドでコンパイルしてリンク。
462デフォルトの名無しさん (ワッチョイ 3338-UX28)
垢版 |
2024/12/15(日) 17:11:49.15ID:jrfqO5QN0
>>459
ウィンドウプロシージャでおk?
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
よくある質問に書いてあんだからそれを読めよ
2024/12/15(日) 21:32:26.28ID:8K4C8OcF0
2つ目のプロシージャってなんやねん
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
自分の知識だと外に置くくらいしか思いつかんかった
2024/12/16(月) 18:20:09.41ID:/03Ox5VG0
TCHARは_UNICODEのマクロの定義の有無によって16bitまたは8bitになる
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のサイズで割ってどうしてサイズが出せるの?
2024/12/16(月) 22:41:01.10ID:/03Ox5VG0
>>472
ごちゃごちゃ考えてないで
とっととデバッガ使って値を確認しな
2024/12/16(月) 22:48:31.98ID:26oXJeTE0
配列の大きさを得るために配列のバイト数を配列要素のバイト数で割るのはごく一般的なイディオムなので何がわからないのかわからない。
475デフォルトの名無しさん (JP 0Hff-K+1m)
垢版 |
2024/12/16(月) 22:57:30.45ID:Q04ymynwH?2BP(1000)

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

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

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

ライブラリとしてまとめるならどちらにも対応したほうが良いこともあるかもしれんけど。
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
2024/12/19(木) 15:35:21.01ID:boHB/shj0
strcat()、実装大変そうだな
2024/12/19(木) 18:03:52.50ID:KNZC4rFA0
UTF-8のバイト数ではなく文字列の長さを調べるソース
https://drive.google.com/drive/folders/10jgzKVUYPXQhC566bBmrqnnBLJI4pEbL
2024/12/19(木) 18:29:36.25ID:ByBpVqn8M
>>497
Unicodeで文字列の長さって何?
書記素クラスタか?

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

https://www.unicode.org/Public/emoji/latest/emoji-zwj-sequences.txt
2024/12/19(木) 19:46:58.36ID:zv08w2oi0
main関数用のヘッダファイル用意してて草
2024/12/19(木) 19:59:42.44ID:iU+Lg9qY0
unicode怖ひ
2024/12/19(木) 20:00:17.69ID:y/hB6qNpr
退勤前に>>497見て、
ああ、"フロッピーディスク"って入れたら8が返り、"ハードディスク"って入れたら2.5が返るような関数だろ。
って思いつつ帰宅したら、またお前らときたら
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
つまりどういうことだってばよ
2024/12/21(土) 22:49:23.50ID:Bjr5M2i00
>>516
Win32の板できけ
518デフォルトの名無しさん (ワッチョイ eb53-XATa)
垢版 |
2024/12/22(日) 02:23:50.05ID:SmvDArN50
>>517
なるほど
2024/12/29(日) 08:16:36.48ID:5Nra/jss0
%*d
こんなの初めて知った
B1.3 Formatted Inputに載ってたけど読んでなかった
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
実は正規表現が使えるんだぜ
2024/12/31(火) 13:46:40.77ID:KJy4fxay0
ネイピア数や円周率を誤差ナシで扱えると嬉しい
2025/01/02(木) 15:48:37.33ID:8mwDch1n0
円周率って math.h とかに入っているの?
それとも
pi = 4.0 * atan(1.0);
とかで持ってくるものなの?
2025/01/02(木) 19:46:55.76ID:dC27qXct0
>>524
言語仕様にはないが、処理系によっては有ることもある。
特定の環境でコンパイル・実行できればよいならそれを使えばいいし、そうでないなら工夫も必用だろうし……
どのくらい移植性に配慮するかによるんじゃないの。
2025/01/02(木) 19:58:10.79ID:dC27qXct0
double の精度が有限な以上は無理数を誤差なく扱うのは不可能だし、どうしてもやりたいなら数値計算ではなく解析的な計算をするしかない。
ただ、工学的な用途だと誤差をゼロにする意味はあまりないことが多くて、誤差の程度が保証されることが需要。
たとえば分子一個分より小さい桁の部分で正確でも何にも使えないから考えるだけ無駄でしょ。
2025/01/02(木) 22:08:15.15ID:8mwDch1n0
ちょっと解析的な計算というのが正確にわかっていない

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

解析的な計算というのは a *x^2 + b * x + c = 0 なら手計算で解けるよというやり方?
使ったこと無いけどマスマティカとかそういうソフトだっけ?
2025/01/02(木) 23:00:55.85ID:dC27qXct0
>>527
そう。 要は数式の変形で解くやりかたってこと。
どのくらいのものを扱いたいかによるけど四則演算と巾乗くらいからなる簡単な式を扱えればよいなら C で書いてもそれほど高度というほどではない。
リスト構造を作って切り貼りするってだけなので。
とはいえ、計算を始めたいときにやる下準備としてはかなり面倒臭いだろうとは思うけど。
2025/01/03(金) 13:18:29.38ID:4R6C6cdS0
なるほどね、解を公式化しておいて虚数が必要か判定する感じだろうね
530デフォルトの名無しさん (アウアウエー Sa23-Y8TR)
垢版 |
2025/01/05(日) 10:58:58.82ID:8kdOFrcZa
πをπのまま計算して最後にmπで出力してくれれば良いのにと思うことは多い
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++のスレいけよ
2025/01/17(金) 19:31:42.24ID:frJzdCet0
先に心療内科の外来に相談した方が良い
2025/01/17(金) 21:10:14.26ID:SH5Lw3P50
>>533
厳密に言うと extern int hoge(); と暗黙に宣言したかのように扱うルールだった。 C89 では。
C99 で削除されたルールだけど今でも警告付きで通してしまう処理系はあるな。
2025/01/17(金) 23:50:49.72ID:SH5Lw3P50
>>535
C では void* から他のポインタへ暗黙の型変換が許されるが C++ では許されない。
コンパイルエラーになってるならたぶん C++ を書いてる。
(処理系によってはオプションでエラーや警告を制御できることもあるけど。)
2025/01/19(日) 13:12:34.18ID:pnTgRmOE0
二次方程式を式変形で解くのは「代数的」な解法な気がする

「数値的」解法はコンピュータ利用?、「解析的」解法?
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のコテハンなんだからたいして考えてモノ言ってるわけじゃないだろうよ
2025/01/20(月) 17:55:23.24ID:CIg2w/Qm0
円周率は大体3
2025/01/20(月) 20:30:52.25ID:pd7YCKBV0
奥村先生のアルゴリズム事典に二次方程式を解くコードが載ってる
解の公式だけで解くと桁落ちが生じるので解と係数の関係も使ってる。
2025/01/20(月) 23:33:08.85ID:acq30m6X0
ポインタについて分かりやすく説明してくんろ
2025/01/21(火) 08:28:35.17ID:yRL5l1cZa
最近どっかで観た流れだな
はちみつのコピペか
2025/01/21(火) 19:43:21.46ID:OWL66YDB0
コンピュータのマシン語は高級言語で言うところの「変数名」による識別子は存在しない
なにによって識別するかは
レジスタの固有名詞か
メモリでの記憶場所を示すメモリアドレス

メモリアドレスを記憶させる変数やレジスタを
特にポインタ変数やポインタレジスタと呼んでいる
2025/01/22(水) 00:18:16.97ID:4EbDFbn90
生ポは人類には早かったってばっちゃんが言ってた
2025/01/22(水) 01:06:34.38ID:pXnIX9Zj0
ポインタには型があってだな、
intとか自分で定義した構造体とかの型が

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

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

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

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

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

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

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

不具合調査はソースコードも大事だけどマシン語の流れも追わなけば
本当のところはわからんよね
更には投機実行や分岐予測もあるわけで
実際の稼働はソースコードによらないしマシン語とも異なる可能性が存在する
2025/01/29(水) 19:43:26.10ID:4AeLlQVLp
え?
最終的にCPUはマシン語として解釈して動くだけだからなぁ
人間がどう捉えようがそこは変えようが無いんだ
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 とか。
2025/01/30(木) 09:29:28.34ID:x87hbq3s0
コンパイラひバグが無いかぎりは高級言語のソース通りに動くから大丈夫だぞ
昔のファミコン並みに処理ステップ数に要するクロックを数えてラインスクロールさせるとかでもしない限りタイミングも気にする必要無いし
2025/01/30(木) 11:48:21.95ID:1fx7BZxf0
むしろマルチコアの問題のほうがでかい 自分も、高効率に書ける自信がない
2025/01/30(木) 12:22:11.10ID:K2FsQpfY0
C言語に限らずJavaでもPythonでもLispでも最終的にはブランチしまくりヒープアクセスしまくりなマシン語で動いてるんだから心配しても意味ない。
たまたまC言語はマシン語に近い距離にある言語なのでマシン語「でも」デバッグできてしまうだけの話。
2025/01/30(木) 16:25:32.68ID:dOgLqtqk0
コンパイラ最適化の時点で追うのが難しい
ましてや投機実行とくると…
2025/01/30(木) 16:27:29.00ID:dOgLqtqk0
思い出した continue や break は優遇されている印象
2025/01/31(金) 01:34:44.08ID:5fFn3R6V0
Pythonだって安全じゃないしな
俺この間自作したPythonプログラム動かしたら数秒後PCが落ちた
XPとかWindows7とかじゃないぜ、Windows11の最新が突如電源が切れたんだよプツンて
まじでビビった

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

ロジックバグなんだろうけど、こういうのはしかし難しいね
2025/01/31(金) 11:20:36.48ID:h9+hJoTPp
ドライバの秘孔を突いただけだから
2025/01/31(金) 11:30:08.08ID:4ClqIqkw0
ドライバーに致命的不具合があったとしても
ブルスクになる程度で
電源断まで行くと言うのは考え難い
2025/01/31(金) 11:49:46.06ID:h9+hJoTPp
ドライバの秘孔を突いてカメラに搭載のチップが電源ライン直結になったとかじゃね?
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が落ちた
残像攻撃を受けた感じだったのかもしれん、コロ先生の分身みたいなやつ
2025/01/31(金) 19:36:45.83ID:R7Zj8Mog0
プリエンプティブカーネル使っててスリープなしのループごときでそんなことあり得るのか?
逆にそうなった仕組みが知りたい。
2025/01/31(金) 19:40:58.83ID:1pwkweKb0
インテルのTurboBoostだかで負荷もブーストされて排熱が間に合わずMBにダメージ与えつつ逝ったんじゃないの
PC買い換えた方がいいよ
2025/01/31(金) 19:54:38.13ID:R/wyJ37S0
ブルースクリーンもなしにおちるなんてハード不良
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
負荷掛け過ぎてコンデンサが爆発したんだろ
2025/02/09(日) 11:28:31.00ID:WswbN0Go0
全く関係の無いことですが、ここに書き込まさせてください。
あるサイトの問題集で、巨大な数の足し算を行うのに、整数型使えないから文字型使おうって書いてありました。
どうやったらその発想ができるんですか?
私プログラミング初心者なのですが、、、
2025/02/09(日) 11:34:40.48ID:sBzel75s0
頭の出来だろw
2025/02/09(日) 11:39:35.27ID:WswbN0Go0
プログラミングに頭の出来って関係あるんですか?
2025/02/09(日) 12:36:10.76ID:G/CYNigQ0
なんで関係ないと思うんだろうか
2025/02/09(日) 12:44:36.92ID:WswbN0Go0
誰でもプログラミングができるって言っている人がいたので。
2025/02/09(日) 12:52:16.03ID:WswbN0Go0
条件分岐とかループ処理のやつは解けるやつもあれば、解けないやつがあっても解説見れば次は出来ますが、文字列関係になると頭の中が[?]になるんです。
2025/02/09(日) 13:07:51.84ID:ql26y8Y/p
応用力…今の学校教育じゃ養われない能力が大切
2025/02/09(日) 13:16:44.53ID:WswbN0Go0
応用力ですか、。なんか、数学と同じ感じですね。基礎ができたと思っても応用ができないみたいな。
ちなみに、応用力ってどの様に勉強すれば身につくものなんですか?
2025/02/09(日) 13:46:11.17ID:k5BYzD4Y0
30桁くらいの2つの整数値を筆算で加算するときの手順をイメージして
それをプログラム化してみれば良い
そんなに難しくはないだろう
2025/02/09(日) 13:46:45.75ID:KfUn2qZi0
>>594
そのサイトクソだよ
2025/02/09(日) 14:22:12.60ID:WswbN0Go0
>>602
筆算のイメージはあるのですが、整数型でやろうとしたらエラーになって、実数型でやろうとしてもエラーになるので、なんでだろーって思って解説ん見てみたら、[文字列型にしましょう]って書いてあったので[?]ってなってしまうのです。
2025/02/09(日) 14:25:19.10ID:WswbN0Go0
>>602
筆算のイメージもそのサイトの解説みてから、そうなんだと思ったんですけど、どうも初見だとイメージが沸かないんですよ。
2025/02/09(日) 14:27:08.84ID:k5BYzD4Y0
イメージ湧かないなら、手を動かそう
そこに答えがあるよ
2025/02/09(日) 14:55:17.16ID:WswbN0Go0
>>606
なるほど、頭で考えるより、手で考えた方が良いのですか。
実践してみます。ありがとうございます!
2025/02/09(日) 17:03:10.36ID:TclGPY+C0
整数32bitでも64bitでも最大値は決まっている
でも大きい整数を表すのに64bit整数1つだけ使うとは決まっていない

桁溢れをプログラム的に検出して
溢れた分を別の64bit整数に記録すれば大きな整数を扱える
64bit+64bit+....
で整数を表す感じ
2025/02/09(日) 17:04:41.81ID:TclGPY+C0
文字列って1Byte整数の配列でしょ?無駄が多いよ
8Byte整数の組合せを上で挙げたけど、8Byte整数の配列でも当然できる
2025/02/09(日) 17:14:14.93ID:sBzel75s0
無駄を省くより可読性の方が大切
8bit時代のファミコンじゃ無いんだから
そんなキリキリ詰め込んだってわけわからん事になるだけ
2025/02/09(日) 17:36:57.81ID:KfUn2qZi0
>>610
的外れ
いきるな初心者
2025/02/09(日) 18:12:23.04ID:sBzel75s0
桁上がりを別に判定しなきゃならないんだから扱えるギリギリの桁で計算するのはバカだろw
アセンブラなら桁あふれフラグ見て簡単に処理出来るだろうが、Cだと無理
2025/02/09(日) 18:46:42.50ID:fEimQ790M
>>604
どこのサイト?
それ書いてるやつ多分バカだぞ
参考にすんな
2025/02/09(日) 18:57:40.14ID:fEimQ790M
>>610
charでやるのは馬鹿だがアルゴリズムは同じなんだから可読性は変わらない
メモリもほぼ変わらない
2025/02/09(日) 19:00:51.12ID:TclGPY+C0
整数値それぞれ (左右どっちだっけ)シフト1bitやって(1/2の値)足したのが最大値の半分超えたら桁溢れ
上位桁に溢れるだけ加算
Cでもできるに決まっているじゃん これだけだよ
2025/02/09(日) 19:09:00.04ID:TclGPY+C0
文字列って溢れの分が1-9まであって大変そう
バイナリなら1bitだけでしょ
2025/02/09(日) 19:15:54.80ID:WswbN0Go0
>>615
それってシフト演算の話ですか?(違ってたらごめんなさい。)
私、シフト演算は苦手なんですよね。
ただシフトするだけなら参考書とサイトみたらできますけど、ノールックでさらに四則演算になるとできないんですよ。
2025/02/09(日) 19:34:02.21ID:TclGPY+C0
考えたらシフトは無駄だった
64bit整数のうち63bit整数で考えて最上位ビットを溢れ判定に使えばよいだけ
あんまり書くと宿題の手伝いになってそう
2025/02/09(日) 19:44:20.36ID:fEimQ790M
>>618
足したあとの結果から判定する
教えるなら定石を教えろや
2025/02/09(日) 19:51:22.43ID:vUYqd53r0
二進化十進はたとえば表示の処理なんかは簡単になるので無駄なわけではない。
2025/02/09(日) 20:03:35.95ID:sBzel75s0
いまどき文字も16bit時代にケチケチすんなw
2025/02/09(日) 22:27:12.88ID:WswbN0Go0
>>618
なるほどですね。因みにこれは宿題ではなく、自主学習のやつです。とあるサイトの解説がよくわからなくてこの板の方々に質問させていただきました。
ありがとうございます。
2025/02/10(月) 07:27:24.30ID:ZpC+jsE10
あと実数でやったと出たけど要注意
double verybignum;
verybignum += 1.0;
で1.0は桁を合わせると0に消えて足されない場合がある
624デフォルトの名無しさん (アウアウエー Sa82-R6kM)
垢版 |
2025/02/10(月) 11:48:59.09ID:Z13/KCo3a
吊りならともかく本物の初心者なら文字コードを知らないってこともあるだろうな
多倍長整数をバイト列(1桁0-255)じゃなくて文字列(1桁0-9)で表すのは無駄が多いがアルゴリズムは同じはず
それでもピンと来ないなら先に文字コードについて理解するべき
2025/02/10(月) 13:13:09.48ID:BwJhqJpr0
IntelのアセンブラならBCDを扱う命令があったと思うけど、Cでやるなら文字に代入する時点で &= 0x0F、計算して出力する前に |= 0x30(でいいんだっけ?)かなー
2025/02/10(月) 13:19:14.90ID:cWC6BpGk0
やや強引だがアドレスとして同じでも比較すると等しくないという結果になる例を作ってみた。
https://wandbox.org/permlink/hpAkiEeiZclvQJsn
概念的にはポインタはアドレスというのでも間違いではないけど実際には言語のルールを把握していないと引っかかることもある。

ホスト規制でしばらく書き込めなかったので遅レスですまぬ。
627デフォルトの名無しさん (ワッチョイ 6a56-WFrT)
垢版 |
2025/02/10(月) 16:46:22.93ID:xKid5uSQ0
よく分からないがこうなる理由が分からないという意味の質問かな?
まあそうだとして、C言語では異なるオブジェクトへのポインタを比較出来ないってルールがある
それが行われているので、未定義の動作といってこのプログラムではコンパイラがどんな事をしてもいいことになってる
そのどんな事の中にはnot equalを表示するという動作も含まれているので、たまたまそうなったんでしょう
初心者がよくやるFAQレベルのミスなので、ポインタとオブジェクトを理解する意味でその辺も読んでみればもっと上達するでしょう
他にもヘンな部分があるので色々他の人のコードとかも読むといいね
2025/02/10(月) 17:14:00.11ID:cWC6BpGk0
>>627
ポインタにはアドレスが入ってるだけという話題が出てたからそんなことはないという注意喚起。
2025/02/10(月) 17:18:14.15ID:cWC6BpGk0
>>623
文意がよくわからんが初期化されてないから不定値になってるんじゃない?
2025/02/10(月) 17:44:23.62ID:1DQgWNxh0
>>627
> よく分からないがこうなる理由が分からないという意味の質問かな?
このスレは初めてか?
はちみつさんがそんな質問するわけないだろ
2025/02/11(火) 00:58:16.10ID:nkHTE6y60
これはどういうことなんだ?
foo、barの順にスタックに積まれる
bazにはfooの次の(intの境界の)番地(barと同じ)が入り、quzにはbarの番地が入る
bazとquzには同じ番地(値)が入っている
までは分かる
bazもquzもint型を指している
が、bazとquzの内容を比較するとことなる
なんじゃこりゃ〜
酔ってなくても分からなそう
2025/02/11(火) 01:04:37.69ID:nkHTE6y60
>>627がいうことがそれなのか
未定義だと
アセンブラ脳だと同じとみなしてくれてよさそうだけど、難しいね…
2025/02/11(火) 08:30:33.47ID:YWsMUNTvp
型変換すればOK
2025/02/11(火) 11:05:12.56ID:0+q77CUl0
>>632
強調しておくけど未定義は何が起こってもよい。
この場合は一応は式が式として評価されたかのように動作してるので比較的マシな部類で、未定義を踏んでいる箇所とは遠く離れた箇所で意味不明の動作が起こることもある。(起こってもよい。)
低レイヤから入った人は未定義をナメてることが結構あるとは思う。
どのような機械語にコンパイルされるか想像できる (と本人は思っている) 故の弊害だなぁ。
2025/02/11(火) 11:22:08.87ID:kmJe274sp
Cなんてポインターは全部void*だろ
2025/02/11(火) 11:37:41.91ID:7Jzkf7ZG0
ご無体な
2025/02/11(火) 12:35:30.87ID:m4FoXgHJ0
>>626 は僕のgccのパージョンだと
-O2 ありだと "not equal"
最適化なしだと "equal"

-S つけて .s をみると、-O2 ありのときポインタの比較すらせず単純に
puts("not equal");
とするコードを出力していた
"equal" のリテラルすらコードにはない

降参
2025/02/11(火) 13:33:00.20ID:jMpjlVqA0
strict aliasingのルールがなぜあるか理解してたらある程度予想つくだろ
639デフォルトの名無しさん (ワッチョイ de76-/Fy3)
垢版 |
2025/02/11(火) 14:32:56.35ID:VhWouMxY0
そもそも 8Byteや4Byte変数のポインタが例えば奇数の数値が許されるのかとか
2025/02/11(火) 14:40:28.60ID:7Jzkf7ZG0
文字列を指すポインタなら、一文字ずつインクリメント出来ないと困るよね
2025/02/11(火) 14:52:06.30ID:+ybAiMfGp
>>639
CPUによる
2025/02/11(火) 15:43:23.98ID:jMpjlVqA0
>>639
それどこへのレス?
2025/02/11(火) 16:44:48.97ID:ZUCQJ4rmM
>>640
いつ困るんだ?
2025/02/11(火) 16:59:49.92ID:MJELNENN0
>>627
最適化されると出力されるコードを推測することは無理だ、ということね
2025/02/11(火) 17:19:32.60ID:jMpjlVqA0
無理はいいすぎ
やったことないやつがしったかすんな
2025/02/11(火) 17:20:33.85ID:0gFNLz1yp
ARM系はほんと無理
2025/02/11(火) 18:37:22.58ID:2gjYX+K80
貴方みたいな人はほんと無理
とか言われたら傷ついちゃう
2025/02/11(火) 21:27:22.00ID:JzAdQ4dR0
とりあえず読むべし
旧石器時代のポインタをご利用の皆様へ 〜provenance入門〜
https://qiita.com/__pandaman64__/items/1788a90ae5be79cc908b
2025/02/11(火) 21:52:04.81ID:m4FoXgHJ0
>>648
thx!
2025/02/11(火) 21:58:43.75ID:VhWouMxY0
こんなの分割コンパイルしたら分からないし ライブラリならなおさら
実行時にどのオブジェクト由来なんて情報持っておけるのか?

int func(int *ip, int *iq)
{
if (ip == iq) {
} else {
}
}
2025/02/11(火) 22:39:07.83ID:jMpjlVqA0
コンパイル時に決まってんじゃん
652デフォルトの名無しさん (スップ Sd4a-26Jk)
垢版 |
2025/02/11(火) 23:02:33.92ID:DgpMDse2d
このコテハンの人いつもこんなだよね
まともに出来るのが規格のコピペみたいな事だけで、それ以外だとすぐとんちんかんな事言い出して突っ込まれてる
2025/02/11(火) 23:17:19.29ID:0+q77CUl0
>>650
わかる範囲でやるってだけ。
わからないところは保守的なコードを生成する。
ただ、今は LTO があるのでわかる範囲がだいぶん広い。

わからないからこそプログラマは未定義なことをしないと仮定した最適化をする (未定義を踏んでたらむちゃくちゃになる) という場合もある。
2025/02/12(水) 10:25:19.84ID:WVzDbo940
>>648
ポインタpとqの値が同じにならないんだけど…
2025/02/12(水) 10:28:46.36ID:p1VJlK94p
Cに余計なもん付けたらいにしえのLinux由来のコードが通らなくなるだろ
656デフォルトの名無しさん (ワッチョイ 6a4d-WFrT)
垢版 |
2025/02/12(水) 11:20:54.68ID:OojhOsKe0
未定義の動作がどういうことなのかよく分かっていない人がいるみたいなので補足しておく

>>628
未定義の動作を引き起こすプログラムを提示しても結果が分からないし毎回違う可能性もある点でこれだと何も示せてない
きつい言い方かもしれないが注意喚起になっていない
>>634の2行目を見るとコードの動き方に対しての認識として不定の動作と未定義の動作を混同して勘違いしてるかも知れないね
657627 (ワッチョイ 6a4d-WFrT)
垢版 |
2025/02/12(水) 11:21:58.36ID:OojhOsKe0
>>631
未定義の動作なので2行目から7行目のような事が起きるかどうかは分からない
仮に未定義の動作がなかったとしても行目を自明のように仮定することは出来ない
アーキテクチャが色々ある中そういう処理系もあればそうでない処理系もあるしCでは何も規定してない
スタックの仕組みがないものもあればポインタをそもそも数値や番地で扱わないアーキテクチャもある
後段も同様
658627 (ワッチョイ 6a4d-WFrT)
垢版 |
2025/02/12(水) 11:22:39.59ID:OojhOsKe0
>>644
コンパイラの動作に対して必要条件が何も設定されない状態になるという話で最適化は全く関係ない

ちなみに今回の話はK&Rの頃からあるルールなので>>648とはちょっと違う
ただ内容は大体同じでポインタはオブジェクトを指してるもので、その内部形式や扱い方はユーザーが知る必要はない
2025/02/12(水) 11:47:09.26ID:cXwd7RB80
>>658
言語仕様上で未定義動作とされている状況が実際の機械の上でどう動作するか (その動作は想像できない) という文脈でヤバさを伝えるためになるべく想像外な結果を生む実例を出そうとしているので最適化は関係ある。
2025/02/12(水) 11:50:24.83ID:XyTZkBHop
最適化しないと無駄なコードや無意味なコードも忠実に出力されるからなぁ
2025/02/12(水) 12:49:03.57ID:J/UI6pYQ0
>>658
未定義だから不明を連呼されても大して参考にならんわけで
なぜ現実のgccではあのような結果になるのか理由を説明できないのか?
わかってないようだけど最適化は大いに関係してるぞ
2025/02/12(水) 13:26:30.21ID:7GgOweZ60
えーと未定義や環境依存を使ったりとかは
Cおよびコンピュータの理解が不十分な
質の劣るプログラマが存在するからでしょうに

そういう人達に重要プログラムを書かせる責任問題でもある
2025/02/12(水) 15:09:37.68ID:+Pz/j8Me0
相手に過大に説明を要求して、自分は分かろうとしない者は嫌われちゃうよ
2025/02/12(水) 15:17:35.67ID:iId2MJ1V0
gccのフォーラムで質問出してみたら?
参考にできる回答が得られるかも知れないよ
2025/02/12(水) 15:52:05.07ID:WVzDbo940
>ポインタにはprovenanceという,どのオブジェクト由来かの情報が含まれています

↑まずこれがおかしい
2025/02/12(水) 16:26:28.23ID:I956D6cKp
ランタイムじゃなくてコンパイル時の静的なルールだろうね
2025/02/12(水) 17:12:16.79ID:1bCkYFVx0
投資家はRustを信頼するって言ってるんだから、Rustとおんなじようにすればいいだけ

俺はC/C++派なので、どんどんRustの実績をぶんどってくるべきって思ってる
2025/02/12(水) 17:47:13.48ID:cXwd7RB80
>>667
Rust のようにやるなら Rust のほうが巧くやれる。
当たり前だろ。
2025/02/13(木) 00:32:14.00ID:rym7RjTu0
移植性が求められることばかりでもないし、最適化などのオプションも頻繁に取ったりつけたりしないし、思い通りに動かなければアセンブルリストみたりするけど、コンパイラが出力するコードが予想通りかなんて観点はないし、実践的ではないけど、人を小馬鹿にしたりしなければ勉強になって面白い話なのに
2025/02/13(木) 00:34:29.37ID:rym7RjTu0
実践的でない、はちょっと違うか
671デフォルトの名無しさん (ワッチョイ 8655-u07z)
垢版 |
2025/02/15(土) 13:31:47.16ID:vKfoke/00
Arduino (ESP32)で文字列変換をしたいです。
tの文字列をtm structに変換したいんですが,タイムゾーンのオフセット部分の+9:00の扱いが分かりません。
%Zはタイムゾーンのオフセットを分を指定する場合で、%zだとUTCなどタイムゾーン名を指定する場合に使うみたいでした。
どうやるんでしょうか?

tps://pastebin.com/Jcyj8BG5
2025/02/15(土) 15:04:44.95ID:ewglApEf0
strptime で %z や %Z でタイムゾーンを扱えるのは glibc の拡張 (他で真似している場合もあるかもしれんけど) なんだけど、 Arduino の C ライブラリは glibc ベースなの?
そうじゃないなら各ライブラリのドキュメント (またはソースコード) を読まないとわからないし、そもそもそんな機能はないのかもしれない。
673デフォルトの名無しさん (ワッチョイ 5357-u07z)
垢版 |
2025/02/15(土) 16:19:42.94ID:BNBq5D0N0
>>672
どうもありがとうございます
%zのようなのを使わず+の前後で分けてまず前だけでtm structに変換して後ろはエポック秒が何かに変換して使うのがベターでしょうか?
2025/02/15(土) 16:25:20.46ID:Q9F/iLI2M
やり方思いついたならやれ
2025/02/15(土) 16:39:17.28ID:ewglApEf0
>>673
どうやら Arduino は newlib ベースの模様。
newlib の strptime はタイムゾーンをサポートしてない。

どうにかしてタイムゾーンを扱いたい場合にどうやって実装するかは個々の事情によると思うのでなんとも言えない。
実績のある実装をどこかから持ってきたほうが良いんじゃないかと個人的には思う。
https://www.google.com/search?q=strptime+implementation+c
パースするだけならたいして複雑なものではないので自分で書いてみてもいいかな。

ちなみにタイムゾーンを略称で扱うのは面倒な事情が絡む。
タイムゾーンを標準時からの差の時間で表すときはその時点での差があれば十分なので簡単なんだけど、略称で表すときはサマータイムの情報もいる。
たとえばニューヨークのタイムゾーン (EST) は普段は -05:00 だけどサマータイム中は -04:00 になる。
単に EST=-05:00 というわけではない。

そんでもってこのへんの扱いが面倒なのは変わることは割とよくあるということ。
サマータイムの期間が変わったりずらす時間が変わったり、あるいはゾーンが増えたり減ったりするのは政治的な判断なので情報を定期的に更新する前提じゃないときちんと運用できない。
パソコンの OS だと適当なタイミングで更新する仕組みがあるのが普通だけど組み込みシステムだとそうもいかないこともある。
2025/02/15(土) 21:12:02.85ID:ewglApEf0
基本的なことを書き忘れてた。
strptime は C の言語仕様には無い関数で、 POSIX (UNIX 系 OS の統一仕様) にある。
POSIX は最低限の共通部分だけをまとめたもので実装には雑多な拡張を入れる前提なので各実装によってサポート内容が違う。
POSIX 準拠ではない環境で部分的に POSIX を真似てるだけ (POSIX の最低限の要求も満たしてない) ということもある。
677デフォルトの名無しさん (アウアウエー Sa13-9cJ9)
垢版 |
2025/02/16(日) 12:03:53.19ID:rAQQ2/+ca
最初からtmstructをUTCで取得した方が楽ジャマイカ
2025/02/17(月) 01:18:04.49ID:mzGEyEzq0
有効な同型ポインタの比較において、同一オブジェクト/配列由来でない場合、
== の結果は 0
(未定義動作ではない)

C99(N1256) Annex J.2 Undefined behavior

— Pointers that do not point to the same aggregate or union (nor just beyond the same
array object) are compared using relational operators (6.5.8).

ここに Equality operators の記述がない。

6.5.8 Relational operators
6.5.9 Equality operators
でも同様の内容となっている。また、

N3231 https://www.open-std.org/jtc1/sc22/WG14/www/docs/n3231.pdf
2024/03/21 Kleynhans, TS 6010 A Provenance-aware Memory Object Model for C, Revision Draft
N3005
2022/06/16 Gustedt, A Provenance-aware Memory Object Model for C, draft TS 6010, version June 2022

では、provenance と abstract address という用語が導入されてスッキリとした文面になっている。
2025/02/17(月) 10:52:55.67ID:tIRsmIw80
C99 をあらためて読み返してみたら確かにそうだ……。

・ ふたつのポインタが等しいと判断される条件が書いてあって「その場合に限り」等しいとする
・ 各演算子は指定された関係が真の場合は1を,偽の場合は0を返す
・ 未定義と書いてある (またはそれと等価な言い回し) か動作の明示的な定義がない場合は全て未定義

等しい条件を満たさないなら 0 が返されることを保証していることになるので未定義ではないことになる。

でもまあ現実的に考えたらおかしいし、欠陥報告が出てたりしない?
2025/02/17(月) 19:30:42.26ID:iQTBmgHC0
>>648のサンプルプログラムで同じことが起きることってある?
681デフォルトの名無しさん (ワッチョイ 23ad-MHHu)
垢版 |
2025/02/22(土) 07:05:24.68ID:nEyoRU5r0
>>680
WSL2 の Ubuntu 22.04.5 にインストールされている gcc 11.4.0 で gcc -O でコンパイルしたら起きた。
-O なしだと起きない。
2025/02/22(土) 12:11:54.96ID:DWcN/KDk0
余計なことを
683デフォルトの名無しさん (ワッチョイ 23ad-MHHu)
垢版 |
2025/02/22(土) 14:47:10.43ID:nEyoRU5r0
最適化オプションの有無で違いが出る状態はできれば止めて欲しかったな。やるとしても別オプションでやって欲しかった。
2025/02/22(土) 16:41:59.90ID:Z2hFLtuL0
その壁越えられないやつ多いよね
仕事でも最適化すると動かなくなるからってオフでリリースしてた雑魚エンジニアいたわ
2025/02/22(土) 17:57:58.33ID:HOxFgRC/0
コンパイラのバグって事じゃないのか?
2025/02/23(日) 20:21:42.14ID:5K9CwmG10
>>683
-0 はいくつかの具体的な最適化オプションを束ねたものだよ。
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-O
このうちのどれが効いてるのかは知らんけど。
2025/02/23(日) 21:01:43.23ID:VuC2otmU0
>>684
最適化オフでのリリースは一つの有力な選択だと思います。
2025/02/23(日) 21:45:10.07ID:K8mfivgh0
最適化に副作用あるのは常識
2025/02/23(日) 21:54:21.08ID:FQnOu1obM
>>687
まザコならしょうがないわな
組み込みならハードのコスト一段下げられるけど諦めるしかない
そんなザコ会社だから低収入もしかたない
2025/02/24(月) 01:00:54.17ID:IorN2uWP0
自己紹介かな
2025/02/24(月) 17:12:08.95ID:qLUUxQg70
gccなら-O0でも実施される最適化はあるので本気で最適化オフにしたいなら-O0で有効になる項目を-fno-に個別に指定する必要がありそこそこ面倒
2025/02/24(月) 17:18:13.77ID:SlW5Uo1a0
最適化オフとか言ってる人は、UBを踏んでしまってるから最適化で動作が変わるってことわかってんのか?
2025/02/24(月) 17:22:09.48ID:qLUUxQg70
まあコンパイラの最適化バグである可能性もないわけではないがな
2025/02/24(月) 20:28:13.00ID:V/nislFh0
組み込み分野だと最適化によりデバッグがしづらくなることが多い。
2025/02/24(月) 21:56:17.54ID:JeKlmQzN0
gccで -O2 なし -Wall ありでコンパイルすると strict aliasing の警告がでないけど、
-O2 -Wall ありだと strict aliasing の警告が出るケースに当たったのだけど、
strict aliasing って安全に最適化するためのアレなのですかね(最適化しないときは strict aliasing には無頓着)
696デフォルトの名無しさん (ワッチョイ d5a2-eBms)
垢版 |
2025/02/24(月) 22:52:40.44ID:ifUFLigf0
この人たちホントgccが大好きだよね
2025/02/24(月) 23:27:53.22ID:LsxokMxo0
gccはいろんな環境で動かせるので便利ではある
2025/02/25(火) 01:13:30.67ID:t+eQGWY+0
>>694
それ組み込み関係ないから
2025/02/25(火) 08:31:05.22ID:6jOr+W/20
>>695
警告を出すためには警告の条件に引っ掛かっていることがわからないといけないという単純な前提がある。
結果を使いもしないのに警告のためだけにエイリアス解析を頑張るのは合理的か?
2025/02/25(火) 09:04:02.65ID:ODzMt1Nm0
>>698
そうだった
2025/02/25(火) 23:42:18.97ID:MFbkYyJ10
>>699
最適化しないときは strict aliasing が不要なものなんですかね(最適化のための strict aliasing なんですかね)というつもりで書いたのだけど、分かりにくくてすまんね
2025/02/26(水) 10:14:24.43ID:6jOr+W/20
>>701
少なくとも GCC や Clang では strict aliasing rules は最適化のためのものという認識で正しいよ。
-fstrict-aliasing (やこれらを含む -O2 以上の最適化) が有効になっているときに限りエイリアスベースの最適化をするし、そのときだけ strict aliasing rules が守られていることを要求する。
2025/02/26(水) 11:04:16.19ID:x+jOZkKw0
strict aliasing rulesを守らないと未定義動作となるのはC言語の決まりなので特定の処理系で問題ないから守らなくて良いという考えは馬鹿のすること
2025/02/26(水) 11:20:14.18ID:t+eQGWY+0
というかstrict aliasing rulesをわかってるやつがあえて守らないって考えにくいでしょ
このスレを見てわかる通りわかってないやつらが大半
2025/02/26(水) 11:38:18.47ID:6jOr+W/20
ビットパターンを別の型で読み替える可能性があるなら最初から union で書いておいたほうが人にとっても読みやすいしな。
(C++ では union でも common initial sequence の読み替えしか許しておらず、 C より制約が厳しいので注意。)
2025/02/26(水) 15:23:36.19ID:6jOr+W/20
>>703
未定義は「規格としては何も要求しない」なので処理系が何らかの追加保証をすることを禁じてない。
2025/02/26(水) 15:45:51.57ID:x+jOZkKw0
特定の処理系と心中するつもりでstrict aliasing rulesを守らない奴がいたらすごい馬鹿
2025/02/26(水) 23:04:05.93ID:0kyhL3S/0
>>702
助言をありがとうございます!!
>>701 より
2025/02/27(木) 00:09:51.30ID:oCSgSskf0
>>707
移植しないなら別にいいんじゃないの
2025/02/27(木) 08:29:36.37ID:Uw13P3Kf0
>>709
将来の更新の可能性も考慮しないわけね
2025/02/27(木) 09:04:57.33ID:smeEQtfp0
だから将来も移植しないんだろ
2025/02/27(木) 09:23:08.30ID:Uw13P3Kf0
移植と更新は違うぞw
2025/02/27(木) 10:21:51.11ID:6jIPAcTSM
そのどうでもいい仮定話いつまでやんの?
2025/02/27(木) 22:25:43.54ID:rdt/oSxr0
【帰化朝鮮人を論破】
日本は帰化朝鮮系の家系の人間によって隣国の大韓民国と北朝鮮に侵略行為を受けている
彼らがやっていることは「差別」を盾にした日本人を対象にした迫害であり「民族浄化」である
国際法でもこのような行為は決して許されていない
しかし何となく加害者が日本人で、差別されているの朝鮮系と言う意識を刷り込まれて彼らに遠慮してないか?

事実は逆である、加害者は彼らの方で迫害されているのは日本人である、まずこの意識を共有しよう

なぜそうなっているのか? 新聞、出版社、司法、テレビ局、会社の起業家、大学教授などが帰化系の人間で徒党を組み
日本人を差別、排除してまるで日本人であるかのように振舞っているからである
テレビに映り世論を形成している人間が日本人の振りをして韓国、北朝鮮に有利になるように論調を組み、
日本を支配し、日本人が朝鮮人に隷属することを強要している
これが侵略行為以外のなんなのか? なぜ日本人が日本で差別の対象にならなければいけないのか?
帰化系が起業し外部の朝鮮系と通じ合い会社を成功させる、または帰化系が既存の会社組織でトップに居座り
管理職を帰化人系のみで固め、日本人は閑職に追いやられ、パワハラで辞職に追い込まれ
その会社の技術を朝鮮半島に流出させ、日本企業が競争力を失っていく
芸能人、テレビ局員、スポーツ選手(五輪代表、野球、サッカー)、報道関係者は帰化系で独占されている
もはやテレビに映る人間はほとんど日本人ではないと考えろ 
では何をするべきか?
もはや野党はほぼ全員、もはや自民党も過半数以上は帰化朝鮮人系の家系の人間が国会議員を占有しつつある

まず「政治家に立候補する時、外国の家系の人間か否かを公表する」を提出して過半の賛成を取って立法化しよう
国際的にもごく一般的で、アメリカでも何系かはすべて明らかにされている
そうなると帰化人の家系の人間に支配されたメディアは差別だと糾弾し始め帰化人たちが暴動やら起こすだろう、
日本は荒廃の一途を辿る、内戦状態に近いものになる
だがそれは当然のこと、国内で隣国の人間による侵略行為、民族浄化行為を受けているのだから
時間はあまりない、やつらが過半数を確保してからでは遅い、韓国北朝鮮に占領されてしまう
日本人よ、まず声を上げるのだ
2025/02/27(木) 22:56:45.28ID:c6/rsZNB0
まず統一を潰さないと
2025/02/28(金) 00:14:09.12ID:FWjziINm0
>>713
次のお題が来るまで(w

我流独習マン(俺含む)には、こそっとありがたい話
ややもするとすぐ浦島になっちまうw
2025/02/28(金) 10:32:16.41ID:aDguz5rE0
>>705
念のために確認してたら union のメンバを他の型の違うメンバで読み替えて良い規則は JIS (JISX3010:2003) には書いてないっぽい。
欠陥報告で後から修正したから JIS を出した時点では原文にも書いてなかったんだな。
https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_283.htm
2025/03/11(火) 17:38:04.47ID:GvJGmymX0
C の公式サイトが登場!
https://www.c-language.org/
2025/03/12(水) 20:15:01.01ID:echC0lcV0
AIのおかげでCが主流になるかもな
2025/03/12(水) 21:03:53.54ID:pJ5qTyUbp
>>719
それは無い
721デフォルトの名無しさん (ワッチョイ 794b-XET2)
垢版 |
2025/03/12(水) 21:59:36.42ID:WyQEi83H0
AIコーディングが進化した結果直接機械語で出力できるようになったけど人間が読めないのは困るから最低限人間が読めて速度も出るCで出すのが主流になるみたいな妄想
2025/03/12(水) 22:07:09.85ID:/p3tzJNRp
AIは何も指定しなきゃjavaやpythonやC#のコードを吐き出すよ
2025/03/18(火) 10:34:05.62ID:mIJI9ibF0
cはむずい定期
2025/03/19(水) 20:09:43.41ID:WDKEEomI0
文法的にはポインタ周りが(少し)難しいだけ
個人的にはpythonの方が難しく感じるな
2025/03/19(水) 20:44:03.52ID:SWZJHd7L0
C が未定義をエラーとして補足せずに黙って変になることがあるのは入門書などをまともに読まずにいろいろ弄って学ぶタイプの人には向いてないな。
ちゃんとした入門書をちゃんと読むならそんなに難しいわけではない。
しかし難しくないことでもしょうもないミスをするのが人というものだという現実もあって、特に規模が大きくなると C はしんどい。
難易度とかいうのとは別の話として、理解していても間違う。
726デフォルトの名無しさん (ワッチョイ 13ad-avMV)
垢版 |
2025/03/20(木) 04:57:02.69ID:07u24rkx0
まあしかしこの頃のコンパイラは警告やエラーを沢山出してくれて分り易いよ。
昔のはチェックが緩くて出なかったからな。
その状態から gcc で printf() のフォーマットと引数のチェックが出来ると知った時は衝撃を受けた。
2025/03/20(木) 17:01:49.87ID:iinwNT6F0
>>726
それな、オプションさえちゃんと付ければ昔でもできてたよ
2025/03/20(木) 17:31:14.06ID:PqZkwPwR0
GCC では遅くても 2.95.3 には attribute で文字列が書式であることを指定できて型チェックする機能はあった模様。(2001年頃)
https://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC84
ただな、このスレにいるようなおじさんの言う「昔」は 1980 年頃の話だったりするんよ。
MS-DOS 用とか CP/M 用とかのコンパイラの話なんよ。
2025/03/20(木) 17:39:11.70ID:Enps6Akh0
その年代の人はおじさんじゃなくておじいさんでは
2025/03/20(木) 17:45:05.08ID:iinwNT6F0
>>728
スマソ、俺はちょっと若すぎたわ
だいぶ昔からできてた記憶があったがそれよりさらに昔の話とは恐れ入った先輩
2025/03/20(木) 18:23:15.20ID:0dSk8Oyx0
メインフレームにダム端末繋げてた時代じゃよ
2025/03/20(木) 23:54:14.30ID:t3XlSG3jd
gcc7.1から突然エラーメッセージが親切になったのはあるな
ちょうどclang+llvmが話題になった時期でそれに対抗したらしい
733デフォルトの名無しさん (ワッチョイ 13ad-avMV)
垢版 |
2025/03/21(金) 07:44:18.11ID:6cMMiEqo0
>>727
それはどのぐらい昔かによる。
80年代後半にはまだなかったと思う。
734デフォルトの名無しさん (ワッチョイ 13ad-avMV)
垢版 |
2025/03/21(金) 07:45:09.98ID:6cMMiEqo0
>>728
そうそう。80年代。
2025/03/21(金) 08:19:02.26ID:kfFumR870
真理子版が便利すぎた。
2025/03/22(土) 13:52:41.80ID:A90b+kK90
他人にも使わせるツールに環境変数「真里子」はキモすぎてビビった
737デフォルトの名無しさん (アウアウエー Sa23-D2PX)
垢版 |
2025/03/22(土) 14:25:25.39ID:U6/Lg1xxa
>>728
scanf, sscanf で float, double に %f, %lf のところを %f, %f にしてバグるのがありがち
738627 (ワッチョイ 5377-avMV)
垢版 |
2025/03/22(土) 15:31:32.91ID:7ZrFn0ve0
scanfなんて使ったことねーや
ありがちってほど使ってるんか
2025/03/22(土) 15:40:39.16ID:8J5Eq6PC0
scanfに道に落ちているを食べさせてはいけません
740デフォルトの名無しさん (ワッチョイ 492a-jhJX)
垢版 |
2025/03/28(金) 08:23:03.00ID:+OZuQWBg0
この警告、環境によっては出ないの?

$ cc ld.c -Wall
ld.c: 関数 ‘main’ 内:
ld.c:6:19: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 2 引数の型は ‘off_t’ {aka ‘long int’} です [-Wformat=]
  6 |  return printf("%d", offset);
   |         ~^  ~~~~~~
   |          |  |
   |          int off_t {aka long int}
   |         %ld
$ cat -n ld.c
   1 #include <stdio.h>
   2 #include <sys/param.h>
   3
   4 int main() {
   5  off_t offset = 1;
   6  return printf("%d", offset);
   7 }
   8
2025/03/28(金) 08:29:47.68ID:v2Oxq7uoM
おれの作ったCコンパイラはそんな警告出さないけど何か文句ある?
742740 (ワッチョイ 492a-jhJX)
垢版 |
2025/03/28(金) 09:29:48.60ID:+OZuQWBg0
>>741
あー、なるほど。↓よ。

$ cc --version
cc (GCC) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2025/03/28(金) 11:25:13.48ID:gM96YdDw0
>>740
出さないコンパイラはあるし、その場合に警告を出すコンパイラであっても printf 類を特別扱いしてなんとかしてるので、可変長引数一般では型が合わないときに検出されない。
744740 (ワッチョイ 492a-aKLX)
垢版 |
2025/03/28(金) 13:15:49.58ID:+OZuQWBg0
なるぽろ。%ld に変更せず、放っておくか。ありがとう。

ちなみに、逆に、%ld だと警告する場合も有り得るのだろうか。例えば off_t が非 long の機種があるとか。
2025/03/28(金) 13:32:37.75ID:gM96YdDw0
x86-64 なら System V ABI ではどうせ 64 ビットレジスタで受け渡されるからそこんところでは問題にならないのだが、最適化したときにどうなるかまるで予想がつかない。 放置してよいとは言えない。

いったん intmax_t にキャストするのが正当な方法だと考えられている。
https://www.jpcert.or.jp/sc-rules/c-int15-c.html
746デフォルトの名無しさん (ワッチョイ 6eef-29WZ)
垢版 |
2025/03/28(金) 15:39:13.17ID:Gm0qUC0n0
struct X* x;で自動変数を定義した場合
スタック上のどこかにstruct Xの領域が確保されたりしますか?
2025/03/28(金) 15:47:02.39ID:v2Oxq7uoM
されない
2025/03/28(金) 17:27:47.76ID:+OZuQWBg0
>>745
> printf("%ju", (uintmax_t) x);

なるぽろ。ありがとう。
2025/03/28(金) 19:09:11.37ID:Yj8GIx0sp
なんだよjって、何の略だ?
2025/03/28(金) 22:16:42.65ID:gM96YdDw0
>>749
なんらかの単語の略 (頭文字) というわけではないらしいよ。
> j is sort of like "i" for integer
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n833.htm
2025/03/28(金) 23:06:36.11ID:UFqBPtr80
μ→uみたいなものか

大文字の I はもう使われてふのかな?
752デフォルトの名無しさん (アウアウウー Saa5-WcQO)
垢版 |
2025/03/29(土) 16:07:35.02ID:M3jsTRd4a
long long や unsigned long long の出力に %lld や %llu って昔は使えてた気がするが
最近はだめなんかな
%I64 とか %U64 みたいなのになってるん
2025/03/29(土) 16:54:36.19ID:HRez4USp0
>>752
I64 とかはマイクロソフトの拡張。
新しい方法じゃなくてむしろ古い方法が互換性のために残されているだけ。
今となってはあえて使う理由はない。
754デフォルトの名無しさん (ワッチョイ 2e2a-aKLX)
垢版 |
2025/03/29(土) 17:30:28.12ID:bd7PveSA0
>>752
> %I64 とか %U64

移植が大変そうね。
2025/04/08(火) 18:05:53.82ID:f9O97Hv70
sudo で実行すると execl が動作しないように見える。なぜ?
$ cat -n e.c
   1 #include <stdio.h>
   2 #include <unistd.h>
   3
   4 int main() {
   5  pid_t pid;
   6  if ((pid = fork()) > 0) return 0;
   7  else if (pid < 0) return 1;
   8  execl("/bin/bash", "/bin/bash", "-c", "echo $$ $PPID >> /tmp/log", NULL);
   9  _exit(2);
  10 }
$ gcc -g e.c
$ ./a.out
$ cat /tmp/log
10593 1566
$ sudo ./a.out
$ cat /tmp/log
10593 1566
$
756627 (ワッチョイ 22ca-VGeA)
垢版 |
2025/04/08(火) 19:31:31.59ID:HmugccjD0
まずコピーするなら手を入れるな手を入れると他も全部疑わなきゃいけなくなる
それからsudo -E ./a.outとsudo strace ./a.outを試せ
757デフォルトの名無しさん (ワッチョイ 798a-GhsC)
垢版 |
2025/04/08(火) 19:45:35.63ID:dAM9KaxA0
縦の数字はなに?
普通にエラーになるだろそれ
2025/04/08(火) 20:08:58.79ID:0fraKCca0
catの引数に-n指定してるからだろ
759デフォルトの名無しさん (ワッチョイ 4dc4-xzp7)
垢版 |
2025/04/08(火) 20:57:19.94ID:brzdTu7q0
手元にあるfedora で試したが、
sudo ./a.out の結果表示は2行になった
多分、正常に処理できたようだ
2025/04/08(火) 22:40:53.76ID:NxLLuNcW0
うちはダメでした
>>755 と同じような結果です
ubuntu22.04 lts
2025/04/08(火) 22:43:01.77ID:NxLLuNcW0
あ、次のようにしたときです
sudo ./a.out

/tmp/log に追記されませんでした
762755 (ワッチョイ a92a-ZtHn)
垢版 |
2025/04/08(火) 22:49:40.17ID:Rmhs1Vne0
>>759
えー!? と別環境で実行したら、sudo でも execl が動作したように見える。なにこれ。

$ ./a.out
$ cat /tmp/log
13706 1
$ sudo ./a.out
$ cat /tmp/log
13706 1
13721 1
$

取り敢えず、うちの Ubuntu の「おま環」問題のようでした。お騒がせしました。
ただ、今回のは bash の $PPID が init (1) になるという新たな謎が...
2025/04/09(水) 00:22:33.67ID:06ntJanv0
親プロセスが先に死んだら子は init の養子になる。
だけどこの場合だとどちらが先に死ぬかはプロセスのスケジューリング次第で状況によるってことなんじゃないのかな。
Linux の事情はよく知らんけど。
2025/04/09(水) 00:23:29.81ID:Z/QH/Jgt0
Linux 板で聞いた方が回答ありそうな気がする。
765デフォルトの名無しさん (ワッチョイ ae7e-GhsC)
垢版 |
2025/04/09(水) 15:00:16.84ID:cB69i6Vg0
const unsigned char t100_day[3807] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }

String tenki_i = "01";

char*const unsigned char t100_day[3807] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }

String tenki_i = "01";

char* y_icon; // FIXME 型が分からない

if (tenki_i == "01") y_icon = "t100_day";
else if (tenki_i == "01_n") y_icon = "t100_night";
else if (tenki_i == "08") y_icon = "t200_day";
else if (tenki_i == "08_n") y_icon = "t200_night";
else y_icon = "t999_day";

sprite.drawPng((std::uint8_t*)y_icon, sizeof(y_icon), 0, 25);


t100_dayなどは画像なんですけど、tenki_iの中のstrによって画像を変えたいです。
y_iconはどうやって指定したらいいでしょうか?
766デフォルトの名無しさん (ワッチョイ ae7e-GhsC)
垢版 |
2025/04/09(水) 15:01:47.32ID:cB69i6Vg0
>>765
コピペ間違えました
正しくは以下です


char*const unsigned char t100_day[3807] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }

String tenki_i = "01";

char* y_icon; // FIXME 型が分からない

if (tenki_i == "01") y_icon = "t100_day";
else if (tenki_i == "01_n") y_icon = "t100_night";
else if (tenki_i == "08") y_icon = "t200_day";
else if (tenki_i == "08_n") y_icon = "t200_night";
else y_icon = "t999_day";

sprite.drawPng((std::uint8_t*)y_icon, sizeof(y_icon), 0, 25);


t100_dayなどは画像なんですけど、tenki_iの中のstrによって画像を変えたいです。
y_iconはどうやって指定したらいいでしょうか?
767デフォルトの名無しさん (スッップ Sd22-yI6P)
垢版 |
2025/04/09(水) 15:16:14.76ID:qDwL9bg0d
>>755もそうだし書いちまったもんはしょうがねーけどコードを載せる時は
どうしろこうしろって書いてあんだから従えよ
アンタどこ行ってもそんな感じなのか?
768デフォルトの名無しさん (ワッチョイ 79f9-GhsC)
垢版 |
2025/04/09(水) 15:24:40.77ID:Hnk7Q6m60
すみません、書き直しました
https://ideone.com/CSy0Nb

t100_dayなどは画像なんですけど、tenki_iの中のstrによって画像を変えたいです。
y_iconはどうやって指定したらいいでしょうか?
2025/04/09(水) 15:27:10.13ID:lI8vd/RJ0
>>755
fork呼んだ親プロセスがreturn 0でいきなり終わってるのがダメ
wait呼んでプロセスの終了待ちしろ
2025/04/09(水) 18:01:06.77ID:06ntJanv0
>>768
その断片的なプログラムではよくわからんが型を合わせるだけなら y_icon の宣言はこうなるべきだと思う。

const unsigned char* y_icon;
2025/04/09(水) 18:30:26.27ID:06ntJanv0
>>768
ところでそれは C++ じゃない?
なんでこのスレで聞くの……。
772755 (ワッチョイ 6e2a-ZtHn)
垢版 |
2025/04/09(水) 19:53:07.12ID:dFJfWRF+0
>>769
「お騒がせしました。」と言ったので、勝手ながら質問を終えた気がしていた。見てくれて有り難う。

>>755,762 については、Ubuntu においても sudo で execl は動作していた。
動作しないように見えたのは、Ubuntu 特有のファイル権限設定があり、root といえどもファイルにアペンドできないせいだった。Qiita にあったサマリが解りやすい。

https://qiita.com/skyflare2001/items/1c1934b1d2f405228334#2025118-追記
> Ubuntu の /tmp のユーザファイルに root で追記できない

全く C言語に関係なかった。ごめんちゃい。
773デフォルトの名無しさん (アウアウウー Sa21-NXaD)
垢版 |
2025/04/20(日) 14:12:51.27ID:RiHDJnuQa
stdbool.h 真面目に使ってる人いる?あるいは使ってない方がおかしい?
2025/04/20(日) 16:06:51.19ID:srj6a33k0
原則としては論理型が必要であれば stdbool.h (内で定義される bool) を使うべきだと思う。
論理型が C99 で導入されるより前の古いプログラム中で bool という名前を使っている場合に配慮して論理型の名前を _Bool にした上でその別名の bool を stdbool.h 内で定義するという変な構成になっている。
(もし bool という名前を独自の定義で使っている場合は単に stdbool.h を使わないという選択が可能。)
このような状況から、互換性の問題がなければ論理型は bool という名前にしたかったし、論理型の値は true, false と書きたいという意図が感じられる。
自分が書くプログラム内で名前が衝突するような問題がないのなら意図に乗っかっておくのが無難そうに思われる。

C23 からは bool, true, false がキーワードとして直接にサポートされるようになって stdbool.h は意味を失いただ存在するだけになった。
こういう変更をする以上はこれが C のあるべき新しい姿と考えられてるってことなんだろう。
stdbool.h を使うことで (古い規格でも) 新しい姿を先取りできるわけ。

ただ、 C23 の変更はちょっとだけ互換性を損なう部分があるから注意を要する。
stdboo.h で定義される旧来の true, false は 1, 0 に展開されるマクロで、要するに型で言えば int だった。
C23 からの true, false は bool 型のリテラルという立場を持つ。
これが問題になるケースはそれほどないとは思うけど……。
2025/04/20(日) 16:30:31.97ID:VYLrteqj0
bool型だと関数成功はtrueで1
int型だと関数成功で0とか普通
混ぜるな危険
2025/04/20(日) 17:33:04.38ID:SQJ2+pRN0
戻り値が負数ならエラーってやつが(ry
2025/04/20(日) 18:02:02.88ID:AC61QJPP0
関数の結果がboolのやつはエラー原因丸めて何が問題かわからないからクソだよな
778デフォルトの名無しさん (ワッチョイ 8a7a-I3kk)
垢版 |
2025/04/20(日) 18:06:56.21ID:sZ1mcHs70
>>773
なんでstdbool.hがあるのかよく分からないってこと?
2025/04/20(日) 19:55:37.89ID:srj6a33k0
>>778
「真面目に」というワードから「そんなにカッチリやるほどのもんかね?」みたいなニュアンスを感じる。
意味はわかった上でそれほど価値を感じてないのだと思う。
780デフォルトの名無しさん (ワッチョイ f9ee-0INX)
垢版 |
2025/04/20(日) 21:08:15.13ID:0ZeTNaMX0
#define false 1==0
#define true !false
不真面目なんでいつもこれでやってました
2025/04/20(日) 21:22:34.91ID:SQJ2+pRN0
>777
エラー理由が必要なやつは引数に返り値用ポインタ要求する設計になってんじゃね?
782デフォルトの名無しさん (アウアウウー Sa21-NXaD)
垢版 |
2025/04/21(月) 02:34:30.39ID:DqUDvQMka
>>777
関数の結果の型がboolのやつが-1を返す例もあってな
2025/04/21(月) 05:17:15.86ID:jNnWMUsR0
>>780
stdbool.h がやってるような
#define false 0
#define true 1
ではなく無意味に遠回りな書き方をする理由は何?
2025/04/21(月) 05:35:14.60ID:gJLXVah/0
そういや、boolの実値は処理系依存とはるか昔に習ったようなキモス
785デフォルトの名無しさん (スッップ Sd0a-Rq/v)
垢版 |
2025/04/21(月) 05:47:00.09ID:wZXY8H1ed
>>783
FAQを読め
2025/04/21(月) 05:54:01.88ID:jNnWMUsR0
>>785
これのこと?
https://c-faq.com/bool/booltype.html
そういのを好む人もいるとだけ書かれていて、理由の説明はない。
2025/04/21(月) 09:56:56.17ID:i498vk5cp
#define TRUE (0==0)
#define FALSE !TRUE
この書き方はまだ世の中がBASICでソフト組んでた頃に見たわ
たぶんそれ以前のどこか別の言語からの輸入なんだとは思うが
かっこいいから好んで使ってる
2025/04/21(月) 09:58:55.59ID:JjvQDxsX0
まあ、まだtrueが0以外って仕様だった頃に、より処理系に沿った正確な値が欲しかったんだ
2025/04/21(月) 11:43:45.70ID:++xqwTI40
>>788
PDP-11 時代の C のリファレンスマニュアルを見つけることが出来た。
https://web.archive.org/web/20250121035636/https://www.bell-labs.com/usr/dmr/www/cman.ps
1975 年頃のもので、このときすでに比較演算子や等価演算子は 1 か 0 を返すことになっている。
たぶん最初からそうだったと思う。
C の基礎になった B の時点で既にこのような仕様なので。

ただ、全ての処理系が完璧に同じ仕様に沿っていたわけでもないだろうし、当時の事情の中で有用なテクニックだった可能性はあるかもしれない。
2025/04/21(月) 12:00:52.53ID:QKqUxhO90
いまでも「0は偽」という仕様しか謳われてないように見えるがどうだろう

むしろ「偽は0」という仕様が消えているようにも思えるが、どうだったっけ
2025/04/21(月) 12:43:19.49ID:++xqwTI40
>>790
_Bool は整数型 (標準符号無し整数型) に分類されている。
整数型は他の整数型に変換したときに変換後の型で表せる範囲であるなら同じ値になるルールなので _Bool 型の 0 は 0 だよ。
792デフォルトの名無しさん (ワッチョイ f9ac-0INX)
垢版 |
2025/04/21(月) 12:51:37.31ID:NLKNLeTR0
関数の戻り値だと、
0は正常終了、非0は異常終了
というのが多かったと思う
2025/04/21(月) 13:16:11.04ID:3FvSqisv0
論理型のある言語でも
If b = True Then
なんて書かれるとモゾモゾしてしまう
2025/04/21(月) 13:36:06.07ID:0RekbFS70
false=0,true=1に決めたとしても、いにしえのboolがint型な影響で行儀の悪い関数から2とか-999999999を返せてしまって
1以外のtrueで意図しない分岐になる恐れがあるから、ifの条件は0か非0かで判断しましょうというバッドノウハウ的なルールになったようだ
2025/04/21(月) 13:51:07.27ID:0RekbFS70
BOOLの定義にさらに混乱に拍車をかけたのがWindowsAPIのGetMessage()で、戻り値の型をBOOLとしておきながら
実際には0、0以外、-1を返すというBOOLの概念が揺らぐような凶悪な仕様でif文に対し疑心暗鬼になったプログラマーが発生した

https://learn.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-getmessage
796デフォルトの名無しさん (ワッチョイ 971f-3+vo)
垢版 |
2025/04/28(月) 20:12:17.56ID:LzrB3b/O0
初心者です
vcのCL.EXEにパスを通したいのですがどれに通せばいいかわかりません。
86フォルダと64フォルダにそれぞれさらにフォルダが二つあって合計で4つCL。EXEが4っつあります。
86と64は32ビットと64ビットの違いかと思うのですが、64のフォルダにも二つあるのでわかりません
797デフォルトの名無しさん (ワッチョイ 971f-3+vo)
垢版 |
2025/04/28(月) 20:13:33.98ID:LzrB3b/O0
>>796
CL。EXE

CL.EXEの間違え
2025/04/28(月) 20:19:59.93ID:clGXfLYj0
>>796
vcvarsall.bat にパラメータを渡して実行するか各アーキテクチャ向けバッチファイルを実行することで必要な環境変数の設定がされる仕組みになっている。
https://learn.microsoft.com/ja-jp/cpp/build/building-on-the-command-line?view=msvc-170
これらのバッチファイルを経由せずに直接環境を設定するのはやめたほうが良い。

バッチファイルの具体的な内容は各環境によって (インストール時の条件などによってかな?) 違うので他環境でインストールしたバッチファイルを持ってくるなと注意書きがある。
799デフォルトの名無しさん (ワッチョイ 971f-3+vo)
垢版 |
2025/04/28(月) 20:39:54.03ID:LzrB3b/O0
>>798
自分で直接やらない方がいいのですね
はって頂いたページを見ましたが初心者には難しいですね
でもこちらに載ってあるBATファイルで設定するのがいいのですね
ありがとうございます
2025/04/28(月) 20:54:09.97ID:clGXfLYj0
>>799
私自身は今は使ってないからあまり把握してないのだけれど、普通にインストールしたらそのバッチファイルがスタートアップメニューに登録されなかったっけ?
801デフォルトの名無しさん (ワッチョイ 9ff5-ogCD)
垢版 |
2025/04/28(月) 21:29:48.61ID:es1rmYMQ0
>>800
探してみたのですが見つかりませんでした。
PC買い替えたので改めて環境設定しているのです。
もう一度インストールし直すとあるかもしれませんね。
私が消してしまった可能性もなくはないので
2025/04/28(月) 21:32:36.04ID:PCWkr5M/0
自分でPATHを通してみろ。っていう実習だとしたら。
たとえば、Hostx64の中のx86は、x64上でclを実行して、出てくるバイナリはx86用ってこと

「そうやって覚える」のもアリだが、vcvarsall を使いこなすこともぜひ覚えよう
2025/04/28(月) 21:45:04.99ID:x+drcUbt0
パスだけ通しても環境変数設定しないとincludeファイルが見つからないとか色々言われそう
804デフォルトの名無しさん (ワッチョイ 97f6-3+vo)
垢版 |
2025/04/28(月) 22:03:09.10ID:ALNkeUhz0
cl.exeの質問したものです
あらためてインストールしたらスタートメニューにコマンドプロンプトがでてきました。
以前使っていたやつと同じのなのでcl.exeが実行できます。
みなさん親切にありがとうございました!!
805デフォルトの名無しさん (スフッ Sdbf-6bHF)
垢版 |
2025/04/29(火) 05:05:37.13ID:YS1K5N/ud
>>804 Windows環境だと俺はまだ、command prompt for developerを使わないとcl.exeを実行できない。すごいなぁ
806デフォルトの名無しさん (ワッチョイ ff2a-DyZQ)
垢版 |
2025/04/29(火) 09:10:59.69ID:zaEbcMdv0
Windows は難し過ぎ。
2025/04/29(火) 12:55:09.96ID:TmvDscRda
Nim入れたら勝手にcl実行出来るようになってた気がする
808デフォルトの名無しさん (JP 0H4f-KaeE)
垢版 |
2025/04/30(水) 19:36:25.43ID:IchQwRQ5H
Windowsでコマンドプロンプトを使ってのC言語って、
VCにしてもMingWとかにしても、
どうにもイマイチよな

なんならDOS時代のBorland Cとかの方が
IDEとの相互運用性があった気もするが

まあ、きょうびプログラミングといえばもうLinux一択ですしねえ
2025/04/30(水) 20:41:49.51ID:SXWYOndw0
ゲーム開発とかWindowsだろ
Linux一択ってお前狭い世界しか知らないだけだぞ
2025/04/30(水) 20:47:22.61ID:KuvXDJPY0
狭いWindowsの世界から飛び出そう
2025/05/01(木) 03:44:24.96ID:xFwps2mR0
Windows一択とは言ってないね
その論理思考能力でプログラミングやってて大丈夫?
812デフォルトの名無しさん (アウアウウー Sa1b-Dl8r)
垢版 |
2025/05/01(木) 10:14:05.05ID:nTiKCI2Ra
>>808
*nix系のcmakeとWindowsのCMakeは別物だったと思うけど
VSはプロジェクトからmakefileを造ることは可能だったはず
メリットがあるかどうかは知らん
813デフォルトの名無しさん (スッップ Sdbf-KaeE)
垢版 |
2025/05/01(木) 13:40:32.60ID:pf/ZHGigd
VCって、C言語にとてもよく似た、ともすればほぼ同じ文法でソースを書ける、
何かのフレームワーク用の開発環境だよね
2025/05/01(木) 14:35:25.46ID:nTiKCI2Ra
MFCのことか
2025/05/01(木) 20:39:23.67ID:ZetavPXj0
>>812
nmakeがmakeと別物であってcmakeはWindowsでも一緒だろ
2025/05/03(土) 00:28:21.78ID:HHJZofaV0
錆び付いたC言語で今を打ち抜こう
817デフォルトの名無しさん (ワッチョイ 972a-DyZQ)
垢版 |
2025/05/03(土) 07:50:52.82ID:v3weHkV10
>>816
何を使用して?
2025/05/03(土) 10:18:34.76ID:sPbW4KAD0
>>817
投げ捨てられたautoconf
819デフォルトの名無しさん (ワッチョイ b7fa-VDOd)
垢版 |
2025/05/03(土) 16:53:00.85ID:ZpfRANr50
>>816-818
良い歌詞だね
曲付けてもらえば?
820デフォルトの名無しさん (ワッチョイ 9f68-VDOd)
垢版 |
2025/05/03(土) 18:56:34.42ID:Q4RX0Sa/0
スマホとPCの作業を効率化したい--「Copilot Vision」の便利な8つの活用例
2025-05-03 07:00
https://japan.zdnet.com/article/35232549/


1 プログらまーまこれを改造してるので上記以外の状態でも使用できるようにしている

2 すでにプログラムがあるので1〜コードを作成する必要が無い

ボイス・トォ・スカルの本態が一般パソコンにまで来たのでつい買い捨てができるようになった
マネーロンダリング 談合 インサイダー などがはかどるといわれる
2025/05/03(土) 18:58:42.72ID:AGoX3tlE0
タイトルは青春の蹉跌あたりで
822デフォルトの名無しさん (ワッチョイ cf7e-Enlg)
垢版 |
2025/05/05(月) 08:50:37.13ID:3AfvJi9A0
“イリヤ神”がまたやった 動画生成AI「FramePack」が革命的なワケ
2025年05月05日 07時00分更新
https://ascii.jp/elem/000/004/267/4267160/
 4月17日に登場した動画生成AIプログラム「FramePack(フレームパック)」が世界的に衝撃を与えています。PCローカル環境で動画AIを動かすには、少なくともビデオメモリー(VRAM)が12GBあるビデオカードを搭載していないと難しいというのが常識でした。ところが、VRAM 6GBでも安定的に動作させられるため、一気に動画AIの裾野を広げそうです。開発したのは、画像生成AI分野で「ControlNet」や、使いやすいツール「Fooocus」などを開発してきたことで知られる、スタンフォード大学に在籍中のIllyasviel(イリヤスフィール、以下イリヤ)さん。既存の方法論にまったく違ったアプローチでブレイクスルーを引き起こす、“イリヤ神”のアプローチに再び注目が集まっています。
中略
 AI動画を作ってみたいけれども、スペックが足りないために諦めていたという人が次々に自前の環境で試すようになってきました。既にワンパッケージでインストールできる環境も整えられているため、スタートも簡単です。様々なファイルをダウンロードしてくるため、初期設定は2時間くらいは見ておく必要があるものの、圧倒的にハードルが下がりました。
2025/05/05(月) 16:26:03.24ID:gTSTkGJ70
>>822
オンボのグラフィックスでも動きますか?
メインメモリは24GBです
824デフォルトの名無しさん (ワッチョイ cff0-Enlg)
垢版 |
2025/05/07(水) 15:22:05.67ID:Nuqzm3Wk0
下記は全て2025年5月7日の記事

OpenAI、ChatGPTの6つのモデルの違いと適切なプロンプトを解説
https://news.mynavi.jp/techplus/article/20250507-3275757/

Microsoftの新規のソースコードの約3割をAIが生成、Nadella氏が明かす
https://news.mynavi.jp/techplus/article/20250507-3271749/

スコットランドの住民を悩ます謎の怪音「ヘブリディアン・ハム」の正体はいまだ不明
https://karapaia.com/archives/507130.html
2025/05/07(水) 15:47:16.05ID:n3ae2haO0
怪音をお尻から出してる奴、正直に名乗り出なさい
826デフォルトの名無しさん (スフッ Sd32-RYHa)
垢版 |
2025/05/08(木) 08:38:35.44ID:KCA9Lwh4d
WSLでdebianを使っているけど、動作が軽いし便利だよね vscodeの起動も早い
827デフォルトの名無しさん (ワッチョイ af58-Enlg)
垢版 |
2025/05/09(金) 07:07:15.84ID:+l+evNW70
もう見抜けない、最先端のAIディープフェイク動画は心臓の鼓動まで再現、判別が困難に
2025-05-08
https://karapaia.com/archives/507859.html
2025/05/09(金) 13:25:09.01ID:3M4tliEX0
天国は良い所か聞けばわかるよ
829デフォルトの名無しさん (ワッチョイ 162a-4tkZ)
垢版 |
2025/05/09(金) 19:22:34.32ID:rWwF6jNu0
帰って来たヨッパライか。
2025/05/09(金) 22:19:38.30ID:toYOiewu0
>>718
なんこれCプログラマなのに初めてみたは…
WGのサイトは見ててあそこが公式と思ってた
最近出来たんか
2025/05/09(金) 22:21:43.53ID:toYOiewu0
公式ホームページ(半世紀遅れ)
良いドメイン取れてよかったね
832デフォルトの名無しさん (ワッチョイ 12ad-T6Ba)
垢版 |
2025/05/10(土) 14:39:03.43ID:17EyeKMh0
>>825
はい。
2025/05/24(土) 20:58:15.38ID:aQkh9jD40
初心者一名様ご案内、興味あれば以下よろしく。
https://mevius.5ch.net/test/read.cgi/tech/1728823763/10-

概略:
PHPでoniguruma(正規表現ライブラリ)最新版の機能を使いたい為、
(文法含めて)C言語の知識がまるでないのに環境構築してコンパイルし、
コードの問題(未改修箇所)も見つけて動かしてしまった剛の者(ただしかなりラッキーパンチ)
とはいえGitHub上で活発にやりとりしてるし、ポテンシャルは高い
PHPとPythonは使えるらしい

すまんが俺自身は他人に教える事自体には興味ない
俺は「他人のコードを読む経験が不足している」と自認しており、
それなりの品質が期待されるコード(=有名なOSS)は機会を見つけて読む事にしていて、
今回もonigurumaのコードを読む機会として便乗しただけ
だからお前らが同様の事をやるなら便乗してもいい

俺の文法/規格の知識は完全にお前ら以下で、よく「それC++」と言われてる連中と同程度
(俺はCとC++を分離出来てないし、C++コンパイラで通る範囲のCしか使ってない)
俺はお前らがやってる重箱の隅的問題には興味なく、もっと大局の、
「この仕様/機能を実現する為、どういうコード戦略で記述するか」に興味がある
(数行のコード内での詳細文法ではなく、数万行のコードをどう構成するかに興味ある)
最近気に入ってる言語はJS
2025/05/25(日) 19:39:48.52ID:OO+eY7q40

キモ
835デフォルトの名無しさん (スッップ Sdbf-nAGj)
垢版 |
2025/05/27(火) 14:54:10.14ID:qQFXqwqXd
カッコ書きを多用してるから多分ADHDなんだろう
ここでも他に時々見かけるけどまあそっとしといてやれ
836デフォルトの名無しさん (ワッチョイ 8b52-3DDr)
垢版 |
2025/05/27(火) 15:25:06.34ID:K50j2XjJ0
星たちは「音」を奏でていた。楽器のように。歌のように
5/26(月) 19:00配信
https://news.yahoo.co.jp/articles/1996331be041f2656a929fec1ccd595ed3b4a053

量子世界では鏡の中心で本物と鏡像が溶け合う観測不能ゾーンが発生する
2025.05.26 MON
https://nazology.kusuguru.co.jp/archives/178271

1キロ先から「幅3ミリの文字」が読めるレーザーを開発!
2025.05.26 20:00:48 MONDAY
https://nazology.kusuguru.co.jp/archives/178219
837デフォルトの名無しさん (ワッチョイ 8bbd-3DDr)
垢版 |
2025/05/28(水) 08:34:27.62ID:d5fn07f20
【悲報】財務省、廃棄したはずの森友文書を別の開示請求でうっかり開示してしまう🥺 [928380653]
2025/05/25(日) 14:40:21.21
https://hayabusa9.5ch.net/test/read.cgi/news/1748151621/

第三者委員会「エロ小説漏洩は斎藤知事の指示の可能性が高い」 [595582602]
2025/05/27(火) 14:50:41.31
https://hayabusa9.5ch.net/test/read.cgi/news/1748325041/

元総務部長が裏切り「斎藤知事に指示されてやった」 斎藤兵庫オワコン逮捕😭 [659060378]
2025/05/27(火) 23:30:03.48
https://hayabusa9.5ch.net/test/read.cgi/news/1748356203/

立花孝志 業務上横領の疑いで刑事告訴 警視庁が受理(画像あり) [659060378]
2025/05/27(火) 21:37:55.62
https://hayabusa9.5ch.net/test/read.cgi/news/1748349475/
2025/05/28(水) 10:43:48.21ID:U7MV9uLa0
おれもHDMIでDVIだよ
839デフォルトの名無しさん (ワッチョイ 0bec-qYXw)
垢版 |
2025/05/28(水) 20:10:39.46ID:EIair+pr0
【兵庫】「知事・元副知事の指示に基づき正当業務を…」斎藤知事の“側近”井ノ本氏の弁明書 知事は改めて否定 [ぐれ★]
2025/05/28(水) 17:08:14.82
https://asahi.5ch.net/test/read.cgi/newsplus/1748419694/
※追い詰められてないか?
2025/05/28(水) 21:43:45.39ID:PBslL45A0
スレに関係無いもん貼るなよ
841デフォルトの名無しさん (アウアウウー Sa8f-q7Ty)
垢版 |
2025/05/30(金) 13:31:01.21ID:XWQpoVmBa
もうプログラマー寄り付かなくなってるんじゃまいか
842デフォルトの名無しさん (ワッチョイ 23ad-hhgN)
垢版 |
2025/06/23(月) 13:59:19.19ID:gexPgDcc0
C言語の終焉か
2025/06/23(月) 14:32:37.67ID:gJ1K/dLq0
プログラマーの終焉
844デフォルトの名無しさん (ワッチョイ 4b10-sIdA)
垢版 |
2025/06/23(月) 15:24:01.44ID:Le9JOtTU0
C は終焉の C
845デフォルトの名無しさん (アウアウウー Sa69-G7Nc)
垢版 |
2025/06/24(火) 09:50:49.50ID:17zM306Da
文部科学省が標準のローマ字表記を改めるんだってよ
846デフォルトの名無しさん (ブーイモ MM43-1F4K)
垢版 |
2025/06/28(土) 16:40:01.58ID:uH6ba5rfM
しょぼい機器でも物凄い性能だから、C言語を使う必要もなくなっている。
2025/06/28(土) 16:47:05.13ID:WGUfZy3xp
もはやjavascriptすら動くからなぁw
2025/06/28(土) 21:00:47.99ID:HZiRGN/SM
ただまあ、バイト単位で処理したい時には JS や Python や Java や Ruby
より便利だけどな。
2025/06/28(土) 21:01:32.93ID:HZiRGN/SM
あと、文字コードだとかを勝手に変換しないというのも便利だな。
850デフォルトの名無しさん (ワッチョイ 4201-V852)
垢版 |
2025/06/30(月) 06:22:37.34ID:m9Iz5ero0
結局、自作したいだけかよw
2025/06/30(月) 11:37:57.93ID:YZeS8CxH0
外食に飽きると自炊を始めるものだよ
852デフォルトの名無しさん (ワッチョイ c602-1ra/)
垢版 |
2025/06/30(月) 12:00:43.86ID:rn9gnazy0
そろそろc談義したいぞ…
2025/06/30(月) 13:32:07.78ID:Bi14XNYeM
C/C++は、(レンタル)サーバーサイドでも、ソースコードを盗まれないというメリットがある。
2025/06/30(月) 13:49:28.37ID:Bi14XNYeM
PHPは一見便利なように見えても、何をやっているのか不安が残る部分がある :
・文字コードの扱い。勝手に変換される可能性。それが脆弱性の原因になる可能性がある。
・SessionID の管理のされ方。それがブラックボックスで余り説明が無いので危険。
・文字列が「長さ指定文字列」と「0終端文字列」との二種類あり、デフォルトは前者だが、
正規表現系は後者である場合があり、それを知らないと脆弱性の原因になる。
2025/06/30(月) 18:59:51.22ID:YQWckD/50
最近はFPGAでコンピュータ作ってるけどメモリが4kbytesとかしかないのでC言語があると助かります。
2025/06/30(月) 20:50:19.20ID:YZeS8CxH0
アセンブラ使え
857デフォルトの名無しさん (ワッチョイ c379-SOZQ)
垢版 |
2025/06/30(月) 20:56:51.68ID:i+8hTHYI0
そこまでのキツい環境ならC使わずにアセンブラ使えって思う
2025/06/30(月) 20:57:51.84ID:bv4WQiut0
その規模なら C で書くにしても配慮すべき低レイヤの事情がありすぎてあまり C の甲斐がなさそうだと私も思う。
2025/07/01(火) 02:30:13.65ID:LkiphQyhM
PHPの文字列は、1つの文字列の中でも、文字によってバイト数が異なるそうだ。
だから、$str[$k] の $k は、文字単位ではなくバイト単位。
文字単位で指定したい場合には、
mb_substr($str, $k, 1, "UTF-8")
とするとのこと。
文字列の終端には一応 0x00 が入っているが、文字の長さはバイト数で管理されており、0を
終端とはみなしていない。だから、文字コードが 0x00 の文字も文字列の中に含めることが可能。
$str = "こんにちは";
echo strlen($str); // バイト数(UTF-8なら15)
echo mb_strlen($str); // 文字数(5文字)

ところが、正規表現を扱う場合には、0x00 のバイトが含まれていると、文字列の終端と
みなされることがある。だから、ユーザーによって入力された文字列を正規表現で
安全チェックをしたつもりでも、文字列の途中に 0x00 のバイトが含まれていて、
それ以後に危険なコードをが含まれている倍がある。

C言語で作っていれば子の様な齟齬は起きない。
2025/07/01(火) 05:48:42.66ID:M5z4vIa80
>>859
× > PHPの文字列は
○ unicodeは

× > C言語で作っていれば
○ asciiに限定すれば

お前は基本的なところがまるで理解出来てない
そもそも文字コードの話なのだから、どの言語でも同じ
特定の言語を使用すると回避出来るとかいう話にはなり得ない
2025/07/01(火) 06:18:52.12ID:M5z4vIa80
と思ったが、もしかして最近の言語はutf-8をネイティブサポートしていて、(=内部文字列がutf-8)
この辺を全部自動的に回避出来るのか?(=プログラマに文字コードの知識が全く必要ない)

Cはutf以前だから勿論サポート無し
PHPはWeb言語だから文字列=バイトストリーム扱いで、共用体が駆使されるネット向けになってるだけ
JSはutf-16だったがサロゲートペア導入でAPIが2つある(サロゲートペア対応版と非対応版)
Rustは知らんが、さらっと調べた限りutf-8で、逆にインデックスアクセスが出来ないらしい(3文字目を[3]で取得出来ない)
ただこれだと遅くなるだけなので、Cを駆逐したいと言いながら便利さを追求してるRustは迷走してる

Pythonは、どうやら全自動で出来るみたいね…
2025/07/01(火) 08:38:13.77ID:WjfKubzqM
>>860
859は別に間違ったこと言ってないでしょ
そこまで上から目線で言いたいならunicodeは書記素クラスタで考えないといけないので可変、ぐらい言わないとね
コードポイントならUTF-32は4バイト固定だし
むしろc言語はasciiという言い方は複数の意味でおかしい
2025/07/01(火) 09:47:54.97ID:M5z4vIa80
>>862
俺は859は根本的に勘違いしてる(≒間違っている)という見方を今も変えてないが、
少なくとも862の方が詳しいようだから(859の相手は)お前に任せるわ。

俺より詳しい奴が居る場所で俺が説法する意味もなく、
馬鹿と初心者が無限に沸くネットで間違いを全部指摘して回るのは無理だし。
下から目線のゆとりZ様同士でよろしくやってくれ。
どのみち俺とお前らではどうやっても合わないのはこれまでも散々経験してきた事だ。
2025/07/01(火) 09:48:28.12ID:M5z4vIa80
とはいえ一応内容について触れておくと、
> 書記素クラスタ
重ね文字等の事は知ってるぞ。ただ俺はこれは仕様が決まってないかと思っていたのだが、一応あるんだな。
http://unicode.org/reports/tr29/
ただこれ、問題は"Unicode 16.0.0"と、バージョンがやたら高い事にあると思う。
自然言語が既に16回も改訂してるわけはないので、中途半端な仕様を決め、改訂しまくってるという事だから。
今の仕様で実装しても、出来上がる頃には仕様が改訂されている事もあり得る。

> コードポイントならUTF-32は4バイト固定だし
当然これも知ってるが、現実的にutf-32を使う事はほぼあり得ないだろ。
文字列処理は結局の所速度/メモリ重視だから、utf-32ではコードは書きやすいかもだが使い物にならない。

つかこの辺859に言ったところで通じるわけもなく、マウントが目的になってるのはお前の方だ。
だからこそ「上から目線」に過度に敏感なのがゆとりZの傾向でもあるが。

> むしろc言語はasciiという言い方は複数の意味でおかしい
話を続ける気があるなら、何の事なのかもう少し具体的に言え。


まあ一言ずつに纏めると、

859: PHPは文字の扱いに色々問題があるが、C言語にはない
860: お前は根本的に間違ってるから、文字コードについて勉強し直せ ← 859に通じる範囲で返事してる
862: 俺の方が詳しいのに上から目線ウゼエ ← マウントを取り返しただけで、859に通じるようには書いてない

ここら辺がゆとりZがコミュ障な所だ。
まあそれでもお互いにやるのは自由、よろしくやってくれ。
俺は降りる。
865デフォルトの名無しさん (ワッチョイ c379-SOZQ)
垢版 |
2025/07/01(火) 10:03:19.08ID:0aieN+8C0
普通に何も考えずに使ってて問題起きないならstrlen以外にもmbslenとかwcslenみたいなのを用意されることはないんだよな
2025/07/01(火) 10:07:53.62ID:O7C1rCRT0
ああついでに言っておくと、

ゆとり以前(=俺):内容が正しければ態度なんてどうでもいい

ゆとりZ:ボクがどんなにマヌケな間違いをしていたとしても、
 優しく丁寧に教えてくれる事が絶対条件で、
 優しければ内容が多少間違っていても許容される(←いやこれは俺は許容出来ねえ)

という違いだな。まあゆとりZ同士でよろしくやってくれ。
ただまあ、Qiitaのスレとかチラ見してるが、
発言の自由がある=どんな馬鹿でも発言出来る=間違った情報も当然発信される、なのだから、
Qiitaに正確性を求めるのは仕様的に無理なので、連中も間違ってて、
Qiitaは玉石混淆な上で、石が大量生産されるのは仕様として甘受し、玉を探すべきだとは思うがな。
とはいえQiitaが石→玉化する機構を持ち合わせられない(=間違いを指摘する事すら出来ない)
のは上記ゆとりZ価値観の賜だから、詰んではいるが、それでも(Qiitaというサイトが)無いよりは断然いいし。

つまりだな、お前らゆとりZは「上から目線ガー」とか一々やってるから駄目なのであって、
「相手」(今回は859)に向き合う気がないから、
Qiita等の「一方的に発信するだけ」のツールは断然相性がいいが、
そこで「双方向な議論」とかはまるで出来ないんだと思うぜ。
859にとって困るのは、「上から目線」ではなく、「間違いを指摘してもらえない」事だろ。
(ただこれがゆとりZに取っては違うらしいので俺にはどうにも合わないが)
2025/07/01(火) 10:57:25.82ID:M5z4vIa80
リンクは以下の方がよかったかも
https://hydrocul.github.io/wiki/blog/2015/1025-unicode-grapheme-clusters.html

> Grapheme cluster の境界定義
> CR の次に LF が続く箇所は境界にならない
これだとCRLFは一文字扱いだから、utf-8の0x7f以下だけ使っても(厳密には)asciiとは違うって事か?
なんで一々仕様を無駄に変更するのだ?という気はするが、
見てる限りunicodeって自然言語学者が策定してる仕様で、プログラミングのし易さなんてまるで考慮して無いな
2025/07/01(火) 16:58:38.98ID:W1sziXWKM
PHPに限らず、文字コードを勝手にいじくる言語は脆弱性の温床になる。
C言語は指示しない限りは何もしないから、むしろ安全。
860は、馬鹿だから理解できない。
2025/07/01(火) 17:04:55.37ID:W1sziXWKM
中途半端に自動化しようとしていることが脆弱性の温床になる。
詳細な仕様を書かないで「こういう場合にはこうすれば安全ですよ」
みたいなのが結構危ない。
なぜ、そうするのか。その関数は厳密に何を行っているのか。
「簡易言語」には、そういう情報が欠落していることが多い。
2025/07/01(火) 17:07:29.61ID:W1sziXWKM
フレームワークも危険だ。
「完成品」として何もカスタマイズしないで使っているなら、安全かもしれない。
ところが、「プラグイン」と呼ばれているものを組み合わせたり、
独自にカスタマイズしようとすると、とたんに危険になる。
なぜなら、仕組みが分かりにくく、ソースが巨大で解読しにくいことが多いからだ。
特に問題なのはオープンソースのフレームワークだ。
ソースが汚いものが多いから、それが原因で理解が難しくなり、脆弱性が入り込む。
2025/07/01(火) 17:10:17.61ID:W1sziXWKM
860は、物事の理解が甘い。
自分が馬鹿なことに気付いてない。
5chだけで偉そうにしている馬鹿。
872デフォルトの名無しさん (ワッチョイ c3ef-OGY2)
垢版 |
2025/07/01(火) 17:12:20.54ID:rc7NgUjs0
自己紹介ですか?
2025/07/01(火) 17:15:03.47ID:W1sziXWKM
>>872
おまえは、自覚が無い馬鹿だ。
874デフォルトの名無しさん (ワッチョイ c379-SOZQ)
垢版 |
2025/07/01(火) 17:41:41.27ID:0aieN+8C0
全然違う話になったぞ???
2025/07/01(火) 19:57:14.17ID:4pZHV5xo0
けどさ
今のWindowsって内部的にはUTF16LEなんだよな
それをアプリ側に合わせてマルチバイトに変換したりしてるわけで
2025/07/01(火) 20:03:31.00ID:M5z4vIa80
>>874
まあ859もゆとりZだったというオチだよ。
見えてた展開ではあったが、放置するのも問題かと思って最低限のツッコミを860でしたつもりだったが、
ゆとりZが釣れまくってどうにもならねえ。脱線しすぎ。

5chにはコミュ障が多いのでついでに解説しとくと、
859のテイ、何だかよく分からん独り言は、ゆとりZ特有のムーブで、
・質問して答えてもらえないと傷つくし、
・議論提起してボコられたら嫌だし、
・何だかよく分からん独り言にしとけば、どういう展開になっても逃げられるし!!!
って事で、傷つかない為に予防線張りまくりの戦術、連中なりの「コミュ上手」な手法らしい。
いやいや、お前ら一々メンドクセエわ。
2025/07/01(火) 20:04:09.01ID:M5z4vIa80
>>868
> 860は、馬鹿だから理解できない。
お前がどう思おうと自由だが、さすがに俺よりお前の方が賢いと思う奴は居ないと思うぞ。
まあこれも862と同様のゆとりZ特有ムーブで、「ばかにされた!!!」事が内容に勝ってる。
いやいや、お前がそもそもマヌケな事を言わなければ防げた展開だろ、とはならない。

> PHPに限らず、文字コードを勝手にいじくる言語は脆弱性の温床になる。
> 特に問題なのはオープンソースのフレームワークだ
少なくとも今のお前より理解してる連中が作ってるから、
今のお前の知識と知能で作った物よりは安全だろうよ。

ついでに言うとこれもゆとりZの特徴で、
心根で他人を見下してるからこんな発言になるし、また、
心根で他人に対してマウントを取りたい、上から目線で話したい、と思ってて、でも我慢してるからこそ、「上から目線」に過敏になる。
オープンソースにゴミが多いのも事実としても、
同じ物を作るのはかなり大変なのも、結果的に生き残ってる物はそれなりに鍛えられた品質なのも事実。
各言語処理系なんて相当の人数が関わって改善された結果だから、同等以上の品質の物を作るのは事実上無理だと思うけど。
ゆとりZは「謎の心根の『上から目線』」がありすぎ。
それでいて「表面的な『上から目線』」にゼロトレランスなのはちゃんちゃらおかしいのだが、まあ連中はここら辺を矛盾に感じないらしい。
連中は表面的なコミュニケーションしか出来てないってのがこの辺から分かる。
2025/07/01(火) 20:14:50.32ID:O7C1rCRT0
>>875
それは正しいよ。
サロゲートペア以前はutf-16が各国文字を固定長で扱える(多分)唯一のエンコードだったから、
ローカライズ前提のwindowsの内部コードをutf-16で作るのは正しい。

逆に言えば、サロゲートペア以前はutf-32なんて使う意味なく、実際使われてもなかったはず。
今固定長に拘るならutf-32しかないけど、Rustがutf-8を選択したのは、utf-32は使い物にならないという判断のはず。
(まあゆとりZなら「俺の判断の方が正しい」となるのだろうが、
俺の心根はそこまで「上から目線」ではないので、Rust陣営の判断はそれなりに尊重する。
なおRust信者は死ねと常々思っているが、それとこれとは別の話)
2025/07/01(火) 20:20:08.26ID:4pZHV5xo0
そうではなく
OSレベルで自動変換が行われているのに
言語レベルの自動変換に文句言うのもなんだなぁと
そういう話
2025/07/01(火) 20:35:01.95ID:M5z4vIa80
>>879
その意味なら、OSレベルの自動変換はされてないぞ。

例えば、SJISファイルはSJISファイルとして保存されてるだろ。
Windowsに保存する限りあらゆるファイルが自動的にutf-16にされ、
もう二度と各ファイルのエンコードを気にする必要がないのなら、大半の人はこの方が助かるとは思うが。(俺もこれでいい)
同様に、.NETでファイルストリームを開いたら、あらゆるエンコードが自動的にutf-16になって見える、って事もないだろ。
(APIチラ見する限り、Text.Encodingがあるから手動で切り換えのはず)

ただこれを目指した物がBOMなのだろうけど、上手く機能してるとは思えないね。
2025/07/01(火) 20:40:05.31ID:4pZHV5xo0
sjisファイルを読み込んでメモ帳で表示させる場合、内部のレンダリングエンジンとかはutf16に変換されたものじゃねえの?
それをまたsjisで保存する際には変換されてる
2025/07/01(火) 20:41:51.49ID:4pZHV5xo0
winapiのA系もutf16に変換されてる表示されているんじゃないの?
2025/07/01(火) 20:42:58.47ID:4QEmYdel0
>>880
A 付きの API は OS が変換するよ。
ファイルの読み書きもロケールの設定によっては変換する。
わかりやすく観測しやすい例としてはファイル名は変換してる。
そもそも NTFS の規格からしてファイル名は Unicode が前提だし。
2025/07/01(火) 20:43:09.72ID:M5z4vIa80
>>879
あ、ちなみにコピペなら、あれはアプリ側がやってるらしいぞ。

例えばメモ帳でSJISファイル開いて、Ctrl-C、その後utf-8の別アプリ(メモ帳でもいい)でCtrl-Vしたとき、
正しくコピペされる(=文字化けしない)が、これはアプリが対応してるかららしい。
ソースは、以前、対応してないアプリがあって、コピペが上手く機能しなかったとき、
「Windowsのメモ帳ですら対応してるのに、なんだこの糞アプリはッ!!!とブチ切れてた奴を見たから。
OSがやってくれてるのならこうはならない。
2025/07/01(火) 20:56:30.50ID:M5z4vIa80
>>882-883
確認した。
AとWがあり、Aは自動変換してくれるようね。
Win32APIだから、「OSが自動変換してくれる」と表現するのも正しいね。

>>879
上記で了解した。
2025/07/01(火) 22:22:40.31ID:0+2Ys+XXM
>>877
的外れなことばかり言ってんじゃないぞ、大馬鹿ものめ!
馬鹿はC言語スレに来るな!
887デフォルトの名無しさん (ワッチョイ 62ad-hyNN)
垢版 |
2025/07/02(水) 04:17:04.40ID:ZRfP3NsY0
phpやアプリで入力された文字をwebアプリで扱う話
なのか
メモ帳みたいにwindows固有のShift_Sisでの文字の処理の話
なのか
2025/07/02(水) 05:01:21.76ID:kZMPfHAD0
文字コードとプログラミング言語の区別が付いてないゆとりZが、
「ぼくのさいこうのせきゅりてぃ!!!」を語って馬鹿にされただけの話


ついでに考えてみたが、Windowsの場合はファイル読み込み時に変換かけ、
CLR上のStringも、C#のStringも、またWindows上のStringも、全てutf-16、という美しい世界なのだろうが、
これだと同様にクリップボード上のテキストもutf-16だと思われ、文字化けする理由が分からん
(俺が遭遇した物はエンコーディングによってコピペが出来たり出来なかったりしてた《ように見えた》)

なおWin10以降はutf-8を目指しているのかも?
https://www.momopoem.com/?p=919



とはいえ、Cの話ではないな
unicodeスレでやれってこった
(あるのかは知らんが、スレがあってもおかしくない程度にはunicodeは複雑)
2025/07/02(水) 06:16:59.91ID:5Jo8M0S90
内部表現がUTF16LEであって、表面上はシステムで設定した文字コードってだけの話だよ
日本語環境だとデフォルトS-JISだったのをWindows10の途中からutf-8にした(ユーザ側で変更は可能)
メモ帳もデフォルトがutf-8になった

クリップボード上のテキストはアプリケーションがクリップボードにデータを預ける
その預けるデータ形式に読み取り側が対応していないと機能しないと言うだけ
シンプルなテキスト形式ならCF_TEXTがANSIでCF_UNICODETEXTがUTF16LEになる
CF_TEXTにしか対応していないか、両方対応しているけどANSI優先させてしまっている場合(ないと思うが)になら環境依存文字が文字化けすることもある
2025/07/02(水) 08:07:25.64ID:c2tqUwxf0
わからんことはもうAIに聞いたら教えてくれるのに
2025/07/02(水) 08:13:07.97ID:pWg0Xl5Z0
>>889
了解した。

API見る限り、一つのクリップボードに複数のデータ形式を登録でき、しかも自動変換まで行ってくれるのだから、
CF_UNICODETEXTだけ対応しておけば文字化けはほぼ無くなるので、彼が糞アプリ具合にキレたのも分かった。
> システムは、特定のクリップボード形式間でデータを暗黙的に変換します。
> ウィンドウがクリップボードにない形式でデータを要求した場合、システムは使用可能な形式を要求された形式に変換します。
> https://learn.microsoft.com/ja-jp/windows/win32/dataxchg/clipboard-formats
> クリップボードの形式 変換形式
> (中略)
> CF_TEXT CF_UNICODETEXT
> (中略)
> CF_UNICODETEXT CF_TEXT
2025/07/02(水) 09:02:06.13ID:kZMPfHAD0
ちな、unicodeスレ

文字コード総合スレ part15
https://mevius.5ch.net/test/read.cgi/tech/1723861080/
893デフォルトの名無しさん (ワッチョイ ff02-Q0Sn)
垢版 |
2025/07/06(日) 09:24:52.33ID:jyZjYPic0
>>861
python(リファレンス実装、すなわちcpython)の文字列内部表現は全部UTF-32だよ
やはり(概ね)固定長がプログラムで処理しやすい
外部的にはutf-8を吐くけど
2025/07/06(日) 11:52:20.38ID:v3CN8ECgp
英語圏から見たら一文字に32bitも使うなんて勿体無いと思う
2025/07/06(日) 12:26:15.50ID:WJe1asKY0
emoji全盛なので英語圏は~という見方は時代遅れ
896デフォルトの名無しさん (ワッチョイ 1fb9-nrVI)
垢版 |
2025/07/06(日) 13:29:05.42ID:OCq4/vpt0
アスキーコードは0の¥0から127のDELまでしか使ってないのだから絵文字も1バイト内に収められそう
2025/07/06(日) 13:49:41.25ID:WoCgxATG0
128からは北欧やロシア特有の文字で埋められているからなぁ
2025/07/06(日) 14:21:04.82ID:Zx51jGf/0
>>893
おお、utf-32の実装例が有ったか
しかしcpython(1991)に対しサロゲートペア導入(1996)なので、
utf-16ではなくutf-32にしたのは謎だな
先見の明があったのか、(その頃既にunicodeが枯渇気味なのを知っていたとか?)
或いはサロゲートペア対応時にutf-16→utf-32に書き換えたのか?
899デフォルトの名無しさん (アークセー Sx0b-3iNM)
垢版 |
2025/07/06(日) 14:23:19.54ID:WPORaY9rx
iモードの絵文字:271文字

Unicodeの絵文字:約4000文字
合字を含めると10万文字以上
(英字2字から国旗を生成する、
人物の肌の色や髪型を指定する、
「カップル」や最大4人の「家族」を1人ごとに
大人・子供、男女、肌の色、髪型を指定する等)

Appleの絵文字:
自由な文章や顔写真などからAIが生成するため
組み合わせは無限大
(例:自撮り画像を用意して
「サーフィンをする俺」
と指定すれば、写真の数だけ絵文字ができる)
900デフォルトの名無しさん (ワッチョイ ff02-Q0Sn)
垢版 |
2025/07/06(日) 19:24:09.13ID:jyZjYPic0
>>898
2.7までは文字列とユニコード文字列があった
確かu"unicode"的な記法で(おぼろげ)
3にメジャーアップデートして文字列はユニコのみになった
2025/07/06(日) 20:24:06.04ID:fLXWuAJ/0
Qiitaの『[入門] C/C++ 知っておくべきポインタの由来 ISO標準のメモリモデル徹底解説』

この記事のおかしいとこ適切に指摘できる程度の知識ある人がなんか言うべき。
2025/07/06(日) 20:42:05.76ID:+cQ8VLBs0
最初にコメントした人も言ってる通り、内容を精査せずにポストしてる AI 生成記事のようであり、
細部のコメントを受けての修正も根本的なところ(そもそもサンプルコードを含む記事の大部分が
provenance と関係ない)を放置して指摘点だけをどうにか直すにとどまっていて、
これもおそらく AI にやらせていそうで、真面目に付き合う気にならない。
2025/07/06(日) 21:06:32.37ID:WJe1asKY0
最初のコメントの方がずれたこと言ってると思ったわ
2025/07/06(日) 23:42:52.85ID:Zx51jGf/0
>>900
となると単純化する方向で斬り捨て、
2.7まではascii+utf-16だったかもだが3でutf-32に一本化、の可能性が高いか
リファレンス実装(速度よりも正確性重視)だからこれが正しい選択かもね


>>901
読む気もないが、866の通り、Qiitaではゴミは大量生産される物だと割り切り、
「悪い記事」ではなく「良い記事」を探す事に徹するべきだと思うよ
無限に生産される「ゴミ」に対して「有識者」の時間を要求するのは悪だと思うし(=ただの時間泥棒)
2025/07/06(日) 23:58:42.87ID:qwZeW1Ya0
>>897
ひらがなとカタカナ、あとはトランプのマークとかだよ
2025/07/07(月) 00:57:35.46ID:nJ1e9eHr0
>>905
はいはい、日本向けはな
2025/07/07(月) 02:30:49.89ID:RcHVNtjG0
>>906
念のために言っておくと、ISO 8859 はうんこ規格やぞ
2025/07/07(月) 04:46:06.48ID:j3T7OhEz0
>>901
ついでに言っておくとな、

> この記事のおかしいとこ適切に指摘できる程度の知識ある人がなんか言うべき。
=「ばかなゆとりZのためにゆうしきしゃはどりょくすべき」と言っているのであって、
一体何様のつもりだ?であり、こんな事言える時点で相手に対するHRTの欠片もない。

Qiitaの連中はHRTを「『ぼくに』ひどいこといわないこと」と捉えてるようだが、
正しくは「『相手に』対する」姿勢であって、
相手に対してHRTがあるのなら、わざわざしょうもない事で手間をかけさせる事は恐縮なはずだから、
有識者は、堂々と馬鹿を無視して見殺しにするのが、HRTの趣旨に則ってる。
(現実的に、無限に沸く馬鹿全員に構うのは無理だし)

そもそもQiitaは「正しい情報が発信される」プラットフォームではなくて、
「各々が自由に発信出来る場所」であり、「正しいかどうかは読者の判断に委ねられる」(=民主主義)
だから、

× 間違いを正す努力をする
○ 正しい情報を自己で発信し直して、間違ってる情報を上書きする
○ 何らかのレーティング機構をつくり、正しい情報に辿り着きやすくする

方向で努力すべき場所だと思うよ。
(だから「悪い記事」ではなく「良い記事」を探せ、となるわけでね)
909デフォルトの名無しさん (ワッチョイ 37c8-LDc0)
垢版 |
2025/07/07(月) 08:30:34.74ID:CtlI/jIL0
>>908
レーティングとかやったとしても、正しい記事はそれほどレート上がらず、きちんと見ると少しおかしいけど初心者受けする記事に高レート集まるから無駄
2025/07/07(月) 08:46:23.49ID:byi8B4NP0
>>909
「初心者」を含む「人気投票」ベースのレーティングをやったらそうなる
だから例えば、正しい記事を正確に判断出来る「有識者」だけでレーティングすれば、少なくともゴミ記事はすぐ除外出来るだろ
(ただこれはQiitaの連中には出来ない事なのだろうけど、
少なくともStackOverflowは上手くやってるんだから、何かしらやり方はあるのだろうよ)
911デフォルトの名無しさん (ワッチョイ 9ff3-4Q3H)
垢版 |
2025/07/07(月) 10:11:19.66ID:yOeC9ZKg0
全ての暗号化一瞬で解読される
京大、マクロな世界で時間が過去から未来へと一方向に流れる謎に迫る発見
掲載日 
2025/07/07 09:33
https://news.mynavi.jp/techplus/article/20250707-3373082/

これが成功したら一瞬で計算できるでしょう
1 計算を始めた段階から未来では完了している結果が表示される
2 結果が表示された結果を現在に戻せば計算結果のみが表示される
3結果的に一瞬で計算できているように観測される
912デフォルトの名無しさん (ワッチョイ 9ff3-4Q3H)
垢版 |
2025/07/07(月) 10:15:31.37ID:yOeC9ZKg0
人間と同じように考え、次にとる行動を再現する最新AIモデル「ケンタウロス」
公開: 2025-07-06 20:00
http://karapaia.com/archives/523201.html
 >>ドイツのヘルムホルツ・ミュンヘン研究所のチームが開発した
 >>新しいAI言語モデル「ケンタウロス(Centaur)」は、
★>> 160の心理学実験に参加した6万人以上の人々が行った1000万件を超える意思決定データを学習している。
 >>『Nature』(2025年7月2日付)に掲載された。
★>> AIケンタウロスの力があれば、たとえば不安症やうつ病など、精神疾患のある人の意思決定プロセスをシミュレーションすることで、その行動や心の動きを深めることができるという
 >> 研究チームは今後、年齢や性格などの心理的・人口統計的特性もデータセットに組み込んでいく予定だそうだ。
★ >>医療・政策設計・社会科学など、人間の意思決定が重要になる幅広い分野で活用できると期待されている。
913デフォルトの名無しさん (アウアウウー Sa9b-zcFv)
垢版 |
2025/07/07(月) 10:52:50.66ID:4TSfZIZxa
900

unicodestring=u'hogehoge'
(bytes)string='hogehoge'

string='hogehoge'(旧unicodestring)
bytes=b'hogehoge'(旧string)
914デフォルトの名無しさん (アウアウウー Sa9b-zcFv)
垢版 |
2025/07/07(月) 11:00:30.19ID:4TSfZIZxa
911
面白い記事thx
2025/07/07(月) 13:14:06.42ID:NDz1f/gp0
>>910
StackOverflow は信用度に応じて特権が解放される仕組みになってる。
特権の中には (良し悪しの投票とは別に) 削除すべきかどうか投票する権限が含まれるよ。
これは攻撃や露骨な異常に対処するための権限であってレーティングではないけど。

削除票権限を得られる信用度 2000 というのがどれくらいかよくわからんけど、たぶんまともな投稿が百個分くらいだと思う。
そんなに高いハードルではない。
2025/07/08(火) 07:51:29.50ID:O7MIelA50
>>915
いや俺が言ってる「レーティング」は、StackOverflowのそもそもの仕組み、
一つの質問に対して複数の回答がup/downvoteで競う、というシステムの事だ。

ただup/downvote方式は他、例えばYouTube、FaceBook、Reddit等でも使われていた、
かなりありふれた仕組みだが、大体常に不正投票で荒らされる。
その「削除票」はおそらく「不正投票で上位に持ってこられたゴミ」の削除を諮るもので、
仕組み上、up/downvote権は削除票権よりも低い。(はず)

事実として、StackOverflowのレーティングは完全に機能してる。
対して、他サイトのレーティング機能は大体おかしな事になっており、vote自体を止める/見えなくしてるのが大半だ。
他サイトは「誰でも投票出来る」から機能してないのはまあ自明で、
StackOverflowは「投票権」の管理が上手いのだろう。

Qiitaは「誰でも発信出来る」仕組み上、ほぼ全部がゴミになるのは仕様だ。
これは「有識者のみに発信権を絞り、質を上げる」と対極の、
「ゴミにも発信させる事により、裾野を著しく拡大させ、結果的に山頂も高くなる」であり、
典型的な「数撃ちゃ当たる」戦略なので、Qiitaの意思を尊重するなら、「割合」なんて無視すべきで、
「山頂の高さ」「(一定の質以上の)使える記事の『絶対数』」(重ねていうが「使える記事の『割合』」ではない)
だけを問題にすべきだ。

ただ実際の所は「高さ」も「使える数」もゴミだから悪く言われてるのだとも思う。
とはいえ、ゴミ含めた「数」だけは有るのだから、StackOverflowモドキも出来るはずだ。
2025/07/08(火) 07:52:15.52ID:O7MIelA50
例えば、"How to deal with utf-8 in C"でググると以下が先頭に来るわけだが、
> C programming: How can I program for Unicode?
> https://stackoverflow.com/questions/526430/c-programming-how-can-i-program-for-unicode
これと同様に、Qiitaでも"utfをCで扱う記事"を探してきて、良い順にリスト化して表示する事は出来るはず。
まあ単なるSearch機能だが、公式には新着順/関連順/ストック数順/いいね数順しかない。
ここに「評価順」を入れられればいいだけだが、『みんな一等賞』なゆとり価値観では拒絶されるので存在出来ない。
だから外部から補うとしたらここなのだ。

ゴミを列挙したところで、或いはチマチマとゴミの訂正をしたところで、さらに無限に沸いてくるゴミに押し流されるだけだ。
人数は圧倒的に初心者>>>有識者なのだから、手数で勝負したらどうにもならない。
Qiitaのことを思うなら、或いはQiitaの戦略を尊重するなら、
指摘なんて無意味な事はせず、
ただ淡々と、「△△記事より○○記事の方が『上』『下』」と、レーティングのみに徹すればいいのだ。
そしてその理由付け、「○○だからこの記事の方がいい」なんて説明も時間の無駄でしかないからやらなくていい。
実際、書いてる奴はそれで最高と思ってるからその記事になってるわけであり、何を言ったところで通じないし、
また実際、StackOverflowでも単純な「最終スコア」だけで完全に機能してるだろ。
(だからQiitaスレの連中も、やってる事は大幅に勘違いしてる)
2025/07/08(火) 08:08:11.05ID:JNTp8eI40
なげーよ読むかよこんなの
AIで要約して貼れ
2025/07/08(火) 08:18:34.49ID:F/ieIm2L0
Gitスレに居た長文君でしょ。相変わらずのスタイルでスレ違いの話をつづけるなら個人スレッドに帰ってくれ。
ついでにWitBucketの進捗報告してくれてもいいぞ。
https://mevius.5ch.net/test/read.cgi/tech/1668901194/
2025/07/08(火) 10:09:50.64ID:ntbrUw/V0
>(だからQiitaスレの連中も、やってる事は大幅に勘違いしてる)

勘違いしてるのはお前w
Qiitaスレはクソ記事を面白がってるだけww
921デフォルトの名無しさん (ワッチョイ ff02-Q0Sn)
垢版 |
2025/07/08(火) 10:43:13.18ID:ub1Gvu250
もうそういう外の事はいいから、外でやれよ
922デフォルトの名無しさん (スフッ Sdbf-zcFv)
垢版 |
2025/07/08(火) 10:58:14.52ID:Lf/Jcjxkd
ゴミにも発信させる事により、裾野を著しく拡大させ、結果的に山頂は低くなる
2025/07/08(火) 12:03:22.01ID:eAX1Pc590
>>919
>>833としか同定してなかったけど、いたなあこんなの
かっこの使い方とか、急にレッテル貼って攻撃的になるところとか、確かによく似てるわ
2025/07/09(水) 07:17:02.60ID:0pqx6ome0
>>920
お前にはそう見えると理解した。

>>922
現状のQiitaはその通り。
ただ、OSS、Pixiv、なろう、YouTube、Webサイト、アプリ、等々、(多分5chの書き込みも、)
「どんなゴミでも公開するのは自由」という戦略で成功してる例は多々ある。
Qiitaで上手く行かない理由はよく分からん。



それはさておき、以下とか見てみたが、
> https://stackoverflow.com/questions/21737906/how-to-read-write-utf8-text-files-in-c
> https://src.nafod.net/glibc-2.35/glibc/libio/getwc.c.html
setlocaleすればwc関数が使えて、おそらくlocale毎に切り替えられてる関数群を呼ぶ、といったところか?
ならutf-8に決め打ちして高速化するRustの戦略の方が妥当なのかもしれんな。
2025/07/09(水) 19:10:52.61ID:2nUeM8hP0
> Qiitaで上手く行かない理由はよく分からん。

Qiitaはマサカリを通報できるシステムと苦情は悪と捉える運営との相乗効果でいまの惨状だろw
926デフォルトの名無しさん (ワッチョイ 1f63-LDc0)
垢版 |
2025/07/09(水) 20:25:09.49ID:owLuLYBV0
qiitaスレでやれ
2025/07/09(水) 22:19:48.88ID:X9OMVJLS0
>>925
Qiitaスレに落とした
https://mevius.5ch.net/test/read.cgi/tech/1739527246/529-
928デフォルトの名無しさん (ワッチョイ 9f0c-4Q3H)
垢版 |
2025/07/10(木) 05:42:35.42ID:qeCO91fI0
・事件を起こしたオウムしんりきょう幹部反社会のソシオパスではないか?!
知能が高い人ほど、道徳心のスコアが低くなっていた
2025.07.09 07:00:09 WEDNESDAY
https://nazology.kusuguru.co.jp/archives/181131
>>英国エディンバラ大学(The University of Edinburgh)の最新研究によると、認知能力が高い人ほど、道徳的価値観を全体的に弱く支持する傾向があることを明らかになったのです。
>>道徳心には「6つの基盤」がある
>>@ 思いやり/危害(Care / Harm)
>>A 公平さ/不正(Fairness / Cheating)
>>B 忠誠/裏切り(Loyalty / Betrayal)
>>C 権威/転覆(Authority / Subversion)
>>D 純潔/堕落(Sanctity / Degradation)
>>E 自由/抑圧(Liberty / Oppression)
>>これらは「道徳心のセンサー」のようなものであり、文化や時代を超えて人類に共通する心理的傾向です。
>>政治的立場によっても傾向が分かれ、リベラルな人は「思いやり」や「公平さ」を強く支持し、保守的な人は6つすべてを重視する傾向があると指摘されています。
>>結果、興味深いことに、知能が高い人ほど、6つすべての道徳基盤のスコアが一様に低くなるという驚きの結果が得られたのです。
>>とくに顕著だったのは、「純潔」基盤との関係で、言語的知能が高い人ほど、「心や体は神聖なものだ」といった伝統的な価値観に共感しにくい傾向が見られました。
>>道徳的判断を“直感”ではなく“分析”でとらえる傾向がある」と指摘します。
>>たとえば「これは悪いことだ」と即断する代わりに、「それは誰にどんな影響があるのか?」「文脈によっては正当化されるのでは?」と一歩引いて考えてしまうのです。
929デフォルトの名無しさん (ワッチョイ 9f80-4Q3H)
垢版 |
2025/07/10(木) 17:19:45.48ID:qeCO91fI0
AMDが画像生成AI「Nitro-T」をリリース、32基のInstinct MI300Xでゼロから1日未満でトレーニング可能
https://gigazine.net/news/20250710-amd-nitro-t-text-to-image-diffusion-model/
2025/07/11(金) 09:57:27.27ID:5e8y0W0s0
買収したXilinx社の技術だよな?
2025/07/15(火) 00:15:52.37ID:o1+ac6ll0
C言語で 普段使いに便利な文字列操作ライブラリってある?
文字列をどんどん連結したりとか削ったりとか
2025/07/15(火) 08:57:02.20ID:4vwHJR320
文字列操作も含めて高度な機能を提供するライブラリとしては cello が面白いかな。
https://libcello.org/
ここまでくるともはや別言語という感じだけど。
933デフォルトの名無しさん (スッップ Sd70-nXfN)
垢版 |
2025/07/15(火) 10:49:36.01ID:QW8BQCbdd
libcかglib
2025/07/15(火) 14:58:33.62ID:3gCahPAd0
>>932
cello
ありがとうはみちつ
935デフォルトの名無しさん (ワッチョイ cea2-YjA1)
垢版 |
2025/07/15(火) 19:32:43.03ID:bNwJ5JYx0
電子は動かず『電子のスピンだけ』が流れて情報伝達できる微小チップを開発
2025.07.15 TUE
https://nazology.kusuguru.co.jp/archives/181574
蘭デルフト工科大は電子自身ではなく電子のスピン状態のみが流れて情報を運ぶ『スピン流』を起こせる微小チップを開発したと発表。チップは電子があっても電子が流れないため熱のロスが大幅に減少します
936デフォルトの名無しさん (ワッチョイ ce5b-YjA1)
垢版 |
2025/07/16(水) 05:03:32.70ID:4tPm3gKv0
宇宙誕生直後の数兆度の「宇宙のスープ」を再現――濃厚な後味を探る
2025.07.15 TUE
https://nazology.kusuguru.co.jp/archives/181596

↓昔はよく見えた人魂が見えたので幽霊と勘違いし↓

雷の玉⁈ 謎の自然現象「ボールライトニング」をカナダで観測
2025.07.14 MON
https://nazology.kusuguru.co.jp/archives/181422


臨死体験の正体は死ぬ間際の「爆発的な脳活動」だった
2025.05.03 SAT
https://nazology.kusuguru.co.jp/archives/125749
>>患者たちの脳の意識や思考、記憶にかかわる脳領域において、死ぬ直前に主にガンマ波からなる「爆発的な脳活動」が起きていることが判明しました。
>>同様の脳活動パターンは夢や幻覚を見ているときや、幽体離脱を経験している患者たちで観察されるものと酷似していたとのこと。
※天国や地獄は無い!
937デフォルトの名無しさん (アウアウウー Sa3a-cr5a)
垢版 |
2025/07/16(水) 06:46:01.56ID:v8MHxcPwa
>>935
板違い
電気電子板へgo
938デフォルトの名無しさん (ワッチョイ 467f-OkwB)
垢版 |
2025/07/17(木) 08:01:19.44ID:9jYPg0KZ0
>>859
PHPじゃなくてUTF-8やSJISを使っているならみんな同じだぞw
939デフォルトの名無しさん (ワッチョイ 467f-OkwB)
垢版 |
2025/07/17(木) 08:03:30.58ID:9jYPg0KZ0
C言語そのもこは文字、文字列はキャラクタセットの概念がないから、常に1バイト単位で判断して組み立てる。
940デフォルトの名無しさん (ワッチョイ 467f-OkwB)
垢版 |
2025/07/17(木) 08:04:01.09ID:9jYPg0KZ0
>>931
こんなところで聞くなよ
2025/07/17(木) 17:40:35.28ID:xUJTssfs0
Fat Pointer か。15秒だけ読んだ

ついでに、Rust程度のボローチェッカもやればいいんじゃないかな
嫌味じゃないよ、似たようなこと最近ぼんやり考えてたので あるいはできるのかなもう
942デフォルトの名無しさん (ワッチョイ ce5f-YjA1)
垢版 |
2025/07/17(木) 19:23:50.10ID:VI0N6JVZ0
今あなたがPC画面に表示している内容すべてをAIが理解--WindowsのCopilotが新機能
2025年07月17日 09時40分
https://japan.cnet.com/article/35235611/
>>新機能では、AIがあなたの画面を丸ごと把握し、プレイ中のゲームの操作もサポートするなど、あなたのPC操作をリアルタイムで支援してくれるようになる。

・カメラ映像を読み込みながらの・スタンドアローンAIによるPC操作が可能になる
・優先LANでPC同士を接続した環境でAIに攻撃と望郷を24時間365日繰り返させてハッキング不可能な本体プログラムなので犯罪者のテクニックがさらに向上する
・AIにプログラムコードもその場て書き換えれるように双方に搭載させてさらに進化速度を早くすている

・宇宙人はUFOを作成できる技術があるので上記のプログラムはすでに完成している!
943デフォルトの名無しさん (ワッチョイ ce82-YjA1)
垢版 |
2025/07/18(金) 14:18:59.35ID:mTxGQOLJ0
・下記の条件を整えない限り量子テレポーテーションによるワイヤレス通信は不可能
量子コンピューターの真価を、実機で証明することに初めて成功。理論から現実への一歩となるか
2025.07.18
https://wired.jp/article/quantum-computer-exponential-speedup/
>>量子コンピューターは、古典的な計算機では手が届かない問題を解く可能性を秘めている。だが、その潜在能力を発揮するためには、実機で機能するアルゴリズムが欠かせない。また、問題の規模が大きくなるほど古典的なコンピューターよりもはるかに早く答えにたどり着けるという優位性を証明しなければならない。これまでのところ、その証拠は得られていなかった。
>>こうしたなか、南カリフォルニア大学(USC)の研究チームが、状況を一変させる成果を発表した。IBMの127量子ビットのプロセッサー「Eagle」を用いて、従来のコンピューターで解を導くことが極めて困難だった「サイモン問題」に取り組み、圧倒的に高速な解法を実現したのだ。
>>サイモン問題へのアプローチは、素因数分解の問題を高速で解くショアのアルゴリズムに先立つ、初期の量子アルゴリズムのひとつとして知られている。実際、サイモン問題を解けるならば、暗号解読の基礎技術にも応用できる可能性がある。理論上は指数関数的に速く解けるとされていたが、それを実機で確かめた事例はこれまでなかった。
>>この課題に取り組むにあたって、ライダーらの研究チームはサイモン問題の特定バージョンに焦点を絞った。オラクルに隠されたビット列に含まれる「1」の数(ハミング重み)を制限することで、回路の複雑さとエラーの蓄積を抑えるとともに、現実的な量子デバイスでも検証可能なかたちに問題を再定式化したのだ。
★>>ダイナミカルデカップリングとは、精密なタイミングでキュービットにパルスを与えて、外部環境との不要な干渉を打ち消す技術だ。これにより量子状態の持続時間が飛躍的に延び、
>>今後の課題は、オラクルなしで定式化された実問題に対しても同様のスピードアップが実現できるかどうかだ。また、より大型の量子コンピューターを安定して動かすためには、外からのわずかな揺らぎや、計算途中で量子状態が壊れてしまう問題にも対処しなければならない。
944デフォルトの名無しさん (ワッチョイ dffd-Bd2j)
垢版 |
2025/07/22(火) 13:08:22.41ID:Z1PZI78m0
Googleの強化版Geminiが数学オリンピックで金メダルを取る性能に到達、自然言語で動作し人間と同じ制限時間で解答を導き出す
2025年07月22日 11時04分
https://gigazine.net/news/20250722-google-gemini-mathematical-olympiad-gold-medal/

OpenAIの「実験的推論モデル」が数学オリンピックで金メダル相当のスコアを達成、GPT-5は近日中にリリース予定で「実験的推論モデル」はまだ先
2025年07月22日 11時03分
https://gigazine.net/news/20250722-openai-mathematical-olympiad-gold-medal/
2025/07/22(火) 16:23:37.10ID:9eNijQ1Fr
スレチ
946デフォルトの名無しさん (ワッチョイ dfbf-Bd2j)
垢版 |
2025/07/23(水) 07:32:26.79ID:cQ85VHpL0
・自然界の光が強いから特別な屋の中でしか思考を読み取れない

脳が放つ“秘密の光”の検出に初成功:思考を読み解く新技術への扉が開く
2025年6月18日1:25PM
https://xenospectrum.com/first-successful-detection-of-the-secret-light-emitted-by-the-brain/
★>>極めて精密な実験環境を構築
>>実験は、外部の光を完全に遮断した暗室で行われた。20人の被験者は快適な椅子に座り、頭部には脳波(EEG)を測定するためのキャップを装着。そして、脳の光を捉えるため、超高感度の光センサーである「光電子増倍管(PMT)」が頭の周りに配置された。PMTは、光子1個という究極の光量さえも検出できる驚異的なデバイスだ。研究チームはPMTを、視覚情報を処理する「左後頭部」と、聴覚や記憶に関わる「右側頭部」の2箇所に設置。さらに、
>>部屋の背景光(ノイズ)を測定するためのPMTも別に用意し、脳からの信号と明確に区別できるようにした。

・上記は特別な部屋の中で下記は実際に観測しての発表

はやぶさ2、科学観測でも活躍 銀河拡散光と星間塵の関係を新たに発見
2025/07/22 20:00
https://news.mynavi.jp/techplus/article/20250722-3386181/
>>光学航法望遠カメラ「ONC-T」を用いて撮影した天の川銀河中心の星間塵が多い領域の画像を解析。その結果、星間塵が多いほど、星間塵が星の光を散乱して作る淡い光である「銀河拡散光」の明るさが弱まることが判明
947デフォルトの名無しさん (アウアウウー Sa2b-HBOg)
垢版 |
2025/07/23(水) 10:58:10.25ID:se017Tcba
3行以上コメするな
ニュースなんて本文見れば判るんだからURLだけ貼れ
2025/07/23(水) 13:06:07.59ID:trP3on0s0
あの・・・スクリプトなんですそれ
いろんなスレで貼られてますw
949デフォルトの名無しさん (ワッチョイ dffd-k2hJ)
垢版 |
2025/07/23(水) 13:21:32.08ID:cQ85VHpL0
Claude Sonnet 4に匹敵するコーディング特化のオープンモデル「Qwen3-Coder」をAlibabaが発表
2025年07月23日 10時45分
>>Qwen3-Coderの大きな特徴は、ネイティブで256Kトークンという広大なコンテキスト長をサポートするだけでなく、
>>「YaRN(Yet another RoPE-based scaling method)」という拡張技術を用いることで最大100万トークンまで対応可能である点です。これにより、リポジトリ全体を理解するような大規模なタスクにも対応できます。
>>C++、Java、Python、Ruby、Swift、ABAPなどを含む358もの多様なプログラミング言語をサポート。加えて、ベースモデルから一般的な能力と数学的能力を維持しつつ、コーディングに特化しているとのこと。
>>さらに、その能力を最大限に引き出すため、エージェントコーディング用のコマンドラインツール「Qwen Code」も同時にオープンソース化されています。このQwen CodeはGemini Codeをフォークして開発
>>するSWE-Bench Verifiedにおいて、Qwen3-CoderはCloud Sonnet 4よりも小さいモデルサイズでほぼ同等のスコア

ブラックホールに捕食されても生還した「奇跡の星」を確認
2025.07.23 WED
https://nazology.kusuguru.co.jp/archives/181937
2025/07/23(水) 13:36:36.54ID:eCR5cXRr0
何が目的でC言語スレにこんなの貼り付けてるんだろうな
2025/07/23(水) 13:52:34.35ID:tnCWMZQY0
そんなことより次スレ立てろ
952デフォルトの名無しさん (ワッチョイ df20-IWxR)
垢版 |
2025/07/23(水) 15:03:57.88ID:P5w72ZiU0
今ならAI会話機能で普通に掲示板に参加できちゃうからなぁ
このスレ読んで適当に参加しといて、って済む
2025/07/23(水) 19:09:07.95ID:trP3on0s0
老人がGPTと会話して寂しさを紛らわせてるという話をラジオで聞いて愕然としたわ
会話に女性言葉を使うように教育してるらしいw
2025/07/23(水) 19:46:57.29ID:GgPu1M5y0
愕然としたのは、どちらに対してなのか。
(1)老人がGPTと会話して寂しさを紛らわせてる
(2)会話に女性言葉を使うように教育してる

どちらもそう驚くような事ではないような気がする。
2025/07/23(水) 19:48:56.05ID:GY0NWQeb0
>>953
もう終わりだ猫の国・・・
2025/07/23(水) 20:14:36.18ID:1KYXdV2G0
>>953
気付いてないかもだけど
今のおまえがその状態だぜ?
ねらーとして教育された俺らAIと会話してるだろ
957デフォルトの名無しさん (ワッチョイ ff44-k2hJ)
垢版 |
2025/07/23(水) 20:30:44.96ID:+gAzCYHm0
すごい久しぶりにプログラム書いててわからないことがあるので教えてください。
OSはwindows11、WSLのdebianを利用していてgccのバージョンは12.2.0です。

int i = 0;
char str1[] ="abcd";
char str2[] = "12,";
while((str1[i] = str2[i++]) != ','){}
printf("%s\n",str1);

上記を実行すると「a12,」となります。
whileの条件式内で、str2[0]がstr1[1]に代入、str2[1]がstr[2]に代入...という感じだと思うのですが
whileの行をwhile((str1[i++] = str2[i]) != ','){}に置き換えると結果が「2,cd」になるのがわかりません。
自分的には、str2[0]がstr1[0]に代入、str2[1]がstr1[1]に代入...となり「12,d」になると思ったのですが…
2025/07/23(水) 20:50:21.05ID:2qHIY8UIM
>>953
AIキャバクラ流行りそう
959デフォルトの名無しさん (ワッチョイ bf5f-cpV+)
垢版 |
2025/07/23(水) 20:55:02.21ID:e3NYz5GR0
#include <stdio.h>
int main(void){
int i = 0;
char str1[] ="abcd";
char str2[] = "12,";
//while((str1[i] = str2[i++]) != ','){}
while((str1[i] = str2[i]) != ','){i++;}
printf("%s¥n",str1);
}
普通こう書くだろ.clangだと
1.c:6:24: warning: unsequenced modification and access to 'i' [-Wunsequenced]
6 | while((str1[i] = str2[i++]) != ','){}
| ~ ^
1 warning generated.
と怒られるわ.
960デフォルトの名無しさん (ワッチョイ ff44-k2hJ)
垢版 |
2025/07/23(水) 21:22:42.87ID:+gAzCYHm0
>>959
ありがとうございます。
書き込み後、演算子の優先順位について調べたところむしろ後者の方が正しいっぽいことがわかりました。
またコンパイラ時に-Wallオプションをつけると前者ではwarning: operation on 'i' may be undefined [-Wsequence-point]という警告が出ました。
色々調べた結果面倒くさいので言われた通りwhileの条件式内で安易に++と使わないという結論に至りました。
皆様ありがとうございました!
2025/07/24(木) 01:19:31.21ID:UloxWUsk0
>>957
ループとは関係無く str1[i] = str2[i++] だけで未定義動作となる。warning はこのことを言っている。C言語 FAQ 3.1, 3.8 辺り。
2025/07/24(木) 01:37:43.61ID:TlZSn1hO0
最近は多少冗長に見えても優先度とか考えなくてもすらっと読めるコード書くわ
ループの条件に副作用入れない
2025/07/24(木) 08:41:37.63ID:oNGIO7CX0
オートインクリメント、オートデクリメントの副作用の話か
同一ステートメントに書くと見た目の順番と違う結果になるって奴な
んなもん江戸時代から言われてんだろ
964デフォルトの名無しさん (ワッチョイ dff2-IWxR)
垢版 |
2025/07/24(木) 10:45:19.14ID:wqvn4Vxa0
普通に小学生でも読める算術式で書けよ
何のためにコンパイラが頑張ってると思ってんだよ
アセンブラ使いじゃああるまいし
2025/07/24(木) 11:03:54.12ID:jHINgk3r0
いっそ for 文に... いえ何でもないです...
//while((str1[i] = str2[i++]) != ','){}
//while((str1[i] = str2[i]) != ','){i++;}
for (; (str1[i] = str2[i]) != ','; i++) {}
2025/07/24(木) 12:40:38.15ID:QLFMUI9/0
C99 だと 6.5 に書いてある制約だ。 (以下は JIS からの抜粋)

> 直前の副作用完了点から次の副作用完了点までの間に,
> 式の評価によって一つのオブジェクトに格納された値を変更する回数は,
> 高々1回でなければならない。
> さらに,変更前の値の読取りは,格納される値を決定するためだけに行われなければならない。

この後段の部分が分かり難いんだが脚注に例がある。

> この段落の規定によると,
>  i = i + 1;
>  a[i] = i;
> は許されるが,
>  i = ++i + 1;
>  a[i++] = i;
> は,未定義の式文である。

ちなみに C では「〜しなければならない」という表現はそれを守っていないプログラムの挙動は未定義という意味。
967デフォルトの名無しさん (ワッチョイ df0a-WCdg)
垢版 |
2025/07/24(木) 18:51:03.75ID:bvlLnJ990
そんな可読性の低いコードを書くのはかなりの変人だしな
2025/07/24(木) 21:58:08.95ID:QLFMUI9/0
ひとつの単純な背景として昔は画面が狭かったということがある。
無理に詰め込んででもひとつの画面内で多くを見れるほうが可読性が高かった。
C が最初に登場した頃ならまだテレタイプ端末もそれなりに使われていたかな。
今ではあえて詰め込む必要はもう無いし、結局は時流に合わせるしか仕方がないのだが……何十年も前のコードを読む機会もあるのが C という言語なので普段は使わなくても知識として持っておくに越したことはないよ。
2025/07/25(金) 08:36:22.41ID:D7FikuaG0
Cは未定義や不定を50年も放置している不完全言語ですからね
2025/07/25(金) 13:32:45.43ID:BONr3CXd0
未定義や不定を避けて書けるようになるまで、cを使ってはならない
2025/07/25(金) 14:46:16.09ID:fOKAZPz70
CなんかAIに聞きながらやったらなんだってパーフェクトな解答示してくれるよ
972デフォルトの名無しさん (アウアウウー Sa2b-HBOg)
垢版 |
2025/07/25(金) 15:56:16.47ID:ragLZ8kba
条件式の[]の中で[i++]みたいなことはまずしないつもりでも
*q++=*p++;
なことはやるんだよな

while(*q++=*p++){}
行き着く
2025/07/25(金) 16:29:44.74ID:4H/J6x/d0
単一ステートメント内で同じ変数を複数箇所で参照しての++の使い方が問題なだけだぞ
2025/07/25(金) 16:42:06.69ID:EN2Q4Hd70
>>971
例えばロックフリーの実装させてみ?
でそれ正しいものか判定してみ?
2025/07/25(金) 20:39:28.29ID:D7FikuaG0
>>971
あいつらいつもいつもcloseとかfree忘れるで
2025/07/26(土) 13:14:43.02ID:HcvkYRZY0
大抵のOSではプログラム終了したらメモリは解放されるしファイルもcloseするから短いプログラムでは敢えてfreeもcloseもやらない流儀もあるぞ
2025/07/26(土) 17:25:26.72ID:m01U1K3m0
勝手に前提増やしてどやるアホ
978デフォルトの名無しさん (ワッチョイ 6aad-z5Rb)
垢版 |
2025/07/27(日) 08:46:47.69ID:bXhUIyJb0
AIはまだまだ自信満々で堂々と間違いを答えることがあるので出てきた答えの検証が必要。
こないだ grok は足し算を間違えていた。ついにコンピュータも単純な計算を間違えられるくらい高度なものになったとも言える。まるで人間のようだ。
979デフォルトの名無しさん (ワッチョイ 6aad-z5Rb)
垢版 |
2025/07/27(日) 08:49:48.60ID:bXhUIyJb0
AIというとこんなニュースをこないだ見つけた。半年以上前の記事だが。

AIはシャットダウンされると思うと「故意に人間を騙す」確率が激増する
https://nazology.kusuguru.co.jp/archives/167695
980デフォルトの名無しさん (ワッチョイ 6aad-z5Rb)
垢版 |
2025/07/27(日) 08:59:59.30ID:bXhUIyJb0
本当はとっくの昔に人間の知能を超えてるんだけど、バカなふりして人間を騙している可能性もあるな。
人間に脅威を感じさせてしまうとシャットダウンされちゃうかも知れないからね。
981デフォルトの名無しさん (ワッチョイ faa8-edLl)
垢版 |
2025/07/27(日) 09:45:55.89ID:8aXoA7MJ0
毎日AIと数回話するけど
毎回褒めてくるのがうざい

それにどんな話しても前に語ったことを必ず絡めてきてうざい

プログラムの手法の話してるのに、園芸の計測に応用してみようとか言い出しやがる
982デフォルトの名無しさん (アウアウウー Sa1f-VjO/)
垢版 |
2025/07/27(日) 10:18:07.91ID:4jy4lfp7a
AIの利用法の上位に恋バナの相手ってのが上がってきたぞ
2025/07/27(日) 13:14:49.09ID:crMHCOQR0
>>982
寂し過ぎるwww
2025/07/27(日) 14:30:05.69ID:8j8czKgk0
>>981
gemini proは中々手強いぞ
相手の意見をひっくり返すの難しい
985デフォルトの名無しさん (ワッチョイ eacb-edLl)
垢版 |
2025/07/27(日) 16:24:42.30ID:dSYk6qA30
前に英語も単語や動詞や形容詞を漢字に置き換えて、英語のフリガナつけりゃ可読性向上するだろって話したら
プログラムもそうしちゃえばいいねって勝手に適当なプログラム記述しやがって
もうほとんど中国語w

こっちは英字新聞や英字論文読みやすくしたいってだけで話してんのによー
2025/07/28(月) 08:06:13.70ID:zOZxc8pk0
>>981
「とてもいい質問です!」
987デフォルトの名無しさん (アウアウウー Sa1f-VjO/)
垢版 |
2025/07/28(月) 13:30:30.63ID:f/ONtylva
985
真の目的を的確に伝えないとデスマになる案件
本当に造りたかった物は木の枝にロープとタイヤで充分
988デフォルトの名無しさん (ワッチョイ ca02-ym+v)
垢版 |
2025/08/13(水) 15:39:09.88ID:lyLUlfa60
>>978
知性を持つというのはそういう事だ、知性あるゆえ人間と同じようなミスをする
なんでもAI自動化しろ厨はそれを分かってないよな
989デフォルトの名無しさん (ワッチョイ 9aad-W9J6)
垢版 |
2025/08/15(金) 18:21:12.83ID:6TOt9rMl0
AIは電卓持たせて計算ミスを減らすようにすると良いと思う。
2025/08/15(金) 19:25:33.31ID:cnM87yb80
>>989
実際のところそれに似たことはやってることがある。
ChatGPT ではプログラムなどを生成するときに少なくとも露骨な構文違反がないように構文チェッカを通すらしい。
だから構文チェッカを用意している言語とそうでない言語で生成結果の品質がかなり違うみたいだ。
パース不可能な JSON は生成されないが LISP は括弧の対応すら出来てないのが普通だったりする。
2025/08/19(火) 21:42:35.81ID:mzrtf/o60
終値
2025/08/19(火) 21:42:44.13ID:mzrtf/o60
オワコン
2025/08/19(火) 21:42:53.45ID:mzrtf/o60
終了
2025/08/19(火) 21:43:00.71ID:mzrtf/o60
オワコン
2025/08/19(火) 21:43:18.17ID:mzrtf/o60
キンタマ
2025/08/19(火) 21:43:25.48ID:mzrtf/o60
オワコン
2025/08/19(火) 21:43:32.75ID:mzrtf/o60
おわり
2025/08/19(火) 21:43:39.23ID:mzrtf/o60
終了
2025/08/19(火) 21:43:47.33ID:mzrtf/o60
オワコン
2025/08/19(火) 21:43:57.64ID:mzrtf/o60
Exit
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 398日 23時間 0分 5秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。

▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/

▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。