!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
※前スレ
C言語なら俺に聞け 161
https://mevius.5ch.net/test/read.cgi/tech/1682053520/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 162
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 2389-FUJr)
2023/10/30(月) 17:13:00.82ID:hHEGE8Ol0162デフォルトの名無しさん (スフッ Sd0a-Oc+E)
2023/12/05(火) 08:16:33.53ID:64vzQPx0d >>160 FILE構造体っていうことだけは、どの本にも書いてある。
163デフォルトの名無しさん (ワッチョイ 66d6-8IwF)
2023/12/05(火) 08:26:33.63ID:Sjl8/rh40 実際UNIXのfile descriptorはintでWindowsのファイルハンドルHANDLEはvoid*だ。
こいつらはシステムコールによってカーネルモードで操作されるから中身が完全に見えないようになってる
それとは違って標準Cライブラリはユーザモードで動作するから
処理系依存で中身を操作してもいいように作ったのかもしれない
こいつらはシステムコールによってカーネルモードで操作されるから中身が完全に見えないようになってる
それとは違って標準Cライブラリはユーザモードで動作するから
処理系依存で中身を操作してもいいように作ったのかもしれない
164デフォルトの名無しさん (スッップ Sd0a-Cw2Y)
2023/12/05(火) 08:33:57.88ID:GHHZLCc/d165デフォルトの名無しさん (ワッチョイ 65d3-WD8q)
2023/12/05(火) 09:00:17.71ID:72+QzLj/0 >>160です
普通の構造体の宣言とは異なり要素の記述はありませんが
「FILE」とは「ファイル構造体を使うよ」と宣言しているという意味で
そうしてstdio.h上のFILE構造体の要素に開いたファイルの情報が代入されていくということでしょうか?
「FILE」を記述せずにfopenで開こうとした場合構造体メンバのptrに代入されている数値が使えないのでfopenから戻り値が受け取れず正しく*fpに座標が代入されない
みたいな
そして開くだけならfopenでも開けてしまうとか
普通の構造体の宣言とは異なり要素の記述はありませんが
「FILE」とは「ファイル構造体を使うよ」と宣言しているという意味で
そうしてstdio.h上のFILE構造体の要素に開いたファイルの情報が代入されていくということでしょうか?
「FILE」を記述せずにfopenで開こうとした場合構造体メンバのptrに代入されている数値が使えないのでfopenから戻り値が受け取れず正しく*fpに座標が代入されない
みたいな
そして開くだけならfopenでも開けてしまうとか
166はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/05(火) 10:08:56.47ID:z5PiblaY0 言語仕様的に見れば FILE はストリームを制御するのに十分な情報が入ったオブジェクト型であることと、
アドレス (FILE 型のオブジェクトがある場所) に意味がある場合もあるから
オブジェクトをコピーして機能するとは限らないという程度のことしか書いてない。
FILE にどのような情報が格納されているのかといったことや
詳細な仕組みはホスト環境の事情に合わせて処理系の裁量で決めてよい部分なので、
具体的にどうなっているのかは各実行環境・開発環境ごとに違う。
特に環境依存の細かい部分に立ち入って制御をしたい事情があるのでない限りは
fopen が「なんらかの方法」で FILE 構造体を構築してそのアドレスを返すものであるということだけ知っていれば
普通のプログラマにとって十分なように出来ている。
アドレス (FILE 型のオブジェクトがある場所) に意味がある場合もあるから
オブジェクトをコピーして機能するとは限らないという程度のことしか書いてない。
FILE にどのような情報が格納されているのかといったことや
詳細な仕組みはホスト環境の事情に合わせて処理系の裁量で決めてよい部分なので、
具体的にどうなっているのかは各実行環境・開発環境ごとに違う。
特に環境依存の細かい部分に立ち入って制御をしたい事情があるのでない限りは
fopen が「なんらかの方法」で FILE 構造体を構築してそのアドレスを返すものであるということだけ知っていれば
普通のプログラマにとって十分なように出来ている。
167デフォルトの名無しさん (ワッチョイ 8ac1-Vvnv)
2023/12/05(火) 10:36:22.34ID:NYBtRI3Y0 >>165
3行目から4行目の理解で大体あってるよ
それ以降は何言ってんのか分かんねーから全部アタマの中から破棄していいよ
正確にはFILEってのは抽象データ型であんたは構造体って言ってるけど構造体かどうかは分からんし使う側は知る必要もない
提供者がわざわざ抽象型にして使い手側の負荷を下げてくれるとこを中身がどうとか役割がどうとかさぐんのは筋が悪いんだよ
使えって言われてんだから何も考えずにだまって使えばいいよ
3行目から4行目の理解で大体あってるよ
それ以降は何言ってんのか分かんねーから全部アタマの中から破棄していいよ
正確にはFILEってのは抽象データ型であんたは構造体って言ってるけど構造体かどうかは分からんし使う側は知る必要もない
提供者がわざわざ抽象型にして使い手側の負荷を下げてくれるとこを中身がどうとか役割がどうとかさぐんのは筋が悪いんだよ
使えって言われてんだから何も考えずにだまって使えばいいよ
168デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/05(火) 11:08:08.12ID:h96fo3nj0 FILE構造体ってOS毎に変わるし、コンパイラ実装でも又変わってた様な気がする
169デフォルトの名無しさん (ワッチョイ 71cf-L1V1)
2023/12/05(火) 12:35:58.10ID:4VzMioa/0 FILE*経由だとバッファリングされるから、バッファーのポインタとそこに含まれてるデータサイズも含んでいるだろう
そもそもファイルのシーク位置も含まれてる
まとめると
・ファイルディスクリプターやファイルハンドル
・シーク位置
・バッファー(ポインタ、サイズ、含まれてるデータサイズ)
となるかね
そもそもファイルのシーク位置も含まれてる
まとめると
・ファイルディスクリプターやファイルハンドル
・シーク位置
・バッファー(ポインタ、サイズ、含まれてるデータサイズ)
となるかね
170デフォルトの名無しさん (アウアウウー Sa21-wVFe)
2023/12/05(火) 15:39:55.92ID:QJai9ytva >>160
void *hoge = (void *)fopen("hoge", "wb");
fprintf((FILE *)hoge, "hoge\n");
fclose((FILE *)hoge);
void *hoge = (void *)fopen("hoge", "wb");
fprintf((FILE *)hoge, "hoge\n");
fclose((FILE *)hoge);
171デフォルトの名無しさん (ワッチョイ 71cf-L1V1)
2023/12/05(火) 17:31:14.53ID:4VzMioa/0 FILE*互換の自前のストリームを実装できれば便利なんだがなぁ
継承が無いから、構造体に自前の関数をセットして、何らかの登録関数に渡す感じになるだろう
継承が無いから、構造体に自前の関数をセットして、何らかの登録関数に渡す感じになるだろう
172デフォルトの名無しさん (JP 0Hf9-8IwF)
2023/12/05(火) 17:40:17.96ID:oSX0a7FoH fopencookieとかfunopen
173はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/05(火) 17:48:30.74ID:z5PiblaY0 パイプのインターフェイスをストリームとして開くことが出来るから
適当なスレッドを開いてパイプの受け取り口で受け取った情報を好きなように加工するようにすれば、
パイプに書込む側ではストリームに書き込んだらいい感じに処理してくれるように見える。
というのを Windows でやっているのをどっかで見た。
適当なスレッドを開いてパイプの受け取り口で受け取った情報を好きなように加工するようにすれば、
パイプに書込む側ではストリームに書き込んだらいい感じに処理してくれるように見える。
というのを Windows でやっているのをどっかで見た。
174デフォルトの名無しさん (スッップ Sd0a-Cw2Y)
2023/12/05(火) 18:11:37.45ID:GHHZLCc/d175デフォルトの名無しさん (ワッチョイ 5e5f-Vvnv)
2023/12/05(火) 23:44:52.07ID:9c748LJ40 ソケットディスクリプタってファイルポインタに転生できる?
176デフォルトの名無しさん (ワッチョイ 8a26-yDrh)
2023/12/05(火) 23:48:43.88ID:4UYj/sQ80 >>175
fdopen
fdopen
177デフォルトの名無しさん (ワッチョイ 65a4-WD8q)
2023/12/06(水) 08:34:18.09ID:hjosWl9s0178デフォルトの名無しさん (スフッ Sd0a-nvfk)
2023/12/06(水) 12:07:25.67ID:dR0trs3yd 対策このままなら再発しそうね
https://japan.zdnet.com/article/35212258/4/
https://japan.zdnet.com/article/35212258/4/
179デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/06(水) 16:09:22.53ID:JLoh059d0 仕事なくなったら困る人が大勢いるし
180デフォルトの名無しさん (ワッチョイ 7d01-tBUZ)
2023/12/06(水) 20:24:47.29ID:tBrgYtLt0 free(NULL) は許されるのに
fclose(NULL) は許されないんよな
fclose(NULL) は許されないんよな
181デフォルトの名無しさん (アウアウウー Sa21-VttM)
2023/12/06(水) 21:05:20.14ID:gHtrZlY5a >>180
さらにfflush(NULL)は許されるという一貫性の無さ
さらにfflush(NULL)は許されるという一貫性の無さ
182はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 656a-1gjz)
2023/12/06(水) 21:19:13.20ID:+44Bjs460 fflush の場合は全てのストリームを対象とするという特別なフラグとして NULL を活用しているので無効なポインタとしての NULL とは事情が違う気がするね。
それにしたってNULL を多義的に使っているという意味では一貫性はないけど。
それにしたってNULL を多義的に使っているという意味では一貫性はないけど。
183デフォルトの名無しさん (ワッチョイ 9140-JrwL)
2023/12/06(水) 21:23:39.94ID:bAVe0RWP0 free(NULL)は、おバカなマの為に特別に許容したんだろ
184デフォルトの名無しさん (ワッチョイ 65a4-WD8q)
2023/12/07(木) 02:17:45.58ID:NYiehhGh0 以前ネットでおすすめされていた「苦しんで学ぶc言語」の内容をしっかり理解する段階まできたのですが、次は何をすれば良いのでしょう。
猫でも分かるプログラミングも読んでみたのですが仕様が古すぎてトレースできないのと、私には作者さんの文章の作りが合わず困っています。
まずは簡単なソフトを作りながら学べればと思います。
入門書の次に読めるような本と、そこからアプリケーション開発のイロハが分かる本やサイトを教えていただけないでしょうか。
猫でも分かるプログラミングも読んでみたのですが仕様が古すぎてトレースできないのと、私には作者さんの文章の作りが合わず困っています。
まずは簡単なソフトを作りながら学べればと思います。
入門書の次に読めるような本と、そこからアプリケーション開発のイロハが分かる本やサイトを教えていただけないでしょうか。
185デフォルトの名無しさん (ワッチョイ ea79-4utE)
2023/12/07(木) 07:17:00.47ID:Y9iRVwaI0 ↑みたいなのって目的ないのかね
今後C言語で特に何かやりたい事がないなら別に何もする必要ないよ
今後C言語で特に何かやりたい事がないなら別に何もする必要ないよ
186はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 656a-1gjz)
2023/12/07(木) 08:27:05.09ID:wi0prF2i0 Cで現実的なアプリケーションを作るならホスト環境 (OS など) の事情は無視できないし、具体的な目標なく道筋は決まらないと私も思う。
何の情報もない他人に何かを勧めるというのはしづらい。
目標があるならその分野の既存のコードを「読む」という体験はためになるかもしれない。
実際のコードを見て意味がわからない部分があれば学習が必要な部分だというとっかかりになる。
何の情報もない他人に何かを勧めるというのはしづらい。
目標があるならその分野の既存のコードを「読む」という体験はためになるかもしれない。
実際のコードを見て意味がわからない部分があれば学習が必要な部分だというとっかかりになる。
187デフォルトの名無しさん (ワッチョイ 6646-wNAC)
2023/12/07(木) 09:28:19.84ID:++8K4NmJ0 >>184
> 「苦しんで学ぶc言語」
というのは、これ↓ ?
https://9cguide.appspot.com/index.html
> 苦しんで覚えるC言語
であれば文法解説のようなので、ファイル操作をしてはどう?
cat コマンドを作るとか。
> 「苦しんで学ぶc言語」
というのは、これ↓ ?
https://9cguide.appspot.com/index.html
> 苦しんで覚えるC言語
であれば文法解説のようなので、ファイル操作をしてはどう?
cat コマンドを作るとか。
188デフォルトの名無しさん (ワッチョイ 65ff-WD8q)
2023/12/07(木) 10:04:58.60ID:NYiehhGh0189デフォルトの名無しさん (ラクッペペ MM3e-8Sbt)
2023/12/07(木) 10:23:42.82ID:aHfAXzyRM 業務効率の向上が目的ならC言語は回り道すぎる
他の言語選んだ方がいい気がする
他の言語選んだ方がいい気がする
190デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/07(木) 10:31:24.83ID:HPax2zCP0 ファイル操作の課題出してあげようか
指定した二つのDirにあるファイルを同期させる
単にコピーするのではなく、タイムスタンプの新しいものだけをコピーする
新しいSubdirできていたら、中味があればDirごとコピーする
とりあえずは、新しく作られてファイルの同期まで、
削除については考慮しなくて良い
指定した二つのDirにあるファイルを同期させる
単にコピーするのではなく、タイムスタンプの新しいものだけをコピーする
新しいSubdirできていたら、中味があればDirごとコピーする
とりあえずは、新しく作られてファイルの同期まで、
削除については考慮しなくて良い
191デフォルトの名無しさん (ワッチョイ b501-sZSb)
2023/12/07(木) 10:39:50.34ID:3PWWuEZS0192デフォルトの名無しさん (スプッッ Sdea-GtvU)
2023/12/07(木) 11:21:46.78ID:6u4iKMo7d C言語のスレッドで言う事じゃないがC言語以外の生産性の高い言語を学んだほうがよさそう
193デフォルトの名無しさん (ワッチョイ 71cf-Gt6m)
2023/12/07(木) 11:56:53.00ID:QzDrEJVi0 >>184
CはOSのAPIを直接叩けることがメリットでもあるので、Linuxのプログラミング本を読んでコード書いてみるのが一番良いだろう
マルチプロセス、マルチスレッド、ソケットとか覚えるべき事は沢山ある
Cでやれば根本から理解出来る
CはOSのAPIを直接叩けることがメリットでもあるので、Linuxのプログラミング本を読んでコード書いてみるのが一番良いだろう
マルチプロセス、マルチスレッド、ソケットとか覚えるべき事は沢山ある
Cでやれば根本から理解出来る
194はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-1gjz)
2023/12/07(木) 12:04:11.70ID:FWY3NSUg0 (事務作業などの?) 業務効率化が目的なら Power Automate Desktop の活用を考えた方がいいと思う。
効率化の最初の段階は解決すべき問題を見つけることで、これをきちんと一度で洗い出すのは大抵の場合に出来ない。
雑に作って運用しながら改善するという手順をとるのがのぞましいが、 C で書くとそういう柔軟な体制がとりづらい。
効率化の最初の段階は解決すべき問題を見つけることで、これをきちんと一度で洗い出すのは大抵の場合に出来ない。
雑に作って運用しながら改善するという手順をとるのがのぞましいが、 C で書くとそういう柔軟な体制がとりづらい。
195デフォルトの名無しさん (ワッチョイ 9a2b-ntmn)
2023/12/07(木) 13:30:05.55ID:zYUoekf60 「なにを作りたいのかが大事」ってのは良く分かるんだけど、普通の人が作りたいものって大抵Cじゃない方が…ってなっちゃうんだよな
196デフォルトの名無しさん (ワッチョイ 65ff-WD8q)
2023/12/07(木) 13:42:19.21ID:NYiehhGh0 >>90
そういった事もできるんですねー
>>191
取り組みたいのは山々なのですがuiの作り方からわからないので入手できるバーションで解説されている書籍が欲しいところです。
>>192
基礎を大切にしたいのでcをはじめのうちは使っていきたいと考えています。
>>193
仰る通り根本を理解できればと思います。Linux本ですね。可能であれば簡単なものでおすすめを添えていただけないでしょうか。
>>194
グラフィック系のソフトを使う上で不便なところを楽したい、と言いますか
とにかく画像表示や文字列表示から進めていきたいと考えています。
前述の通り基礎を理解したいので可能であればcで作成したいのです。
そういった事もできるんですねー
>>191
取り組みたいのは山々なのですがuiの作り方からわからないので入手できるバーションで解説されている書籍が欲しいところです。
>>192
基礎を大切にしたいのでcをはじめのうちは使っていきたいと考えています。
>>193
仰る通り根本を理解できればと思います。Linux本ですね。可能であれば簡単なものでおすすめを添えていただけないでしょうか。
>>194
グラフィック系のソフトを使う上で不便なところを楽したい、と言いますか
とにかく画像表示や文字列表示から進めていきたいと考えています。
前述の通り基礎を理解したいので可能であればcで作成したいのです。
197デフォルトの名無しさん (ワッチョイ 3514-I4o8)
2023/12/07(木) 13:42:44.77ID:P4JhXVL60 WindowsアプリならCじゃくて、せめてC++にしておけ
198デフォルトの名無しさん (ワッチョイ 6aa0-0M9k)
2023/12/07(木) 13:43:24.10ID:n9+uyfFo0 楽したい奴にはCは向かない
199デフォルトの名無しさん (アウアウウー Sa21-wVFe)
2023/12/07(木) 14:18:01.05ID:wNl2TimYa C++は変な癖がつく
Cの方が絶対良い
Cの方が絶対良い
200デフォルトの名無しさん (ワッチョイ b501-sZSb)
2023/12/07(木) 15:23:59.73ID:3PWWuEZS0 Cで全部書いてると大変だと思うよ
機能全部使わんでも良いからC++の方が現実的だよ
機能全部使わんでも良いからC++の方が現実的だよ
201デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/07(木) 15:31:37.34ID:HPax2zCP0 大変かどうかは、何を作るかによる
202デフォルトの名無しさん (ワッチョイ b501-sZSb)
2023/12/07(木) 15:35:13.86ID:3PWWuEZS0203デフォルトの名無しさん (ワッチョイ 71cf-Gt6m)
2023/12/07(木) 16:19:14.82ID:QzDrEJVi0 >>196
自分はUNIX Cプログラミング(いわゆるライオン本)で勉強して、めちゃくちゃ為になったけど、さすがにこれは古すぎる
詳解UNIXプログラミング 第3版は間違いのない名著
ふつうのLinuxプログラミング 第2版はLinux向けだし初心者向け
Cで仕事をするようにはならないかもだけど、「ふつうの~」を理解出来て自分のものにすることがCを学ぶ意義だな
自分はUNIX Cプログラミング(いわゆるライオン本)で勉強して、めちゃくちゃ為になったけど、さすがにこれは古すぎる
詳解UNIXプログラミング 第3版は間違いのない名著
ふつうのLinuxプログラミング 第2版はLinux向けだし初心者向け
Cで仕事をするようにはならないかもだけど、「ふつうの~」を理解出来て自分のものにすることがCを学ぶ意義だな
204デフォルトの名無しさん (ワッチョイ 66ab-XaJC)
2023/12/07(木) 16:23:44.20ID:5AmCTrxW0 >グラフィック系のソフトを使う上で不便なところを楽したい
ソフト側でスクリプト等がサポートされてなければ
できることは連続するショートカットを 1プッシュでまとめて出す
キーロガー&再生系とか Joy2Key みたいなキーコード送出系ぐらいしか思い浮かばん
ソフト側でスクリプト等がサポートされてなければ
できることは連続するショートカットを 1プッシュでまとめて出す
キーロガー&再生系とか Joy2Key みたいなキーコード送出系ぐらいしか思い浮かばん
205はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/07(木) 17:03:32.49ID:FWY3NSUg0 >>196
具体的に対象になってるソフトの名前は言える?
モダンな設計の Windows 用ソフトが外部から制御するために公開するインターフェイスは
Component Object Model の技術をベースにしていることが多くて、
高度な開発環境の補助を得ながら使う分には便利なんだが
C から使おうとするとすごく面倒くさい。 (出来なくはないけど。)
ソフトが外部に対してインターフェイスを公開するのではなく
制御用のスクリプト言語を内蔵している場合もあるので
C でのプログラミングに詳しくなってもあまり役に立たないこともある。
もしも外部に対してインターフェイスを用意していないなら
ボタン操作のイベントを発生させるとかして制御する (つまりまさに人がする操作を代行させる) ということも可能だが、
それを可能にするような基礎技術というか Windows の動作モデルを理解したいのなら
「猫でもわかるWindowsプログラミング」はそれなりに有用だと思うよ。
私は書籍を読んだことは無いけどウェブ版は Windows がイベントを伝播させて操作させる構造を理解するのに十分な記述はある。
だけど、人が操作するときに Windows の中で何が起こっているのかを
初心者が根本から理解してきちんと使いこなせるまでになるハードルは割と高めなんだよ……。
Power Automate Desktop なら技術の根本を理解せずともそれが出来るようになってるし、
マイクロソフトが直接に提供していてしかも無料という神ソフトなのでオススメした次第。
UWSC とか AutoIt なんかも人気があるね。
具体的に対象になってるソフトの名前は言える?
モダンな設計の Windows 用ソフトが外部から制御するために公開するインターフェイスは
Component Object Model の技術をベースにしていることが多くて、
高度な開発環境の補助を得ながら使う分には便利なんだが
C から使おうとするとすごく面倒くさい。 (出来なくはないけど。)
ソフトが外部に対してインターフェイスを公開するのではなく
制御用のスクリプト言語を内蔵している場合もあるので
C でのプログラミングに詳しくなってもあまり役に立たないこともある。
もしも外部に対してインターフェイスを用意していないなら
ボタン操作のイベントを発生させるとかして制御する (つまりまさに人がする操作を代行させる) ということも可能だが、
それを可能にするような基礎技術というか Windows の動作モデルを理解したいのなら
「猫でもわかるWindowsプログラミング」はそれなりに有用だと思うよ。
私は書籍を読んだことは無いけどウェブ版は Windows がイベントを伝播させて操作させる構造を理解するのに十分な記述はある。
だけど、人が操作するときに Windows の中で何が起こっているのかを
初心者が根本から理解してきちんと使いこなせるまでになるハードルは割と高めなんだよ……。
Power Automate Desktop なら技術の根本を理解せずともそれが出来るようになってるし、
マイクロソフトが直接に提供していてしかも無料という神ソフトなのでオススメした次第。
UWSC とか AutoIt なんかも人気があるね。
206デフォルトの名無しさん (ワッチョイ c55f-tBUZ)
2023/12/07(木) 17:15:58.47ID:ggcXWkJv0 関数のサイズというのは、関数の引数のサイズと同じと考えて良いのでしょうか?
中身に1万行使ってる関数があるとして、その1万行は関数のサイズとは全然関係ないんでしょうか?
構造体はなんとなく変数のバイト数の足し算なんだなってわかるけど、関数がピンとこないです・・・
中身に1万行使ってる関数があるとして、その1万行は関数のサイズとは全然関係ないんでしょうか?
構造体はなんとなく変数のバイト数の足し算なんだなってわかるけど、関数がピンとこないです・・・
207デフォルトの名無しさん (ワッチョイ f1bb-Gt6m)
2023/12/07(木) 17:18:59.29ID:Dmh4B19g0 プリプロセッサメタプログラミングを覚えてからc言語の開発は楽になったわ
前は同じようなデータ構造でたくさんモジュール作ってたからな
前は同じようなデータ構造でたくさんモジュール作ってたからな
208はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/07(木) 17:34:07.95ID:FWY3NSUg0 >>206
関数をデータとして扱うことはないので「大きさ」は定義されない。
C の言語仕様的には「関数はオブジェクトではない」という扱い。
関数に対して呼び出し以外の操作をする方法はない。
関数ポインタで関数の場所を指すということは出来るが、
型システム的にちょっと特殊な扱いになっていて関数ポインタ経由で値を取り出したりも出来ない。
もちろん実際にはなんらかの形でメモリ上には存在するし、
長いプログラムは大きい可能性が高いけど。
実際にどうなってるのかは生成された機械語を見ればいいんでね。
関数をデータとして扱うことはないので「大きさ」は定義されない。
C の言語仕様的には「関数はオブジェクトではない」という扱い。
関数に対して呼び出し以外の操作をする方法はない。
関数ポインタで関数の場所を指すということは出来るが、
型システム的にちょっと特殊な扱いになっていて関数ポインタ経由で値を取り出したりも出来ない。
もちろん実際にはなんらかの形でメモリ上には存在するし、
長いプログラムは大きい可能性が高いけど。
実際にどうなってるのかは生成された機械語を見ればいいんでね。
209デフォルトの名無しさん (ワッチョイ 915b-rn9t)
2023/12/07(木) 17:41:37.50ID:VEE9aIzl0210デフォルトの名無しさん (ワッチョイ c55f-tBUZ)
2023/12/07(木) 17:41:59.31ID:ggcXWkJv0 >>208
ポインタのアクセス条件でメモリのサイズ・型が明確になっていること
とあったので、関数ポインタもサイズや型が明確でないといけないなら
ちゃんとわかっとかないといけないと思ったのですが、関数の扱いはわかってる人から見ても特殊なんですね
ありがとうございます
ポインタのアクセス条件でメモリのサイズ・型が明確になっていること
とあったので、関数ポインタもサイズや型が明確でないといけないなら
ちゃんとわかっとかないといけないと思ったのですが、関数の扱いはわかってる人から見ても特殊なんですね
ありがとうございます
211デフォルトの名無しさん (ワッチョイ 1ec3-yDrh)
2023/12/07(木) 18:04:20.91ID:Kvlx+aNw0 >>206
あなたはどういう文脈で「関数のサイズ」が気になった・話題になったの?プアな組み込みとか?
俺は「関数のサイズ」が気になった・話題になった覚えがない
まぁコンパイル後のコード量かなぁ、関数の行数は大きく関係する
引数はスタックに積むけど「関数のサイズ」とは言わない気がする
あなたはどういう文脈で「関数のサイズ」が気になった・話題になったの?プアな組み込みとか?
俺は「関数のサイズ」が気になった・話題になった覚えがない
まぁコンパイル後のコード量かなぁ、関数の行数は大きく関係する
引数はスタックに積むけど「関数のサイズ」とは言わない気がする
212デフォルトの名無しさん (ワッチョイ 66ab-XaJC)
2023/12/07(木) 18:19:55.87ID:5AmCTrxW0 サイズ云々は
インクリメントしたときにどんだけ(何バイト)進むのかが確定してる型でないとポインタにならない
→ じゃ関数ポインタって 関数のサイズ(≒ コンパイル後の機械語化されたバイナリのサイズ) を知ってるのか?
こういう思考の流れかな?
インクリメントしたときにどんだけ(何バイト)進むのかが確定してる型でないとポインタにならない
→ じゃ関数ポインタって 関数のサイズ(≒ コンパイル後の機械語化されたバイナリのサイズ) を知ってるのか?
こういう思考の流れかな?
213デフォルトの名無しさん (ワッチョイ c55f-tBUZ)
2023/12/07(木) 19:14:37.61ID:ggcXWkJv0214デフォルトの名無しさん (ワッチョイ 8a71-yDrh)
2023/12/07(木) 19:46:05.37ID:Avn/NPEq0 >>213
その状況で必要になるのは関数のサイズじゃなくて関数ポインタのサイズや
それは他のポインタと同じ、64bitPCなら8バイト
仮定の話として、もし「関数ポインタの配列」ではなく「関数の配列」が作成できるような言語仕様にするなら、関数のサイズも決めないといけなかっただろうね
その状況で必要になるのは関数のサイズじゃなくて関数ポインタのサイズや
それは他のポインタと同じ、64bitPCなら8バイト
仮定の話として、もし「関数ポインタの配列」ではなく「関数の配列」が作成できるような言語仕様にするなら、関数のサイズも決めないといけなかっただろうね
215デフォルトの名無しさん (ワッチョイ c55f-tBUZ)
2023/12/07(木) 19:58:53.01ID:ggcXWkJv0 >>214
言われてみたらたしかにそうですねなんでポインタなのに普通の変数のように考えてしまってたんだろう・・・
言われてみたらたしかにそうですねなんでポインタなのに普通の変数のように考えてしまってたんだろう・・・
216デフォルトの名無しさん (ワッチョイ 9140-JrwL)
2023/12/07(木) 21:12:50.21ID:fQltjmnX0 void*使えるやん
217デフォルトの名無しさん (ワッチョイ 65ff-WD8q)
2023/12/07(木) 21:34:16.53ID:NYiehhGh0218はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 656b-1gjz)
2023/12/08(金) 03:48:38.29ID:tzfGEsy80 >>216
関数ポインタは void* に格納可能であると保証してないし、関数ポインタがオブジェクトを指すポインタより大きかったり表現が異なっていたりする環境はある。
出来る環境でなら使うのが悪いわけではないけど移植性は犠牲になる。
関数ポインタは void* に格納可能であると保証してないし、関数ポインタがオブジェクトを指すポインタより大きかったり表現が異なっていたりする環境はある。
出来る環境でなら使うのが悪いわけではないけど移植性は犠牲になる。
219デフォルトの名無しさん (ワッチョイ b501-8qzv)
2023/12/08(金) 06:53:57.90ID:Mdse7dEX0220デフォルトの名無しさん (ワッチョイ 1e6d-ja4y)
2023/12/08(金) 07:01:37.37ID:g0YSKcXt0 near ポインタモデル?だったかの
変数のアドレッシングサイズと
プログラムカウンタのアドレッシングサイズが違うやつ
変数のアドレッシングサイズと
プログラムカウンタのアドレッシングサイズが違うやつ
221デフォルトの名無しさん (ラクッペペ MM3e-VttM)
2023/12/08(金) 07:38:56.35ID:qsjd2ZYcM ミディアムモデルとかコンパクトモデルとか
まぁ過去の話だわな
まぁ過去の話だわな
222デフォルトの名無しさん (スップ Sdea-b4p5)
2023/12/08(金) 07:57:53.16ID:m+qJyEe4d 関数のサイズは関数のポインタをアドレス順にソートすれば求められる
そのサイズ分を実行可能領域にコピーすれば当然実行もできるよ
dllインジェクションとかでたまに使われる
そのサイズ分を実行可能領域にコピーすれば当然実行もできるよ
dllインジェクションとかでたまに使われる
223デフォルトの名無しさん (スップ Sd0a-Cw2Y)
2023/12/08(金) 08:01:58.55ID:ClTGg8d6d224はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 09:53:49.26ID:B2zBKDAb0 >>217
マイクロソフトが出している公式のチュートリアルは C++ が基礎だけど
考え方としては C でも同じなのでそのへんは適当に読み替えながら……
https://learn.microsoft.com/ja-jp/windows/win32/
Win32 API は C で使ってもそんなに不便ではないように出来てる。
特に最も基礎のこのへんの例示のコードは (C++ とは書いてあるが) たぶん C としてコンパイルさせても通る。
https://learn.microsoft.com/ja-jp/windows/win32/learnwin32/your-first-windows-program
必要な知識の分量は初心者が想像するよりずっと多いと思う。
分かりやすいドキュメントがあったとしても (そして無いこともしばしばある!) 分量は減らないので
分量というハードルをクリアするのは単純に学習量しかないし、
学習量をこなすには時間をかけるしかしょうがない。
やりたいことを自由に出来るようになるまで何も生産しない時間 (業務なら人件費に換算されるだろう) をかける余裕があるの?
というところを不安に思っちゃうわけだよ。
ここは C スレだから C プログラミングを支援したい気持ちはあるがそれがしんどい場合も多いってことも知ってる。
個人事業なら趣味と兼ねるのもアリかもしんないけど。
マイクロソフトが出している公式のチュートリアルは C++ が基礎だけど
考え方としては C でも同じなのでそのへんは適当に読み替えながら……
https://learn.microsoft.com/ja-jp/windows/win32/
Win32 API は C で使ってもそんなに不便ではないように出来てる。
特に最も基礎のこのへんの例示のコードは (C++ とは書いてあるが) たぶん C としてコンパイルさせても通る。
https://learn.microsoft.com/ja-jp/windows/win32/learnwin32/your-first-windows-program
必要な知識の分量は初心者が想像するよりずっと多いと思う。
分かりやすいドキュメントがあったとしても (そして無いこともしばしばある!) 分量は減らないので
分量というハードルをクリアするのは単純に学習量しかないし、
学習量をこなすには時間をかけるしかしょうがない。
やりたいことを自由に出来るようになるまで何も生産しない時間 (業務なら人件費に換算されるだろう) をかける余裕があるの?
というところを不安に思っちゃうわけだよ。
ここは C スレだから C プログラミングを支援したい気持ちはあるがそれがしんどい場合も多いってことも知ってる。
個人事業なら趣味と兼ねるのもアリかもしんないけど。
225デフォルトの名無しさん (ワッチョイ 6646-wNAC)
2023/12/08(金) 10:13:43.24ID:20YRNN5F0 >>224
Cコンパイラに、C++ -> C トランスレート機能あるの?
Cコンパイラに、C++ -> C トランスレート機能あるの?
226デフォルトの名無しさん (ワッチョイ 66ab-XaJC)
2023/12/08(金) 10:26:10.76ID:vLixVDpZ0 API はほとんど C インターフェースで
C++をベターCとして利用してて C++のクラスの機構はほぼ使ってない
(GDI+ とかAPIがはなっから C++ インターフェースの奴は別)
C++をベターCとして利用してて C++のクラスの機構はほぼ使ってない
(GDI+ とかAPIがはなっから C++ インターフェースの奴は別)
227デフォルトの名無しさん (ワッチョイ 9140-JrwL)
2023/12/08(金) 10:34:54.49ID:faKtyhh20 >>218
ねえよ
ねえよ
228デフォルトの名無しさん (アウアウウー Sa21-wVFe)
2023/12/08(金) 10:50:23.47ID:k3Bpg+TDa ぶっちゃけGDI+もCから使えるけどね
229デフォルトの名無しさん (ワッチョイ 66ab-XaJC)
2023/12/08(金) 10:53:01.67ID:vLixVDpZ0 >>228
あれ Cインターフェース居るのか 最終的にはCOMになってるんやっけ?
あれ Cインターフェース居るのか 最終的にはCOMになってるんやっけ?
230デフォルトの名無しさん (ワッチョイ b501-8qzv)
2023/12/08(金) 11:03:20.25ID:Mdse7dEX0 >>220-221
なんかそういうのあったかも
なんかそういうのあったかも
231デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/08(金) 11:04:41.36ID:VEgZ7oNC0 あれはPascalの呼出ではなかったかな
232はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 11:27:29.89ID:B2zBKDAb0233デフォルトの名無しさん (ワッチョイ 6548-WD8q)
2023/12/08(金) 12:03:08.97ID:7hcazM9a0 >>224
兼任ですが個人事業主でお金と時間はそれなりに自由に使えます。
3〜5ヶ月くらいはまとまった時間を取ることも可能です。
公式チュートリアルは参考にはなりますが読みやすいかと言われると微妙ですね。
知識はもちろん身につけたいのですが、そこまでの道筋は他人のコードを読む方がやはり良いのでしょうか?
書籍やサイトなどでアプリの形になるまでのチュートリアルなどは無いのでしょうか。
兼任ですが個人事業主でお金と時間はそれなりに自由に使えます。
3〜5ヶ月くらいはまとまった時間を取ることも可能です。
公式チュートリアルは参考にはなりますが読みやすいかと言われると微妙ですね。
知識はもちろん身につけたいのですが、そこまでの道筋は他人のコードを読む方がやはり良いのでしょうか?
書籍やサイトなどでアプリの形になるまでのチュートリアルなどは無いのでしょうか。
234デフォルトの名無しさん (アウアウウー Sa21-wVFe)
2023/12/08(金) 12:17:34.25ID:k3Bpg+TDa Win32APIというよりそれ以前の
C言語の知識が足りてないんじゃないのかな
C言語の知識が足りてないんじゃないのかな
235はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 13:05:38.60ID:B2zBKDAb0 >>233
何を学べば良いかすらわからないときのとっかかりとして
他人のコードを読む (何がわかってないかはわかる) ことを勧めたまでで、
良い資料があるならそれを読むにこしたことはないよ。
良い資料がないことも多いという現実はあるけど。
私は公式チュートリアルは良いほうだと思う。
知らないことを書いてあるんだからある程度は読みづらいこともあるのは当たり前のことで、
どれを読んだって似たようなもんじゃないかな。
専門的な内容をスラスラ読めるほうがおかしいでしょ。
何を学べば良いかすらわからないときのとっかかりとして
他人のコードを読む (何がわかってないかはわかる) ことを勧めたまでで、
良い資料があるならそれを読むにこしたことはないよ。
良い資料がないことも多いという現実はあるけど。
私は公式チュートリアルは良いほうだと思う。
知らないことを書いてあるんだからある程度は読みづらいこともあるのは当たり前のことで、
どれを読んだって似たようなもんじゃないかな。
専門的な内容をスラスラ読めるほうがおかしいでしょ。
236デフォルトの名無しさん (ワッチョイ 8a80-yDrh)
2023/12/08(金) 13:11:55.82ID:0BufPgxy0 さてはオメー
ふらっとC#スレで他人のコードの読み方とか延々聞いてたヤツだな?
ふらっとC#スレで他人のコードの読み方とか延々聞いてたヤツだな?
237デフォルトの名無しさん (アウアウウー Sa21-/D3x)
2023/12/08(金) 13:15:41.58ID:o54AonyOa >>206
関数もメモリにロードされるのわからず?
関数はただのマシンコードなんだからここから始まりますよ、というラベルがついてるだけだぞ
そして呼ばれた時はそこへジャンプするだけ
関数ポインタはそのマシンコードのラベルのアドレスを保持しているだけ
ポインタ以前にコンピュータの仕組みからやった方が良さそう
プログラム格納方式とか聞いたことない?
関数もメモリにロードされるのわからず?
関数はただのマシンコードなんだからここから始まりますよ、というラベルがついてるだけだぞ
そして呼ばれた時はそこへジャンプするだけ
関数ポインタはそのマシンコードのラベルのアドレスを保持しているだけ
ポインタ以前にコンピュータの仕組みからやった方が良さそう
プログラム格納方式とか聞いたことない?
238デフォルトの名無しさん (アウアウウー Sa21-wVFe)
2023/12/08(金) 13:31:18.44ID:k3Bpg+TDa >>236
なんちゃらGPTがここでこっそり質問してたら笑う
なんちゃらGPTがここでこっそり質問してたら笑う
239デフォルトの名無しさん (ワッチョイ 66cf-tBUZ)
2023/12/08(金) 13:36:30.72ID:SLmq2FCH0240デフォルトの名無しさん (ワッチョイ 9140-JrwL)
2023/12/08(金) 15:42:45.24ID:faKtyhh20 だからねえよ
そいつが勘違いしてるか、使い方が悪いかだろ
そいつが勘違いしてるか、使い方が悪いかだろ
241デフォルトの名無しさん (ワッチョイ 5df0-/D3x)
2023/12/08(金) 16:03:05.13ID:abnVL6FT0 >>206
構造体もプログラムからしたらただのメモリ領域の塊だぞ
そこに変数とかいう概念はない
構造体のメンバのオフセットでその位置を指定して書き込んだり読み込んだりするだけ
その時のオフセットの計算に利用されるのが型
変数宣言すると構造体全体サイズのメモリ領域がスタックに確保される
mallocで確保されるとヒープに確保されてそのアドレスが返る
ただそれだけ
構造体もプログラムからしたらただのメモリ領域の塊だぞ
そこに変数とかいう概念はない
構造体のメンバのオフセットでその位置を指定して書き込んだり読み込んだりするだけ
その時のオフセットの計算に利用されるのが型
変数宣言すると構造体全体サイズのメモリ領域がスタックに確保される
mallocで確保されるとヒープに確保されてそのアドレスが返る
ただそれだけ
242デフォルトの名無しさん (アウアウウー Sa21-wVFe)
2023/12/08(金) 16:08:12.70ID:k3Bpg+TDa 関数を malloc で確保するにはどうすれば良いですか?って言いそう
243デフォルトの名無しさん (ワッチョイ 5df0-/D3x)
2023/12/08(金) 16:21:49.56ID:abnVL6FT0 ちなみにメモリにロードされた関数の領域は現代のOSならば当然ながらアクセス不可能
昔はプログラム領域にアクセスできてその中のコードを動的に書き換えるという荒技をやってた人もいるらしいが
昔はプログラム領域にアクセスできてその中のコードを動的に書き換えるという荒技をやってた人もいるらしいが
244デフォルトの名無しさん (ワッチョイ 5df0-/D3x)
2023/12/08(金) 16:24:27.68ID:abnVL6FT0 ちなみにメモリ領域にマシンコードを生成してそのメモリ領域のマシンコードを即時実行するということはできる
これをJITという
最近のスクリプト言語ではこの手法がかなり用いられている
やり方は普通にメモリにマシンコードを生成して実行可能属性を付加、各種CPUキャッシュをクリアしてから
関数ポインタにキャストして実行するだけ
これをJITという
最近のスクリプト言語ではこの手法がかなり用いられている
やり方は普通にメモリにマシンコードを生成して実行可能属性を付加、各種CPUキャッシュをクリアしてから
関数ポインタにキャストして実行するだけ
245デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/08(金) 16:31:30.89ID:VEgZ7oNC0 メモリ保護機構が動いて実行できないと思う
16ビットリアルモードOSだったらできたと思うが
16ビットリアルモードOSだったらできたと思うが
246デフォルトの名無しさん (スッップ Sd0a-GtvU)
2023/12/08(金) 16:51:01.76ID:9cA1ls6dd mprotectとかVirtualProtectで実行可能にすればできる
247デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/08(金) 17:06:26.65ID:VEgZ7oNC0 しかし、それだと任意のコード実行が自由自在ってことになって・・・
まずくない?
まずくない?
248はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 17:24:04.59ID:B2zBKDAb0249はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 17:24:33.32ID:B2zBKDAb0250デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/08(金) 17:35:36.56ID:VEgZ7oNC0 セキュリティって、身内も信じちゃまずいと思うよ
251デフォルトの名無しさん (ワッチョイ eaad-snvD)
2023/12/08(金) 20:25:30.65ID:Bb4hYLfH0252デフォルトの名無しさん (ワッチョイ 1163-8qzv)
2023/12/08(金) 20:31:27.89ID:VEgZ7oNC0 企業でもそうなんですか?
管理者が望んでいないプログラムが動かせたら困るでしょう
管理者自身がやるってならちょっと違いますが
管理者が望んでいないプログラムが動かせたら困るでしょう
管理者自身がやるってならちょっと違いますが
253デフォルトの名無しさん (ワッチョイ eaad-snvD)
2023/12/08(金) 20:41:26.51ID:Bb4hYLfH0254はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2a3e-By03)
2023/12/08(金) 20:48:50.56ID:B2zBKDAb0 ???
私の理解だと >>247 は「機械語をその場で生成して即時実行するのって危なくないの?」という話だと思ってたんだけど違うの?
そういう理解だったから実行の許可を出す (メモリの実行可能属性を ON にする API を呼び出す) ことなく実行できない、
プログラマの意図しない実行は防がれるということを応えたつもりだったんだけど、運用の話なの???
「身内」ってのは「プログラムの中での機械語生成にミスったらめっちゃ暴走するやん?」という意味かと思ったけど
運用にかかわる人物という意味?
私の理解だと >>247 は「機械語をその場で生成して即時実行するのって危なくないの?」という話だと思ってたんだけど違うの?
そういう理解だったから実行の許可を出す (メモリの実行可能属性を ON にする API を呼び出す) ことなく実行できない、
プログラマの意図しない実行は防がれるということを応えたつもりだったんだけど、運用の話なの???
「身内」ってのは「プログラムの中での機械語生成にミスったらめっちゃ暴走するやん?」という意味かと思ったけど
運用にかかわる人物という意味?
255デフォルトの名無しさん (ワッチョイ ea79-4utE)
2023/12/08(金) 21:24:15.38ID:8rS6bPls0 >>225
C++黎明期はC++トランスレーター付きのCを普通に使わされたもんだよ
C++黎明期はC++トランスレーター付きのCを普通に使わされたもんだよ
256デフォルトの名無しさん (スップ Sdbf-MP5X)
2023/12/09(土) 07:42:54.58ID:Z2D8kHNzd >>250
それなら自作のプログラムをコンパイルして実行できる環境がすでにまずいだろw
パソコンをゲーム機みたいにしたいのかい
読み書きできるメモリを実行可能属性にできるというだけで
書き込み不可能なシステムメモリに書き込めるようにできるわけではない
それなら自作のプログラムをコンパイルして実行できる環境がすでにまずいだろw
パソコンをゲーム機みたいにしたいのかい
読み書きできるメモリを実行可能属性にできるというだけで
書き込み不可能なシステムメモリに書き込めるようにできるわけではない
257デフォルトの名無しさん (ワッチョイ ff46-vhj2)
2023/12/09(土) 08:06:29.62ID:NnZXyC0n0 本日のWebは、
・帝乃三姉妹は案外、チョロい。 → 本誌で既読
・レッドブルー → 本誌で既読
・からかい上手の高木さん → ゲッサンで既読
どうにかしてよ、A立。たとえば響5巻無料Webでもとか。
そういえば、高木さんの人の将棋のやつ、マガポケでも終わったね。
・帝乃三姉妹は案外、チョロい。 → 本誌で既読
・レッドブルー → 本誌で既読
・からかい上手の高木さん → ゲッサンで既読
どうにかしてよ、A立。たとえば響5巻無料Webでもとか。
そういえば、高木さんの人の将棋のやつ、マガポケでも終わったね。
258デフォルトの名無しさん (ワッチョイ 97cf-TEND)
2023/12/09(土) 08:12:11.03ID:zYR2UmFI0 いわゆるroot権限が必要な行為は実行出来ないね
でも、mprotectの説明によると
> 注意
Linux では、(カーネル vsyscall 領域以外の) 任意のプロセスアドレス空間において mprotect ()を呼び出すことが、常に許されている。
となってるから、Node.js(node)とかJITを行うプログラムがユーザー権限で動くのだろう
単に利便性の為だろう
でも、mprotectの説明によると
> 注意
Linux では、(カーネル vsyscall 領域以外の) 任意のプロセスアドレス空間において mprotect ()を呼び出すことが、常に許されている。
となってるから、Node.js(node)とかJITを行うプログラムがユーザー権限で動くのだろう
単に利便性の為だろう
259デフォルトの名無しさん (ワッチョイ 9f07-h0RM)
2023/12/12(火) 20:44:31.35ID:3wiw5swR0 staticグローバル変数を含んだ動的ライブラリーを動的リンクをする場合はグローバル変数が初期化されるのはmain実行前の認識です。
同じプロセス内で再度初期化したい場合は別途初期化の関数を用意してないと不可能でしょうか?
動的ロード(dlopen)を使用した場合はdlcloseして再度dlopenした場合は初期化されますか?
同じプロセス内で再度初期化したい場合は別途初期化の関数を用意してないと不可能でしょうか?
動的ロード(dlopen)を使用した場合はdlcloseして再度dlopenした場合は初期化されますか?
260デフォルトの名無しさん (ワッチョイ d701-Qbcu)
2023/12/12(火) 21:01:30.67ID:bMo3JLCK0 >>259
やってみれば?
やってみれば?
261デフォルトの名無しさん (ワッチョイ 17f1-tASO)
2023/12/12(火) 21:15:07.81ID:6C/zc+S/0 明示的に初期化処理を書くのが吉
262デフォルトの名無しさん (ワッチョイ d701-Qbcu)
2023/12/12(火) 21:58:30.38ID:bMo3JLCK0 >>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
>動的ロード(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
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 日本損失1.7兆円に修正 中国渡航自粛の影響試算 [蚤の市★]
- NY円、一時1ユーロ=180円台まで下落…1999年のユーロ導入以来初 [蚤の市★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 【外交】日中関係悪化、長期化の様相 2012年には自動車輸出80%減も ロイター★3 [1ゲットロボ★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 【実況】博衣こよりのえちえち朝こよ🧪 ★2
- 【実況】博衣こよりのえちえち朝こよ🧪
- カカロット、腰痛い
- 【!?】高市早苗「靖国神社電撃参拝プラン」浮上!これもう戦争だろ… [481941988]
- 【超悲報】中国への武力行使、世論調査で「賛成」「どちらかといえば賛成」48.8% 「反対」「どちらかといえば反対」の44.2%を上回る [314039747]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
