!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:hHEGE8Ol0274デフォルトの名無しさん (ワッチョイ e34d-e8vO)
2023/12/17(日) 19:32:39.54ID:MfQY7qyQ0 >>273
?
?
275デフォルトの名無しさん (ワッチョイ cb62-dXDU)
2023/12/17(日) 22:10:52.33ID:UmzU+/ux0 シャローコピーはディープコピーと並べて語るときに区別するための用語であって、
代入は普通に代入と呼ぶのが、コミュニケーションにおいて適切だ、
と、自分が聞かれた場合なら答えるし、レビュー依頼された場合なら指摘します
代入は普通に代入と呼ぶのが、コミュニケーションにおいて適切だ、
と、自分が聞かれた場合なら答えるし、レビュー依頼された場合なら指摘します
276デフォルトの名無しさん (ワッチョイ e34d-e8vO)
2023/12/18(月) 00:59:34.37ID:Mvyif4Hn0 >>275
シャローコピーと言えると思いますか?
シャローコピーと言えると思いますか?
277デフォルトの名無しさん (ワッチョイ e34d-e8vO)
2023/12/18(月) 00:59:46.13ID:Mvyif4Hn0 指摘する前に答えろよ無能
278デフォルトの名無しさん (ワッチョイ 63c9-/1Gs)
2023/12/18(月) 02:31:45.63ID:BtLCMjh/0 シャローコピーでしょ
2つのポインタが同じ内容になってる訳だから
ちなみに、変数定義時の代入文はバインド(束縛する)と言った方が適切だな
2つのポインタが同じ内容になってる訳だから
ちなみに、変数定義時の代入文はバインド(束縛する)と言った方が適切だな
279デフォルトの名無しさん (ワッチョイ dee7-DkQ9)
2023/12/18(月) 09:17:00.35ID:qIC94rZG0 >>276
言えません
言えません
280デフォルトの名無しさん (ワッチョイ 16ab-zIzn)
2023/12/18(月) 09:38:52.52ID:RUscEa1Z0 シャローコピーの要件からすると
ポインタ変数にアドレスを代入するだけでは成立せずに
リファレンス可能なオブジェクトを指してるポインタでないとまずい気がする
char *p = (char *)0x000; /* アドレスを代入してるぞ */
ポインタ変数にアドレスを代入するだけでは成立せずに
リファレンス可能なオブジェクトを指してるポインタでないとまずい気がする
char *p = (char *)0x000; /* アドレスを代入してるぞ */
281デフォルトの名無しさん (ワッチョイ 6bbb-/1Gs)
2023/12/18(月) 10:45:42.59ID:RHsCrDES0 意見分かれますね
ではstrdupはディープコピーだと言えますか?
ではstrdupはディープコピーだと言えますか?
282デフォルトの名無しさん (ワッチョイ 4b63-3PPy)
2023/12/18(月) 10:52:49.41ID:kauj19Ts0 C言語にはオブジェクトと言う概念がないからなあ
お気持ちとしてどうかと聞かれれば、人それぞれで
お気持ちとしてどうかと聞かれれば、人それぞれで
283デフォルトの名無しさん (ワッチョイ efc0-UNLj)
2023/12/18(月) 10:54:27.09ID:PYgWDYAB0 いやそれぬるぽ
284デフォルトの名無しさん (ワッチョイ d663-/1Gs)
2023/12/18(月) 12:07:36.53ID:ccgmPeZz0285はちみつ餃子 ◆8X2XSCHEME (ワッチョイ d23e-/274)
2023/12/18(月) 12:57:51.87ID:vbeDxg2G0 それは C の概念モデルを前提にしていいだろ。
286デフォルトの名無しさん (ワッチョイ 16ab-zIzn)
2023/12/18(月) 14:16:20.90ID:RUscEa1Z0 C++ の 参照だったら概念含めてそのまんまだったんだろうな
int a;
int& b = a;
int a;
int& b = a;
287デフォルトの名無しさん (ワッチョイ 12ad-9NgZ)
2023/12/18(月) 14:52:23.89ID:kcYk1zSZ0 >>271
言えると思う。
言えると思う。
288デフォルトの名無しさん (スフッ Sd32-3CSV)
2023/12/18(月) 16:19:13.36ID:xiaHc48Fd 内容が値を表すメモリの位置 = オブジェクト
289デフォルトの名無しさん (ワッチョイ cb62-dXDU)
2023/12/18(月) 17:05:11.17ID:pYYMlhZJ0290デフォルトの名無しさん (ワッチョイ 4b63-3PPy)
2023/12/18(月) 17:09:52.77ID:kauj19Ts0 代入元の配列がスタック上なのかどうか、そちらの方がC言語的には重要
291デフォルトの名無しさん (ワッチョイ 16ab-zIzn)
2023/12/18(月) 17:12:05.22ID:RUscEa1Z0 関数内の自動変数へのポインタを関数の外へ持ち出したりすると…
292デフォルトの名無しさん (ワッチョイ 5f01-3PPy)
2023/12/18(月) 18:48:36.94ID:epkANb1d0 何かのポインタをメンバに持つ構造体の実体の複写
293デフォルトの名無しさん (ワッチョイ d663-/1Gs)
2023/12/18(月) 23:27:08.16ID:ccgmPeZz0294デフォルトの名無しさん (ワッチョイ 16cf-fH6R)
2023/12/18(月) 23:33:27.08ID:a4PUOo8N0 コピーには違いないけどディープとかシャローとか区別できるものじゃないってことだろ
295デフォルトの名無しさん (ワッチョイ 1279-F8eA)
2023/12/18(月) 23:40:20.33ID:6hD73gHu0296デフォルトの名無しさん (ワッチョイ 4b46-AQ+F)
2023/12/19(火) 08:23:42.15ID:ijJJQ5/r0297デフォルトの名無しさん (スププ Sd32-3CSV)
2023/12/19(火) 09:34:26.09ID:+6PK9xZxd シャローコピーとかディープコピーとかはもともとPythonの概念ですよね?
298デフォルトの名無しさん (ワッチョイ 2701-NGr8)
2023/12/19(火) 09:54:57.24ID:hCROhcq70 は?
299デフォルトの名無しさん (ワッチョイ 2701-3PPy)
2023/12/19(火) 10:05:08.86ID:cwbunCZy0 >>289
馬鹿ってすぐ断定するよな
馬鹿ってすぐ断定するよな
300デフォルトの名無しさん (ワッチョイ 77cd-UNLj)
2023/12/19(火) 10:07:03.49ID:KoTx3gw20 コピーとクローンは違うよな?
301デフォルトの名無しさん (ラクッペペ MMde-Y9Ov)
2023/12/19(火) 10:13:44.25ID:MIravlrKM >>297
C++やJavaあたりが元だと思うけど
C++やJavaあたりが元だと思うけど
302デフォルトの名無しさん (ワッチョイ 4b63-3PPy)
2023/12/19(火) 10:17:05.18ID:gboy58yC0 そういうことで、
Cにはシャローコピーとかディープコピーとかの概念はない
Cにはシャローコピーとかディープコピーとかの概念はない
303デフォルトの名無しさん (ワッチョイ cb62-dXDU)
2023/12/19(火) 10:51:12.24ID:E9BI8x9B0 少し前までスマートな人がたくさんいたのにいつの間にかバカしか居なくなった
304デフォルトの名無しさん (ワッチョイ cb62-dXDU)
2023/12/19(火) 10:55:10.13ID:E9BI8x9B0 >>297
違います
違います
305デフォルトの名無しさん (ワッチョイ 5ee1-hm9h)
2023/12/19(火) 11:32:45.68ID:df21V+Ma0 >>301
LISPじゃね?深いコピーは演習なんかの定番だった気がする
LISPじゃね?深いコピーは演習なんかの定番だった気がする
306デフォルトの名無しさん (スップ Sd52-54/p)
2023/12/19(火) 13:45:42.10ID:3Nu9QseCd307デフォルトの名無しさん (スププ Sd32-Hm2B)
2023/12/19(火) 15:01:13.02ID:+6PK9xZxd Pythonの解説書には大概、ディープコピーとシャローコピーが載ってますよ
308はちみつ餃子 ◆8X2XSCHEME (ワッチョイ d23e-/274)
2023/12/19(火) 15:28:24.33ID:J0ExAcTK0 >>305
もちろんそういう状況を扱っている事例は数多くある。
ただ、ざっと見た感じでは古いマニュアルでは「再帰的」とか「共有」とかいった語で説明するのが普通っぽい。
深い/浅いといった言い方が発生したのはもっと新しい言語でのことだと思う。
もちろんそういう状況を扱っている事例は数多くある。
ただ、ざっと見た感じでは古いマニュアルでは「再帰的」とか「共有」とかいった語で説明するのが普通っぽい。
深い/浅いといった言い方が発生したのはもっと新しい言語でのことだと思う。
309デフォルトの名無しさん (ワッチョイ 2701-3PPy)
2023/12/19(火) 19:44:57.82ID:cwbunCZy0 複オジが粘着してそう
310デフォルトの名無しさん (ワッチョイ 77cd-UNLj)
2023/12/19(火) 19:48:51.51ID:KoTx3gw20 つか、Cは書いてる人にしか型が分からないからそんな器用な事は出来ないよな?
どっちのコピーも自前でちまちま作るしか無い
どっちのコピーも自前でちまちま作るしか無い
311デフォルトの名無しさん (ワッチョイ 92de-IA1d)
2023/12/19(火) 19:53:51.13ID:nmJwtfK30 呼称にこだわってる限りCなんて使えない
お上品な他の言語使ってりゃいいじゃん
お上品な他の言語使ってりゃいいじゃん
312デフォルトの名無しさん (ワッチョイ cbd5-dXDU)
2023/12/20(水) 05:56:32.08ID:r5p/Itr10 >>310
その通りですよ
私はユーザが定義する集成型(structみたいなもの)を、PCをまたいでリモートコンピュータ上にコピーするもの(WindowsのC#とHP-UXのC)、を仕事で作った事があるのだけど、それをやるには型定義からガッツリ関わる仕組みを構築しないと無理なのよ。
自分はエクセルでやった(そして完璧にはできず特例処理だらけになった)けど、普通はDDLとか独自に作るでしょ
上の方で最初に話題出したヒトは多分、どういう問題空間でディープコピーとかシャローコピーを話題にする必要が生じるのか【すら】分かってないよ
そうだね 複オジ とか言われてた人の雰囲気と似てるね
その通りですよ
私はユーザが定義する集成型(structみたいなもの)を、PCをまたいでリモートコンピュータ上にコピーするもの(WindowsのC#とHP-UXのC)、を仕事で作った事があるのだけど、それをやるには型定義からガッツリ関わる仕組みを構築しないと無理なのよ。
自分はエクセルでやった(そして完璧にはできず特例処理だらけになった)けど、普通はDDLとか独自に作るでしょ
上の方で最初に話題出したヒトは多分、どういう問題空間でディープコピーとかシャローコピーを話題にする必要が生じるのか【すら】分かってないよ
そうだね 複オジ とか言われてた人の雰囲気と似てるね
313デフォルトの名無しさん (ワッチョイ b74b-gvj7)
2023/12/20(水) 09:35:46.96ID:/uXb+00h0 UPLIFT プレミアム・サービスのお知らせ
https://uplift.5ch.net/
UPLIFT 主な特典
・連続投稿の規制を緩和します。
・スレッド作成時の規制を緩和します。
・5ch.netのスレッド表示画面に表示される広告を除去します。
・5ch.net専用ブラウザで5ch.netの過去ログを閲覧できるようになります。
・海外からのアクセス・ホスト経由からでも書き込みができるようになります。
・書き込みが規制されているプロバイダーからでも書き込みができるようになります。
・5ch.netを安定して利用できるように運営を支援できます。
5ちゃんねるを存続させるためには、皆様のご協力が必要です。
最後まで御精読いただきありがとうございました。
https://uplift.5ch.net/
UPLIFT 主な特典
・連続投稿の規制を緩和します。
・スレッド作成時の規制を緩和します。
・5ch.netのスレッド表示画面に表示される広告を除去します。
・5ch.net専用ブラウザで5ch.netの過去ログを閲覧できるようになります。
・海外からのアクセス・ホスト経由からでも書き込みができるようになります。
・書き込みが規制されているプロバイダーからでも書き込みができるようになります。
・5ch.netを安定して利用できるように運営を支援できます。
5ちゃんねるを存続させるためには、皆様のご協力が必要です。
最後まで御精読いただきありがとうございました。
314デフォルトの名無しさん (ワッチョイ e3f0-HAvR)
2023/12/23(土) 02:06:44.23ID:cGlPuzRM0315デフォルトの名無しさん (ワッチョイ 53d2-TKg5)
2023/12/23(土) 10:35:35.90ID:1vO40jtV0 smalltalk、凄いな!私はバートランド・メイヤーさん、すごく尊敬してます
javadocとかdoxygenみたいなシステムも、もうあの時代に彼はすでに形にして世に出してるんですよね
例外の説明とか、プログラムを契約の履行に例える話とかもそうだし、あとコメント論とかもイケてるんですよ
頭良すぎて周りが付いてくのに何年もかかってる気がする
javadocとかdoxygenみたいなシステムも、もうあの時代に彼はすでに形にして世に出してるんですよね
例外の説明とか、プログラムを契約の履行に例える話とかもそうだし、あとコメント論とかもイケてるんですよ
頭良すぎて周りが付いてくのに何年もかかってる気がする
316デフォルトの名無しさん (ワッチョイ 53d2-TKg5)
2023/12/23(土) 10:43:58.55ID:1vO40jtV0 てかまあ、Cのスレだね
でもCで構造体リモートコピーするにはさ、みたいな話をしても、多分誰も乗ってきてくれないよね
でもCで構造体リモートコピーするにはさ、みたいな話をしても、多分誰も乗ってきてくれないよね
317デフォルトの名無しさん (ワッチョイ 5363-y73S)
2023/12/23(土) 11:24:31.92ID:MLKmoxlx0 それは話の持ってき方。プレゼン上手ならできる
318デフォルトの名無しさん (ワッチョイ 6f97-xkue)
2023/12/23(土) 11:28:28.28ID:j8bI1ONF0 そーゆーのに憧れてる層には土方言語のCはいらんだろw
319デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
2023/12/23(土) 11:41:06.10ID:PYuibGoS0 だからさ、C言語の変数や構造体内の型宣言なんてイイカゲンなんだからそう言う話ははなから無理なんだよ
320デフォルトの名無しさん (ワッチョイ 53d2-TKg5)
2023/12/23(土) 11:42:27.32ID:1vO40jtV0 メッセージというか伝送パケットを作る話とかはどうですかね(皆さん興味ありますか)
タグ・レングス・バリュー形式がー、とか
バイナリvs文字列とか
(文字列にして伝送するのって遅いと思うでしょ、意外と速度okだったりします)
あと、message pack とか
タグ・レングス・バリュー形式がー、とか
バイナリvs文字列とか
(文字列にして伝送するのって遅いと思うでしょ、意外と速度okだったりします)
あと、message pack とか
321デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
2023/12/23(土) 11:44:11.18ID:PYuibGoS0 ゼロ(0x00)が送れないから文字列は無理
322デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
2023/12/23(土) 11:46:23.81ID:PYuibGoS0 経路によっては7ビット+パリティに解釈されるからバイナリは無理
323デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
2023/12/23(土) 11:49:57.82ID:PYuibGoS0 結局、デバイスとかハードの特性を理解する必要があるんだよね
324デフォルトの名無しさん (ワッチョイ 5363-y73S)
2023/12/23(土) 11:54:07.08ID:MLKmoxlx0 メッセージの受け渡しでハードの特性まで理解する必要はないだろう
325デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
2023/12/23(土) 11:57:42.36ID:PYuibGoS0 だっていまどきC言語使ってる人なんて、デバイス寄りのハードウェアコントロールとか、チープなCPUに搭載するソフトとかだろ?
326デフォルトの名無しさん (ワッチョイ 53d2-TKg5)
2023/12/23(土) 11:59:57.84ID:1vO40jtV0 >>321
おっと、反応サンキュー
0x00をデータとして送るのってあるある話題ですよねw
確かに「通信全部が」文字列で、nul文字終端だとすると無理。
でも、アタマにデータサイズがあって、それからデータがある形式ならば、仮に文字列が続いてると見える中に、まるでゴミ文字みたいに0x00が入っててもokなのよ
実は今のHTTPもそうなってたはず
おっと、反応サンキュー
0x00をデータとして送るのってあるある話題ですよねw
確かに「通信全部が」文字列で、nul文字終端だとすると無理。
でも、アタマにデータサイズがあって、それからデータがある形式ならば、仮に文字列が続いてると見える中に、まるでゴミ文字みたいに0x00が入っててもokなのよ
実は今のHTTPもそうなってたはず
327デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
2023/12/23(土) 12:04:44.24ID:PYuibGoS0328デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
2023/12/23(土) 12:09:04.65ID:PYuibGoS0 最初からunsignd charのポインタとサイズを構造体にして扱えば良いだけ
329デフォルトの名無しさん (ワッチョイ 53d2-TKg5)
2023/12/23(土) 12:09:04.99ID:1vO40jtV0 大昔は7ビットしか通らない経路あったねw
5baseとかの時代でしょうか
今は、8ビットを8ビットで伝送するほうが稀でしょうね
8ビットを10ビットで符号化することで、ゼロやイチが連続する数が少なくなるようにすることで、データ自体でタイミングを取れる方法をIBMが発明したとかで
だからこんなに速くなったそうです
5baseとかの時代でしょうか
今は、8ビットを8ビットで伝送するほうが稀でしょうね
8ビットを10ビットで符号化することで、ゼロやイチが連続する数が少なくなるようにすることで、データ自体でタイミングを取れる方法をIBMが発明したとかで
だからこんなに速くなったそうです
330デフォルトの名無しさん (ワッチョイ 53d2-TKg5)
2023/12/23(土) 12:13:58.12ID:1vO40jtV0 >>327
多分あなたの危惧が伝わってないです
改修案件でバグを作り込んだのに動作確認せずリリースしてしまうっていう事なら、工程管理ができてないって話でプロとしてダメ
メッセージ形式の仕様とは関係ないですね
多分あなたの危惧が伝わってないです
改修案件でバグを作り込んだのに動作確認せずリリースしてしまうっていう事なら、工程管理ができてないって話でプロとしてダメ
メッセージ形式の仕様とは関係ないですね
331デフォルトの名無しさん (ワッチョイ 53d2-TKg5)
2023/12/23(土) 12:17:04.95ID:1vO40jtV0 (…もしや「複オジ」さんだったかな?)
332デフォルトの名無しさん (ワッチョイ 6f97-xkue)
2023/12/23(土) 12:56:43.79ID:j8bI1ONF0 やっぱりめんどくさい奴だったかw
あんたにレスがもらえないのはテーマのせいじゃないとわかれ
あんたにレスがもらえないのはテーマのせいじゃないとわかれ
333デフォルトの名無しさん (ワッチョイ 43a4-BWWG)
2023/12/23(土) 18:17:03.63ID:PYuibGoS0 >>330
安易に文字列を使う仕様にしてるとバイナリ通らないの忘れるし思わぬバグを生む原因になるから、最初からバイナリ配列にするか文字列操作関数を一切使わない様にしないとな
安易に文字列を使う仕様にしてるとバイナリ通らないの忘れるし思わぬバグを生む原因になるから、最初からバイナリ配列にするか文字列操作関数を一切使わない様にしないとな
334デフォルトの名無しさん (ワントンキン MM07-TKg5)
2023/12/24(日) 00:00:50.96ID:B84K7ZI6M >>332
うん…(悲しい)
うん…(悲しい)
335デフォルトの名無しさん (ワッチョイ 4602-UkJf)
2024/01/05(金) 10:30:41.51ID:ph0QLfWd0 Perlとかで利用している設定ファイルがあるのですが、
Cで書いたプログラムでも同じファイルを設定ファイルとして読み込みたいです
設定ファイルですが、このような感じです
val = abc
str1 = $val/AAA
Perlでは「$val」を展開し、str1に「abc/AAA」と設定してくれるのですが、
Cから読み込む場合は、自分で展開する必要があると思ってます
それをやってくれるライブラリや関数等、ありますでしょうか
Cで書いたプログラムでも同じファイルを設定ファイルとして読み込みたいです
設定ファイルですが、このような感じです
val = abc
str1 = $val/AAA
Perlでは「$val」を展開し、str1に「abc/AAA」と設定してくれるのですが、
Cから読み込む場合は、自分で展開する必要があると思ってます
それをやってくれるライブラリや関数等、ありますでしょうか
336デフォルトの名無しさん (ワッチョイ e563-7PFe)
2024/01/05(金) 10:49:08.39ID:xgizPOi+0 その程度なら、自作できるだろう
337デフォルトの名無しさん (スププ Sd62-Blk0)
2024/01/05(金) 11:38:06.91ID:VxELzJcZd #define val abc
338デフォルトの名無しさん (スププ Sd62-Blk0)
2024/01/05(金) 12:10:00.56ID:VxELzJcZd enum { val = abc }
339デフォルトの名無しさん (スププ Sd62-Blk0)
2024/01/05(金) 12:13:38.69ID:VxELzJcZd enum の方はエラーになる
340デフォルトの名無しさん (スププ Sd62-Blk0)
2024/01/05(金) 12:27:56.38ID:VxELzJcZd #define もエラーになる
341デフォルトの名無しさん (スププ Sd62-Blk0)
2024/01/05(金) 12:30:33.41ID:VxELzJcZd #define val "abc"
342デフォルトの名無しさん (ワッチョイ 651a-R/a6)
2024/01/05(金) 12:30:55.30ID:qVR6C9yQ0 >>335
そういうのをどう解決するかを自分が考えて実現するのが楽しいのに…
自分なら
設定ファイルを「環境変数を設定する」に変更して、perlもCも環境変数から設定項目を読む に変更する。
そのために
perl側を変更する権利を得る
OSに依存して良い条件
を確保する様に、喫煙所に通う
そういうのをどう解決するかを自分が考えて実現するのが楽しいのに…
自分なら
設定ファイルを「環境変数を設定する」に変更して、perlもCも環境変数から設定項目を読む に変更する。
そのために
perl側を変更する権利を得る
OSに依存して良い条件
を確保する様に、喫煙所に通う
343デフォルトの名無しさん (ワッチョイ 651a-R/a6)
2024/01/05(金) 12:49:25.99ID:qVR6C9yQ0 >>335
別の解決案
・Cに優しい形式(右辺を全部展開した形で、イコール前後のスペースもなし)で吐き直すツールを、perlで作る
・自分で全部Cで作る
・lex/yacc を使って軽言語解釈ルーチンを作る
それぞれデメリットがあって、質問に直接答える「そういったライブラリはあるか」に一番合ってるのが、最後のlex/yaccだけど、それは一番バカらしい答えでもある。お好きに
別の解決案
・Cに優しい形式(右辺を全部展開した形で、イコール前後のスペースもなし)で吐き直すツールを、perlで作る
・自分で全部Cで作る
・lex/yacc を使って軽言語解釈ルーチンを作る
それぞれデメリットがあって、質問に直接答える「そういったライブラリはあるか」に一番合ってるのが、最後のlex/yaccだけど、それは一番バカらしい答えでもある。お好きに
344デフォルトの名無しさん (ワッチョイ 651a-R/a6)
2024/01/05(金) 12:51:00.35ID:qVR6C9yQ0 >>337
君、答える側になれる実力ないだろ
君、答える側になれる実力ないだろ
345デフォルトの名無しさん (ワッチョイ 065f-414C)
2024/01/05(金) 12:54:37.44ID:KwPCWpVD0 sscanfで読めばよかろうもん
346はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 823e-slPv)
2024/01/05(金) 13:07:45.12ID:t0UUGhQq0 >>335
その説明では何をやりたいのか伝わってないので仕様書を書いてみて。
理想的なライブラリがあったとして、そのテストケースという形式でもいい。
曖昧模糊な要望だと説明が下手なだけでなく説明しようとしている内容が見当違いな可能性を疑う。
(いわゆるXY問題)
その説明では何をやりたいのか伝わってないので仕様書を書いてみて。
理想的なライブラリがあったとして、そのテストケースという形式でもいい。
曖昧模糊な要望だと説明が下手なだけでなく説明しようとしている内容が見当違いな可能性を疑う。
(いわゆるXY問題)
347デフォルトの名無しさん (ワッチョイ 2eab-zkkm)
2024/01/05(金) 13:32:24.69ID:38bnxq2E0 Cのソースでその展開もどきを行いたいのか
Cで書いてるプログラムがとあるファイル食って文字処理するんだけど、同じことを実現したいのか
Cで書いてるプログラムがとあるファイル食って文字処理するんだけど、同じことを実現したいのか
348デフォルトの名無しさん (ワッチョイ 45bb-dhuT)
2024/01/05(金) 13:37:38.46ID:M4U6Kwpw0349はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 823e-slPv)
2024/01/05(金) 14:59:38.28ID:t0UUGhQq0 どうしても既存の設定ファイルをそのまま使いたい、それを処理できるようなものが欲しいということなら
そんな都合の良いものがあるわけない。 自分で書くしかしょうがない。
完璧にそのままのフォーマットでなくおおよそ似た機能があればよいなら
TOML とか JSON とか YAML とかの広く使われているフォーマットを採用したほうが面倒が少ない。
Perl でも C でも処理できるライブラリがいくつもあるし。
これらには変数展開のような機能はないが、
設定ファイルで動的な操作を可能にするのは問題を引き起こしやすいと考えられていて、
アプリケーション側でやるかプリプロセッサでなんとかしたほうがよい。
(強いて言えば YAML のエイリアス機能は変数のようなものとも言えるけど文字列を結合したりは出来ない。)
逆に設定どころではなくユーザーによるカスタマイズをどんどんやってもらうようなものなら
Lua とかのアプリケーション拡張言語を埋め込んでしまうという方法もとれる。
そんな都合の良いものがあるわけない。 自分で書くしかしょうがない。
完璧にそのままのフォーマットでなくおおよそ似た機能があればよいなら
TOML とか JSON とか YAML とかの広く使われているフォーマットを採用したほうが面倒が少ない。
Perl でも C でも処理できるライブラリがいくつもあるし。
これらには変数展開のような機能はないが、
設定ファイルで動的な操作を可能にするのは問題を引き起こしやすいと考えられていて、
アプリケーション側でやるかプリプロセッサでなんとかしたほうがよい。
(強いて言えば YAML のエイリアス機能は変数のようなものとも言えるけど文字列を結合したりは出来ない。)
逆に設定どころではなくユーザーによるカスタマイズをどんどんやってもらうようなものなら
Lua とかのアプリケーション拡張言語を埋め込んでしまうという方法もとれる。
350デフォルトの名無しさん (ワッチョイ c2b5-R5Zd)
2024/01/05(金) 15:39:37.20ID:mdj5x9Xd0 Perlにそんな便利機能あったっけ
351デフォルトの名無しさん (ワッチョイ c6bb-bJ3A)
2024/01/05(金) 18:09:30.90ID:xFVV62H30 Cは遅延評価を積極的にやるための言語ではないからなあ
C++やC#ならあるんだけどね
lex/yacc はちょっと古くて
今なら flex/byson ですね
C++やC#ならあるんだけどね
lex/yacc はちょっと古くて
今なら flex/byson ですね
352デフォルトの名無しさん (ワッチョイ 42ad-nK/n)
2024/01/06(土) 15:06:00.15ID:NPThFXTg0 $ の変数展開しかやらないなら複雑な構文解析にはならないから全部自作した方が楽なのでは?
少し楽したいなら perl に読ませて $ 展開させた文字列に変換して出力したのを C の側で読むとかね。そうすると少し楽ができる。
これの問題は perl が使えない環境では動かないことかな。
少し楽したいなら perl に読ませて $ 展開させた文字列に変換して出力したのを C の側で読むとかね。そうすると少し楽ができる。
これの問題は perl が使えない環境では動かないことかな。
353デフォルトの名無しさん (ワッチョイ 2ecf-9iEs)
2024/01/06(土) 16:25:37.13ID:2Gstkfh+0 今なら packcc おすすめ
354はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 823e-slPv)
2024/01/06(土) 16:27:28.51ID:iX+vez910 設定ファイルのデータ構造が key/value の組だけ、 value は単なる文字列という程度なら
パーサジェネレータはかえって邪魔じゃないのかな。
パーサジェネレータはかえって邪魔じゃないのかな。
355デフォルトの名無しさん (ワッチョイ 651a-R/a6)
2024/01/06(土) 21:36:47.69ID:8zwGVkiA0 lex/yaccは使った事ない人にはハードル高いだろうね。逆に、使い方が分かると何でもそれでやりたがる時期が来る。どんなツールや言語でもそうだろうけど
356デフォルトの名無しさん (ワッチョイ b2c2-dhuT)
2024/01/06(土) 21:39:52.15ID:YhaQaYGw0 BNF書いても大した量にならないだろうし俺ならフルスクラッチで書いちゃうな
357デフォルトの名無しさん (ワッチョイ 651a-R/a6)
2024/01/06(土) 21:45:36.68ID:8zwGVkiA0 で、設定ファイル、shで環境変数を設定すりゃ済む、という案に誰も反応してもらえないんだが、どうだい? windows ならcmdだろうけど
設定項目ってのは、パス文字列とか、メモリサイズとか、ほぼ固定だけどあとから変えたい場合もあろう、っていう定数だよね。環境変数ってまさにその目的だと思ってる。
ドル記号で一時値の展開もできる。Cからも簡単に読める。
設定項目ってのは、パス文字列とか、メモリサイズとか、ほぼ固定だけどあとから変えたい場合もあろう、っていう定数だよね。環境変数ってまさにその目的だと思ってる。
ドル記号で一時値の展開もできる。Cからも簡単に読める。
358デフォルトの名無しさん (ワッチョイ 651a-R/a6)
2024/01/06(土) 21:56:18.04ID:8zwGVkiA0 shで、設定ファイル兼、実行ファイル起動ラッパを書いて、利用者には直接実行ファイルじゃなくラッパを起動せよと説明して
export XXX_ROOT=/var/xxx
export XXX_INPUT_DIR=${XXX_ROOT}/in
export XXX_OUTPUT_DIR=${XXX_ROOT}/out
export XXX_READBUF_SIZE=32768
exec ${XXX_ROOT}/bin/xxx
Cで読む処理は
get_conf_str(...) //文字列項目用
get_conf_i64(...) //整数項目用
どっちもパラメータに
(環境変数名, 環境変数が未設定時の具体値)
って指定する。これが、ソース上の1箇所でズラッと並ぶと「設定項目名とハードコード値の、一覧表」風になるの。分かる?
export XXX_ROOT=/var/xxx
export XXX_INPUT_DIR=${XXX_ROOT}/in
export XXX_OUTPUT_DIR=${XXX_ROOT}/out
export XXX_READBUF_SIZE=32768
exec ${XXX_ROOT}/bin/xxx
Cで読む処理は
get_conf_str(...) //文字列項目用
get_conf_i64(...) //整数項目用
どっちもパラメータに
(環境変数名, 環境変数が未設定時の具体値)
って指定する。これが、ソース上の1箇所でズラッと並ぶと「設定項目名とハードコード値の、一覧表」風になるの。分かる?
359デフォルトの名無しさん (ワッチョイ 651a-R/a6)
2024/01/06(土) 22:02:36.24ID:8zwGVkiA0 get_conf_str() と get_conf_i64() の中身は
getenv() を使って簡単に実装できる、のは分かるよね?
getenv() を使って簡単に実装できる、のは分かるよね?
360デフォルトの名無しさん (ワッチョイ e1f0-P53C)
2024/01/06(土) 22:09:41.74ID:LvNnK4+W0 単なる文字列だけなら正規表現の置換でいいだろ
361デフォルトの名無しさん (ワッチョイ 651a-R/a6)
2024/01/06(土) 22:20:12.76ID:8zwGVkiA0 struct conf_t {
char* input_dir
char* output_dir;
int64_t readbuf_size;
} g_conf;
文字列項目はC++だとstd::string にする所だが、Cだとstrdup(的なもの)で実装しても良いんじゃないかい。
g_conf.inputdir = get_conf_str(
"XXX_INPUT_DIR", "/var/xxx/in");
g_conf.outputdir = get_conf_str(
"XXX_OUTPUT_DIR", "/var/xxx/out");
g_conf.readbuf_size = get_conf_i64(
"XXX_READBUF_SIZE", 32768);
とかってするとソース上で一覧表風になるでしょ。タブ文字も入れて桁そろえて。
char* input_dir
char* output_dir;
int64_t readbuf_size;
} g_conf;
文字列項目はC++だとstd::string にする所だが、Cだとstrdup(的なもの)で実装しても良いんじゃないかい。
g_conf.inputdir = get_conf_str(
"XXX_INPUT_DIR", "/var/xxx/in");
g_conf.outputdir = get_conf_str(
"XXX_OUTPUT_DIR", "/var/xxx/out");
g_conf.readbuf_size = get_conf_i64(
"XXX_READBUF_SIZE", 32768);
とかってするとソース上で一覧表風になるでしょ。タブ文字も入れて桁そろえて。
362デフォルトの名無しさん (ワッチョイ 627a-JKp6)
2024/01/06(土) 23:25:47.33ID:4fq2Cpkf0 まあ落ち着けよ 質問者はそんなこと聞いとらんだろうよ
363デフォルトの名無しさん (ワッチョイ ff7a-dvWY)
2024/01/07(日) 00:35:50.01ID:yw4Ulg6E0 for(;;){
if((result = fgets(line, MAX_LEN, stream)) != NULL){
p1=result;
p3=p1+strlen(line);
p2=strtok(p1, "=");
}
}
これで、p1とp2から左辺、p2とp3から右辺が取り出せる。
$の展開は、マクロ展開処理の要領で
右辺に$があるかチェックして、あったら定義値に置き換えるという
10ステップ程度の処理でできるだろ。
if((result = fgets(line, MAX_LEN, stream)) != NULL){
p1=result;
p3=p1+strlen(line);
p2=strtok(p1, "=");
}
}
これで、p1とp2から左辺、p2とp3から右辺が取り出せる。
$の展開は、マクロ展開処理の要領で
右辺に$があるかチェックして、あったら定義値に置き換えるという
10ステップ程度の処理でできるだろ。
364デフォルトの名無しさん (ワッチョイ 7fb5-j9I8)
2024/01/07(日) 08:57:04.03ID:4P3NNejl0365デフォルトの名無しさん (ワッチョイ 7f79-e2pS)
2024/01/07(日) 10:17:39.72ID:gAwkeLQQ0 せめて既存の気の利いた言語のstring型のメソッドやらを参考にしろよ
ここで再発明しても誰も使わんだろ
ここで再発明しても誰も使わんだろ
366デフォルトの名無しさん (ワッチョイ 5f1a-nsdu)
2024/01/07(日) 10:25:56.11ID:TVg93ufA0 質問者、もういない
367デフォルトの名無しさん (ワッチョイ df01-6482)
2024/01/07(日) 11:15:08.19ID:SfiTOIyR0368デフォルトの名無しさん (ワッチョイ 5f63-vNrU)
2024/01/07(日) 11:23:13.54ID:XrTF2oph0 動かすCプログラムをperlに書き直す方が簡単そう
369デフォルトの名無しさん (ワッチョイ 7fad-ipwt)
2024/01/07(日) 16:24:59.67ID:tTa6vFrs0 こんな方法もある。しかし $ の変数展開しかしないなら無駄な感じはするね。それだけのためにここまでするのかという。
perlembed - C プログラムへの Perl の埋め込み方
https://perldoc.jp/docs/perl/5.10.0/perlembed.pod
perlembed - C プログラムへの Perl の埋め込み方
https://perldoc.jp/docs/perl/5.10.0/perlembed.pod
370デフォルトの名無しさん (ワッチョイ 5f63-vNrU)
2024/01/10(水) 16:11:15.07ID:PVZRGcug0 $がリテラルとして入ってた時はどうするかとか、結構面倒そう
371デフォルトの名無しさん (ワッチョイ 5f1f-nsdu)
2024/01/10(水) 17:49:56.37ID:C4OEbwTl0 >>370
そうなんだよー、真面目にやるとバカみたいに面倒なのよ
文字列リテラルの中に $ やコメント開始終了記号が入る事もあるし
コメントの中に $ や文字列開始終了記号が入る事もある
# "#"
$aaa = /* $コメント " */ "文字列/**/値";
なので、頭から読み始めて、状態を追いながら(現在の場所が 文を書く所か、コメント内か、文字列内か)読まないと、正しいファイルを正しく読めない
んで、つまんないバグを作り込んだりするの。その、もういない誰かが作り込んだつまんないバグを、別の誰かが直すはめになる。そんなの嫌じゃね?
そうなんだよー、真面目にやるとバカみたいに面倒なのよ
文字列リテラルの中に $ やコメント開始終了記号が入る事もあるし
コメントの中に $ や文字列開始終了記号が入る事もある
# "#"
$aaa = /* $コメント " */ "文字列/**/値";
なので、頭から読み始めて、状態を追いながら(現在の場所が 文を書く所か、コメント内か、文字列内か)読まないと、正しいファイルを正しく読めない
んで、つまんないバグを作り込んだりするの。その、もういない誰かが作り込んだつまんないバグを、別の誰かが直すはめになる。そんなの嫌じゃね?
372デフォルトの名無しさん (ワッチョイ 5f1f-nsdu)
2024/01/10(水) 17:57:07.75ID:C4OEbwTl0 でも本当に、質問者はもうトンズラしたと思うよ。次の話をしよう
373デフォルトの名無しさん (ワッチョイ 5f63-vNrU)
2024/01/10(水) 18:00:48.10ID:PVZRGcug0 次の患者さん、どうぞ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 5:55:55.555
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 戦争は無くならないし殺人は起きるし女はレイプされるし子供は餓死するし
- 日経時間外、5万円割れ 垂直落下始まる [402859164]
- 高市さんに土下座してもらったら一発解決なのに何でやらないんだろ??
- 【悲報】男性人気アイドルグループJO1、中国公演中止wwwwwwwwwwwwwwwwwwwwwwwwwww
