[過去ログ] C言語なら俺に聞け 162 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
153: はちみつ餃子◆8X2XSCHEME (ワッチョイ 5f3e-d+hN) 2023/12/01(金)00:42 ID:U5xjJXbM0(1/3) AAS
sizeof の結果の型は size_t で、
size_t は符号なし整数というだけしか規定されていない処理系定義なんだけど
unsigned int や unsigned long int の別名として定義されていることが多いせいで
それをあてにした形で説明している資料は割とある。
154: (ワッチョイ 5fad-F3mB) 2023/12/01(金)02:30 ID:oKQshtme0(1) AAS
>>145
> a[]のアドレスが欲しければ&aと書くだけでいいのに
俺はそっちのほうがややこしいと思うけどな
むしろ*(a+10) を [] で表現するなら *a[10] みたいな書き方になるほうが、理解する上ではややこしくなかったかなとは思うけど(使う上では不便)
[] って箱(マス)に見えるし、まあ直接箱の中身を示すものなのだなって覚えたけど
155: (ワッチョイ a76b-onFz) 2023/12/01(金)05:52 ID:sCbOzpGc0(1/2) AAS
誰が誰なのかよく分からんけど、キッズが来て荒れた、という話ですか
インデックスアドレッシングを [ ] 記号に当てただけと思うけど、そんなに難しいかね
156: (ワッチョイ a76b-onFz) 2023/12/01(金)05:55 ID:sCbOzpGc0(2/2) AAS
型の話かと思ってたら、いつの間にか 入門者がポインタを理解できない話 になった印象
157(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 5f3e-d+hN) 2023/12/01(金)14:51 ID:U5xjJXbM0(2/3) AAS
>>145
配列 a に &a としたときに得られるのは配列を指すポインタであって配列の先頭要素を指すポインタではない。
(型が違う。 アドレスを数値として見たら同じはずだけど。)
多次元配列にアクセスするとき (添字演算子を重ねて適用するとき) に仕様の通りに解釈していくと配列と先頭要素が都合よく切り替わって最終的にポインタ演算になるのが実に上手いこと出来てる。
配列の要素にアクセスするときの記法を現状のような形にするという前提でならなんだかんだでよく出来ている。
配列に & を付けたら配列を指すポインタになるというのは例外的ではない普通の挙動だからそこに別の意味を割り当てるならそれもやっぱり変則的なややこしい挙動ってことになってしまうよ。
158(1): (ワッチョイ 7f6a-l0Ve) 2023/12/01(金)19:03 ID:Ga+233FE0(1) AAS
>>157
ポインタ完全制覇でよーく理解できました。
20年以上やってきて配列へのポインタは一度だけ出番がありました。
159: はちみつ餃子◆8X2XSCHEME (ワッチョイ 5f3e-d+hN) 2023/12/01(金)19:23 ID:U5xjJXbM0(3/3) AAS
>>158
プログラマが直接的に書く機会はあんまりないだろうけど、
暗黙には頻繁に表れていてこのルールがないと上手いこと機能しないって話。
#include <stdio.h>
int main(void) {
int foo[2][3] = {
{1, 2, 3},
{4, 5, 6}};
printf("%d\n", foo[1][2]); // ふたつの座標みたいに見えるけど
// 式を各段階に分解すると……
省5
160(6): (ワッチョイ 65d3-WD8q) 2023/12/05(火)07:30 ID:72+QzLj/0(1/2) AAS
c言語初心者です
質問させてください
FILE *fpという宣言の「FILE」にどういった役割があるのでしょうか
*fpは関数によってどこを読み書きするかを指定するためにアドレスを格納することは分かるのですが
それならばint型のポインタで良いような気もします
プログラムを書く上でどうでもいい内容なのですが教えていただければ今日の寝付きが良くなる気がします
161: (ワッチョイ eaad-snvD) 2023/12/05(火)07:53 ID:kkEdYaZP0(1) AAS
>>160
stdio.h の中身を見れば FILE がどう宣言されているか分かるのでは?
162: (スフッ Sd0a-Oc+E) 2023/12/05(火)08:16 ID:64vzQPx0d(1) AAS
>>160 FILE構造体っていうことだけは、どの本にも書いてある。
163(1): (ワッチョイ 66d6-8IwF) 2023/12/05(火)08:26 ID:Sjl8/rh40(1) AAS
実際UNIXのfile descriptorはintでWindowsのファイルハンドルHANDLEはvoid*だ。
こいつらはシステムコールによってカーネルモードで操作されるから中身が完全に見えないようになってる
それとは違って標準Cライブラリはユーザモードで動作するから
処理系依存で中身を操作してもいいように作ったのかもしれない
164: (スッップ Sd0a-Cw2Y) 2023/12/05(火)08:33 ID:GHHZLCc/d(1/2) AAS
>>160
確かに構造体の中身を使わないかぎり何のポインタでもいいんだけど
間違えて他のタイプへのポインタと混同した時にエラーが出るから気づきやすい
それはけっこう重要だよ
165(2): (ワッチョイ 65d3-WD8q) 2023/12/05(火)09:00 ID:72+QzLj/0(2/2) AAS
>>160です
普通の構造体の宣言とは異なり要素の記述はありませんが
「FILE」とは「ファイル構造体を使うよ」と宣言しているという意味で
そうしてstdio.h上のFILE構造体の要素に開いたファイルの情報が代入されていくということでしょうか?
「FILE」を記述せずにfopenで開こうとした場合構造体メンバのptrに代入されている数値が使えないのでfopenから戻り値が受け取れず正しく*fpに座標が代入されない
みたいな
そして開くだけならfopenでも開けてしまうとか
166: はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-By03) 2023/12/05(火)10:08 ID:z5PiblaY0(1/2) AAS
言語仕様的に見れば FILE はストリームを制御するのに十分な情報が入ったオブジェクト型であることと、
アドレス (FILE 型のオブジェクトがある場所) に意味がある場合もあるから
オブジェクトをコピーして機能するとは限らないという程度のことしか書いてない。
FILE にどのような情報が格納されているのかといったことや
詳細な仕組みはホスト環境の事情に合わせて処理系の裁量で決めてよい部分なので、
具体的にどうなっているのかは各実行環境・開発環境ごとに違う。
特に環境依存の細かい部分に立ち入って制御をしたい事情があるのでない限りは
fopen が「なんらかの方法」で FILE 構造体を構築してそのアドレスを返すものであるということだけ知っていれば
普通のプログラマにとって十分なように出来ている。
167: (ワッチョイ 8ac1-Vvnv) 2023/12/05(火)10:36 ID:NYBtRI3Y0(1) AAS
>>165
3行目から4行目の理解で大体あってるよ
それ以降は何言ってんのか分かんねーから全部アタマの中から破棄していいよ
正確にはFILEってのは抽象データ型であんたは構造体って言ってるけど構造体かどうかは分からんし使う側は知る必要もない
提供者がわざわざ抽象型にして使い手側の負荷を下げてくれるとこを中身がどうとか役割がどうとかさぐんのは筋が悪いんだよ
使えって言われてんだから何も考えずにだまって使えばいいよ
168: (ワッチョイ 1163-8qzv) 2023/12/05(火)11:08 ID:h96fo3nj0(1) AAS
FILE構造体ってOS毎に変わるし、コンパイラ実装でも又変わってた様な気がする
169: (ワッチョイ 71cf-L1V1) 2023/12/05(火)12:35 ID:4VzMioa/0(1/2) AAS
FILE*経由だとバッファリングされるから、バッファーのポインタとそこに含まれてるデータサイズも含んでいるだろう
そもそもファイルのシーク位置も含まれてる
まとめると
・ファイルディスクリプターやファイルハンドル
・シーク位置
・バッファー(ポインタ、サイズ、含まれてるデータサイズ)
となるかね
170: (アウアウウー Sa21-wVFe) 2023/12/05(火)15:39 ID:QJai9ytva(1) AAS
>>160
void *hoge = (void *)fopen("hoge", "wb");
fprintf((FILE *)hoge, "hoge\n");
fclose((FILE *)hoge);
171: (ワッチョイ 71cf-L1V1) 2023/12/05(火)17:31 ID:4VzMioa/0(2/2) AAS
FILE*互換の自前のストリームを実装できれば便利なんだがなぁ
継承が無いから、構造体に自前の関数をセットして、何らかの登録関数に渡す感じになるだろう
172: (JP 0Hf9-8IwF) 2023/12/05(火)17:40 ID:oSX0a7FoH(1) AAS
fopencookieとかfunopen
173: はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-By03) 2023/12/05(火)17:48 ID:z5PiblaY0(2/2) AAS
パイプのインターフェイスをストリームとして開くことが出来るから
適当なスレッドを開いてパイプの受け取り口で受け取った情報を好きなように加工するようにすれば、
パイプに書込む側ではストリームに書き込んだらいい感じに処理してくれるように見える。
というのを Windows でやっているのをどっかで見た。
174: (スッップ Sd0a-Cw2Y) 2023/12/05(火)18:11 ID:GHHZLCc/d(2/2) AAS
>>165
開くだけで何が楽しいんだ?
読み取りも書き込みもクローズもできない
exitで自動的にクローズはされるけど…
>>163
HANDLEはポインタではなくただの整理券番号で実体は整数値だ
しかしWindows SDKでは「架空の構造体へのポインタ」として定義されているので例えばウィンドウハンドルをファイルハンドルと混同するとType mismatchエラーになる
これはかなり有用な仕組みでC言語が仕様に組み込んでほしいくらい
175(1): (ワッチョイ 5e5f-Vvnv) 2023/12/05(火)23:44 ID:9c748LJ40(1) AAS
ソケットディスクリプタってファイルポインタに転生できる?
176: (ワッチョイ 8a26-yDrh) 2023/12/05(火)23:48 ID:4UYj/sQ80(1) AAS
>>175
fdopen
177: (ワッチョイ 65a4-WD8q) 2023/12/06(水)08:34 ID:hjosWl9s0(1) AAS
>>160です
皆さん大変参考になりました
今日はよく眠れそうです
178: (スフッ Sd0a-nvfk) 2023/12/06(水)12:07 ID:dR0trs3yd(1) AAS
対策このままなら再発しそうね
外部リンク:japan.zdnet.com
179: (ワッチョイ 1163-8qzv) 2023/12/06(水)16:09 ID:JLoh059d0(1) AAS
仕事なくなったら困る人が大勢いるし
180(1): (ワッチョイ 7d01-tBUZ) 2023/12/06(水)20:24 ID:tBrgYtLt0(1) AAS
free(NULL) は許されるのに
fclose(NULL) は許されないんよな
181: (アウアウウー Sa21-VttM) 2023/12/06(水)21:05 ID:gHtrZlY5a(1) AAS
>>180
さらにfflush(NULL)は許されるという一貫性の無さ
182: はちみつ餃子◆8X2XSCHEME (ワッチョイ 656a-1gjz) 2023/12/06(水)21:19 ID:+44Bjs460(1) AAS
fflush の場合は全てのストリームを対象とするという特別なフラグとして NULL を活用しているので無効なポインタとしての NULL とは事情が違う気がするね。
それにしたってNULL を多義的に使っているという意味では一貫性はないけど。
183: (ワッチョイ 9140-JrwL) 2023/12/06(水)21:23 ID:bAVe0RWP0(1) AAS
free(NULL)は、おバカなマの為に特別に許容したんだろ
184(2): (ワッチョイ 65a4-WD8q) 2023/12/07(木)02:17 ID:NYiehhGh0(1/4) AAS
以前ネットでおすすめされていた「苦しんで学ぶc言語」の内容をしっかり理解する段階まできたのですが、次は何をすれば良いのでしょう。
猫でも分かるプログラミングも読んでみたのですが仕様が古すぎてトレースできないのと、私には作者さんの文章の作りが合わず困っています。
まずは簡単なソフトを作りながら学べればと思います。
入門書の次に読めるような本と、そこからアプリケーション開発のイロハが分かる本やサイトを教えていただけないでしょうか。
185: (ワッチョイ ea79-4utE) 2023/12/07(木)07:17 ID:Y9iRVwaI0(1) AAS
↑みたいなのって目的ないのかね
今後C言語で特に何かやりたい事がないなら別に何もする必要ないよ
186(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 656a-1gjz) 2023/12/07(木)08:27 ID:wi0prF2i0(1) AAS
Cで現実的なアプリケーションを作るならホスト環境 (OS など) の事情は無視できないし、具体的な目標なく道筋は決まらないと私も思う。
何の情報もない他人に何かを勧めるというのはしづらい。
目標があるならその分野の既存のコードを「読む」という体験はためになるかもしれない。
実際のコードを見て意味がわからない部分があれば学習が必要な部分だというとっかかりになる。
187(1): (ワッチョイ 6646-wNAC) 2023/12/07(木)09:28 ID:++8K4NmJ0(1) AAS
>>184
> 「苦しんで学ぶc言語」
というのは、これ↓ ?
外部リンク[html]:9cguide.appspot.com
> 苦しんで覚えるC言語
であれば文法解説のようなので、ファイル操作をしてはどう?
cat コマンドを作るとか。
188(1): (ワッチョイ 65ff-WD8q) 2023/12/07(木)10:04 ID:NYiehhGh0(2/4) AAS
>>186
Windowsソフトを制作して当方の業務を効率化できればと考えています。
「既存コード」を読むですか、なんだか英語学酒のようで気が滅入りますね>
>>187
失礼しました。「覚える」でしたか。
ファイル操作がどこまでを指すのかわかりませんが高低水準入出力はすでに可能です。
189: (ラクッペペ MM3e-8Sbt) 2023/12/07(木)10:23 ID:aHfAXzyRM(1) AAS
業務効率の向上が目的ならC言語は回り道すぎる
他の言語選んだ方がいい気がする
190: (ワッチョイ 1163-8qzv) 2023/12/07(木)10:31 ID:HPax2zCP0(1/2) AAS
ファイル操作の課題出してあげようか
指定した二つのDirにあるファイルを同期させる
単にコピーするのではなく、タイムスタンプの新しいものだけをコピーする
新しいSubdirできていたら、中味があればDirごとコピーする
とりあえずは、新しく作られてファイルの同期まで、
削除については考慮しなくて良い
191(1): (ワッチョイ b501-sZSb) 2023/12/07(木)10:39 ID:3PWWuEZS0(1/3) AAS
>>188
>Windowsソフトを制作して当方の業務を効率化できればと考えています。
早速これに取り組んだ方が良い
実用するものを作る方がモチベになる
192(1): (スプッッ Sdea-GtvU) 2023/12/07(木)11:21 ID:6u4iKMo7d(1) AAS
C言語のスレッドで言う事じゃないがC言語以外の生産性の高い言語を学んだほうがよさそう
193(1): (ワッチョイ 71cf-Gt6m) 2023/12/07(木)11:56 ID:QzDrEJVi0(1/2) AAS
>>184
CはOSのAPIを直接叩けることがメリットでもあるので、Linuxのプログラミング本を読んでコード書いてみるのが一番良いだろう
マルチプロセス、マルチスレッド、ソケットとか覚えるべき事は沢山ある
Cでやれば根本から理解出来る
194(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-1gjz) 2023/12/07(木)12:04 ID:FWY3NSUg0(1/3) AAS
(事務作業などの?) 業務効率化が目的なら Power Automate Desktop の活用を考えた方がいいと思う。
効率化の最初の段階は解決すべき問題を見つけることで、これをきちんと一度で洗い出すのは大抵の場合に出来ない。
雑に作って運用しながら改善するという手順をとるのがのぞましいが、 C で書くとそういう柔軟な体制がとりづらい。
195: (ワッチョイ 9a2b-ntmn) 2023/12/07(木)13:30 ID:zYUoekf60(1) AAS
「なにを作りたいのかが大事」ってのは良く分かるんだけど、普通の人が作りたいものって大抵Cじゃない方が…ってなっちゃうんだよな
196(3): (ワッチョイ 65ff-WD8q) 2023/12/07(木)13:42 ID:NYiehhGh0(3/4) AAS
>>90
そういった事もできるんですねー
>>191
取り組みたいのは山々なのですがuiの作り方からわからないので入手できるバーションで解説されている書籍が欲しいところです。
>>192
基礎を大切にしたいのでcをはじめのうちは使っていきたいと考えています。
>>193
仰る通り根本を理解できればと思います。Linux本ですね。可能であれば簡単なものでおすすめを添えていただけないでしょうか。
>>194
グラフィック系のソフトを使う上で不便なところを楽したい、と言いますか
省2
197: (ワッチョイ 3514-I4o8) 2023/12/07(木)13:42 ID:P4JhXVL60(1) AAS
WindowsアプリならCじゃくて、せめてC++にしておけ
198: (ワッチョイ 6aa0-0M9k) 2023/12/07(木)13:43 ID:n9+uyfFo0(1) AAS
楽したい奴にはCは向かない
199: (アウアウウー Sa21-wVFe) 2023/12/07(木)14:18 ID:wNl2TimYa(1) AAS
C++は変な癖がつく
Cの方が絶対良い
200: (ワッチョイ b501-sZSb) 2023/12/07(木)15:23 ID:3PWWuEZS0(2/3) AAS
Cで全部書いてると大変だと思うよ
機能全部使わんでも良いからC++の方が現実的だよ
201(1): (ワッチョイ 1163-8qzv) 2023/12/07(木)15:31 ID:HPax2zCP0(2/2) AAS
大変かどうかは、何を作るかによる
202: (ワッチョイ b501-sZSb) 2023/12/07(木)15:35 ID:3PWWuEZS0(3/3) AAS
>>201
>>196を踏まえて大変だと思うよ
203(1): (ワッチョイ 71cf-Gt6m) 2023/12/07(木)16:19 ID:QzDrEJVi0(2/2) AAS
>>196
自分はUNIX Cプログラミング(いわゆるライオン本)で勉強して、めちゃくちゃ為になったけど、さすがにこれは古すぎる
詳解UNIXプログラミング 第3版は間違いのない名著
ふつうのLinuxプログラミング 第2版はLinux向けだし初心者向け
Cで仕事をするようにはならないかもだけど、「ふつうの~」を理解出来て自分のものにすることがCを学ぶ意義だな
204(1): (ワッチョイ 66ab-XaJC) 2023/12/07(木)16:23 ID:5AmCTrxW0(1/2) AAS
>グラフィック系のソフトを使う上で不便なところを楽したい
ソフト側でスクリプト等がサポートされてなければ
できることは連続するショートカットを 1プッシュでまとめて出す
キーロガー&再生系とか Joy2Key みたいなキーコード送出系ぐらいしか思い浮かばん
205(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-By03) 2023/12/07(木)17:03 ID:FWY3NSUg0(2/3) AAS
>>196
具体的に対象になってるソフトの名前は言える?
モダンな設計の Windows 用ソフトが外部から制御するために公開するインターフェイスは
Component Object Model の技術をベースにしていることが多くて、
高度な開発環境の補助を得ながら使う分には便利なんだが
C から使おうとするとすごく面倒くさい。 (出来なくはないけど。)
ソフトが外部に対してインターフェイスを公開するのではなく
制御用のスクリプト言語を内蔵している場合もあるので
C でのプログラミングに詳しくなってもあまり役に立たないこともある。
もしも外部に対してインターフェイスを用意していないなら
省9
206(5): (ワッチョイ c55f-tBUZ) 2023/12/07(木)17:15 ID:ggcXWkJv0(1/4) AAS
関数のサイズというのは、関数の引数のサイズと同じと考えて良いのでしょうか?
中身に1万行使ってる関数があるとして、その1万行は関数のサイズとは全然関係ないんでしょうか?
構造体はなんとなく変数のバイト数の足し算なんだなってわかるけど、関数がピンとこないです・・・
207: (ワッチョイ f1bb-Gt6m) 2023/12/07(木)17:18 ID:Dmh4B19g0(1) AAS
プリプロセッサメタプログラミングを覚えてからc言語の開発は楽になったわ
前は同じようなデータ構造でたくさんモジュール作ってたからな
208(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-By03) 2023/12/07(木)17:34 ID:FWY3NSUg0(3/3) AAS
>>206
関数をデータとして扱うことはないので「大きさ」は定義されない。
C の言語仕様的には「関数はオブジェクトではない」という扱い。
関数に対して呼び出し以外の操作をする方法はない。
関数ポインタで関数の場所を指すということは出来るが、
型システム的にちょっと特殊な扱いになっていて関数ポインタ経由で値を取り出したりも出来ない。
もちろん実際にはなんらかの形でメモリ上には存在するし、
長いプログラムは大きい可能性が高いけど。
実際にどうなってるのかは生成された機械語を見ればいいんでね。
209: (ワッチョイ 915b-rn9t) 2023/12/07(木)17:41 ID:VEE9aIzl0(1) AAS
>>206
質問文が謎すぎて、何を聞きたいのか解釈できない
関数のサイズって言ってるのがビルドしてできた実行ファイルのファイルサイズの事なら、コードの量が多ければ当然サイズは大きくなる
210: (ワッチョイ c55f-tBUZ) 2023/12/07(木)17:41 ID:ggcXWkJv0(2/4) AAS
>>208
ポインタのアクセス条件でメモリのサイズ・型が明確になっていること
とあったので、関数ポインタもサイズや型が明確でないといけないなら
ちゃんとわかっとかないといけないと思ったのですが、関数の扱いはわかってる人から見ても特殊なんですね
ありがとうございます
211: (ワッチョイ 1ec3-yDrh) 2023/12/07(木)18:04 ID:Kvlx+aNw0(1) AAS
>>206
あなたはどういう文脈で「関数のサイズ」が気になった・話題になったの?プアな組み込みとか?
俺は「関数のサイズ」が気になった・話題になった覚えがない
まぁコンパイル後のコード量かなぁ、関数の行数は大きく関係する
引数はスタックに積むけど「関数のサイズ」とは言わない気がする
212(1): (ワッチョイ 66ab-XaJC) 2023/12/07(木)18:19 ID:5AmCTrxW0(2/2) AAS
サイズ云々は
インクリメントしたときにどんだけ(何バイト)進むのかが確定してる型でないとポインタにならない
→ じゃ関数ポインタって 関数のサイズ(≒ コンパイル後の機械語化されたバイナリのサイズ) を知ってるのか?
こういう思考の流れかな?
213(1): (ワッチョイ c55f-tBUZ) 2023/12/07(木)19:14 ID:ggcXWkJv0(3/4) AAS
>>212
まさにそれです!
関数ポインタを配列に格納した時インクリメントしたら何バイト進むのか分かってないといけないのではと
214(1): (ワッチョイ 8a71-yDrh) 2023/12/07(木)19:46 ID:Avn/NPEq0(1) AAS
>>213
その状況で必要になるのは関数のサイズじゃなくて関数ポインタのサイズや
それは他のポインタと同じ、64bitPCなら8バイト
仮定の話として、もし「関数ポインタの配列」ではなく「関数の配列」が作成できるような言語仕様にするなら、関数のサイズも決めないといけなかっただろうね
215: (ワッチョイ c55f-tBUZ) 2023/12/07(木)19:58 ID:ggcXWkJv0(4/4) AAS
>>214
言われてみたらたしかにそうですねなんでポインタなのに普通の変数のように考えてしまってたんだろう・・・
216(1): (ワッチョイ 9140-JrwL) 2023/12/07(木)21:12 ID:fQltjmnX0(1) AAS
void*使えるやん
217(2): (ワッチョイ 65ff-WD8q) 2023/12/07(木)21:34 ID:NYiehhGh0(4/4) AAS
>>203
ありがとうございます。
>>204
メインのソフト除いて二窓三窓しているので欲しい機能だけ載せたソフトを自作したいなと。
>>205
204へのレスと同じです。
猫でも分かるは説明していない単語が出てきたり、UI作成の手順をトレースできなかったり
わからない人向けではなく分かる人向けの解説のようで個人的には合いませんでした。
218(3): はちみつ餃子◆8X2XSCHEME (ワッチョイ 656b-1gjz) 2023/12/08(金)03:48 ID:tzfGEsy80(1) AAS
>>216
関数ポインタは void* に格納可能であると保証してないし、関数ポインタがオブジェクトを指すポインタより大きかったり表現が異なっていたりする環境はある。
出来る環境でなら使うのが悪いわけではないけど移植性は犠牲になる。
219(1): (ワッチョイ b501-8qzv) 2023/12/08(金)06:53 ID:Mdse7dEX0(1/2) AAS
>>218
>関数ポインタは void* に格納可能であると保証してないし
そんなことありえるの?
220(1): (ワッチョイ 1e6d-ja4y) 2023/12/08(金)07:01 ID:g0YSKcXt0(1) AAS
near ポインタモデル?だったかの
変数のアドレッシングサイズと
プログラムカウンタのアドレッシングサイズが違うやつ
221(1): (ラクッペペ MM3e-VttM) 2023/12/08(金)07:38 ID:qsjd2ZYcM(1) AAS
ミディアムモデルとかコンパクトモデルとか
まぁ過去の話だわな
222: (スップ Sdea-b4p5) 2023/12/08(金)07:57 ID:m+qJyEe4d(1) AAS
関数のサイズは関数のポインタをアドレス順にソートすれば求められる
そのサイズ分を実行可能領域にコピーすれば当然実行もできるよ
dllインジェクションとかでたまに使われる
223: (スップ Sd0a-Cw2Y) 2023/12/08(金)08:01 ID:ClTGg8d6d(1) AAS
>>217
業務で使ってるような信頼性のソフトを自作するつもりなのか
一人で?予算は?期間は?
まあ無理だろ
単純にメモリの大きなPCに買い替えればいいんじゃない
224(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-By03) 2023/12/08(金)09:53 ID:B2zBKDAb0(1/6) AAS
>>217
マイクロソフトが出している公式のチュートリアルは C++ が基礎だけど
考え方としては C でも同じなのでそのへんは適当に読み替えながら……
外部リンク:learn.microsoft.com
Win32 API は C で使ってもそんなに不便ではないように出来てる。
特に最も基礎のこのへんの例示のコードは (C++ とは書いてあるが) たぶん C としてコンパイルさせても通る。
外部リンク:learn.microsoft.com
必要な知識の分量は初心者が想像するよりずっと多いと思う。
分かりやすいドキュメントがあったとしても (そして無いこともしばしばある!) 分量は減らないので
分量というハードルをクリアするのは単純に学習量しかないし、
省5
225(1): (ワッチョイ 6646-wNAC) 2023/12/08(金)10:13 ID:20YRNN5F0(1) AAS
>>224
Cコンパイラに、C++ -> C トランスレート機能あるの?
226: (ワッチョイ 66ab-XaJC) 2023/12/08(金)10:26 ID:vLixVDpZ0(1/2) AAS
API はほとんど C インターフェースで
C++をベターCとして利用してて C++のクラスの機構はほぼ使ってない
(GDI+ とかAPIがはなっから C++ インターフェースの奴は別)
227(1): (ワッチョイ 9140-JrwL) 2023/12/08(金)10:34 ID:faKtyhh20(1/2) AAS
>>218
ねえよ
228(1): (アウアウウー Sa21-wVFe) 2023/12/08(金)10:50 ID:k3Bpg+TDa(1/4) AAS
ぶっちゃけGDI+もCから使えるけどね
229(1): (ワッチョイ 66ab-XaJC) 2023/12/08(金)10:53 ID:vLixVDpZ0(2/2) AAS
>>228
あれ Cインターフェース居るのか 最終的にはCOMになってるんやっけ?
230: (ワッチョイ b501-8qzv) 2023/12/08(金)11:03 ID:Mdse7dEX0(2/2) AAS
>>220-221
なんかそういうのあったかも
231: (ワッチョイ 1163-8qzv) 2023/12/08(金)11:04 ID:VEgZ7oNC0(1/5) AAS
あれはPascalの呼出ではなかったかな
232: はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-By03) 2023/12/08(金)11:27 ID:B2zBKDAb0(2/6) AAS
>>229
gdiplus.dll 自体は関数群を置いてあるだけっぽい。
それをラッパークラスで覆って C++ から使いやすくしているだけ。
233(1): (ワッチョイ 6548-WD8q) 2023/12/08(金)12:03 ID:7hcazM9a0(1) AAS
>>224
兼任ですが個人事業主でお金と時間はそれなりに自由に使えます。
3〜5ヶ月くらいはまとまった時間を取ることも可能です。
公式チュートリアルは参考にはなりますが読みやすいかと言われると微妙ですね。
知識はもちろん身につけたいのですが、そこまでの道筋は他人のコードを読む方がやはり良いのでしょうか?
書籍やサイトなどでアプリの形になるまでのチュートリアルなどは無いのでしょうか。
234: (アウアウウー Sa21-wVFe) 2023/12/08(金)12:17 ID:k3Bpg+TDa(2/4) AAS
Win32APIというよりそれ以前の
C言語の知識が足りてないんじゃないのかな
235: はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-By03) 2023/12/08(金)13:05 ID:B2zBKDAb0(3/6) AAS
>>233
何を学べば良いかすらわからないときのとっかかりとして
他人のコードを読む (何がわかってないかはわかる) ことを勧めたまでで、
良い資料があるならそれを読むにこしたことはないよ。
良い資料がないことも多いという現実はあるけど。
私は公式チュートリアルは良いほうだと思う。
知らないことを書いてあるんだからある程度は読みづらいこともあるのは当たり前のことで、
どれを読んだって似たようなもんじゃないかな。
専門的な内容をスラスラ読めるほうがおかしいでしょ。
236(1): (ワッチョイ 8a80-yDrh) 2023/12/08(金)13:11 ID:0BufPgxy0(1) AAS
さてはオメー
ふらっとC#スレで他人のコードの読み方とか延々聞いてたヤツだな?
237: (アウアウウー Sa21-/D3x) 2023/12/08(金)13:15 ID:o54AonyOa(1) AAS
>>206
関数もメモリにロードされるのわからず?
関数はただのマシンコードなんだからここから始まりますよ、というラベルがついてるだけだぞ
そして呼ばれた時はそこへジャンプするだけ
関数ポインタはそのマシンコードのラベルのアドレスを保持しているだけ
ポインタ以前にコンピュータの仕組みからやった方が良さそう
プログラム格納方式とか聞いたことない?
238: (アウアウウー Sa21-wVFe) 2023/12/08(金)13:31 ID:k3Bpg+TDa(3/4) AAS
>>236
なんちゃらGPTがここでこっそり質問してたら笑う
239: (ワッチョイ 66cf-tBUZ) 2023/12/08(金)13:36 ID:SLmq2FCH0(1) AAS
>>219>>227
ググってみたらどうも>>218が正しいらしい
240: (ワッチョイ 9140-JrwL) 2023/12/08(金)15:42 ID:faKtyhh20(2/2) AAS
だからねえよ
そいつが勘違いしてるか、使い方が悪いかだろ
241: (ワッチョイ 5df0-/D3x) 2023/12/08(金)16:03 ID:abnVL6FT0(1/3) AAS
>>206
構造体もプログラムからしたらただのメモリ領域の塊だぞ
そこに変数とかいう概念はない
構造体のメンバのオフセットでその位置を指定して書き込んだり読み込んだりするだけ
その時のオフセットの計算に利用されるのが型
変数宣言すると構造体全体サイズのメモリ領域がスタックに確保される
mallocで確保されるとヒープに確保されてそのアドレスが返る
ただそれだけ
242: (アウアウウー Sa21-wVFe) 2023/12/08(金)16:08 ID:k3Bpg+TDa(4/4) AAS
関数を malloc で確保するにはどうすれば良いですか?って言いそう
243: (ワッチョイ 5df0-/D3x) 2023/12/08(金)16:21 ID:abnVL6FT0(2/3) AAS
ちなみにメモリにロードされた関数の領域は現代のOSならば当然ながらアクセス不可能
昔はプログラム領域にアクセスできてその中のコードを動的に書き換えるという荒技をやってた人もいるらしいが
244: (ワッチョイ 5df0-/D3x) 2023/12/08(金)16:24 ID:abnVL6FT0(3/3) AAS
ちなみにメモリ領域にマシンコードを生成してそのメモリ領域のマシンコードを即時実行するということはできる
これをJITという
最近のスクリプト言語ではこの手法がかなり用いられている
やり方は普通にメモリにマシンコードを生成して実行可能属性を付加、各種CPUキャッシュをクリアしてから
関数ポインタにキャストして実行するだけ
245: (ワッチョイ 1163-8qzv) 2023/12/08(金)16:31 ID:VEgZ7oNC0(2/5) AAS
メモリ保護機構が動いて実行できないと思う
16ビットリアルモードOSだったらできたと思うが
246: (スッップ Sd0a-GtvU) 2023/12/08(金)16:51 ID:9cA1ls6dd(1) AAS
mprotectとかVirtualProtectで実行可能にすればできる
247(3): (ワッチョイ 1163-8qzv) 2023/12/08(金)17:06 ID:VEgZ7oNC0(3/5) AAS
しかし、それだと任意のコード実行が自由自在ってことになって・・・
まずくない?
248: はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-By03) 2023/12/08(金)17:24 ID:B2zBKDAb0(4/6) AAS
>>247
許可を与えないと実行できないから問題にならないよ。
許可を与えられる前には実行できないんだから
外から注入されたものが自分で許可を出すということは出来ない。
249(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 2a3e-By03) 2023/12/08(金)17:24 ID:B2zBKDAb0(5/6) AAS
>>247
許可を与えないと実行できないから問題にならないよ。
許可を与えられる前には実行できないんだから
外から注入されたものが自分で許可を出すということは出来ない。
250(2): (ワッチョイ 1163-8qzv) 2023/12/08(金)17:35 ID:VEgZ7oNC0(4/5) AAS
セキュリティって、身内も信じちゃまずいと思うよ
251: (ワッチョイ eaad-snvD) 2023/12/08(金)20:25 ID:Bb4hYLfH0(1/2) AAS
>>250
その理屈はOSすら信じられずPC使うなって発想にしかならん
信じた者が信じる者は正しい、セキュリティの基本やろ
252(1): (ワッチョイ 1163-8qzv) 2023/12/08(金)20:31 ID:VEgZ7oNC0(5/5) AAS
企業でもそうなんですか?
管理者が望んでいないプログラムが動かせたら困るでしょう
管理者自身がやるってならちょっと違いますが
上下前次1-新書関写板覧索設栞歴
あと 750 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.041s