1 名前:デフォルトの名無しさん (ワッチョイ 0f63-sFbk) mailto:sage [2023/04/21(金) 14:05:20.18 ID:rqj2HSDF0.net] !extend:checked:vvvvv:1000:512 (新スレ立ての際上記コマンドを2行書き込んでください) C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C17 www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf C11 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 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ ※前スレ C言語なら俺に聞け 160 https://mevius.5ch.net/test/read.cgi/tech/1672191630/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
379 名前:デフォルトの名無しさん (スッップ Sdd7-EMqx) mailto:sage [2023/08/07(月) 08:18:18.04 ID:SwgOJiZRd.net] 意味不明 メンバーにvoidを含められたとしても参照すればエラーになるはずなので使いようがない (void*はもともと正しいサイズを持つ) unionで似たようなことはできる
380 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0) mailto:sage [2023/08/07(月) 09:11:24.17 ID:U9It/DCQ0.net] >>375 サイズゼロをOKとすると言ってしまうと語弊があると思う。 仕様上の理屈だと「不完全型を指定できる」だし、そうした場合の動作は いくつかの特例で成立していて「長さ 0 の配列」は現れない。 sizeof などでは「フレキシブル配列メンバは無視される」だし、 メンバにアクセスするときは > 置き換えられた配列が要素をもたないとき,それはただ一つの要素をもつのと同じ規則で動作する。 > しかし,その要素にアクセスした場合,又はその要素を一つ越えたポインタを生成した場合, > その動作は未定義とする。 とあって、長さ 1 として扱うけど要素にはアクセスするなという回りくどい言い回しになってる。
381 名前:デフォルトの名無しさん (アウアウウー Sa9d-mBaV) [2023/08/07(月) 10:17:41.09 ID: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) [2023/08/07(月) 10:19:25.16 ID:wl/Lx6N5a.net] >>378 の主張だと typedef struct { int y; char b[]; } B; B *q = (B *)malloc(sizeof(B) - 1 + N); でなければならないのかな
383 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0) mailto:sage [2023/08/07(月) 11:05:26.04 ID:U9It/DCQ0.net] >>379 配列の大きさとして 1 を指定して可変長のように扱うやり方については ちょっと不明瞭なんだが仕様に厳密にいうと準拠してない方法だと考えられている。 https://c-faq.com/struct/structhack.html 配列の大きさが 0 より大きくなければならないということについては 例外を見つけられないのでどこであろうと 0 を指定したら未定義と解釈していいと思う。 GNU C では構造体メンバの最後の配列要素に 0 を指定した場合は C99 でフレキシブル配列メンバにしたときとほぼ同じような扱いになることがドキュメント化されてる。 https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html つまり GNU C では 0 を指定していいわけだが……結果が同じならあえてやる必要もないな。 GNU C でも構造体の最後の要素を除いて配列の大きさに 0 を指定するのは (可能だが) 推奨されていない。 アクセスした結果は未定義なのでなんの役に立つのかようわからん。
384 名前:デフォルトの名無しさん (スッップ Sdd7-EMqx) mailto:sage [2023/08/07(月) 11:36:51.88 ID:SwgOJiZRd.net] >>380 -1する必要ないな 1バイト程度なら余計に取っても害はない
385 名前:デフォルトの名無しさん (ブーイモ MMf3-DyKn) [2023/08/07(月) 14:20:51.17 ID:Xd8Y6/QgM.net] >>382 そういういい加減な見積もりは感心しないな それに、この場合は-sizeof(int) が正解だと思う
386 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-tyL0) mailto:sage [2023/08/07(月) 14:26:13.65 ID:U9It/DCQ0.net] >>382-383 どっちも間違い。 この場合は -1 をしてはいけない。
387 名前:デフォルトの名無しさん (スッップ Sdd7-EMqx) mailto:sage [2023/08/07(月) 20:36:36.16 ID:SwgOJiZRd.net] >>383 いい加減なのではなく無駄なことに神経を使わないのがプログラマの秘訣だ それに他人が見て「この-1はなんだろう?」と無駄な思考時間を取られる可能性を考えたら百害あって一利なしだ >>384 よく見たらデタラメだな すまん
388 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ eb32-oz9p) mailto:sage [2023/08/07(月) 21:06:32.92 ID:+g1cDN8+0.net] >>385 1バイトごときのために余計なことをしないってのは理解できる理屈だが、不必要な1バイトを確保するってのもそれはそれで無駄に考えさせられてしまう感じがする。 やろうとしていることと合致しないコードなわけだから。 害はないが役に立ってもいないということを確信するのはどういう役に立っているのかを見つけるより難しい。
389 名前:デフォルトの名無しさん (ブーイモ MMf3-DyKn) [2023/08/07(月) 21:30:20.59 ID:6YHeZP2fM.net] >>384 ああ、[1]の場合のコード見てたわ、お恥ずかしい。 どっちにしろ[1]の場合もoffsetofかalignof使ってあれこれだね…sizeofじゃ正解ではない…
390 名前:デフォルトの名無しさん (スッップ Sdd7-EMqx) mailto:sage [2023/08/07(月) 22:08:57.23 ID:SwgOJiZRd.net] >>386 どうせmallocは1バイト単位では確保しないので正確なサイズを指定しても構造体一個につき数バイト以上の無駄な領域が確保されることになるし… この構造体を数万個単位で使うような大規模プログラムで極力ムダを避けたいならmallocは使わず最初に大きなリニア領域を確保してそこから切り分けたほうがいいだろう 蛇足だが経験上こういう構造体を使うときはcopy=malloc(sizeof(A) + strlen(src)); strcpy(copy->a,src);のように使うことが多い これなら正確なサイズ指定になる >>387 どっちにしろ君は何か勘違いしてないかな 長ったらしく書くなら-sizeof(int)ではなく-sizeof(char)となる
391 名前:デフォルトの名無しさん (ワッチョイ 7510-WTQk) mailto:sage [2023/08/07(月) 22:21:06.53 ID:zJXXdP4R0.net] どんどん蛇足的になってしまってる気はするが 1バイトの加減算ってのはインクリ・デクリの1命令で演算できるし分岐しないし、 アライメント境界を1バイト超えたらバス幅分-1の無駄ができるかもなので しかも100万個の「3d座標型」とかがその理屈で1個につき7バイト無駄にしたら700万バイトが無駄になるので たかが1バイトと軽視して良いか否かは、状況によります で、はちみつさんのちみつな調査に感謝。蛇足で変な事書いて仕事増やしてごめんなさい
392 名前:デフォルトの名無しさん (ワッチョイ 7510-WTQk) mailto:sage [2023/08/07(月) 22:28:38.60 ID:zJXXdP4R0.net] でも、ワシは(もしそれが有効だと判断したら)公式なC言語仕様上未定義になるとしても、 伝統的にgccとvcが「独自拡張」として許してきた書き方で 書くよ もちろん責任者の許可は伺うけどね ダメと言われたらもちろんやらない
393 名前:デフォルトの名無しさん (ワッチョイ 0547-DyKn) [2023/08/07(月) 22:34:55.16 ID:hZrkDm/B0.net] >>388 ちゃんとサイズ確かめた?そんなに簡単なら[]拡張なんて要らないと思わない?
394 名前:デフォルトの名無しさん (ワッチョイ 7510-WTQk) mailto:sage [2023/08/07(月) 22:36:31.40 ID:zJXXdP4R0.net] で 時には自分が、あるプロジェクトの最高責任者だったりする訳で その環境は特定のカスタムgccの特定バージョンを使うしか選択肢がないから無用な心配は意味がなくて 次のプロジェクトではどうせ全部作り直しだったりする
395 名前:デフォルトの名無しさん (スッップ Sdd7-EMqx) mailto:sage [2023/08/07(月) 22:48:24.16 ID:SwgOJiZRd.net] >>391 何を確かめればいいのかね 正確に書いてくれないと答えようがないな 後半個人的には「要らない」ね 誰かが拡張したら使わないとイケないという「強迫観念」を持ってないか? それは不要なものだよ
396 名前:デフォルトの名無しさん (ワッチョイ 0547-DyKn) [2023/08/07(月) 22:52:47.17 ID:hZrkDm/B0.net] >>393 sizeof(A) != sizeof(int) + sizeof(char)
397 名前:デフォルトの名無しさん (ワッチョイ 0b01-W3Bx) mailto:sage [2023/08/07(月) 23:31:53.12 ID:+QyISSA90.net] >>394 メンバの配置はきっちりつめるのから nバイトアラインで飛び飛びにしてるのもあるしね
398 名前:デフォルトの名無しさん (ワッチョイ 0b01-W3Bx) mailto:sage [2023/08/07(月) 23:39:40.36 ID:+QyISSA90.net] >>395 一番最後のメンバの後ろにパディングが足されるかどうかが焦点になる 足されないならイージーに引き算すりゃいいんだが…
399 名前:デフォルトの名無しさん (スップ Sdcf-YWx9) mailto:sage [2023/08/08(火) 07:56:15.14 ID:QQsYUamCd.net] 引き算とか言ってる馬鹿初めて見たわ
400 名前:デフォルトの名無しさん (ワッチョイ b363-uQHI) mailto:sage [2023/08/08(火) 11:03:00.71 ID:+jW/mKCz0.net] 複素数使って計算すれば馬鹿にされませんよ?
401 名前:デフォルトの名無しさん (スッップ Sdd7-EMqx) mailto:sage [2023/08/08(火) 20:31:55.04 ID:sLVQKk30d.net] >>394 意味はわかったけど 君のコードは可搬性がないわけだね 全部作り直しになるのもうなづける そんなのやってられないw
402 名前:デフォルトの名無しさん (ブーイモ MMf3-DyKn) [2023/08/08(火) 22:38:48.82 ID:MjZ+EK1qM.net] >>399 初歩的な構造体のパッキングルールを理解していたらどうって事無いはずなのだけども…この程度で可読性とか労力とか、そういうレベルの仕事なら使用禁止で良いんじゃないかな。 あと、何か勘違いしているようだけど、[1]だとややこしいけど出来るねって言ってだけで、使うなら[]だよ。c99標準な訳だし。
403 名前:デフォルトの名無しさん (スッップ Sdd7-EMqx) mailto:sage [2023/08/09(水) 00:47:58.70 ID:3Zyc8vU6d.net] 「-sizeof(int) が正解」とは言えないよ環境による パッキングルールを変更できる#pragmaもあるから それは単なる「思い込み」ということになるな
404 名前:デフォルトの名無しさん (ワッチョイ 7510-WTQk) mailto:sage [2023/08/09(水) 06:00:17.77 ID:ye8eZ1o40.net] >>399 あなたが「君」って言ってる相手は少なくとも私と私以外の2人以上なので 何か誤解してると思う ここは匿名掲示板なので、想像した人格じゃなくて内容に反応して欲しい
405 名前:デフォルトの名無しさん (アウアウウー Sa9d-mBaV) [2023/08/09(水) 08:10:28.54 ID:KudoDE9Va.net] 言語仕様知らずに叩いてるんだから無理だろ
406 名前:デフォルトの名無しさん (ワッチョイ 915f-1PqA) [2023/08/11(金) 14:52:37.80 ID:fYiGiCzQ0.net] 質問失礼します Windowsソフトが作りたく基礎を勉強したのですがここからソフトを作る道筋が見えてきません SDKを用い制作するということまではわかったのですがそれについて解説しているサイトがなく詰まっている状態です おすすめのサイトや参考書などあればご教示くさだい
407 名前:デフォルトの名無しさん (スフッ Sd2f-SP/C) mailto:sage [2023/08/11(金) 15:39:30.67 ID:zcS71Tbhd.net] https://dxlib.xsrv.jp/dxfunc.html marupeke296.com/DirectXMain.html
408 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-oz9p) mailto:sage [2023/08/11(金) 15:46:47.16 ID:EnF/lRSf0.net] モダンなフレームワークを使った方が良いが Windows の基礎的な理念というか考え方をかなり平易に 説明したものということだと↓とかが有名だと思う。 www.kumei.ne.jp/c_lang/ ただ、古いので実情に合わない部分はある。 Windows には異なる系統の API があって、 現在では COM をベースにした WinRT がモダン API として 整備されているのでそちらを軸にしても良いかもしれない。
409 名前:デフォルトの名無しさん (ワッチョイ b363-yDkU) mailto:sage [2023/08/11(金) 16:09:36.01 ID:Ib19PZqn0.net] SDK使っての開発は30年位昔のやり方なんではないだろうか
410 名前:デフォルトの名無しさん (ワッチョイ 915f-1PqA) [2023/08/11(金) 16:11:15.49 ID:fYiGiCzQ0.net] >>405 >>406 ありがとうございます 早速進めてみます
411 名前:デフォルトの名無しさん (ワッチョイ 915f-1PqA) [2023/08/11(金) 16:12:13.55 ID:fYiGiCzQ0.net] >>407 基礎しかわからない初心者なものでして、、、
412 名前:デフォルトの名無しさん (ワッチョイ e3ad-c/5M) [2023/08/11(金) 16:53:28.21 ID:j3k4ZyED0.net] Windows のネイティブなプログラム作りには C というよりは C++ の方がよく使われていたと思うので、C++ も覚えた方が作り易くなるような気がする。
413 名前:デフォルトの名無しさん (アウアウウー Sa9d-SP/C) mailto:sage [2023/08/11(金) 17:26:57.28 ID:v1edpQDwa.net] >>407 使えるものは使えば良い 昔の方がシンプル >>410 MFCやATL/WTLやCOMやQtやwxWidgets使いたいならC++だが 生WindowsAPIとSDKやCOMやOpenGLやtcl/tkとか使うならCで充分 むしろCが標準と言っても良いので勉強用ならC
414 名前:デフォルトの名無しさん (ワッチョイ e3ad-c/5M) [2023/08/11(金) 17:52:29.73 ID:j3k4ZyED0.net] なるほど。
415 名前:デフォルトの名無しさん (ワッチョイ b363-yDkU) mailto:sage [2023/08/11(金) 17:54:37.84 ID:Ib19PZqn0.net] 最初残ろは16ビットアプリだったから、 メモリーモデルやアプリが使用可能なリソースサイズなど 結構管理が大変だった記憶がある
416 名前:デフォルトの名無しさん (ワッチョイ b363-yDkU) mailto:sage [2023/08/11(金) 17:55:37.06 ID:Ib19PZqn0.net] 最初のころは なんて変換するんだよ・・・
417 名前:デフォルトの名無しさん (ワッチョイ 87cf-uQHI) mailto:sage [2023/08/11(金) 18:22:42.78 ID:WGGkjKOg0.net] 勉強目的の縛りプレイじゃなければ最初からCじゃなくC++使う方が良いと思うが。
418 名前:デフォルトの名無しさん (ワッチョイ c379-IXit) mailto:sage [2023/08/11(金) 18:30:11.06 ID:I7dwFhkG0.net] いまだにCOM ATL DirectX IDL辺りの定義見るとC知識では手に負えないイメージ C++MFC全盛の時代は本当に嫌いだった C#でそれらに一切関わる必要がなくなってほんと良かったわ
419 名前:デフォルトの名無しさん (ワッチョイ 2f9f-mBaV) mailto:sage [2023/08/11(金) 18:52:16.19 ID:DMm7pQwE0.net] 古いAPIの設計思想が時代に合わないのも多いし、フレッシュな知識を蓄積したほうがいいという意味ではWinRTかな
420 名前:デフォルトの名無しさん (ワッチョイ c379-IXit) mailto:sage [2023/08/11(金) 19:09:53.39 ID:I7dwFhkG0.net] >WinRTかな 名前が終わってる
421 名前:デフォルトの名無しさん (アウアウウー Sa9d-mBaV) [2023/08/11(金) 19:10:12.84 ID:v1edpQDwa.net] DirectXはCでも使える
422 名前:デフォルトの名無しさん (アウアウウー Sa9d-mBaV) [2023/08/11(金) 19:11:09.76 ID:v1edpQDwa.net] MFCは糞だから触るな危険
423 名前:デフォルトの名無しさん (アウアウウー Sa9d-mBaV) [2023/08/11(金) 19:12:06.88 ID:v1edpQDwa.net] WinRTはないな
424 名前:デフォルトの名無しさん (ワッチョイ 0902-MkJ9) mailto:sage [2023/08/11(金) 19:17:33.71 ID:yxSWeMo+0.net] とりあえず現在でWindowsアプリのプログラミングを始めるにあたり、C言語というのはやめるべき 悪いこと言わないからせめてC++にしておけ そして楽に作りたいならC#にしておけ
425 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5b3e-oz9p) mailto:sage [2023/08/11(金) 19:26:30.18 ID:EnF/lRSf0.net] C でやってみれば (やれるだけの知識を身に付ければ) 低レイヤで何が起こっているのかという具体的なメカニズムを理解できるという意味で悪くはないと思う。 ただ、今となっては日常的にやるもんではない。
426 名前:デフォルトの名無しさん (ワッチョイ c379-IXit) mailto:sage [2023/08/11(金) 19:26:45.26 ID:I7dwFhkG0.net] C#で.NETにない事をやろうとするとpnvoke知識が必須だから Cを適当に摘みつつC#でいいんじゃなかろうか C++はもう時間の無駄 時間が無限にあるならどうぞ
427 名前:デフォルトの名無しさん (ワッチョイ b363-yDkU) mailto:sage [2023/08/11(金) 19:35:56.75 ID:Ib19PZqn0.net] Windowsの動作原理を学びたいなら、SDKやMFCは良いと思うよ
428 名前:デフォルトの名無しさん (テテンテンテン MM17-2Tt6) mailto:sage [2023/08/11(金) 19:53:56.21 ID:eb/xI15cM.net] 今のWindowsの最新のUIは全てWinRTの上に構築されている Githubでソース見れば一目瞭然 完全に今のWindowsの基礎となるAPI 無知というのは罪だな
429 名前:デフォルトの名無しさん (ワッチョイ c379-IXit) mailto:sage [2023/08/11(金) 19:58:54.93 ID:I7dwFhkG0.net] まさかWinRTでマウント取ろうとする馬鹿が居ると思わないわ
430 名前:デフォルトの名無しさん (ワッチョイ 0f5f-4nYy) mailto:sage [2023/08/11(金) 20:00:58.18 ID:xXGnDnZp0.net] 黙NG
431 名前:デフォルトの名無しさん (テテンテンテン MM17-2Tt6) mailto:sage [2023/08/11(金) 20:32:13.88 ID:iNvWur52M.net] >>427 無知乙w 正論にキレるの図w 反応しなきゃいいのにw
432 名前:デフォルトの名無しさん (テテンテンテン MM17-2Tt6) mailto:sage [2023/08/11(金) 20:35:15.14 ID:iNvWur52M.net] >>427 WinRT終わってるとか無いわーw
433 名前:デフォルトの名無しさん (ワッチョイ b363-yDkU) mailto:sage [2023/08/11(金) 21:00:42.88 ID:Ib19PZqn0.net] 変なのが湧いてきたね
434 名前:デフォルトの名無しさん (ワッチョイ 6b7a-o30X) mailto:sage [2023/08/11(金) 23:10:37.93 ID:je510yk+0.net] mallocの戻り値は代入先のポインタ型にキャストして使おうと言ってる入門サイトがほとんどです。 これは正しくなくて、キャスト不要が正しいと思いますが達人の皆さんの意見はどうですか。
435 名前:デフォルトの名無しさん (ワッチョイ 87cf-uQHI) mailto:sage [2023/08/11(金) 23:16:31.85 ID:WGGkjKOg0.net] void*はキャストしなきゃ使いようがないだろ
436 名前:蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdd7-38VD) mailto:sage [2023/08/11(金) 23:37:09.78 ID:903ETN7Yd.net] C++ならvoid*からのキャスト必須。C言語ならキャスト不要。
437 名前:デフォルトの名無しさん (ワッチョイ ab36-uQHI) mailto:sage [2023/08/11(金) 23:43:24.35 ID:ayxoKHEe0.net] 現場猫案件。
438 名前:デフォルトの名無しさん (テテンテンテン MMb6-v80P) mailto:sage [2023/08/12(土) 00:37:36.88 ID:dWTISXa3M.net] >>431 害悪はオマエだろ! WinRTが終わったAPIみたいなフェイクを正したんだよ! WinUIとかGithubでソース公開されてんだから、ソース見れば一目瞭然だろ! 2度とフェイクを書き込むなよ!
439 名前:デフォルトの名無しさん (ワッチョイ df9f-DXLR) mailto:sage [2023/08/12(土) 01:20:09.40 ID:PG846lpi0.net] もしかしてWindowsRT(ARM版Windows8)と勘違いしてたりして
440 名前:デフォルトの名無しさん (テテンテンテン MMb6-v80P) mailto:sage [2023/08/12(土) 02:14:36.52 ID:dWTISXa3M.net] WindowsRTは失敗したプロダクトだけど、WinRTは完全にWin32を置き換える為のモダンな基盤APIになった ちなみにWinRTに関する情報は全然出回ってないな(少なくとも日本では) MSも直接使うAPIじゃないと考えてるのかもしれない 実際、WinUI3とかを通して使うことになるのだろう
441 名前:デフォルトの名無しさん (テテンテンテン MMb6-v80P) mailto:sage [2023/08/12(土) 02:21:43.01 ID:dWTISXa3M.net] MSは一時的に、DirectXやActiveXみたいにRTを流行らそうと考えてたふしがある でも、まったく浸透せずにRTに悪いイメージだけが残ったw
442 名前:デフォルトの名無しさん (アウアウウー Sac7-DXLR) [2023/08/12(土) 04:30:30.39 ID:XzrhAFZoa.net] ないわ
443 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6) mailto:sage [2023/08/12(土) 11:53:24.11 ID:BlsfQ4Nv0.net] >>432 型変換とキャストを混同して説明していることがそれなりにある。 それとは別に不要でもキャストすべきかどうかというのは習慣の問題。 人にとっての読みやすさは仕様上の要・不用とは別の話なので明瞭な答えはない。
444 名前:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+) mailto:sage [2023/08/12(土) 12:15:02.77 ID:ufIhf+igM.net] UWPのWinRTでファイルアクセスなどに制約がある場合があって APIレベルでセキュリティ上の制限があるのかと思ってたが間違いで 他のプラットフォームで呼ぶと普通に色々アクセス出来てしまう
445 名前:デフォルトの名無しさん (ワッチョイ 7679-BXQ2) mailto:sage [2023/08/12(土) 14:04:01.34 ID:DbL0Mu2X0.net] そろそろ他所でやってくれんか 普段Windowsには世話になってるけどUWPの存在には憎しみさえ感じる
446 名前:デフォルトの名無しさん (ワッチョイ 9aad-eQmn) [2023/08/12(土) 14:18:40.69 ID:2oorck2f0.net] >>441 cast という単語には型変換の意味があると思うが? で、実際にプログラミング言語では型が変換されるから、型変換で良いんじゃないの?
447 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e) mailto:sage [2023/08/12(土) 14:53:08.69 ID:BlsfQ4Nv0.net] >>444 Cの仕様上の意味合いとしてはキャストという用語は構文 (記法) を指している。 括弧の中に型を書いたやつを式の前に置く、あの構文のことね。 キャストを使わない形でも (暗黙の) 型変換が起こることはあるし、 型を変えないキャストも出来る。 型変換とキャストは同一ではないよ。 カジュアルな場合では文脈でわかるし、ときには同一視してもいいこともあるけど >>442 の文脈では 構文のことを言っているのか型変換のことを言っているのかで事情が変わってくるので 厳密でなくても良いとは言えない。
448 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e) mailto:sage [2023/08/12(土) 14:54:12.64 ID:BlsfQ4Nv0.net] >>445 アンカーを間違えた。 >>442 じゃなくて >>432 ね。
449 名前:デフォルトの名無しさん (ワッチョイ 9701-DXLR) [2023/08/12(土) 20:19:50.46 ID:eS+ePZlf0.net] 「毎日出社したい」わずか3.8% リモートワーク経験者に聞いた 学研ホールディングスのグループ会社であるベンド(東京都千代田区)は、リモートワーク 経験者を対象に「リモートワークに関するアンケート」を実施した。その結果、半数近くの 人が「週5(フルリモート)」(44.4%)をリモートワークの理想の頻度だと考えていること が分かった。 次いで「週3〜4」(30.7%)、「週1〜2」(20.1%)と続き、96.2%の人がリモートワークの 継続を希望していることが分かった。毎日出社を希望する人は、わずか3.8%だった。 出社を希望しない理由は「通勤にかかる時間や体力がもったいない」「子どもの都合で、 リモートワークのほうが仕事と家庭のバランスが取りやすい」「職場の人と毎日顔を合わせる のはさすがにつらい」といった意見が寄せられた。 一方、「コミュニケーションが取りにくくなる」「出社しないとできない業務がある」 「たまには出社もいい気分転換になる」など、完全リモートだと不都合だという声もあった。
450 名前:デフォルトの名無しさん (ワッチョイ b67a-TNXw) mailto:sage [2023/08/12(土) 22:15:14.90 ID:jlvbpae70.net] >>445 冗長 int *p = (int *)malloc(400); 簡潔 int *p = malloc(400); ということを言うつもりで書きました。
451 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6) mailto:sage [2023/08/12(土) 22:54:57.04 ID:BlsfQ4Nv0.net] >>448 仕様上は暗黙の型変換が適用される場面。 キャストを書かなくても型変換はされることが保証される。 ただ、 >>434 で言及されているように C++ ではキャスト必須なのでそれに合わせる (ことで C++ としてもコンパイルできるようにする) ほうが好ましいという考え方もある。 これが暗黙に変換できてしまうのは良い仕様とは言えないのは確かだからより厳しいルールの C++ に合わせるのも一応の合理性はある。 誤解の余地もない (と思う) ので私はキャストを書かない派なのだけど、以前にツイッターかどこかのアンケートで見た感じでは拮抗してて、どちらが優勢というわけでもなかった。
452 名前:デフォルトの名無しさん (アウアウウー Sac7-DXLR) [2023/08/13(日) 11:59:59.00 ID:mxfdwtiAa.net] int *p = (int *)malloc(400); 冗長ではないよ
453 名前:デフォルトの名無しさん (ワッチョイ 6301-vKG+) mailto:sage [2023/08/13(日) 22:00:40.70 ID:37XsjItY0.net] C++でnewではなくmallocをあえて使う理由って何かあるのかな?
454 名前:デフォルトの名無しさん (ワッチョイ b67a-TNXw) mailto:sage [2023/08/13(日) 23:29:06.42 ID:oUeYwTCa0.net] >>449 くわしくありがとう。そういう見方もあるのですね。 アンケートで拮抗というのはわかる気がしていて、その理由が入門書やサイトにあるのではと思うのです。 >>450 はなぜそう思いますか。
455 名前:デフォルトの名無しさん (ワッチョイ 7679-BXQ2) mailto:sage [2023/08/14(月) 00:14:53.81 ID:VnUPK1/b0.net] void *が無かった頃はmallocもintやchar *を返していた時代がある 処理系渡り歩いてきた老害ほどmallocでキャストしたがるだけだろ 大した話でも何でもない
456 名前:デフォルトの名無しさん (ワッチョイ 9aad-eQmn) [2023/08/14(月) 00:21:55.24 ID:B5PklEie0.net] 可読性を上げるためでもあるのでは?
457 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e) mailto:sage [2023/08/14(月) 00:30:57.60 ID:sy90BXR10.net] >>454 可読性が上がるだろうか? 少なくとも >>448 のように変数の型がその行に書いてあるようなケースでは 誤読の余地は全然ないように見えるので同じ情報を重複して書く意味が感じられない。
458 名前:デフォルトの名無しさん (ワッチョイ 9aad-eQmn) [2023/08/14(月) 00:38:36.06 ID:B5PklEie0.net] まあ確かに型がすぐ分かる場合は意味ないな。
459 名前:デフォルトの名無しさん (ワッチョイ 4e46-8Neb) [2023/08/14(月) 09:03:40.40 ID:6kZXa4aF0.net] >>448 組織(会社とか)のコードだと、どんな水準の人がメンテするか分からないので、冗長を採るかな。 > 冗長 int *p = (int *)malloc(400);
460 名前:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+) mailto:sage [2023/08/14(月) 09:28:55.46 ID:4XD1xMqSM.net] この話が一番冗長だtoomou kanjidenakunatta
461 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-Z7S6) mailto:sage [2023/08/14(月) 10:36:19.28 ID:sy90BXR10.net] >>452 K&R の第二版 (日本語版) でもキャストは必要だと書かれているんだよなあ……。 本の最後に仕様をまとめているところでは暗黙に変換されることも言及されているのでおそらく改定漏れなだけなんだろうけど。 かなり長く定番の入門書だったのでこの本の影響も大きいと思う。
462 名前:デフォルトの名無しさん (ワッチョイ 4e63-GMkv) mailto:sage [2023/08/14(月) 11:55:47.09 ID:s6PscRDz0.net] 暗黙に変換って、プログラム書いてる本人の意図通りなら良いんだけど 意図と違った変換するとやっかいだな
463 名前:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+) mailto:sage [2023/08/14(月) 13:20:28.84 ID:JlnnwsPwM.net] ここがC言語スレだと思い出して欲しい
464 名前:デフォルトの名無しさん (スップ Sd5a-f0d0) mailto:sage [2023/08/14(月) 13:23:53.19 ID:4NX3l0Vmd.net] Cの暗黙の型変換なんて高が知れてるだろ
465 名前:デフォルトの名無しさん (テテンテンテン MMb6-v80P) mailto:sage [2023/08/14(月) 14:02:18.88 ID:XhXbjspZM.net] 昔のmalloc()ってchar*とか返してた気がするな 最初っからvoid*って有ったのだろうか?
466 名前:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+) mailto:sage [2023/08/14(月) 14:16:28.68 ID:JlnnwsPwM.net] すべての戻り値はintである ポインタかどうかは書いた人間がが判断する
467 名前:デフォルトの名無しさん (ワッチョイ 4e63-GMkv) mailto:sage [2023/08/14(月) 15:03:08.99 ID:s6PscRDz0.net] (void)main(void)
468 名前:蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdba-F9Mj) mailto:sage [2023/08/14(月) 15:17:16.05 ID:MULxLxBHd.net] >>464 AIが混乱するようなことを言わないでほしいも
469 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e) mailto:sage [2023/08/14(月) 16:43:05.60 ID:sy90BXR10.net] >>464 それ LLP64 でも同じこと言えるの?
470 名前:デフォルトの名無しさん (ワッチョイ 4ecf-vKG+) mailto:sage [2023/08/14(月) 17:46:44.25 ID:3TQy/ZGT0.net] >>464 それはB言語のようなミニ言語やBLISSやアセンブラのようなシステム記述言語でよくあるやつだな。 そういう血塗られたルーツを持つCが普及してしまったのがこの大災害の原因ではあるが。
471 名前:デフォルトの名無しさん (ワッチョイ 4e63-GMkv) mailto:sage [2023/08/14(月) 18:03:50.08 ID:s6PscRDz0.net] 今は血を流さずに戦争ができます
472 名前:デフォルトの名無しさん (ワッチョイ 9710-8Nw3) mailto:sage [2023/08/14(月) 18:07:41.52 ID:WVbdJjmk0.net] ポインタじゃない構造体の代入はメモリコピーで、intじゃないよね
473 名前:デフォルトの名無しさん (ワッチョイ 9710-8Nw3) mailto:sage [2023/08/14(月) 18:22:17.15 ID:WVbdJjmk0.net] >>467 それですよ。 あと、実際の案件で メモリバスが32より大きい環境でも、64ビット全部が使われてるとは限らないです。 あるビットにこう入ってたら40ビットのxxメモリ空間を指し、あるビットにこう入ってたら48ビットのyy空間を指す、とか ポインタ値にも複数の種類がある(ように設計する事がある) 何が言いたいかというと全部intだなんてのは、分かってない証拠
474 名前:デフォルトの名無しさん (ワッチョイ 4e63-GMkv) mailto:sage [2023/08/14(月) 18:39:04.59 ID:s6PscRDz0.net] 可変長のポインタって、すごいな
475 名前:デフォルトの名無しさん (オイコラミネオ MMe3-vKG+) mailto:sage [2023/08/14(月) 18:42:29.14 ID:JlnnwsPwM.net] 昔は関数から戻り値として構造体が返せなかった MSか勝手に実装した
476 名前:デフォルトの名無しさん (ワッチョイ 4e63-GMkv) mailto:sage [2023/08/14(月) 18:47:31.20 ID:s6PscRDz0.net] 返せなくても困らなかったけど 例えばポインタで返しているAPIはいくつかあるだろうし 呼出時に渡す構造体で返すやり方も普通にある(こちらの方が多いかも)
477 名前:デフォルトの名無しさん (ワッチョイ b67a-TNXw) mailto:sage [2023/08/14(月) 21:33:10.14 ID:VCWTWKLb0.net] 8051風のMCUにはメモリ空間が複数種類あるものがあって、どのメモリ空間をポイントするかによってポインタのサイズが1byteか2byteかに分かれるというのがありました。
478 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7f3e-po/e) mailto:sage [2023/08/14(月) 22:08:33.35 ID:sy90BXR10.net] >>473 K&R の初版 (1978 年) の段階では 構造体を関数の返却値に出来る仕様ではなかったのは確かだが その制限は将来的に削除されるとも書いてある。 構造体を返せるようにするのは設計者の計画の内だ。 最初に実装したのが誰なのかは知らんが「勝手に」とは言えないだろう。
479 名前:デフォルトの名無しさん (ワッチョイ 4e63-GMkv) mailto:sage [2023/08/14(月) 22:12:43.60 ID:s6PscRDz0.net] えてして実装が先で、規格になるのは後 というのはよくある話