C言語なら俺に聞け 162 at TECH
[2ch|▼Menu]
[前50を表示]
200:デフォルトの名無しさん (ワッチョイ b501-sZSb)
23/12/07 15:23:59.73 3PWWuEZS0.net
Cで全部書いてると大変だと思うよ
機能全部使わんでも良いからC++の方が現実的だよ

201:デフォルトの名無しさん (ワッチョイ 1163-8qzv)
23/12/07 15:31:37.34 HPax2zCP0.net
大変かどうかは、何を作るかによる

202:デフォルトの名無しさん (ワッチョイ b501-sZSb)
23/12/07 15:35:13.86 3PWWuEZS0.net
>>201
>>196を踏まえて大変だと思うよ

203:デフォルトの名無しさん (ワッチョイ 71cf-Gt6m)
23/12/07 16:19:14.82 QzDrEJVi0.net
>>196
自分はUNIX Cプログラミング(いわゆるライオン本)で勉強して、めちゃくちゃ為になったけど、さすがにこれは古すぎる
詳解UNIXプログラミング 第3版は間違いのない名著
ふつうのLinuxプログラミング 第2版はLinux向けだし初心者向け
Cで仕事をするようにはならないかもだけど、「ふつうの~」を理解出来て自分のものにすることがCを学ぶ意義だな

204:デフォルトの名無しさん (ワッチョイ 66ab-XaJC)
23/12/07 16:23:44.20 5AmCTrxW0.net
>グラフィック系のソフトを使う上で不便なところを楽したい
ソフト側でスクリプト等がサポートされてなければ
できることは連続するショートカットを 1プッシュでまとめて出す
キーロガー&再生系とか Joy2Key みたいなキーコード送出系ぐらいしか思い浮かばん

205:はちみつ餃子
23/12/07 17:03:32.49 FWY3NSUg0.net
>>196
具体的に対象になってるソフトの名前は言える?
モダンな設計の Windows 用ソフトが外部から制御するために公開するインターフェイスは
Component Object Model の技術をベースにしていることが多くて、
高度な開発環境の補助を得ながら使う分には便利なんだが
C から使おうとするとすごく面倒くさい。 (出来なくはないけど。)
ソフトが外部に対してインターフェイスを公開するのではなく
制御用のスクリプト言語を内蔵している場合もあるので
C でのプログラミングに詳しくなってもあまり役に立たないこともある。
もしも外部に対してインターフェイスを用意していないなら
ボタン操作のイベントを発生させるとかして制御する (つまりまさに人がする操作を代行させる) ということも可能だが、
それを可能にするような基礎技術というか Windows の動作モデルを理解したいのなら
「猫でもわかるWindowsプログラミング」はそれなりに有用だと思うよ。
私は書籍を読んだことは無いけどウェブ版は Windows がイベントを伝播させて操作させる構造を理解するのに十分な記述はある。
だけど、人が操作するときに Windows の中で何が起こっているのかを
初心者が根本から理解してきちんと使いこなせるまでになるハードルは割と高めなんだよ……。
Power Automate Desktop なら技術の根本を理解せずともそれが出来るようになってるし、
マイクロソフトが直接に提供していてしかも無料という神ソフトなのでオススメした次第。
UWSC とか AutoIt なんかも人気があるね。

206:デフォルトの名無しさん
23/12/07 17:15:58.47 ggcXWkJv0.net
関数のサイズというのは、関数の引数のサイズと同じと考えて良いのでしょうか?
中身に1万行使ってる関数があるとして、その1万行は関数のサイズとは全然関係ないんでしょうか?
構造体はなんとなく変数のバイト数の足し算なんだなってわかるけど、関数がピンとこないです・・・

207:デフォルトの名無しさん
23/12/07 17:18:59.29 Dmh4B19g0.net
プリプロセッサメタプログラミングを覚えてからc言語の開発は楽になったわ
前は同じようなデータ構造でたくさんモジュール作ってたからな

208:はちみつ餃子
23/12/07 17:34:07.95 FWY3NSUg0.net
>>206
関数をデータとして扱うことはないので「大きさ」は定義されない。
C の言語仕様的には「関数はオブジェクトではない」という扱い。
関数に対して呼び出し以外の操作をする方法はない。
関数ポインタで関数の場所を指すということは出来るが、
型システム的にちょっと特殊な扱いになっていて関数ポインタ経由で値を取り出したりも出来ない。
もちろん実際にはなんらかの形でメモリ上には存在するし、
長いプログラムは大きい可能性が高いけど。
実際にどうなってるのかは生成された機械語を見ればいいんでね。

209:デフォルトの名無しさん
23/12/07 17:41:37.50 VEE9aIzl0.net
>>206
質問文が謎すぎて、何を聞きたいのか解釈できない
関数のサイズって言ってるのがビルドしてできた実行ファイルのファイルサイズの事なら、コードの量が多ければ当然サイズは大きくなる

210:デフォルトの名無しさん
23/12/07 17:41:59.31 ggcXWkJv0.net
>>208
ポインタのアクセス条件でメモリのサイズ・型が明確になっていること
とあったので、関数ポインタもサイズや型が明確でないといけないなら
ちゃんとわかっとかないといけないと思ったのですが、関数の扱いはわかってる人から見ても特殊なんですね
ありがとうございます

211:デフォルトの名無しさん
23/12/07 18:04:20.91 Kvlx+aNw0.net
>>206
あなたはどういう文脈で「関数のサイズ」が気になった・話題になったの?プアな組み込みとか?
俺は「関数のサイズ」が気になった・話題になった覚えがない
まぁコンパイル後のコード量かなぁ、関数の行数は大きく関係する
引数はスタックに積むけど「関数のサイズ」とは言わない気がする

212:デフォルトの名無しさん
23/12/07 18:19:55.87 5AmCTrxW0.net
サイズ云々は
インクリメントしたときにどんだけ(何バイト)進むのかが確定してる型でないとポインタにならない
→ じゃ関数ポインタって 関数のサイズ(≒ コンパイル後の機械語化されたバイナリのサイズ) を知ってるのか?
こういう思考の流れかな?

213:デフォルトの名無しさん
23/12/07 19:14:37.61 ggcXWkJv0.net
>>212
まさにそれです!
関数ポインタを配列に格納した時インクリメントしたら何バイト進むのか分かってないといけないのではと

214:デフォルトの名無しさん (ワッチョイ 8a71-yDrh)
23/12/07 19:46:05.37 Avn/NPEq0.net
>>213
その状況で必要になるのは関数のサイズじゃなくて関数ポインタのサイズや
それは他のポインタと同じ、64bitPCなら8バイト

仮定の話として、もし「関数ポインタの配列」ではなく「関数の配列」が作成できるような言語仕様にするなら、関数のサイズも決めないといけなかっただろうね

215:デフォルトの名無しさん (ワッチョイ c55f-tBUZ)
23/12/07 19:58:53.01 ggcXWkJv0.net
>>214
言われてみたらたしかにそうですねなんでポインタなのに普通の変数のように考えてしまってたんだろう・・・

216:デフォルトの名無しさん (ワッチョイ 9140-JrwL)
23/12/07 21:12:50.21 fQltjmnX0.net
void*使えるやん

217:デフォルトの名無しさん (ワッチョイ 65ff-WD8q)
23/12/07 21:34:16.53 NYiehhGh0.net
>>203
ありがとうございます。
>>204
メインのソフト除いて二窓三窓しているので欲しい機能だけ載せたソフトを自作したいなと。
>>205
204へのレスと同じです。
猫でも分かるは説明していない単語が出てきたり、UI作成の手順をトレースできなかったり
わからない人向けではなく分かる人向けの解説のようで個人的には合いませんでした。

218:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 656b-1gjz)
23/12/08 03:48:38.29 tzfGEsy80.net
>>216
関数ポインタは void* に格納可能であると保証してないし、関数ポインタがオブジェクトを指すポインタより大きかったり表現が異なっていたりする環境はある。
出来る環境でなら使うのが悪いわけではないけど移植性は犠牲になる。

219:デフォルトの名無しさん
23/12/08 06:53:57.90 Mdse7dEX0.net
>>218
>関数ポインタは void* に格納可能であると保証してないし
そんなことありえるの?

220:デフォルトの名無しさん
23/12/08 07:01:37.37 g0YSKcXt0.net
near ポインタモデル?だったかの
変数のアドレッシングサイズと
プログラムカウンタのアドレッシングサイズが違うやつ

221:デフォルトの名無しさん (ラクッペペ MM3e-VttM)
23/12/08 07:38:56.35 qsjd2ZYcM.net
ミディアムモデルとかコンパクトモデルとか
まぁ過去の話だわな

222:デフォルトの名無しさん (スップ Sdea-b4p5)
23/12/08 07:57:53.16 m+qJyEe4d.net
関数のサイズは関数のポインタをアドレス順にソートすれば求められる
そのサイズ分を実行可能領域にコピーすれば当然実行もできるよ
dllインジェクションとかでたまに使われる

223:デフォルトの名無しさん (スップ Sd0a-Cw2Y)
23/12/08 08:01:58.55 ClTGg8d6d.net
>>217
業務で使ってるような信頼性のソフトを自作するつもりなのか
一人で?予算は?期間は?
まあ無理だろ
単純にメモリの大きなPCに買い替えればいいんじゃない

224:はちみつ餃子
23/12/08 09:53:49.26 B2zBKDAb0.net
>>217
マイクロソフトが出している公式のチュートリアルは C++ が基礎だけど
考え方としては C でも同じなのでそのへんは適当に読み替えながら……
URLリンク(learn.microsoft.com)
Win32 API は C で使ってもそんなに不便ではないように出来てる。
特に最も基礎のこのへんの例示のコードは (C++ とは書いてあるが) たぶん C としてコンパイルさせても通る。
URLリンク(learn.microsoft.com)
必要な知識の分量は初心者が想像するよりずっと多いと思う。
分かりやすいドキュメントがあったとしても (そして無いこともしばしばある!) 分量は減らないので
分量というハードルをクリアするのは単純に学習量しかないし、
学習量をこなすには時間をかけるしかしょうがない。
やりたいことを自由に出来るようになるまで何も生産しない時間 (業務なら人件費に換算されるだろう) をかける余裕があるの?
というところを不安に思っちゃうわけだよ。
ここは C スレだから C プログラミングを支援したい気持ちはあるがそれがしんどい場合も多いってことも知ってる。
個人事業なら趣味と兼ねるのもアリかもしんないけど。

225:デフォルトの名無しさん
23/12/08 10:13:43.24 20YRNN5F0.net
>>224
Cコンパイラに、C++ -> C トランスレート機能あるの?

226:デフォルトの名無しさん
23/12/08 10:26:10.76 vLixVDpZ0.net
API はほとんど C インターフェースで
C++をベターCとして利用してて C++のクラスの機構はほぼ使ってない
(GDI+ とかAPIがはなっから C++ インターフェースの奴は別)

227:デフォルトの名無しさん
23/12/08 10:34:54.49 faKtyhh20.net
>>218
ねえよ

228:デフォルトの名無しさん
23/12/08 10:50:23.47 k3Bpg+TDa.net
ぶっちゃけGDI+もCから使えるけどね

229:デフォルトの名無しさん
23/12/08 10:53:01.67 vLixVDpZ0.net
>>228
あれ Cインターフェース居るのか 最終的にはCOMになってるんやっけ?

230:デフォルトの名無しさん
23/12/08 11:03:20.25 Mdse7dEX0.net
>>220-221
なんかそういうのあったかも

231:デフォルトの名無しさん
23/12/08 11:04:41.36 VEgZ7oNC0.net
あれはPascalの呼出ではなかったかな

232:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
23/12/08 11:27:29.89 B2zBKDAb0.net
>>229
gdiplus.dll 自体は関数群を置いてあるだけっぽい。
それをラッパークラスで覆って C++ から使いやすくしているだけ。

233:デフォルトの名無しさん
23/12/08 12:03:08.97 7hcazM9a0.net
>>224
兼任ですが個人事業主でお金と時間はそれなりに自由に使えます。
3〜5ヶ月くらいはまとまった時間を取ることも可能です。
公式チュートリアルは参考にはなりますが読みやすいかと言われると微妙ですね。
知識はもちろん身につけたいのですが、そこまでの道筋は他人のコードを読む方がやはり良いのでしょうか?
書籍やサイトなどでアプリの形になるまでのチュートリアルなどは無いのでしょうか。

234:デフォルトの名無しさん
23/12/08 12:17:34.25 k3Bpg+TDa.net
Win32APIというよりそれ以前の
C言語の知識が足りてないんじゃないのかな

235:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
23/12/08 13:05:38.60 B2zBKDAb0.net
>>233
何を学べば良いかすらわからないときのとっかかりとして
他人のコードを読む (何がわかってないかはわかる) ことを勧めたまでで、
良い資料があるならそれを読むにこしたことはないよ。
良い資料がないことも多いという現実はあるけど。

私は公式チュートリアルは良いほうだと思う。
知らないことを書いてあるんだからある程度は読みづらいこともあるのは当たり前のことで、
どれを読んだって似たようなもんじゃないかな。
専門的な内容をスラスラ読めるほうがおかしいでしょ。

236:デフォルトの名無しさん (ワッチョイ 8a80-yDrh)
23/12/08 13:11:55.82 0BufPgxy0.net
さてはオメー
ふらっとC#スレで他人のコードの読み方とか延々聞いてたヤツだな?

237:デフォルトの名無しさん (アウアウウー Sa21-/D3x)
23/12/08 13:15:41.58 o54AonyOa.net
>>206
関数もメモリにロードされるのわからず?
関数はただのマシンコードなんだからここから始まりますよ、というラベルがついてるだけだぞ
そして呼ばれた時はそこへジャンプするだけ
関数ポインタはそのマシンコードのラベルのアドレスを保持しているだけ
ポインタ以前にコンピュータの仕組みからやった方が良さそう
プログラム格納方式とか聞いたことない?

238:デフォルトの名無しさん
23/12/08 13:31:18.44 k3Bpg+TDa.net
>>236
なんちゃらGPTがここでこっそり質問してたら笑う

239:デフォルトの名無しさん
23/12/08 13:36:30.72 SLmq2FCH0.net
>>227
ググってみたらどうも>>218が正しいらしい

240:デフォルトの名無しさん (ワッチョイ 9140-JrwL)
23/12/08 15:42:45.24 faKtyhh20.net
だからねえよ
そいつが勘違いしてるか、使い方が悪いかだろ

241:デフォルトの名無しさん (ワッチョイ 5df0-/D3x)
23/12/08 16:03:05.13 abnVL6FT0.net
>>206
構造体もプログラムからしたらただのメモリ領域の塊だぞ
そこに変数とかいう概念はない
構造体のメンバのオフセットでその位置を指定して書き込んだり読み込んだりするだけ
その時のオフセットの計算に利用されるのが型
変数宣言すると構造体全体サイズのメモリ領域がスタックに確保される
mallocで確保されるとヒープに確保されてそのアドレスが返る
ただそれだけ

242:デフォルトの名無しさん (アウアウウー Sa21-wVFe)
23/12/08 16:08:12.70 k3Bpg+TDa.net
関数を malloc で確保するにはどうすれば良いですか?って言いそう

243:デフォルトの名無しさん (ワッチョイ 5df0-/D3x)
23/12/08 16:21:49.56 abnVL6FT0.net
ちなみにメモリにロードされた関数の領域は現代のOSならば当然ながらアクセス不可能
昔はプログラム領域にアクセスできてその中のコードを動的に書き換えるという荒技をやってた人もいるらしいが

244:デフォルトの名無しさん (ワッチョイ 5df0-/D3x)
23/12/08 16:24:27.68 abnVL6FT0.net
ちなみにメモリ領域にマシンコードを生成してそのメモリ領域のマシンコードを即時実行するということはできる
これをJITという
最近のスクリプト言語ではこの手法がかなり用いられている
やり方は普通にメモリにマシンコードを生成して実行可能属性を付加、各種CPUキャッシュをクリアしてから
関数ポインタにキャストして実行するだけ

245:デフォルトの名無しさん (ワッチョイ 1163-8qzv)
23/12/08 16:31:30.89 VEgZ7oNC0.net
メモリ保護機構が動いて実行できないと思う
16ビットリアルモードOSだったらできたと思うが

246:デフォルトの名無しさん (スッップ Sd0a-GtvU)
23/12/08 16:51:01.76 9cA1ls6dd.net
mprotectとかVirtualProtectで実行可能にすればできる

247:デフォルトの名無しさん (ワッチョイ 1163-8qzv)
23/12/08 17:06:26.65 VEgZ7oNC0.net
しかし、それだと任意のコード実行が自由自在ってことになって・・・
まずくない?

248:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
23/12/08 17:24:04.59 B2zBKDAb0.net
>>247
許可を与えないと実行できないから問題にならないよ。
許可を与えられる前には実行できないんだから
外から注入されたものが自分で許可を出すということは出来ない。

249:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
23/12/08 17:24:33.32 B2zBKDAb0.net
>>247
許可を与えないと実行できないから問題にならないよ。
許可を与えられる前には実行できないんだから
外から注入されたものが自分で許可を出すということは出来ない。

250:デフォルトの名無しさん (ワッチョイ 1163-8qzv)
23/12/08 17:35:36.56 VEgZ7oNC0.net
セキュリティって、身内も信じちゃまずいと思うよ

251:デフォルトの名無しさん (ワッチョイ eaad-snvD)
23/12/08 20:25:30.65 Bb4hYLfH0.net
>>250
その理屈はOSすら信じられずPC使うなって発想にしかならん
信じた者が信じる者は正しい、セキュリティの基本やろ

252:デフォルトの名無しさん (ワッチョイ 1163-8qzv)
23/12/08 20:31:27.89 VEgZ7oNC0.net
企業でもそうなんですか?
管理者が望んでいないプログラムが動かせたら困るでしょう

管理者自身がやるってならちょっと違いますが

253:デフォルトの名無しさん (ワッチョイ eaad-snvD)
23/12/08 20:41:26.51 Bb4hYLfH0.net
>>252
それはつまり「身内じゃないから動かない」なわけで身内も信じちゃまずいにはならんわけよ
>>249ではちみつ先輩が言っているのは「許可されたものは動く」なわけで
管理者が許可したものは動くし許可しなければ動かない

たぶん「許可したプログラムが許可してないコードを実行したらどうすんの?」ってことだと思うけど
そんなプログラムを許可した時点で間違ってる

254:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
23/12/08 20:48:50.56 B2zBKDAb0.net
???
私の理解だと >>247 は「機械語をその場で生成して即時実行するのって危なくないの?」という話だと思ってたんだけど違うの?
そういう理解だったから実行の許可を出す (メモリの実行可能属性を ON にする API を呼び出す) ことなく実行できない、
プログラマの意図しない実行は防がれるということを応えたつもりだったんだけど、運用の話なの???

「身内」ってのは「プログラムの中での機械語生成にミスったらめっちゃ暴走するやん?」という意味かと思ったけど
運用にかかわる人物という意味?

255:デフォルトの名無しさん (ワッチョイ ea79-4utE)
23/12/08 21:24:15.38 8rS6bPls0.net
>>225
C++黎明期はC++トランスレーター付きのCを普通に使わされたもんだよ

256:デフォルトの名無しさん
23/12/09 07:42:54.58 Z2D8kHNzd.net
>>250
それなら自作のプログラムをコンパイルして実行できる環境がすでにまずいだろw
パソコンをゲーム機みたいにしたいのかい
読み書きできるメモリを実行可能属性にできるというだけで
書き込み不可能なシステムメモリに書き込めるようにできるわけではない

257:デフォルトの名無しさん
23/12/09 08:06:29.62 NnZXyC0n0.net
本日のWebは、
・帝乃三姉妹は案外、チョロい。 → 本誌で既読
・レッドブルー → 本誌で既読
・からかい上手の高木さん → ゲッサンで既読
どうにかしてよ、A立。たとえば響5巻無料Webでもとか。
そういえば、高木さんの人の将棋のやつ、マガポケでも終わったね。

258:デフォルトの名無しさん
23/12/09 08:12:11.03 zYR2UmFI0.net
いわゆるroot権限が必要な行為は実行出来ないね
でも、mprotectの説明によると
> 注意
Linux では、(カーネル vsyscall 領域以外の) 任意のプロセスアドレス空間において mprotect ()を呼び出すことが、常に許されている。
となってるから、Node.js(node)とかJITを行うプログラムがユーザー権限で動くのだろう
単に利便性の為だろう

259:デフォルトの名無しさん
23/12/12 20:44:31.35 3wiw5swR0.net
staticグローバル変数を含んだ動的ライブラリーを動的リンクをする場合はグローバル変数が初期化されるのはmain実行前の認識です。
同じプロセス内で再度初期化したい場合は別途初期化の関数を用意してないと不可能でしょうか?
動的ロード(dlopen)を使用した場合はdlcloseして再度dlopenした場合は初期化されますか?

260:デフォルトの名無しさん
23/12/12 21:01:30.67 bMo3JLCK0.net
>>259
やってみれば?

261:デフォルトの名無しさん
23/12/12 21:15:07.81 6C/zc+S/0.net
明示的に初期化処理を書くのが吉

262:デフォルトの名無しさん (ワッチョイ d701-Qbcu)
23/12/12 21:58:30.38 bMo3JLCK0.net
>>259
>動的ロード(dlopen)を使用した場合はdlcloseして再度dlopenした場合は初期化されますか?
Linuxの場合には初期化されたけど環境依存かも?
$ cat hoge.c hage.c
#include <stdio.h>
static int a = 100;
void increament_a () {++ a;}
void print_a () {printf ("%d\n", a);}
#include <dlfcn.h>
typedef void (*Func) ();
int main () {
void *handle;
Func func;
handle = dlopen ("libhoge.so", RTLD_LAZY);
func = (Func)dlsym (handle, "print_a");
(*func) ();
func = (Func)dlsym (handle, "increament_a");
(*func) ();
func = (Func)dlsym (handle, "print_a");
(*func) ();
dlclose (handle);
handle = dlopen ("libhoge.so", RTLD_LAZY);
func = (Func)dlsym (handle, "print_a");
(*func) ();
return 0;
}
$ gcc -shared -fPIC -o libhoge.so hoge.c
$ gcc -o hage hage.c
$ LD_LIBRARY_PATH=.; ./hage
100
101
100

263:デフォルトの名無しさん (ワッチョイ 9f07-h0RM)
23/12/12 22:04:40.47 3wiw5swR0.net
>>261
ですよねぇ
数十万のレガシーコードで、リセットするにはプロセスのキルが前提なんだけど、移植対象のシステムはプロセスをキルできないので、なんとかリセットする方法はないかと…

264:デフォルトの名無しさん (ワッチョイ 17f1-tASO)
23/12/12 22:10:06.55 6C/zc+S/0.net
初期値代入くらい書くだろ普通
処理系によっちゃ不定な値から始まったりするのを防ぐ為にさ

265:デフォルトの名無しさん (ワッチョイ 9f07-h0RM)
23/12/12 22:18:02.98 3wiw5swR0.net
>>262
検証ありがとう
自分の環境でも試してみます

266:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5705-ZkkM)
23/12/12 22:18:21.71 Kje9ktjN0.net
>>259
RTLD_NODELETE フラグで再初期化を止められる(というよりアンロードを妨げるのだけど)ので逆に言えば特に指定しなければ再初期化はされるのが通常動作という解釈でいいと思う。

>>263
わかってるだろうけどレガシーコードをそうやって延命させるとますますワヤになるでよ。

267:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5705-ZkkM)
23/12/12 22:39:58.31 Kje9ktjN0.net
>>264
言語仕様的にはグローバル変数 (記憶域期間が static) が不定になったりはしないことになっている (初期化子がなければゼロで初期化する) のでまともな開発環境があるところではそんな心配はしないよ。
心配が必要になるほど不確かな処理系しかない (または初期化処理も自分でかかなきゃいけないような低レイヤ) 分野もあるのは知ってるけどそれが普通ってことはない。

268:デフォルトの名無しさん (ワッチョイ 9f79-1KRD)
23/12/12 23:05:45.63 I4UWTUvH0.net
>>267
言語仕様ではなく2度目のdlopenの初期化の話なんだからドキュメント化されてないなら何の保証もないでしょ

269:はちみつ餃子
23/12/12 23:55:24.16 skpldDGw0.net
>>268
そういう意味で言ってたのならわかる。
「どうして元から代入する処理を入れてなかった?それが普通だろ?」というニュアンスで受け取ってたから元は dlopen しなおしで対処する想定ではなかったからそういうことを心配してなかった (する必要がなかった) という反応になった。

270:デフォルトの名無しさん (ワッチョイ 37f2-YdMO)
23/12/15 08:29:58.25 a4YsmFKj0.net
板の名前変わった?

271:デフォルトの名無しさん
23/12/17 18:23:47.21 kc2HrTf20.net
ポインタ変数にアドレスを代入するのはシャローコピーと言えると思いますか?
char s[] = "abc";
char *p = s; // shallow copy

272:デフォルトの名無しさん
23/12/17 18:40:34.16 i7ihHaq10.net
果たしてコピーと呼んで良い操作ナノか

273:デフォルトの名無しさん (ワッチョイ 1e5f-DkQ9)
23/12/17 19:27:43.64 mH/O4qym0.net
>>271
言えません

274:デフォルトの名無しさん (ワッチョイ e34d-e8vO)
23/12/17 19:32:39.54 MfQY7qyQ0.net
>>273


275:デフォルトの名無しさん
23/12/17 22:10:52.33 UmzU+/ux0.net
シャローコピーはディープコピーと並べて語るときに区別するための用語であって、
代入は普通に代入と呼ぶのが、コミュニケーションにおいて適切だ、
と、自分が聞かれた場合なら答えるし、レビュー依頼された場合なら指摘します

276:デフォルトの名無しさん
23/12/18 00:59:34.37 Mvyif4Hn0.net
>>275
シャローコピーと言えると思いますか?

277:デフォルトの名無しさん
23/12/18 00:59:46.13 Mvyif4Hn0.net
指摘する前に答えろよ無能

278:デフォルトの名無しさん (ワッチョイ 63c9-/1Gs)
23/12/18 02:31:45.63 BtLCMjh/0.net
シャローコピーでしょ
2つのポインタが同じ内容になってる訳だから
ちなみに、変数定義時の代入文はバインド(束縛する)と言った方が適切だな

279:デフォルトの名無しさん
23/12/18 09:17:00.35 qIC94rZG0.net
>>276
言えません

280:デフォルトの名無しさん
23/12/18 09:38:52.52 RUscEa1Z0.net
シャローコピーの要件からすると
ポインタ変数にアドレスを代入するだけでは成立せずに
リファレンス可能なオブジェクトを指してるポインタでないとまずい気がする
char *p = (char *)0x000; /* アドレスを代入してるぞ */


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

187日前に更新/86 KB
担当:undef