23/08/06 13:25:15.07 jxDYmhFo0.net
1引いているのはあくまで内部的なもの
それこそ人間の直感に合わせたインターフェイスとコンピュータの都合の良い情報に相互変換するのがプログラムじゃなかろうか
0からのほうが分かりやすいと思うのはプログラマだからだろうし
10個のデータの最後のインデックスは10というのは添え字で考える場合は分かりやすいしね
361:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/06 14:09:12.01 VdM0xi000.net
先頭をゼロと呼ぶか1と呼ぶかならまだマシよ
音楽なんて先頭要素を1と呼ぶだけじゃなく、要素間の差がない事まで、ゼロじゃなく1と呼ぶ
現代人からするとどう考えても頭おかしいが、仕方がない。ゼロの概念がなかった時代から定義が変わらず続いてるらしい
362:デフォルトの名無しさん (ワッチョイ c379-IXit)
23/08/06 14:15:40.68 SuulMMGF0.net
Cはゼロに限らず何もないを示すvoidが無い頃は全部intでやってた時代もあるんだよ
頭おかしいな
363:デフォルトの名無しさん (ワッチョイ ebad-9S8H)
23/08/06 14:37:12.68 jxDYmhFo0.net
voidが何もないことを示すならvoid*の存在のほうが気になる
364:デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
23/08/06 14:59:14.25 RhhSFLLO0.net
void だけ特殊な型と考えるしかないのではないかな。大きさが0ビットの型と考えても良いのかも知れないが。
365:デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
23/08/06 15:50:27.26 3R7VaRJUM.net
sizeof(void) → 1 だな
これって正式な仕様なのか分からんけど
366:デフォルトの名無しさん (ワッチョイ 87cf-n4fA)
23/08/06 16:40:17.07 Raz9Sh7o0.net
それgccなんかの独自仕様のはず。void*をバイト単位で計算できるから便利なんだけどね。
367:デフォルトの名無しさん (スッププ Sd03-EMqx)
23/08/06 17:35:17.48 /aV5Am17d.net
それは気持ち悪いな
368:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/06 17:46:22.79 Mgx3ApDu0.net
言語仕様上は void は不完全型とする扱い、かつ sizeof に不完全型を与えることは出来ない。
369:デフォルトの名無しさん (スッププ Sd03-EMqx)
23/08/06 17:48:27.27 /aV5Am17d.net
gccだとsizeof(関数名)も1なんでしょ
明らかにただの手抜き
370:デフォルトの名無しさん (ワッチョイ b363-aAN6)
23/08/06 17:52:12.98 wnylhiXb0.net
仕様上の問題は置いておいて
1として扱うと何か良いことあるんでしょうか?
371:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/06 17:56:04.37 Mgx3ApDu0.net
未定義な動作は規格として規格が何ら要求を課さないことを意味するが
但し書きの中に「文書化された環境に特有な方法で処理してもよい」ともある。
GNU C のドキュメントには void と関数 (関数指示子) の大きさについて記述がある。
URLリンク(gcc.gnu.org)
これも規格が認める正しい動作のひとつ。
それはそうとして処理系に固有の挙動に依存するのを避けるに越したことは無いけど。
372:デフォルトの名無しさん (ワッチョイ 87cf-n4fA)
23/08/06 18:03:13.82 Raz9Sh7o0.net
>>369
>>365にも書いたけど、演算するのにいちいちchar*などにキャストする必要がない。
373:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/06 18:10:14.29 Mgx3ApDu0.net
void* は演算させないという意思表示なこともあるんで
演算できることが良いわけでもないんだけどね。
374:デフォルトの名無しさん (ワッチョイ 87cf-n4fA)
23/08/06 18:29:53.89 Raz9Sh7o0.net
どんな用途があるかな?デリファレンス先にアクセスできないってだけで十分な気もするが。
375:デフォルトの名無しさん (アウアウウー Sa9f-W3Bx)
23/08/06 18:36:51.14 mq8IFmf1a.net
任意に渡ってきたポインタ間の距離?
376:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/07 01:08:17.44 zJXXdP4R0.net
アレじゃないかな?メリットあるとしたら
【struct に含めたメンバーは、サイズゼロはダメ】っていう仕様があったかと思う。
正確には【structの違うメンバーが同じアドレスになったらダメ】だったか
----
以下は蛇足
ただサイズゼロだめってのは例外があって。
structの末尾メンバーでchar[] だか char[0]ってのが、確かC99あたりでアリになった気がする。
これは…それまでも使われてたテクで
【structの最後に char [1] のメンバーを置いて、実際にはメモリ確保の時structのサイズ+可変長部のサイズでメモリ確保し、最後のメンバーを使ってstructのサイズを超えてアクセスする】という慣用句があって、
それの目的で
C言語公式仕様風では char[1] と書き
確か昔は gccだとchar[]
vcだと char[0]
ていう書き方してた。(gccとvcは逆だったかも知れない)
のが、公式仕様でもサイズゼロokになった…という話だったかと。
377:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/07 01:23:44
378:.93 ID:zJXXdP4R0.net
379:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/07 08:18:18.04 SwgOJiZRd.net
意味不明
メンバーにvoidを含められたとしても参照すればエラーになるはずなので使いようがない
(void*はもともと正しいサイズを持つ)
unionで似たようなことはできる
380:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/07 09:11:24.17 U9It/DCQ0.net
>>375
サイズゼロをOKとすると言ってしまうと語弊があると思う。
仕様上の理屈だと「不完全型を指定できる」だし、そうした場合の動作は
いくつかの特例で成立していて「長さ 0 の配列」は現れない。
sizeof などでは「フレキシブル配列メンバは無視される」だし、
メンバにアクセスするときは
> 置き換えられた配列が要素をもたないとき,それはただ一つの要素をもつのと同じ規則で動作する。
> しかし,その要素にアクセスした場合,又はその要素を一つ越えたポインタを生成した場合,
> その動作は未定義とする。
とあって、長さ 1 として扱うけど要素にはアクセスするなという回りくどい言い回しになってる。
381:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/07 10:17:41.09 wl/Lx6N5a.net
>>375
typedef struct { int x; char a[1]; } A; A *p = (A *)malloc(sizeof(A) - 1 + N);
typedef struct { int y; char b[]; } B; B *q = (B *)malloc(sizeof(B) + N);
typedef struct { int z; char c[0]; } C; C *r = (C *)malloc(sizeof(C) + N);
かな
382:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/07 10:19:25.16 wl/Lx6N5a.net
>>378 の主張だと
typedef struct { int y; char b[]; } B; B *q = (B *)malloc(sizeof(B) - 1 + N);
でなければならないのかな
383:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/07 11:05:26.04 U9It/DCQ0.net
>>379
配列の大きさとして 1 を指定して可変長のように扱うやり方については
ちょっと不明瞭なんだが仕様に厳密にいうと準拠してない方法だと考えられている。
URLリンク(c-faq.com)
配列の大きさが 0 より大きくなければならないということについては
例外を見つけられないのでどこであろうと 0 を指定したら未定義と解釈していいと思う。
GNU C では構造体メンバの最後の配列要素に 0 を指定した場合は
C99 でフレキシブル配列メンバにしたときとほぼ同じような扱いになることがドキュメント化されてる。
URLリンク(gcc.gnu.org)
つまり GNU C では 0 を指定していいわけだが……結果が同じならあえてやる必要もないな。
GNU C でも構造体の最後の要素を除いて配列の大きさに 0 を指定するのは (可能だが) 推奨されていない。
アクセスした結果は未定義なのでなんの役に立つのかようわからん。
384:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/07 11:36:51.88 SwgOJiZRd.net
>>380
-1する必要ないな
1バイト程度なら余計に取っても害はない
385:デフォルトの名無しさん (ブーイモ MMf3-DyKn)
23/08/07 14:20:51.17 Xd8Y6/QgM.net
>>382
そういういい加減な見積もりは感心しないな
それに、この場合は-sizeof(int) が正解だと思う
386:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0)
23/08/07 14:26:13.65 U9It/DCQ0.net
>>382-383
どっちも間違い。 この場合は -1 をしてはいけない。
387:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/07 20:36:36.16 SwgOJiZRd.net
>>383
いい加減なのではなく無駄なことに神経を使わないのがプログラマの秘訣だ
それに他人が見て「この-1はなんだろう?」と無駄な思考時間を取られる可能性を考えたら百害あって一利なしだ
>>384
よく見たらデタラメだな
すまん
388:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ eb32-oz9p)
23/08/07 21:06:32.92 +g1cDN8+0.net
>>385
1バイトごときのために余計なことをしないってのは理解できる理屈だが、不必要な1バイトを確保するってのもそれはそれで無駄に考えさせられてしまう感じがする。
やろうとしていることと合致しないコードなわけだから。
害はないが役に立ってもいないということを確信するのはどういう役に立っているのかを見つけるより難しい。
389:デフォルトの名無しさん (ブーイモ MMf3-DyKn)
23/08/07 21:30:20.59 6YHeZP2fM.net
>>384
ああ、[1]の場合のコード見てたわ、お恥ずかしい。
どっちにしろ[1]の場合もoffsetofかalignof使ってあれこれだね…sizeofじゃ正解ではない…
390:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/07 22:08:57.23 SwgOJiZRd.net
>>386
どうせmallocは1バイト単位では確保しないので正確なサイズを指定しても構造体一個につき数バイト以上の無駄な領域が確保されることになるし…
この構造体を数万個単位で使うような大規模プログラムで極力ムダを避けたいならmallocは使わず最初に大きなリニア領域を確保してそこから切り分けたほうがいいだろう
蛇足だが経験上こういう構造体を使うときはcopy=malloc(sizeof(A) + strlen(src)); strcpy(copy->a,src);のように使うことが多い
これなら正確なサイズ指定になる
>>387
どっちにしろ君は何か勘違いしてないかな
長ったらしく書くなら-sizeof(int)ではなく-sizeof(char)となる
391:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/07 22:21:06.53 zJXXdP4R0.net
どんどん蛇足的になってしまってる気はするが
1バイトの加減算ってのはインクリ・デクリの1命令で演算できるし分岐しないし、
アライメント境界を1バイト超えたらバス幅分-1の無駄ができるかもなので
しかも100万個の「3d座標型」とかがその理屈で1個につき7バイト無駄にしたら700万バイトが無駄になるので
たかが1バイトと軽視して良いか否かは、状況によります
で、はちみつさんのちみつな調査に感謝。蛇足で変な事書いて仕事増やしてごめんなさい
392:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/07 22:28:38.60 zJXXdP4R0.net
でも、ワシは(もしそれが有効だと判断したら)公式なC言語仕様上未定義になるとしても、
伝統的にgccとvcが「独自拡張」として許してきた書き方で
書くよ
もちろん責任者の許可は伺うけどね
ダメと言われたらもちろんやらない
393:デフォルトの名無しさん (ワッチョイ 0547-DyKn)
23/08/07 22:34:55.16 hZrkDm/B0.net
>>388
ちゃんとサイズ確かめた?そんなに簡単なら[]拡張なんて要らないと思わない?
394:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/07 22:36:31.40 zJXXdP4R0.net
で
時には自分が、あるプロジェクトの最高責任者だったりする訳で
その環境は特定のカスタムgccの特定バージョンを使うしか選択肢がないから無用な心配は意味がなくて
次のプロジェクトではどうせ全部作り直しだったりする
395:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/07 22:48:24.16 SwgOJiZRd.net
>>391
何を確かめればいいのかね
正確に書いてくれないと答えようがないな
後半個人的には「要らない」ね
誰かが拡張したら使わないとイケないという「強迫観念」を持ってないか?
それは不要なものだよ
396:デフォルトの名無しさん (ワッチョイ 0547-DyKn)
23/08/07 22:52:47.17 hZrkDm/B0.net
>>393
sizeof(A) != sizeof(int) + sizeof(char)
397:デフォルトの名無しさん (ワッチョイ 0b01-W3Bx)
23/08/07 23:31:53.12 +QyISSA90.net
>>394
メンバの配置はきっちりつめるのから
nバイトアラインで飛び飛びにしてるのもあるしね
398:デフォルトの名無しさん (ワッチョイ 0b01-W3Bx)
23/08/07 23:39:40.36 +QyISSA90.net
>>395
一番最後のメンバの後ろにパディングが足されるかどうかが焦点になる
足されないならイージーに引き算すりゃいいんだが…
399:デフォルトの名無しさん (スップ Sdcf-YWx9)
23/08/08 07:56:15.14 QQsYUamCd.net
引き算とか言ってる馬鹿初めて見たわ
400:デフォルトの名無しさん (ワッチョイ b363-uQHI)
23/08/08 11:03:00.71 +jW/mKCz0.net
複素数使って計算すれば馬鹿にされませんよ?
401:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/08 20:31:55.04 sLVQKk30d.net
>>394
意味はわかったけど
君のコードは可搬性がないわけだね
全部作り直しになるのもうなづける
そんなのやってられないw
402:デフォルトの名無しさん (ブーイモ MMf3-DyKn)
23/08/08 22:38:48.82 MjZ+EK1qM.net
>>399
初歩的な構造体のパッキングルールを理解していたらどうって事無いはずなのだけども…この程度で可読性とか労力とか、そういうレベルの仕事なら使用禁止で良いんじゃないかな。
あと、何か勘違いしているようだけど、[1]だとややこしいけど出来るねって言ってだけで、使うなら[]だよ。c99標準な訳だし。
403:デフォルトの名無しさん (スッップ Sdd7-EMqx)
23/08/09 00:47:58.70 3Zyc8vU6d.net
「-sizeof(int) が正解」とは言えないよ環境による
パッキングルールを変更できる#pragmaもあるから
それは単なる「思い込み」ということになるな
404:デフォルトの名無しさん (ワッチョイ 7510-WTQk)
23/08/09 06:00:17.77 ye8eZ1o40.net
>>399
あなたが「君」って言ってる相手は少なくとも私と私以外の2人以上なので 何か誤解してると思う
ここは匿名掲示板なので、想像した人格じゃなくて内容に反応して欲しい
405:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/09 08:10:28.54 KudoDE9Va.net
言語仕様知らずに叩いてるんだから無理だろ
406:デフォルトの名無しさん (ワッチョイ 915f-1PqA)
23/08/11 14:52:37.80 fYiGiCzQ0.net
質問失礼します
Windowsソフトが作りたく基礎を勉強したのですがここからソフトを作る道筋が見えてきません
SDKを用い制作するということまではわかったのですがそれについて解説しているサイトがなく詰まっている状態です
おすすめのサイトや参考書などあればご教示くさだい
407:デフォルトの名無しさん (スフッ Sd2f-SP/C)
23/08/11 15:39:30.67 zcS71Tbhd.net
URLリンク(dxlib.xsrv.jp)
URLリンク(marupeke296.com)
408:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-oz9p)
23/08/11 15:46:47.16 EnF/lRSf0.net
モダンなフレームワークを使った方が良いが
Windows の基礎的な理念というか考え方をかなり平易に
説明したものということだと↓とかが有名だと思う。
URLリンク(www.kumei.ne.jp)
ただ、古いので実情に合わない部分はある。
Windows には異なる系統の API があって、
現在では COM をベースにした WinRT がモダン API として
整備されているのでそちらを軸にしても良いかもしれない。
409:デフォルトの名無しさん (ワッチョイ b363-yDkU)
23/08/11 16:09:36.01 Ib19PZqn0.net
SDK使っての開発は30年位昔のやり方なんではないだろうか
410:デフォルトの名無しさん (ワッチョイ 915f-1PqA)
23/08/11 16:11:15.49 fYiGiCzQ0.net
>>405
>>406
ありがとうございます
早速進めてみます
411:デフォルトの名無しさん (ワッチョイ 915f-1PqA)
23/08/11 16:12:13.55 fYiGiCzQ0.net
>>407
基礎しかわからない初心者なものでして、、、
412:デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
23/08/11 16:53:28.21 j3k4ZyED0.net
Windows のネイティブなプログラム作りには C というよりは C++ の方がよく使われていたと思うので、C++ も覚えた方が作り易くなるような気がする。
413:デフォルトの名無しさん (アウアウウー Sa9d-SP/C)
23/08/11 17:26:57.28 v1edpQDwa.net
>>407
使えるものは使えば良い
昔の方がシンプル
>>410
MFCやATL/WTLやCOMやQtやwxWidgets使いたいならC++だが
生WindowsAPIとSDKやCOMやOpenGLやtcl/tkとか使うならCで充分
むしろCが標準と言っても良いので勉強用ならC
414:デフォルトの名無しさん (ワッチョイ e3ad-c/5M)
23/08/11 17:52:29.73 j3k4ZyED0.net
なるほど。
415:デフォルトの名無しさん (ワッチョイ b363-yDkU)
23/08/11 17:54:37.84 Ib19PZqn0.net
最初残ろは16ビットアプリだったから、
メモリーモデルやアプリが使用可能なリソースサイズなど
結構管理が大変だった記憶がある
416:デフォルトの名無しさん (ワッチョイ b363-yDkU)
23/08/11 17:55:37.06 Ib19PZqn0.net
最初のころは
なんて変換するんだよ・・・
417:デフォルトの名無しさん (ワッチョイ 87cf-uQHI)
23/08/11 18:22:42.78 WGGkjKOg0.net
勉強目的の縛りプレイじゃなければ最初からCじゃなくC++使う方が良いと思うが。
418:デフォルトの名無しさん (ワッチョイ c379-IXit)
23/08/11 18:30:11.06 I7dwFhkG0.net
いまだにCOM ATL DirectX IDL辺りの定義見るとC知識では手に負えないイメージ
C++MFC全盛の時代は本当に嫌いだった
C#でそれらに一切関わる必要がなくなってほんと良かったわ
419:デフォルトの名無しさん (ワッチョイ 2f9f-mBaV)
23/08/11 18:52:16.19 DMm7pQwE0.net
古いAPIの設計思想が時代に合わないのも多いし、フレッシュな知識を蓄積したほうがいいという意味ではWinRTかな
420:デフォルトの名無しさん (ワッチョイ c379-IXit)
23/08/11 19:09:53.39 I7dwFhkG0.net
>WinRTかな
名前が終わってる
421:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/11 19:10:12.84 v1edpQDwa.net
DirectXはCでも使える
422:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/11 19:11:09.76 v1edpQDwa.net
MFCは糞だから触るな危険
423:デフォルトの名無しさん (アウアウウー Sa9d-mBaV)
23/08/11 19:12:06.88 v1edpQDwa.net
WinRTはないな
424:デフォルトの名無しさん (ワッチョイ 0902-MkJ9)
23/08/11 19:17:33.71 yxSWeMo+0.net
とりあえず現在でWindowsアプリのプログラミングを始めるにあたり、C言語というのはやめるべき
悪いこと言わないからせめてC++にしておけ
そして楽に作りたいならC#にしておけ
425:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-oz9p)
23/08/11 19:26:30.18 EnF/lRSf0.net
C でやってみれば (やれるだけの知識を身に付ければ) 低レイヤで何が起こっているのかという具体的なメカニズムを理解できるという意味で悪くはないと思う。
ただ、今となっては日常的にやるもんではない。
426:デフォルトの名無しさん (ワッチョイ c379-IXit)
23/08/11 19:26:45.26 I7dwFhkG0.net
C#で.NETにない事をやろうとするとpnvoke知識が必須だから
Cを適当に摘みつつC#でいいんじゃなかろうか
C++はもう時間の無駄
時間が無限にあるならどうぞ
427:デフォルトの名無しさん (ワッチョイ b363-yDkU)
23/08/11 19:35:56.75 Ib19PZqn0.net
Windowsの動作原理を学びたいなら、SDKやMFCは良いと思うよ
428:デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
23/08/11 19:53:56.21 eb/xI15cM.net
今のWindowsの最新のUIは全てWinRTの上に構築されている
Githubでソース見れば一目瞭然
完全に今のWindowsの基礎となるAPI
無知というのは罪だな
429:デフォルトの名無しさん (ワッチョイ c379-IXit)
23/08/11 19:58:54.93 I7dwFhkG0.net
まさかWinRTでマウント取ろうとする馬鹿が居ると思わないわ
430:デフォルトの名無しさん (ワッチョイ 0f5f-4nYy)
23/08/11 20:00:58.18 xXGnDnZp0.net
黙NG
431:デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
23/08/11 20:32:13.88 iNvWur52M.net
>>427
無知乙w
正論にキレるの図w
反応しなきゃいいのにw
432:デフォルトの名無しさん (テテンテンテン MM17-2Tt6)
23/08/11 20:35:15.14 iNvWur52M.net
>>427
WinRT終わってるとか無いわーw
433:デフォルトの名無しさん (ワッチョイ b363-yDkU)
23/08/11 21:00:42.88 Ib19PZqn0.net
変なのが湧いてきたね
434:デフォルトの名無しさん (ワッチョイ 6b7a-o30X)
23/08/11 23:10:37.93 je510yk+0.net
mallocの戻り値は代入先のポインタ型にキャストして使おうと言ってる入門サイトがほとんどです。
これは正しくなくて、キャスト不要が正しいと思いますが達人の皆さんの意見はどうですか。
435:デフォルトの名無しさん (ワッチョイ 87cf-uQHI)
23/08/11 23:16:31.85 WGGkjKOg0.net
void*はキャストしなきゃ使いようがないだろ
436:蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdd7-38VD)
23/08/11 23:37:09.78 903ETN7Yd.net
C++ならvoid*からのキャスト必須。C言語ならキャスト不要。
437:デフォルトの名無しさん (ワッチョイ ab36-uQHI)
23/08/11 23:43:24.35 ayxoKHEe0.net
現場猫案件。
438:デフォルトの名無しさん (テテンテンテン MMb6-v80P)
23/08/12 00:37:36.88 dWTISXa3M.net
>>431
害悪はオマエだろ!
WinRTが終わったAPIみたいなフェイクを正したんだよ!
WinUIとかGithubでソース公開されてんだから、ソース見れば一目瞭然だろ!
2度とフェイクを書き込むなよ!
439:デフォルトの名無しさん (ワッチョイ df9f-DXLR)
23/08/12 01:20:09.40 PG846lpi0.net
もしかしてWindowsRT(ARM版Windows8)と勘違いしてたりして
440:デフォルトの名無しさん (テテンテンテン MMb6-v80P)
23/08/12 02:14:36.52 dWTISXa3M.net
WindowsRTは失敗したプロダクトだけど、WinRTは完全にWin32を置き換える為のモダンな基盤APIになった
ちなみにWinRTに関する情報は全然出回ってないな(少なくとも日本では)
MSも直接使うAPIじゃないと考えてるのかもしれない
実際、WinUI3とかを通して使うことになるのだろう
441:デフォルトの名無しさん (テテンテンテン MMb6-v80P)
23/08/12 02:21:43.01 dWTISXa3M.net
MSは一時的に、DirectXやActiveXみたいにRTを流行らそうと考えてたふしがある
でも、まったく浸透せずにRTに悪いイメージだけが残ったw
442:デフォルトの名無しさん (アウアウウー Sac7-DXLR)
23/08/12 04:30:30.39 XzrhAFZoa.net
ないわ
443:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6)
23/08/12 11:53:24.11 BlsfQ4Nv0.net
>>432
型変換とキャストを混同して説明していることがそれなりにある。
それとは別に不要でもキャストすべきかどうかというのは習慣の問題。 人にとっての読みやすさは仕様上の要・不用とは別の話なので明瞭な答えはない。
444:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
23/08/12 12:15:02.77 ufIhf+igM.net
UWPのWinRTでファイルアクセスなどに制約がある場合があって
APIレベルでセキュリティ上の制限があるのかと思ってたが間違いで
他のプラットフォームで呼ぶと普通に色々アクセス出来てしまう
445:デフォルトの名無しさん (ワッチョイ 7679-BXQ2)
23/08/12 14:04:01.34 DbL0Mu2X0.net
そろそろ他所でやってくれんか
普段Windowsには世話になってるけどUWPの存在には憎しみさえ感じる
446:デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
23/08/12 14:18:40.69 2oorck2f0.net
>>441
cast という単語には型変換の意味があると思うが?
で、実際にプログラミング言語では型が変換されるから、型変換で良いんじゃないの?
447:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
23/08/12 14:53:08.69 BlsfQ4Nv0.net
>>444
Cの仕様上の意味合いとしてはキャストという用語は構文 (記法) を指している。
括弧の中に型を書いたやつを式の前に置く、あの構文のことね。
キャストを使わない形でも (暗黙の) 型変換が起こることはあるし、
型を変えないキャストも出来る。 型変換とキャストは同一ではないよ。
カジュアルな場合では文脈でわかるし、ときには同一視してもいいこともあるけど >>442 の文脈では
構文のことを言っているのか型変換のことを言っているのかで事情が変わってくるので
厳密でなくても良いとは言えない。
448:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
23/08/12 14:54:12.64 BlsfQ4Nv0.net
>>445
アンカーを間違えた。 >>442 じゃなくて >>432 ね。
449:デフォルトの名無しさん (ワッチョイ 9701-DXLR)
23/08/12 20:19:50.46 eS+ePZlf0.net
「毎日出社したい」わずか3.8% リモートワーク経験者に聞いた
学研ホールディングスのグループ会社であるベンド(東京都千代田区)は、リモートワーク
経験者を対象に「リモートワークに関するアンケート」を実施した。その結果、半数近くの
人が「週5(フルリモート)」(44.4%)をリモートワークの理想の頻度だと考えていること
が分かった。
次いで「週3~4」(30.7%)、「週1~2」(20.1%)と続き、96.2%の人がリモートワークの
継続を希望していることが分かった。毎日出社を希望する人は、わずか3.8%だった。
出社を希望しない理由は「通勤にかかる時間や体力がもったいない」「子どもの都合で、
リモートワークのほうが仕事と家庭のバランスが取りやすい」「職場の人と毎日顔を合わせる
のはさすがにつらい」といった意見が寄せられた。
一方、「コミュニケーションが取りにくくなる」「出社しないとできない業務がある」
「たまには出社もいい気分転換になる」など、完全リモートだと不都合だという声もあった。
450:デフォルトの名無しさん (ワッチョイ b67a-TNXw)
23/08/12 22:15:14.90 jlvbpae70.net
>>445
冗長 int *p = (int *)malloc(400);
簡潔 int *p = malloc(400);
ということを言うつもりで書きました。
451:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6)
23/08/12 22:54:57.04 BlsfQ4Nv0.net
>>448
仕様上は暗黙の型変換が適用される場面。
キャストを書かなくても型変換はされることが保証される。
ただ、 >>434 で言及されているように C++ ではキャスト必須なのでそれに合わせる (ことで C++ としてもコンパイルできるようにする) ほうが好ましいという考え方もある。 これが暗黙に変換できてしまうのは良い仕様とは言えないのは確かだからより厳しいルールの C++ に合わせるのも一応の合理性はある。
誤解の余地もない (と思う) ので私はキャストを書かない派なのだけど、以前にツイッターかどこかのアンケートで見た感じでは拮抗してて、どちらが優勢というわけでもなかった。
452:デフォルトの名無しさん (アウアウウー Sac7-DXLR)
23/08/13 11:59:59.00 mxfdwtiAa.net
int *p = (int *)malloc(400);
冗長ではないよ
453:デフォルトの名無しさん (ワッチョイ 6301-vKG+)
23/08/13 22:00:40.70 37XsjItY0.net
C++でnewではなくmallocをあえて使う理由って何かあるのかな?
454:デフォルトの名無しさん (ワッチョイ b67a-TNXw)
23/08/13 23:29:06.42 oUeYwTCa0.net
>>449
くわしくありがとう。そういう見方もあるのですね。
アンケートで拮抗というのはわかる気がしていて、その理由が入門書やサイトにあるのではと思うのです。
>>450はなぜそう思いますか。
455:デフォルトの名無しさん (ワッチョイ 7679-BXQ2)
23/08/14 00:14:53.81 VnUPK1/b0.net
void *が無かった頃はmallocもintやchar *を返していた時代がある
処理系渡り歩いてきた老害ほどmallocでキャストしたがるだけだろ
大した話でも何でもない
456:デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
23/08/14 00:21:55.24 B5PklEie0.net
可読性を上げるためでもあるのでは?
457:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
23/08/14 00:30:57.60 sy90BXR10.net
>>454
可読性が上がるだろうか? 少なくとも >>448 のように変数の型がその行に書いてあるようなケースでは
誤読の余地は全然ないように見えるので同じ情報を重複して書く意味が感じられない。
458:デフォルトの名無しさん (ワッチョイ 9aad-eQmn)
23/08/14 00:38:36.06 B5PklEie0.net
まあ確かに型がすぐ分かる場合は意味ないな。
459:デフォルトの名無しさん (ワッチョイ 4e46-8Neb)
23/08/14 09:03:40.40 6kZXa4aF0.net
>>448
組織(会社とか)のコードだと、どんな水準の人がメンテするか分からないので、冗長を採るかな。
> 冗長 int *p = (int *)malloc(400);
460:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
23/08/14 09:28:55.46 4XD1xMqSM.net
この話が一番冗長だtoomou
kanjidenakunatta
461:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6)
23/08/14 10:36:19.28 sy90BXR10.net
>>452
K&R の第二版 (日本語版) でもキャストは必要だと書かれているんだよなあ……。
本の最後に仕様をまとめているところでは暗黙に変換されることも言及されているのでおそらく改定漏れなだけなんだろうけど。
かなり長く定番の入門書だったのでこの本の影響も大きいと思う。
462:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 11:55:47.09 s6PscRDz0.net
暗黙に変換って、プログラム書いてる本人の意図通りなら良いんだけど
意図と違った変換するとやっかいだな
463:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
23/08/14 13:20:28.84 JlnnwsPwM.net
ここがC言語スレだと思い出して欲しい
464:デフォルトの名無しさん (スップ Sd5a-f0d0)
23/08/14 13:23:53.19 4NX3l0Vmd.net
Cの暗黙の型変換なんて高が知れてるだろ
465:デフォルトの名無しさん (テテンテンテン MMb6-v80P)
23/08/14 14:02:18.88 XhXbjspZM.net
昔のmalloc()ってchar*とか返してた気がするな
最初っからvoid*って有ったのだろうか?
466:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
23/08/14 14:16:28.68 JlnnwsPwM.net
すべての戻り値はintである
ポインタかどうかは書いた人間がが判断する
467:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 15:03:08.99 s6PscRDz0.net
(void)main(void)
468:蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdba-F9Mj)
23/08/14 15:17:16.05 MULxLxBHd.net
>>464
AIが混乱するようなことを言わないでほしいも
469:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
23/08/14 16:43:05.60 sy90BXR10.net
>>464
それ LLP64 でも同じこと言えるの?
470:デフォルトの名無しさん (ワッチョイ 4ecf-vKG+)
23/08/14 17:46:44.25 3TQy/ZGT0.net
>>464
それはB言語のようなミニ言語やBLISSやアセンブラのようなシステム記述言語でよくあるやつだな。
そういう血塗られたルーツを持つCが普及してしまったのがこの大災害の原因ではあるが。
471:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 18:03:50.08 s6PscRDz0.net
今は血を流さずに戦争ができます
472:デフォルトの名無しさん (ワッチョイ 9710-8Nw3)
23/08/14 18:07:41.52 WVbdJjmk0.net
ポインタじゃない構造体の代入はメモリコピーで、intじゃないよね
473:デフォルトの名無しさん (ワッチョイ 9710-8Nw3)
23/08/14 18:22:17.15 WVbdJjmk0.net
>>467
それですよ。
あと、実際の案件で
メモリバスが32より大きい環境でも、64ビット全部が使われてるとは限らないです。
あるビットにこう入ってたら40ビットのxxメモリ空間を指し、あるビットにこう入ってたら48ビットのyy空間を指す、とか
ポインタ値にも複数の種類がある(ように設計する事がある)
何が言いたいかというと全部intだなんてのは、分かってない証拠
474:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 18:39:04.59 s6PscRDz0.net
可変長のポインタって、すごいな
475:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+)
23/08/14 18:42:29.14 JlnnwsPwM.net
昔は関数から戻り値として構造体が返せなかった
MSか勝手に実装した
476:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 18:47:31.20 s6PscRDz0.net
返せなくても困らなかったけど
例えばポインタで返しているAPIはいくつかあるだろうし
呼出時に渡す構造体で返すやり方も普通にある(こちらの方が多いかも)
477:デフォルトの名無しさん (ワッチョイ b67a-TNXw)
23/08/14 21:33:10.14 VCWTWKLb0.net
8051風のMCUにはメモリ空間が複数種類あるものがあって、どのメモリ空間をポイントするかによってポインタのサイズが1byteか2byteかに分かれるというのがありました。
478:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e)
23/08/14 22:08:33.35 sy90BXR10.net
>>473
K&R の初版 (1978 年) の段階では
構造体を関数の返却値に出来る仕様ではなかったのは確かだが
その制限は将来的に削除されるとも書いてある。
構造体を返せるようにするのは設計者の計画の内だ。
最初に実装したのが誰なのかは知らんが「勝手に」とは言えないだろう。
479:デフォルトの名無しさん (ワッチョイ 4e63-GMkv)
23/08/14 22:12:43.60 s6PscRDz0.net
えてして実装が先で、規格になるのは後
というのはよくある話
480:デフォルトの名無しさん (ワッチョイ 7679-BXQ2)
23/08/15 18:53:02.89 hBALyWzq0.net
規格が先行することなんて無いでしょ
出来レースみたいな例外を除けば
481:デフォルトの名無しさん (ワッチョイ 4ecf-eQmn)
23/08/15 19:27:12.11 RzZaP1Xc0.net
仕様もクソもANSI Cが出来るまでCに仕様だの規格だの自体がなかったよ
K&Rにしても当時はあくまで標準って位置づけだったし、各処理系で互換性のない部分が結構ある時代だった
そもそもK&Rって本自体Cの言語としての仕様を示すための本じゃなくて、Cの使い方を説明するユーザーガイド的な書籍だしな
大体、当のデニスリッチーからしてK&R初版の時点で自分のコンパイラではすでに構造体のやりとりを実装させてたんだから
482:デフォルトの名無しさん (ワッチョイ f358-yhDR)
23/08/17 17:55:25.45 3zgw8j7r0.net
K&Rはバイブルってだけ
宗教に喩えて開祖だか教祖だかが著したもの
483:デフォルトの名無しさん (ワッチョイ 8b01-vKG+)
23/08/17 17:57:11.47 PGwDphC60.net
バイブルに従え
484:デフォルトの名無しさん (ワッチョイ 4e46-8Neb)
23/08/17 18:38:44.78 ZHeAFIgr0.net
C言語ルター派
485:デフォルトの名無しさん (ワッチョイ 2702-4obo)
23/08/17 19:50:44.50 J3LrsntM0.net
般若心経
486:デフォルトの名無しさん (スップ Sdba-QvTc)
23/08/17 20:29:24.71 o4Mq35bqd.net
>>481
天国が来るだろう(構造体の戻り値)って書いてあるんだから天国の到来を疑ってはいかんだろw
487:デフォルトの名無しさん (アウアウウー Sa45-GdOV)
23/08/19 16:55:05.41 YiVhsdBOa.net
剣かK&Rか貢納か
488:デフォルトの名無しさん (ワントンキン MMd3-3T4A)
23/08/19 21:36:28.88 cGpjgVdNM.net
天国から帰ってくるのはヨッパライくらい
489:デフォルトの名無しさん (オッペケ Sr0d-/Zz/)
23/08/19 22:45:11.13 /061VjvDr.net
なーおまえ、c言語ちゅーもんはそんなに甘いもんやおまへんのや。もっと真面目にやれー
490:デフォルトの名無しさん (ワッチョイ 93ad-qLW0)
23/08/20 15:24:28.02 pbHEs6OP0.net
>>480
そういう感じでバイブルと呼ばれる本がいくつかあって、暫くしたら本のタイトルにバイブルって入ってるやつが出てきてアホかと思った事がある。
まあ、本のタイトルは出版社側がなんとなく売れそうな感じのものを考えて付ける事が多いらしいので仕方がない事なのかも知れないが。
491:デフォルトの名無しさん (ワッチョイ 93ad-qLW0)
23/08/20 15:26:20.60 pbHEs6OP0.net
>>487
レコードの回転数変えるように。
などと書いて話が通じる人は年寄り。
492:デフォルトの名無しさん (ラクッペペ MM4b-pGo3)
23/08/20 16:08:23.89 CcD0k09aM.net
33回転、45回転、78回転
493:デフォルトの名無しさん (ワッチョイ c946-6Yea)
23/08/20 16:45:30.39 bQFpfsbr0.net
LP 33+1/3 回転を更に Long Play 化したのが LLP64 なの?
494:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/20 20:08:06.72 GxzweHHZ0.net
針ってまだ売ってるんだな、知らなかったw
495:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/20 20:37:34.57 qQCDJN6bM.net
逆に今はレコードブームだし
496:デフォルトの名無しさん (スッップ Sdb3-jt3B)
23/08/20 20:38:55.31 WX+gcEAed.net
>>491
なんで回転数早くなってるねんw
497:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/20 20:40:51.45 qQCDJN6bM.net
回転数が速いと情報量が増える
要するに音質が良くなるんだろ
498:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
23/08/20 21:28:54.03 CVtYBdI90.net
>>492
いまどきのレコードプレイヤーはレーザーで読み取るタイプのもあるんやが
音質や使い勝手よりも針を落とす感覚が好きな懐古趣味の人も
少なからずいそうやなと思う。
499:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/20 21:44:18.30 GxzweHHZ0.net
そのうち量子センサーなんてでてきて、
盤面を一瞬で読み取って再生する何て出てくるかもね
知らんけど
500:デフォルトの名無しさん (ワッチョイ 93ad-hPrW)
23/08/20 22:47:50.93 pbHEs6OP0.net
盤面を写真撮影して凹凸を一度に全部読み、後は再生するだけ。なんてのはできそうだな。
501:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/20 22:56:04.52 pKCQsYPtM.net
>>498
盤面をスマホで読み取らせて、それを再生してると思わせといて、実はラベルを解析して事前に録音済みのデータを再生するという、イカサマサービスを思い付いたw
502:デフォルトの名無しさん (ワッチョイ 2bcf-YAjS)
23/08/20 23:03:56.28 P3ytobrG0.net
こまわりくんはレコードの溝読めたな。
503:デフォルトの名無しさん (ワッチョイ 93ad-hPrW)
23/08/20 23:13:57.98 pbHEs6OP0.net
>>499
OCRプログラムでラベルの写真のタイトル部分の文字列読ませれば可能だが、問題は、ラベルに似せたものの上に書いた文字でも同じように読んで成功してしまうことだ。つまりレコード不要。
504:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/20 23:16:52.12 GxzweHHZ0.net
そういえばオープンリールも速度とトラック数にこだわりがあったな
505:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/20 23:22:22.29 pKCQsYPtM.net
>>501
さすがにレコードか位は判別可能なんで、そういう誤魔化しは除外できるでしょ
つうか、インチキなんだからどうでもいいんだけどねw
506:デフォルトの名無しさん (スッップ Sdb3-jt3B)
23/08/20 23:46:32.25 WX+gcEAed.net
人間「このレコードかけて」
AIスピーカー「かしこまりました…あーあーはってしーないー」
人間「お前が歌うんかい!」
507:デフォルトの名無しさん (ワッチョイ 5910-oBFI)
23/08/21 00:56:03.52 h/vumT/U0.net
>>499
ワロタ
…でも「顧客が本当に必要なもの」はそれかもしれない
508:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/21 00:58:44.27 EVtKvg8p0.net
曲を再生して、それをスマホに聴かせ、曲名やアルバム名を調べる
というのは割と使ってる
509:デフォルトの名無しさん (ワッチョイ 7101-vfxM)
23/08/23 12:33:50.88 WRsTeN290.net
localtimeでtm型のポインタが返ってきますが
これはfreeのような後始末はしなくても良かったんでしたっけ?
以下のt1の後始末です
#include <time.h>
#include <stdio.h>
int main () {
time_t t0 = time (NULL);
struct tm *t1 = localtime (&t0);
return 0;
}
510:デフォルトの名無しさん (ワッチョイ 93ad-Dfy6)
23/08/23 12:46:33.56 RWX4pd1L0.net
不要
静的な領域なんで
その代わりスレッドセーフじゃないし
次に呼び出したら値が変わっちゃうのでそのまま使うならコピー必須
511:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
23/08/23 13:08:22.64 d+s8esX90.net
時間系関数の一部では同じ型のポインタを返す他の関数が
内容を書き換えることもあるということにも気を付ける必要がある。
つまり localtime が返したポインタが指す先は
gmtime の呼び出しで内容が変わるかもしれないし変わらないかもしれない。
512:デフォルトの名無しさん (ワッチョイ 7101-vfxM)
23/08/23 13:18:07.19 WRsTeN290.net
>>508,509
あざーす!
思い出しました! そうでした
513:デフォルトの名無しさん (スップ Sdb3-Vj9P)
23/08/23 13:23:04.60 Tm9lJ2oNd.net
Cの標準ライブラリはメモリ操作関係やsprintfみたいな書式出力系以外は古臭くてほぼ使い物にならないから
システムのAPIを直接呼んだ方がいいよ
ガハハ
514:デフォルトの名無しさん (ワッチョイ 5910-oBFI)
23/08/23 13:57:11.07 dIB9DDlN0.net
>>511
えー、お名前教えて
あなたとあなたのコードが関係するプロジェクトは全部避けたいですw
515:デフォルトの名無しさん (ワッチョイ 7101-vfxM)
23/08/23 13:59:16.75 WRsTeN290.net
>>511
以前に以下のように書いてるところを
using boost::posix_time;
using std;
cout << to_simple_string (second_clock::local_time ()) << '\n';
C++にchronoが入ったので標準ではどう書けば良いのか調べてまして
以下の例を見つけそこでstd::localtime使ってるので聞きました
URLリンク(cpprefjp.github.io)
std::system_clock::time_pointってstd::ostreamに直接出力できないんですかね?
すれ違いかもしれんですが
516:デフォルトの名無しさん (ワッチョイ 7101-vfxM)
23/08/23 15:39:04.68 WRsTeN290.net
同じ出力になる以下を使用することにします
$ cat test.cpp
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <chrono>
#include <ctime>
#include <iomanip>
int main () {
std::cout << boost::posix_time::to_simple_string (boost::posix_time::second_clock::local_time ()) << '\n';
std::chrono::system_clock::time_point p {std::chrono::system_clock::now ()};
std::time_t t {std::chrono::system_clock::to_time_t (p)};
std::tm lt; localtime_r (&t, <);
std::cout << std::put_time (<, "%Y-%b-%d %H:%M:%S\n");
return 0;
}
$ g++ test.cpp
$ ./a.out
2023-Aug-23 15:35:01
2023-Aug-23 15:35:01
517:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/23 16:21:15.95 mK4fJzJ6M.net
>>512
Win32使ってCでコーディングするなら、Win32以外のAPIを呼び出す必要がないな
518:デフォルトの名無しさん (ワッチョイ c101-YAjS)
23/08/23 19:26:23.68 De6qHSvf0.net
標準入出力関数を Win32APIだけで実装しなおすのはなかなか
車輪の再発明くさい案件になるな
519:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/23 19:53:06.85 7GDemJR0M.net
残念ながらC標準ライブラリは古くて当たり前なんだ…
それを基準にして多くの人が回ってるから変えられないんだろう
でも人間の使える時間は限られてるので使えるものはうまく使ったほうがいい
メンテナンス性は知らないが
520:デフォルトの名無しさん (スップ Sdb3-jt3B)
23/08/23 19:55:44.31 6N7MylZZd.net
新しく作り直したのに使い物にならないのがWIN32APIの凄いところなんだよなw
521:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/23 19:59:10.27 7GDemJR0M.net
win95ってほぼ30年前でしょ…
522:デフォルトの名無しさん (ワッチョイ 5910-oBFI)
23/08/23 20:09:03.11 dIB9DDlN0.net
>>515
Win32?今の話の流れと全然関係ないです
私はLinux上で開発してるけど、それも関係ない
いいからお名前教えて
523:デフォルトの名無しさん (ワッチョイ 5910-oBFI)
23/08/23 20:14:42.63 dIB9DDlN0.net
まあいいや。どうせ永遠に話通じないし、意味ないね、スレ汚しごめん> all
世界中のあらゆる人と意思疎通できる訳がない
524:デフォルトの名無しさん (ワッチョイ 5910-oBFI)
23/08/23 20:17:30.73 dIB9DDlN0.net
>>515
あなたもごめんね、信念に従ってそのまま生きて下さい
525:デフォルトの名無しさん (ブーイモ MMab-NzR0)
23/08/23 20:26:41.70 magUjDjkM.net
何でWinで開発する人って標準ライブラリを毛嫌いしてるんですか?
526:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/23 20:37:13.42 gVkUNQKt0.net
システムコールとか呼んでなかったか?
たしか、目標をセンターに入れてスイッチ、だった
527:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/23 23:51:05.54 Ed2C94gyM.net
Win32とかゲーム開発する時は必須だろ
デバッグ中はprintf使ったりするけど、最終的にはバイナリに標準ライブラリのコードは含めない
528:デフォルトの名無しさん (スップ Sdb3-jt3B)
23/08/23 23:56:23.25 6N7MylZZd.net
GNUみたいにそれなりの人たちがディスカッションして作ったものではなく
いかにもマイクロソフトのサラリーマンプログラマたちが適当に会議して作った仕様に見えるので信仰の対象にしてるのは気がしれんw
529:デフォルトの名無しさん (ワッチョイ 4102-DaUO)
23/08/24 00:03:34.65 7wZt4qen0.net
>>523
Win16でmallocなんか使ってたらころされてしまいますよ
530:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/24 00:24:02.15 0ALYOmXL0.net
そこでfar pointerです
531:デフォルトの名無しさん (スップ Sdb3-jt3B)
23/08/24 00:43:25.45 NfI5GYO1d.net
16ビットで十分なハンドル値をnearポインタにキャストするというのはいいアイデアだった
532:デフォルトの名無しさん (ワッチョイ 7101-vfxM)
23/08/24 00:56:52.45 hEI/Eij50.net
あぁなるほど!
16bitの頃のMSの貧弱な開発環境で育ったせいで
標準Cに対しては屈折した気持ちのままなのねw
533:デフォルトの名無しさん (ワッチョイ db79-wKkg)
23/08/24 01:06:43.62 W+JHQ2GG0.net
標準ライブラリは古いつーか実環境を考慮してないだけでbit数はあまり関係ない…
理解してないのに無理に話に入ってこんでもいいぞ
534:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/24 01:26:43.52 WP7jiBq4M.net
>>526
いや、初期のマイクロソフト知らないのかよw
闘うプログラマーとか読んでみろ
めちゃくちゃおもろいよ
そんなことも知らないとか、モグリも大概にしろ
535:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/24 01:40:06.60 WP7jiBq4M.net
macOS(iOS)のアプリ作る時は、OPENSTEP由来のFoundationフレームワークを使うだろ
こうなるとprintfも使わずにNSLogばっかりだなw
536:デフォルトの名無しさん (ワッチョイ 93ad-hPrW)
23/08/24 02:24:55.77 LAGetXxi0.net
そもそもC言語で新規開発すること自体がほとんどないので標準ライブラリ使うかどうかは今となってはどうでも良い。
537:デフォルトの名無しさん (スフッ Sdb3-G+yN)
23/08/24 07:36:25.07 6SD6OvDLd.net
macOS以前のmacのCはもっとひどかった黒歴史
538:デフォルトの名無しさん (スッププ Sdb3-jt3B)
23/08/24 12:16:23.79 50jyCEBUd.net
>>532
その手の本を本気にするなよ恥ずかしいw
小説だぞ
539:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/24 12:58:04.14 piehDxfAM.net
>>536
それで煽ってるつもりかよw
知らないなら黙ってろよ
540:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/24 13:05:10.53 piehDxfAM.net
闘うプログラマーをディスる奴が居るとはな
さすがモグリは違うw
541:デフォルトの名無しさん (スッププ Sdb3-jt3B)
23/08/24 16:07:54.33 s7pHw0+wd.net
お前の聖書を貶されて怒るのはわかるが
ただの宗教を他人におしつけるなw
542:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
23/08/24 17:35:21.45 575mCkoc0.net
「綺麗なのは使われてないものだけ」みたいな格言をどっかで見た。
543:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/24 22:11:17.69 ypVJRmCUM.net
闘うプログラマー懐かしいな
随分と前に上下巻の頃に読んだ
うろ覚えで申し訳ないがwinodwsのAPIセットを考えるのにカトラーと幹部がクルーザーを1~2週間借りて
湖でクルージングしながらゆっくり考えたってところが印象的
クリエイターって感じで良かった
544:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/24 22:22:10.52 ypVJRmCUM.net
残りの人生がどれだけあるか知らないけどそういう環境でそういう仕事してみたいなと思う
545:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/24 22:45:31.31 0ALYOmXL0.net
C言語の開発って、
ジャングルの中、誰からも支援を受けずに
自給自足で生き残って敵に勝つイメージがあるな
必要な道具は自分で作るみたいな
恵まれた環境で使うには難しい世の中になってきた
546:デフォルトの名無しさん (ワッチョイ 9302-e/Qn)
23/08/24 23:08:24.66 egx7h1gE0.net
闘うプログラマー読んだことないモグリだけど
カトラーがDECから来る前からWindows APIはあったよね?
547:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/24 23:36:03.41 ypVJRmCUM.net
Windowsは1.0からあるからなあw
闘うプログラマーはNTの開発物語
カトラーが関与したのはWindowsNTのAPIセット
548:デフォルトの名無しさん (テテンテンテン MM4b-0mpE)
23/08/24 23:47:18.67 Nhyf7NRLM.net
カトラーが実装したのはカーネルレベルのAPIでしょ
Win32はその上にある
549:デフォルトの名無しさん (オイコラミネオ MM1d-YAjS)
23/08/25 00:02:25.25 fBea/yqOM.net
win32はもともとWindows NTの機能だよ
それにカーネルだけ実装してWindows NTを発売したとは思えないけど
3.1とかはwin16
ついでNTでwin32
そのあと95が出てくる
550:デフォルトの名無しさん (ワッチョイ 2b63-/QKx)
23/08/25 00:08:33.68 NrcyVyXF0.net
フリーセルはWIn32sで動いていたんだよな
551:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 893e-glFA)
23/08/25 00:18:17.29 EDIsU9Tc0.net
あの頃はネット接続も一般的ではなかったから Win32s は雑誌の付録とかの形でよく入ってたのを覚えてる。
俺はテックウィンの付録CDから入れたわ。
552:デフォルトの名無しさん (ワッチョイ a19a-SOGH)
23/08/25 07:12:39.12 Fur8du0o0.net
>>533
macOS(Mac OS X)になって、旧Mac OS由来のCarbon APIのサポートのため
Foundationの下にCoreFoundationというCの共通ライブラリが作られたよね
すなわちC言語が基礎と。おそらく今でも
Carbon亡き今、CoreFoundationを直接使う必要はほぼないけど
書式出力は文字列のクラス(NSString/CFString)に含まれるというべきかな
NSLogも書式出力を受け付けるが、元々ログ出力関数なので
553:デフォルトの名無しさん (ワッチョイ 4d20-lN7b)
23/08/31 01:23:37.12 zNsdnZGD0.net
Cの規格書の 7.15.1.1 va̲arg には以下の記述があります。
次の実引数が実際にはない場合,又は型が実際の(既定の実引数拡張に従って拡張された)次の実引数の型と適合しない場合,次に掲げる二つの場合を除いて,その動作は,未定義とする。
- 一方の型が符号付き整数型であり,もう一方の型が対応する符号無し整数型であり,
そしてその値が,両方の型で表現可能な値である場合。
- 一方の型がvoid型へのポインタであり,もう一方の型が文字型へのポインタである場合。
これは例えば、可変長引数をとる関数にNULLポインタを渡し、呼び出された側で
FILE *fp = va_arg(ap, FILE *);
として受け取ってはいけない、という事を指すのだと理解しています。
なぜこのような規定が設けられたのでしょう?
554:デフォルトの名無しさん (ワッチョイ 355f-vHpx)
23/08/31 04:18:42.26 0tscOvRb0.net
>>551
実引数と適合しない型で取り出す場合の組み合わせは無数にあり、
多くは無意味でそのすべてについて結果を規定するのは大変だし必要無いので
最低限必要と思われる範囲で動作が規定されている、と考えれば自然。
555:デフォルトの名無しさん (ワッチョイ 86cf-TDjq)
23/08/31 06:17:20.33 2za9g7aR0.net
>>551
そこで規格がしてるのは特定の事柄を想定した話じゃなくて、単に責任の所在について言及してるだけだよ
va_argで指定する型と実引数の型を合わせるのはユーザーの仕事だ、合わない場合は動作を未定義にするよってこと
C FAQ 11.34を参照のこと
また、2つの例外事項はその部分はコンパイラ側が推測して補正出来る事項なのでそこは許容するよってこと
556:デフォルトの名無しさん (テテンテンテン MMde-4wgn)
23/08/31 08:59:50.92 lOSXeWouM.net
>>551
NULLポインターはFILE*と適合(compatible)してるから問題ない
そこに書いてあるのは適合しない場合の事
557:551 (ワッチョイ 4d20-lN7b)
23/08/31 19:57:18.34 zNsdnZGD0.net
多数の回答ありがとうございます。
おおむね、先に挙げた例に対しては「問題ない。規格に適合している」とのご意見のようです。
しかし、先に挙げた問題を解決することを目的(の1つ)として、C23では新たに nullptr 定数が設けられる、とも聞いています。
実はそもそも「そんな問題などなかった」という事なのでしょうか?
558:デフォルトの名無しさん (ワッチョイ 3e79-FVin)
23/08/31 21:01:54.47 xuZfOSNk0.net
「逆に」とか「実は」とか中二病は好きだよね
その規格書の文章が判りやすいとも思えないから好きに解釈していいよ
559:デフォルトの名無しさん (ワッチョイ a910-/+sI)
23/08/31 21:03:14.12 Ku+D9NQz0.net
クソどうでもいい。現実の問題を正しく定義しろカス
560:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
23/08/31 22:30:14.55 n7krQh8u0.net
>>554 >>555
私の解釈では規格に沿っているとは言えないと思う。
C では整数定数としての 0 は特別な地位にあって空ポインタの定数としても使えるので
#define NULL 0
といった定義でも言語仕様を満たすし実際にこういう定義になっていることも多いのだけれど
状況によっては単に整数と解釈されてしまうことが問題になる。
可変長引数で FILE* を期待しているところに空ポインタを渡すのは許されるが
NULL と書くと (それ単体では整数型なこともあるので) ポインタとは適合しないことがあり得る。
仕様に厳密に言えばその場合の実引数は (void*)0 とか (void*)NULL とか書かないといけない。
大抵の処理系では問題にならないように上手いこと調整されている。
#define NULL 0LL
みたいな感じで (その処理系における) ポインタと同じサイズの整数で定義しておけば一般的な ABI では大丈夫。
(だが言語仕様で保証しているわけではない。)
NULL は整数とポインタを兼ねる (ような定義でも許される) というのが
歴史的経緯によるあまりにもグダグダな場当たり的な規則なので常識的に考えてあかんやろという話。
561:デフォルトの名無しさん (スプープ Sdca-+nJJ)
23/08/31 22:30:45.52 zVsC0t7Ed.net
>>555
>として受け取ってはいけない、という事を指すのだと理解しています。
君のこの理解が間違っていた
それだけでしょ
562:デフォルトの名無しさん (ワッチョイ 355f-vHpx)
23/08/31 22:49:56.13 0tscOvRb0.net
>>554,555
可変長引数として渡したオブジェクトポインタは実引数拡張により全部 void* になるから、
typedef void FILE; とでもなっていない限りは適合するとは言えないよ。
va_arg(ap, FILE *) として受け取ってはいけない(移植性を損ねる)ということで合ってる。
そもそも適合は型と型の関係だから「NULLポインターはFILE*と適合」はおかしい。
563:551 (ワッチョイ 4d20-lN7b)
23/08/31 23:05:28.70 zNsdnZGD0.net
>>558
処理系によってはNULLが (void *)0 でなく、
0 と定義されているかもしれない(から駄目)という事ですね。
納得しました。ありがとうございました。
564:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
23/08/31 23:08:37.85 n7krQh8u0.net
>>560
よく確認してみたら確かにそうだわ……。
NULL が整数として解釈される可能性を考えるまでもなく
void* と FILE* は適合しないな。
ポインタが適合する条件としては同一の修飾がされていることに加えて
両者が適合する型のポインタでなければならないことになってる。
void と FILE は適合しないのだから void* と FILE* が適合することもない。
565:551 (ワッチョイ 4d20-lN7b)
23/08/31 23:38:40.05 zNsdnZGD0.net
NULLについては納得しましたが、まだ疑問が残っています。
同じポインタ型であっても、保証されているのは、
「一方の型がvoid型へのポインタであり,もう一方の型が文字型へのポインタである場合」
だけとなっています。この制約の意図が不明です。
例えば、可変長引数をとる関数に (void *)NULL を渡し、呼び出された側で
FILE *fp = va_arg(ap, FILE *);
として受け取るのも不適合に思えます。
この場合でも、(例えば)アライメントの問題があり、互換が保証できるのはvoid型へのポインタと文字型へのポインタだけ、といった事なのでしょうか?
566:デフォルトの名無しさん (テテンテンテン MMde-4wgn)
23/09/01 00:09:17.26 EYRyaWRCM.net
>>560
適合しない場合ってのは、FILE*とint*とかを言うのだろう
void*とFILE*は適合しないのか?
それとNULLを0なんかに定義してたら、NULLはintとしか適合しなくなる
なのでNULLポインターは((void*)0)と想定している
567:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
23/09/01 00:20:09.48 gaibfzWk0.net
>>563
適合する型なら許されるということに「加えて」
void* と char* の組み合わせの場合でも許されるという
規定になってるのはわかってる?
>>564
ポインタの適合に関するルールは C99 なら 6.7.5.1 に規定があって
void* と FILE* は適合しない。
> それとNULLを0なんかに定義してたら、NULLはintとしか適合しなくなる
> なのでNULLポインターは((void*)0)と想定している
・ 値0をもつ整数定数式又はその定数式を型void *にキャストした式を,空ポインタ定数(null pointer constant) と呼ぶ。 (§6.3.2.3)
・ NULL は,処理系定義の空ポインタ定数に展開する。 (§7.17)
とあり、 NULL が整数的数式の 0 であることは許容される。
568:551 (ワッチョイ 4d20-lN7b)
23/09/01 01:19:09.35 APE9whcz0.net
>>565
適合する型なら許される、という点は理解しています。
しかし「void* と FILE* は適合しない」のであれば、
>>563 の例も不適合ではないでしょうか?
また、不適合であっても void* と char* の組み合わせ
の場合なら許される理由は何でしょう?
569:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
23/09/01 01:43:08.25 gaibfzWk0.net
>>566
総合的に言って不適合という理解で正しいということになる。
void* と char* は適合の規則からすると適合ではないのだけれど、
その表現や境界調整は等しいことを保証する規則があるので
この場合に適合と同等の扱いをしても問題にならないから、
まあ出来るようにしておけば便利なこともあるんとちゃうんかなぁ。
570:デフォルトの名無しさん (テテンテンテン MMde-4wgn)
23/09/01 02:40:24.68 EYRyaWRCM.net
>>565
ポインターに0の代入は問題ないけど、ここでの話は可変個引数に渡した時の事を言ってるので((void*)0)じゃないと不味いでしょ
571:デフォルトの名無しさん (テテンテンテン MMde-4wgn)
23/09/01 02:50:24.64 EYRyaWRCM.net
>>565
6.7.5.1では、FILEとvoidが適合しないといけない旨の記述があるけど、voidというのは普通に比較して適合かどうか判定できる型なのか?
特別なルールが有って然るべきな気がするけどね
572:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
23/09/01 09:38:35.84 gaibfzWk0.net
>>568
不味いけど NULL が 0 のことはあるという話。
573:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
23/09/01 18:08:19.15 gaibfzWk0.net
何の話をしてたんだかよくわからんようになったので >>551 を読み返してたんだが
規定が設けられた理由が根本的な疑問ということでいいんかな。
当然だが引数を受け取る側の想定と異なるものを渡したら破綻する。
普通の関数ならコンパイル時に受け取る側と渡す側の型の間に不整合が合ったら
コンパイル時に検出できるし、条件に合えば暗黙の変換もするんだけど
可変長引数の場合は実行時にならないとわからないので
調整する必要なく渡せる条件を規定したらそうなったって感じだと思う。
整数は負数が絡まなければ同じ表現だし
void* と char* にも互換性があることも保証されているので
問題にならない。
574:デフォルトの名無しさん (ワッチョイ 8646-FlCC)
23/09/01 19:53:17.39 El2JpNjt0.net
ポインタ苦いか塩つぱいか
そが上に熱き涙をしたたらせて
コードを書くはいづこの里のならひぞや
「まずい」や「拙い」でなく「不味い」と書かれると、つい...
575:デフォルトの名無しさん (アウアウウー Sa11-sVGh)
23/09/01 20:42:45.29 5C0TsKNSa.net
メモリの先頭をいじっている時点で頭がおかしいが
576:デフォルトの名無しさん (アウアウウー Sa11-sVGh)
23/09/01 21:08:05.68 5C0TsKNSa.net
ヌル文字の実体が数値のゼロということから思いついた理屈なのかな?
ポインタはアドレスで、そのアドレスに格納されている値のことではない。
577:551 (ワッチョイ 4d20-lN7b)
23/09/01 21:13:54.66 APE9whcz0.net
>>571
色々ありがとうございました。
素朴に考えて、呼び元がポインタを渡し、
それを呼び先がポインタとして受け取れば
(それが何型へのポインタであろうとも)
普通に安全そうに見えるのに、何でこんなに厳しいのか?
そう決まった理由が知りたかった為の質問でした。
誰か、そこら辺の事情を知っている人はいないか? と。
578:デフォルトの名無しさん (ワッチョイ d95f-sVGh)
23/09/01 21:37:10.15 qVeR1pY40.net
>>575
C言語のポインタは単にアドレス
ただし、構造体なら構造体、関数なら関数で、メモリ上に決まった配置をされるので、なんのポインタかわからないと、メモリのアドレスをずっと追いかけることになる。
コンピューターそのものにはデータ型というものは存在しない。
579:デフォルトの名無しさん (スプープ Sdca-+nJJ)
23/09/01 22:14:19.34 LLAg+6GRd.net
>>575
単純にアラインの問題じゃないの
char型なら1バイト単位だからどんなアドレスでもOKだが
それ以上のサイズの変数へのポインタは他のポインタへ変換できない可能性があるというのがたてまえで
580:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ a13e-e+8E)
23/09/01 23:22:02.51 gaibfzWk0.net
>>575
ポインタの表現は、それが指す先の型によって異なることも言語仕様としては許されるはず。
§6.2.5 でポインタの表現や境界調整要求が等しくあるべき条件が規定されていて
それ以外の条件では同じ表現または境界調整要求を持つ必要はないと書かれてる。
まあそんなアーキテクチャがどれくらい存在するのかは知らんけど
581:デフォルトの名無しさん (テテンテンテン MM7f-cJIa)
23/09/02 00:36:03.53 WsIZ4FVlM.net
いやいや、ポインター(アドレス)自体はアライメントされてない所に格納されてるかもしれんけど、中身のアドレス自体は問題ないアライメントになってることが保証されてるでしょ
オマエらは何を言ってるんだ?
582:デフォルトの名無しさん (ワッチョイ ffad-5+Xn)
23/09/02 00:41:32.42 VX6uRHRw0.net
farポインタみたいにバイト数の違うポインタも混在していたら余計にややこしい問題に・・・
583:デフォルトの名無しさん (テテンテンテン MM7f-cJIa)
23/09/02 01:01:48.59 WsIZ4FVlM.net
例えばFILE*とshort*ならアドレスのアライメントが合わない場合があるだろうけど、これはそもそも型が適合しないわけでどうしようもない
でも、今考えたらvoid*はありとあらゆるアドレスを取る可能性が有るから、それに合うのはchar*しかないよ、ということを言いたかったのだろうなと気付いた
でも規格書を見ても、FILE*とvoid*が適合するかどうかはアンドキュメンテッドだなw
現実には((void*)0)とFILE*は完全に適合してるけどね
584:551 (ワッチョイ 2320-+GqY)
23/09/02 06:58:16.01 XjF1xIbI0.net
ここにこう書いてあるからには、何か(通常の関数呼び出しでは
問題にならないが)可変長引数特有の問題があり、
それを避けるためにこうしたのだろう、と思った訳です。
585:デフォルトの名無しさん (スプープ Sd1f-I+Vk)
23/09/02 11:49:29.07 +azsBNOBd.net
>>579
そんな保証はまったくない
例えばmallocの場合戻り値は「あらゆる組み込み型に対応できるようにアラインメントされる」と特に注釈されている
逆に言えばvoid*はどんなポインタにキャストしても安全と思い込みがちだがそんなことはないということ
>>582
通常の呼び出しなら型チェックが働くが可変長呼び出しでは一切働かないという注意だろう
最近のprintfは型チェックされるようになってるけど
586:デフォルトの名無しさん (ワッチョイ cf63-yzHn)
23/09/02 11:59:23.66 R1w1jy3B0.net
安全かどうかは、環境によるんじゃ
587:デフォルトの名無しさん (スプープ Sd1f-I+Vk)
23/09/02 12:34:31.87 DeBIPPsBd.net
「環境による」のは安全ではないんだよ
ここで取り上げられてるのは大元の公式文書なのであらゆる環境について言えることが書いてある
588:デフォルトの名無しさん (ワッチョイ cf63-yzHn)
23/09/02 12:59:05.22 R1w1jy3B0.net
マイナーなCPUのことなんか気にしたことがなかったな
589:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
23/09/02 13:12:11.45 Ng1Dtdjk0.net
>>584
現在の文脈では「言語仕様をそう決めた理由」が主題。
だからその前提として言語仕様が保証している範囲がどこまでかを
理解しておく必要があって、そこで見当違いの主張に反論がされている
という話の流れ。
590:デフォルトの名無しさん (スプープ Sd1f-I+Vk)
23/09/02 14:05:43.49 DeBIPPsBd.net
>>586
「可搬性」という概念はCでは大事
マイナーなCPUのみならず将来的に登場する高性能だが制限が多いCPUでも手直しせずに動かせるということもあるかもしれない
591:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
23/09/02 14:41:25.26 Ng1Dtdjk0.net
必要なら環境依存なことをしやすいのも C の良いところだが
不必要な依存は避けるに越したことはないわな
592:デフォルトの名無しさん (アウアウウー Sae7-fXI3)
23/09/02 14:45:40.34 mCX3wjBNa.net
FILE *fp = fopen(...);
void *hoge = (void *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?
593:デフォルトの名無しさん (スプープ Sd1f-I+Vk)
23/09/02 14:59:50.63 wu0IBgrgd.net
どうしても必要ならやるしかない
ただfopenの戻り値でFILE構造体の安全性が保証されてるのにわざわざvoid*に代入してからFILE*に戻すのは
正統な金なのに闇銀行に預けて再びマネーロンダリングするような変な手間だ
594:デフォルトの名無しさん (ラクッペペ MM7f-ymsf)
23/09/02 15:08:48.05 68c+QhTKM.net
void *型って参照する先の変数のサイズが不明なので右辺値になるのは不可能な気がするけどな
キャストは無理でしょ
595:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
23/09/02 15:12:41.39 Ng1Dtdjk0.net
>>590
オブジェクトを指す (つまり関数ポインタではない) ポインタを
void* に変換してから元の型に変換すると
元のオブジェクトと等しいことは保証されている。
596:デフォルトの名無しさん (アウアウウー Sae7-fXI3)
23/09/02 15:26:23.14 mCX3wjBNa.net
>>592
void じゃなくてもいいや
FILE *fp = fopen(...);
char *hoge = (char *)fp;
FILE *fuga = (FILE *)hoge;
みたいなことは禁止されてる?
597:デフォルトの名無しさん (スプープ Sd1f-I+Vk)
23/09/02 15:40:22.87 iw53wgLpd.net
>>592
なんで?
ポインタはメモリ上の一点を指すもので
インクリメントデクリメントが不可能なだけで
キャストは可能
>>594
いったい何が聞きたいんだ?
禁止はされてないよ
ただこれ見たプログラマは皆「バカだなあw」とは言うだろうw
598:デフォルトの名無しさん (ワッチョイ 7310-/gcr)
23/09/02 15:52:38.82 f6/YEIJg0.net
言葉をちゃんと使うとプログラマ意思疎通がよくなるのでは。
「void * が右辺値になるのは無理」って何だよ。ではなく、正常動作はプログラマの責任になる、って言いたかったんじゃないの?
>>590 みたいなコードは、これだけなら疑問に思うだろうが、こういうコードが有効になる事はあるよ。その一例は
「ここで言うFILE* みたいなモノが複数種類あり」
送信側 - 中継機能 - 受信側
のプログラム構造で送受信のペアは複数あり、中継機能には 実際の中身が何なのかは意識させたくない。
----
ポインタの話から外れて恐縮だが、
例としてタグ・レングス・バリュー形式ってのがあって、「中継者は送受信データがTLV形式の連続であることだけは知っていて」「TとLのサイズは一定」「タグの種類が何種類あるかなんて知らなくていい」
----
これにさらにポインタを含むデータ構造を通信可能にするには?って話で、ポインタ型をバッファ内インデックス値に変換して、ポインタが指す中身も通信データに含める、とか、
サブ構造がポインタ持ってたら再帰的に処理する、とか話は続くが
それはいいとして
>>590 みたいなコードは、現実にはあるよ。という話
599:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
23/09/02 16:04:16.63 Ng1Dtdjk0.net
>>594
オブジェクトを指すポインタは char* (またはその他の文字型をさすポインタ) へ変換することは許されるし文字配列として読んでもよい。 (読んだ結果としてどういうレイアウトになってるかはわからんけど。)
そしてもとの型に型変換したら変換前と等しいことも保証される。
600:デフォルトの名無しさん (スプープ Sd1f-I+Vk)
23/09/02 16:06:19.94 Yxb8XUhFd.net
たしかに言い方が悪かったので
>>592
ポインタは元々サイズは無いもので
対象オブジェクトの先頭アドレスの一点だけを指してるから
void*を含むどんなポインタもキャストすれば力づくで代入できる
ただvoid*にはサイズがないのでinc dec(加減演算)をしようとするとエラーになる
>>594
どんなキャストも禁止されてはいないが
プログラマの責任によって成される最後の手段だと思ったほうがいい
見つかりにくいバグの原因になるので
ソースにコメントで理由を明示しておいたほうがいい
601:デフォルトの名無しさん (ワッチョイ 7310-/gcr)
23/09/02 16:12:48.48 f6/YEIJg0.net
うーん
まだまだ添削できる余地があるぞ…
ここはまあ無料掲示板だが、仕事では、自分には誤解をされやすい性質がある、と意識しなされ
602:デフォルトの名無しさん (スプープ Sd1f-I+Vk)
23/09/02 16:50:14.84 JxIOKPq6d.net
アハハ
なんだこの人w
603:デフォルトの名無しさん (ワッチョイ cf63-yzHn)
23/09/02 17:10:38.18 R1w1jy3B0.net
ここでお金稼ぎしている人いたっけなw
604:デフォルトの名無しさん (ワンミングク MM9f-hgj0)
23/09/02 21:43:01.25 5XlbVKpsM.net
もりたぼ稼ごうとした人はいた
605:デフォルトの名無しさん (ワッチョイ b35f-RK05)
23/09/02 22:10:43.72 9Zs5bzSj0.net
ポインタの宣言は、ポインタの型じゃなくて、ポインタが指しているアドレスの格納値をどう扱うつもりなのかを明示している。
void型のポインタは、ポインタだから、何型のポインタだから、64ビットだったり、32ビットだったりするものではない。
606:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
23/09/03 13:47:13.05 ApaaLf4l0.net
>>603
同じでなければならないという規定はない。
実際に異なる実装が存在するのかどうかは知らんけど。
607:デフォルトの名無しさん (スププ Sd1f-ETx6)
23/09/04 07:48:03.87 63U36j7Od.net
>>594
void void * 登場前の C は
FILE *fp = fopen(...);
int *hoge = (int *)fp;
FILE *fuga = (FILE *)hoge;
だったんじゃないかな
608:デフォルトの名無しさん (ワッチョイ 8310-g4sH)
23/09/04 07:53:14.39 YGQMN8Uj0.net
設計当時はアセンブラの代替言語。
609:デフォルトの名無しさん (スッププ Sd1f-I+Vk)
23/09/04 09:48:09.59 R5PUsxPld.net
>>605
基本はcharだからchar *hoge = (char *)fp;じゃない
なんならint hoge = (int )fp;でもよかった
ほとんどの場合intとポインタのサイズが同じだった
610:デフォルトの名無しさん (アウアウウー Sae7-fXI3)
23/09/04 10:04:32.23 /ASAZOX6a.net
>>607 みたいなのがいるから void が出来たんだよ
611:デフォルトの名無しさん (スプッッ Sd87-IP2U)
23/09/04 11:07:54.13 gab4BDOud.net
因果逆転だな
612:デフォルトの名無しさん (ワッチョイ 7310-/gcr)
23/09/04 11:19:05.30 Ww8QJvvD0.net
>>607
ウソはだめだ。
俺が見逃しても、はちみつ先生に定規でケツはたかれるぞ
613:デフォルトの名無しさん (ワッチョイ 7310-/gcr)
23/09/04 11:24:33.03 Ww8QJvvD0.net
そういえば、むかーしの情報処理試験には言語選択でマシン語ってのがあって、1メモリアドレス値が指すメモリは 8bit 幅ではなく、 16bit だったように記憶してる。
「特殊な環境を想定しやがって…」と思ったナカマいない?
614:デフォルトの名無しさん (ワッチョイ 8310-g4sH)
23/09/04 11:27:19.73 YGQMN8Uj0.net
試験用アセンブラはCASLだったっけ?
仮想環境で実在しない環境用言語だって。
615:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
23/09/04 12:00:00.02 p8KSFCIf0.net
>>610
char* はどのポインタからも変換できるし
元の型に変換すれば元のポインタと等しいことは保証される。
好ましいとは言えないが変換自体は問題ない。
void* 登場前には (void* 的なことが必要なら) char* が使われていたのは本当だ。
ポインタから整数へも型変換できることは明記されてる。
その結果は処理系定義だが、出来る環境でやるのが悪いわけじゃない。
char* やら int やらで扱ってたら間違った取り扱いをしやすいので
可能なら避けたほうがよくは有るが、 >>607 が言及した範囲には
明瞭に間違いと言えるものは見つけられない。
616:デフォルトの名無しさん (テテンテンテン MM7f-cJIa)
23/09/04 12:00:22.47 5denWoTkM.net
メモリが8bitって何も出来ないぞw
617:デフォルトの名無しさん (ラクッペペ MM7f-ymsf)
23/09/04 12:05:38.98 QM+pFggQM.net
アドレス範囲ではなくてデータ長が16ビットだったと思う
618:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
23/09/04 12:09:35.09 p8KSFCIf0.net
>>611
C の仕様上の用語では「バイト」が 8bit とは限らない定義になっている。
C の仕様で想定する必要がある程度にはそういう環境もあったのだろうし、
主流ではないにしても特殊というほどの感じでもなかったんちゃうか?
まあ「昔」をいつ頃に想定するかにもよるだろうけど。
619:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-A0va)
23/09/04 12:24:06.96 p8KSFCIf0.net
>>612
たぶんだけど >>611 が言うのは CASL の前身である CAP-X のことじゃないか?
16bit 単位でアドレスが振られる設計だったはず。
620:デフォルトの名無しさん (ワッチョイ 93c9-oCRc)
23/09/04 14:04:31.55 F3cE7vUV0.net
7bitでアルファベットは表せてたしねぇ
文字集合で完結させてた RFC822
621:デフォルトの名無しさん (ワッチョイ 6f5f-ATpV)
23/09/04 20:56:26.82 MxCwE5tq0.net
実際に1バイトが8ビットじゃないマシンで仕事してた人いる?
経験談を聞いてみたい
つらそう
622:デフォルトの名無しさん (ワッチョイ b302-jP38)
23/09/04 21:41:24.34 TqSqVDXY0.net
何がつらいの?
623:デフォルトの名無しさん (スッププ Sd1f-I+Vk)
23/09/04 22:35:30.73 yuyUlcPSd.net
UNIXとか基本9ビットが見え隠れしてる気がする
ファイルのパーミッション---rwxrwxとか
C数値のデフォルトが8進数とか(9ビットなら8進数3ケタでまとまりがいい)
624:デフォルトの名無しさん (ワッチョイ cf63-yzHn)
23/09/04 22:55:40.14 ljnGjc/80.net
あれは9ビットだったのか
625:デフォルトの名無しさん (テテンテンテン MM7f-cJIa)
23/09/04 23:38:31.34 5denWoTkM.net
1バイト9bitとか完全に都市伝説だろ…
1ワード(レジスタ)が36bitとかはLispマシーンで使われたりしてたけどね
626:デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
23/09/06 06:22:01.74 r3vK0XzD0.net
char が16bitの環境なら使ったことがある
627:デフォルトの名無しさん (ワッチョイ 4301-yzHn)
23/09/06 07:02:16.45 Mh27mgbM0.net
そういうのってどんなCPUなの?
628:デフォルトの名無しさん (ワッチョイ cfcf-ATpV)
23/09/06 09:37:16.14 EGh1VJfR0.net
とりあえずDSPなんかはそうでしょ
ワードマシンって言っちゃっていいか知らんけど、演算の速度をあげるためにワード幅を一番使いそうなビット数にして全部ワード単位でアクセスする設計にしてる
マニュアルにアドレス、char幅、int幅全部同じ何々ビットです注意してねみたいなのがご丁寧に書いてあったりするよ
629:デフォルトの名無しさん (スフッ Sd1f-ETx6)
23/09/06 11:10:12.82 QkmiSIQgd.net
>>622
12bit以上必要だったはず
630:デフォルトの名無しさん (ワッチョイ 7310-/gcr)
23/09/06 11:35:53.69 HQrnJbDO0.net
>>626
勉強になります
DSP触った事ないや
631:デフォルトの名無しさん (ワッチョイ cfab-oCRc)
23/09/06 12:07:23.88 TIQAYIu40.net
>>626
float 幅に全揃え
アドレッシングもその単位なのでどうしても細かい粒度で個別に演算処理したい時はビットシフト併用
とかあったなぁ
632:デフォルトの名無しさん (ラクッペペ MM7f-gKm6)
23/09/06 15:01:09.34 7li0jtwXM.net
よく分からんけどDSPの内部レジスタって直接浮動少数点数が扱えるのか
floatは符号1bit + 指数部8bit +仮数部23bitの32bit長だっけ?
ただ浮動少数点数でビットシフトって面倒くさそう
633:デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
23/09/06 19:43:08.02 r3vK0XzD0.net
外部とやり取りが多少面倒
ファイルや通信関連
データ列をcharに8bitずつ入れるか
ケチって8bit x2 入れるか
なんかを考える必要がある
634:デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
23/09/06 19:43:50.40 r3vK0XzD0.net
私が使ったのはDSPでした
635:デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
23/09/06 19:45:03.72 r3vK0XzD0.net
昔の大型計算機でcharが64bitのがあったはず
636:デフォルトの名無しさん (ワッチョイ cf63-yzHn)
23/09/06 20:55:53.98 6iN9QRCz0.net
最初のUNIX開発マシン、DECの PDP-7 は18ビットだった
637:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
23/09/07 00:34:19.14 n7kUX99P0.net
C の仕様では正数型の表現にパディングビットの存在を許しているんだけど値の表現に関わらない無意味なビット(特殊なフラグとかに使うのか?)が存在するアーキテクチャも、見たことはないけど C の仕様で想定している以上はたぶんあるんだろうな……
638:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 133e-QWOy)
23/09/07 00:34:47.43 n7kUX99P0.net
誤植
正数→整数
639:デフォルトの名無しさん (ワッチョイ 23f0-BDBD)
23/09/07 08:06:18.17 YzioMxaL0.net
>>635
小数なら身近にあるね
640:デフォルトの名無しさん (ワッチョイ ff97-EEOY)
23/09/07 12:49:26.03 6eZunc+30.net
隣で寝ている
641:デフォルトの名無しさん (ワッチョイ 0f01-e7Rb)
23/09/16 10:51:51.48 S5cqLcA00.net
T,o,k(迷惑という方は←をあぼーんしてください。)
更に家族友人にも教えて加えて¥4000×人数をGETできます
URLリンク(i.imgur.com)
642:デフォルトの名無しさん (アウアウウー Sa53-HRje)
23/09/16 12:25:15.03 RATZO/gia.net
しね
643:デフォルトの名無しさん (ワッチョイ 0f01-R46v)
23/09/16 12:35:05.81 n1ZKqkE80.net
>>639
PayPayに変換できるって知らなかった
644:デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
23/09/16 12:38:47.03 NMUMDiAt0.net
あそこはEUから莫大な賠償金請求されたから、必死なんだろう
645:デフォルトの名無しさん (ワッチョイ 3fad-xbk3)
23/09/16 12:48:52.21 8u+hT5wA0.net
>>639
グロ
646:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
23/09/22 10:15:48.77 wJrbx3oK0.net
なあ、いつから子関数内で宣言した自動変数を戻り値に使って親関数で参照してもアクセスエラーにならなくなったんだ?
特に構造体とか
647:デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
23/09/22 10:51:22.61 tfij4Zir0.net
自動変数を参照渡ししてるのか?
648:デフォルトの名無しさん (ワッチョイ 3f65-V30e)
23/09/22 11:07:25.29 8SLDLfd50.net
アクセスエラーってのが実行時の話なら動作環境教えてくれないとなんとも
649:デフォルトの名無しさん (ワッチョイ 4f93-uKg7)
23/09/22 11:08:43.04 X0VLPMl/0.net
すんません何を言ってるのか分からん
自動変数のアドレスを返す話?
OSとかコンパイラとか色々わからないと空虚な話になりそう、ってのと(特殊な環境なのでは)
エラーになって欲しいのにならなくて
同僚がアホで困ってて
強制的にエラーにしたいって話?
650:デフォルトの名無しさん (ワッチョイ 0f10-NfV8)
23/09/22 11:13:15.28 z1xJQo5k0.net
数年に1回ほぼVC++でほぼCのコード書いてコンパイルしてるけど、
なんか最新版入れる度にデフォのエラー基準厳しくなっていく・・・。
変数定義をgoto(エラー処理)ですっ飛ばからエラーって・・・昔のCみたいに関数先頭に記述を移動する羽目に・・・
警告でいいやん。
651:デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
23/09/22 11:16:56.77 tfij4Zir0.net
構造体で返すにしても、呼出元って用意した変数なり構造体で受け取るんだろう
652:デフォルトの名無しさん (ワッチョイ 3fad-d4nU)
23/09/22 11:27:24.08 ZXfr4S/70.net
>>644
構造体の変数を戻り値に使うことは結構最初の頃から出来たと思うが、昔のマイコンは遅かったのでなるべく使わないで呼ぶ側で変数作ってそのポインタ渡してそこに値入れてもらうみたいな事してたよ。
なんで遅いのかっていうと、参照などという高度なワザは使ってなくて他のintとかの変数と同様に構造体の内容をコピーしているだけだからだ。
653:デフォルトの名無しさん (ワッチョイ 7f63-VRQG)
23/09/22 11:28:55.72 tfij4Zir0.net
共用体で渡したときは、どのメンバー使ってコピーするの?
654:デフォルトの名無しさん (アウアウウー Sa53-9C00)
23/09/22 12:01:20.53 dkRHHNCea.net
池沼か
655:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
23/09/22 12:15:37.49 wJrbx3oK0.net
>>650
処理系によってはポインター渡しになってたはず
自動変数はスタック上に領域確保するので
実体渡しじゃ無いとスタック壊れてるよね?
656:デフォルトの名無しさん (ブーイモ MM5f-C+1d)
23/09/22 12:21:54.90 +zFc5v5MM.net
初期K&Rじゃ構造体returnはなくてポータブルC以降じゃね?
657:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4f3e-7CbB)
23/09/22 14:01:49.98 jd4xXbI20.net
構造体を返却値にするときは、
一般的なパソコンでの呼出し規約 (Windows や System V ABI) では
呼出し側で領域を用意してそのアドレスを暗黙の引数として渡す仕組みになってる。
用意された領域の上に最初から値を直接に構築できることもあるので
そういうときはコピーコストは発生しない。
単純な関数、かつモダンなコンパイラを使ってるときは余計な工夫をする必要はないよ。
658:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
23/09/22 14:35:59.04 wJrbx3oK0.net
戻り値に構造体を使いたいんですぅ
659:デフォルトの名無しさん (ワッチョイ 7fab-fp56)
23/09/22 14:53:23.56 HzXlnxdE0.net
参照てか自動変数へのポインタを戻してたってこと?
struct foo * hoge()
{
struct foo body;
retrun &body;
}
これ未定義だからどうとでもなってしまうんじゃなかったかな…
コンパイラが気を利かしてエラーや警告にするのも
そのまま実行コードを生成して想定外の動きをするのも
660:デフォルトの名無しさん (アウアウウー Sa53-9C00)
23/09/22 15:05:47.80 dkRHHNCea.net
>>656
これでいいだろ
struct Hoge *fuga(struct Hoge *param0, int param1, char *param2){
何かする
return param0;
}
661:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
23/09/22 15:07:59.94 wJrbx3oK0.net
受ける側が用意しなあかんかぁ
662:デフォルトの名無しさん (ワッチョイ 7fab-fp56)
23/09/22 15:08:23.02 HzXlnxdE0.net
>>657 のは、OS側のメモリに対する不正アクセスに引っかかって
エラー発報になるのは少ないんじゃないかな?
(戻りの自動変数のポインタが不正アクセスになる可能性は低い)
構造体の中にさらにポインタをつかってて、ゴミなポインタ値で実体見に行ってやっと上記が発動する
struct foo {
struct foo* next;
int body;
};
こんなので ret->next->body; とやったら *ret の内容がゴミ = ret->next も不定な値
ret->next->body でメモリの不正アクセス
663:デフォルトの名無しさん (ワッチョイ 4fb0-gBtz)
23/09/22 15:09:39.40 wJrbx3oK0.net
割り込み処理があると簡単に死ぬよ
664:デフォルトの名無しさん (ワッチョイ 7fab-fp56)
23/09/22 15:10:08.95 HzXlnxdE0.net
ハイコストなのをわかってて実体をそのまま返すことはあった
複素数を取り扱う Complex 構造体で 式の形式にしたくて ね
665:デフォルトの名無しさん (ワッチョイ 7fab-fp56)
23/09/22 15:11:28.51 HzXlnxdE0.net
>>661
割り込み想定するなら呼び出し元で器渡しとけって話にしかならんじゃろ
666:デフォルトの名無しさん (スッップ Sd5f-8KNq)
23/09/22 15:14:27.76 wMC0ce2ad.net
>>653
返値用にもスタックが用意されてる
特にサイズが自由に定義できる構造体では戻り値にレジスタは使えんだろう
667:デフォルトの名無しさん (ワッチョイ 7fab-fp56)
23/09/22 15:27:37.08 HzXlnxdE0.net
ID:wJrbx3oK0 がどういう環境で愚痴ってるのかはわからんけど
「割り込みハンドラ内でいろいろやるのをCで記述してるんだけど…」とかだったら
極力スタックは少なくしたい って話に行き着くけども
それならなおさら器は呼び出し側で用意すべし になるよなぁ
最悪関数呼び出しのオーバーヘッドも嫌って きもいマクロ関数が並ぶことも
668:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4f3e-7CbB)
23/09/22 15:30:18.99 jd4xXbI20.net
似たような話題が出たことがあるような気がしたので思い返してみると C++ スレの話だったわ。
コピーの省略 (copy elision) が保証される場合がどう実装されているのかという話題で
オブジェクトを構築すべき場所を呼び出し側が暗黙に渡してるから
最初からそこに構築される (のでコピーする必要がない) というのが一般的な実装で、
たぶん C の構造体受け渡しで実績があったから C++ では言語仕様として取り込めたんだな。
669:デフォルトの名無しさん (アウアウウー Sacf-PB4I)
23/09/23 10:05:20.89 i9fpyxKga.net
thisのことですか
670:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
23/09/23 10:39:49.55 ALqEUzvh0.net
>>667
返却値のこと。
コンストラクタの場合は結果的に this でもあるとは言えるけど
671:デフォルトの名無しさん (ワッチョイ 3b93-gtrM)
23/09/23 18:43:05.31 lGebHJu00.net
c言語にthisは無い
672:デフォルトの名無しさん (スッップ Sdaa-cHxT)
23/09/23 19:21:52.16 h4supWEzd.net
thisはポインタなので実体を返すとか言う話とは関係ない
673:デフォルトの名無しさん (ワッチョイ 8661-gIzx)
23/09/23 21:37:44.48 wNThSPil0.net
x86-64のABIでは、16byte未満はレジスタで渡されて、それ以上はメモリコピーが発生する、それだけ
674:デフォルトの名無しさん (ワッチョイ bb48-NSUt)
23/09/24 01:41:30.54 XDqOvN5B0.net
PODっていうんだっけ
構造体が値わたしになるやつ
これはC++だったかな?Cはよくわからん
675:デフォルトの名無しさん (アウアウウー Sacf-PB4I)
23/09/24 09:28:36.38 2YTVyUlCa.net
レジスタが64bit=8bytes
レジスタが128bit=16bytes
たしかにレジスタで全部返せるな
676:デフォルトの名無しさん (ワッチョイ 1e63-CSnM)
23/09/24 09:55:18.81 D6DOZoEp0.net
そのうち無限長レジスタ出てくるだろ
677:デフォルトの名無しさん (ワッチョイ 8a79-aeRl)
23/09/24 11:19:45.97 Cw9+et/n0.net
映画化決定 鬼滅の刃 - 無限長レジスタ編
678:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
23/09/24 11:48:58.25 wtxuVbIF0.net
>>672
C++ 的にはクラスが一定の条件を満たすと C の構造体と互換性があるような性質を持つ。
それが POD。
C++ の POD のことも慣例で構造体と呼んでると思うので、
C の構造体 ≒ C++ の POD みたいな感じ。
POD は値渡しがどうこうとは無関係。
679:デフォルトの名無しさん (スッップ Sdaa-cHxT)
23/09/24 18:47:28.19 zJPvjQK3d.net
>>674
あえてマジレスすると
RISCはレジスタ減らす傾向があるのでそれはない
近年のCPUはキャッシュがバカでかいのでレジスタを大きくする必要はあんまりない
680:デフォルトの名無しさん (ワッチョイ 0761-+HDL)
23/09/24 19:03:57.96 SWucSPIu0.net
Plain Old Data だね。
ちゃんとした英語だと、dの繰り返しを避けて Plain Ol' Data とするらしい
最新のC++はPODっていう呼び名を廃止したんじゃ無かった?
681:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 273e-ClgD)
23/09/24 19:10:57.73 wtxuVbIF0.net
>>678
概念は廃止した (性質をスタンダードレイアウトとトリビアルに分割して説明している) けど std::is_pod がまだ有るので
「POD がなくなった」と言えるかどうかはちょっと微妙なところ。
682:デフォルトの名無しさん (ワッチョイ 3b93-gtrM)
23/09/24 19:39:45.99 iqjAJ+9f0.net
>>674
無限では無いけど VLIW って聞いた事無いのかw❤