[過去ログ]
C言語なら俺に聞け 160 (1002レス)
C言語なら俺に聞け 160 http://mevius.5ch.net/test/read.cgi/tech/1672191630/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
737: デフォルトの名無しさん (ワッチョイ 0e9a-wiuY) [sage] 2023/03/17(金) 15:07:17.42 ID:k0Wz885y0 そ ってなんだよw http://mevius.5ch.net/test/read.cgi/tech/1672191630/737
738: デフォルトの名無しさん (ワッチョイ 8102-oxQa) [sage] 2023/03/17(金) 15:09:54.39 ID:1OmGmSd00 pwshは記法がmakeと被りまくっててエスケープ地獄で辛いな 特に@args | ...とか-split "a b c d "| ...のようなイディオムが ビルトインコマンドの解決も時々失敗する怪しい挙動なので(g)makeをstraceしてみた シェルを明示的に指定しても、makeがレシピをスキャンして展開の必要しと判定すると直接exec/CreateProcessを呼んでる様子 要するに実装の機嫌次第ですね http://mevius.5ch.net/test/read.cgi/tech/1672191630/738
739: デフォルトの名無しさん (ワッチョイ a163-DvKe) [sage] 2023/03/17(金) 16:26:27.08 ID:Jukv8C3G0 >>737 「の」が抜けた脱字だろ http://mevius.5ch.net/test/read.cgi/tech/1672191630/739
740: デフォルトの名無しさん (スッププ Sd5e-9LRx) [sage] 2023/03/17(金) 16:40:16.98 ID:6pq6iSnCd >>736 じゃあDOSをちゃんと使え 以上 というか>>728が言ってるんはDOSではコマンドラインはそのままコマンドに渡されてコマンド側がワイルドカード展開しなければならないって事だと思うけど for文を使えばバッチファイル中でワイルドカード展開できるけどな http://mevius.5ch.net/test/read.cgi/tech/1672191630/740
741: デフォルトの名無しさん (ワッチョイ 0e9a-wiuY) [sage] 2023/03/17(金) 19:53:17.28 ID:k0Wz885y0 >>740 > じゃあDOSをちゃんと使え お断りしますw >というか>>728が言ってるんはDOSではコマンドラインはそのままコマンドに渡されてコマンド側がワイルドカード展開しなければならないって事だと思うけど そんな風になってるんだ。逆に目からウロコw 考えてみれば、コマンド引数は常にファイル(パス)とは限らないのだから コマンドインタープリタ側でデフォでファイル名展開を使わない、という態度もアリなのかな http://mevius.5ch.net/test/read.cgi/tech/1672191630/741
742: デフォルトの名無しさん (ワッチョイ d663-JIpj) [sage] 2023/03/17(金) 21:22:13.62 ID:ap5J/Una0 「ファイルが見つかりません - *.c」 今の話題はこれのことだろう http://mevius.5ch.net/test/read.cgi/tech/1672191630/742
743: デフォルトの名無しさん (スップ Sd7a-s0vD) [] 2023/03/17(金) 22:10:24.98 ID:Pco9qL75d ワイルドカードで受け取ってアプリ内でいい感じに展開するのは結構負担大きいんだよな MSDOSのシェル側の負担を減らしたいというのは発想としてはアリなんだけど、 ハードの性能が上がった現代では時代遅れになってしまった http://mevius.5ch.net/test/read.cgi/tech/1672191630/743
744: デフォルトの名無しさん (スッププ Sdab-aGM/) [sage] 2023/03/18(土) 00:02:14.45 ID:W6y4Yh40d >>742 言えることは 普通にビルドで必要な機能は揃ってるからmakeの組み込み関数を使え shellは最後の手段と思え どこで展開が起こってるかエスケープ文字が食われているかを探してる時間のムダだ http://mevius.5ch.net/test/read.cgi/tech/1672191630/744
745: デフォルトの名無しさん (スフッ Sd33-Tcry) [] 2023/03/18(土) 05:53:53.69 ID:zRF+ruu+d /* データ型が混在した可変個引数をもつ関数の例 */ #include <stdio.h> #include <stdarg.h> void unidisp(char *fmt, ...); int main(void) { unidisp("iii",100, 200, 300); // 3つのデータ表示 unidisp("idsids", 11, 22.22, "aaaa", 33, 44.44, "bbbbb") // 6つのデータ表示 return 0; } /* fmt内容 → i:int値表示 d:double値表示 s:文字列表示 */ void unidisp(char *fmt, ...) { va_list ap; // 構造体オブジェクトを確保 va_start(ap,fmt); // 最終引数を指定してapを設定 while (*fmt) { if (*fmt == 'i') printf("%d\n", va_arg(ap, int)); // int値表示 if (*fmt == 'd') printf("%f\n", va_arg(ap, double)); // double値表示 if (*fmt == 's') printf("%s\n", va_arg(ap, char *)); // 文字列表示 ++fmt; } va_end(ap); // 後処理 } 上記コードのメカニズムがよくわかりません http://mevius.5ch.net/test/read.cgi/tech/1672191630/745
746: デフォルトの名無しさん (ワッチョイ a963-4ZMk) [sage] 2023/03/18(土) 06:00:42.41 ID:l7CGioJ10 >>745 va_argマクロの実装を読むとわかるぞ ちとしんどいが頑張るんだ http://mevius.5ch.net/test/read.cgi/tech/1672191630/746
747: デフォルトの名無しさん (スフッ Sd33-Tcry) [] 2023/03/18(土) 06:46:59.63 ID:zRF+ruu+d 745です >>746 ありがとうございます あとで確認してみます http://mevius.5ch.net/test/read.cgi/tech/1672191630/747
748: デフォルトの名無しさん [sage] 2023/03/18(土) 07:24:12.42 ID:pLAb7CSJ0 普通は関数の引数が型を指定してユーザはそれに従うところを とりあえずすべてアドレスで渡して、ユーザが自分で「そのアドレスは何を指しているか」を明示すると言うことだよ va_list ap; これの実体はただのアドレス void *p; みたいなものだね va_argの第二引数で型を指定しているが(int,double,char*)、その型のサイズに合わせてapを進めている 以下確認のコード printf("[0x%08X] " , *(int*)ap); でapの中身が va_argで指定した型のサイズ分だけ移動しているのが分かると思う http://mevius.5ch.net/test/read.cgi/tech/1672191630/748
749: デフォルトの名無しさん [sage] 2023/03/18(土) 07:24:33.20 ID:pLAb7CSJ0 void __fastcall PrintBuffer(va_list *ap) { int i; char *buf = (char*)ap; int len=sizeof(va_list); for(i=0;i<len;i++) printf("%02X ", buf[i] & 0xFF); printf("[0x%08X] " , *(int*)ap); } /* fmt内容 → i:int値表示 d:double値表示 s:文字列表示 */ void unidisp(char *fmt, ...) { va_list ap; // 構造体オブジェクトを確保 va_start(ap,fmt); // 最終引数を指定してapを設定 while (*fmt) { PrintBuffer(&ap); if (*fmt == 'i') printf("%d sizeof(int) = %d\n", va_arg(ap, int) , sizeof(int)); // int値表示 if (*fmt == 'd') printf("%f sizeof(double) = %d\n", va_arg(ap, double) , sizeof(double)); // double値表示 if (*fmt == 's') printf("%s sizeof(char *) = %d\n", va_arg(ap, char *) , sizeof(char *)); // 文字列表示 ++fmt; } va_end(ap); // 後処理 } int main(void) { unidisp("iii",100, 200, 300); printf("\r\n"); // 3つのデータ表示 unidisp("idsids", 11, 22.22, "aaaa", 33, 44.44, "bbbbb"); // 6つのデータ表示 return 0; } http://mevius.5ch.net/test/read.cgi/tech/1672191630/749
750: デフォルトの名無しさん [sage] 2023/03/18(土) 07:25:30.63 ID:pLAb7CSJ0 あ、__fastcall は見なかったことにして いつもの癖で…… http://mevius.5ch.net/test/read.cgi/tech/1672191630/750
751: デフォルトの名無しさん (アウアウエー Sa23-lF85) [] 2023/03/18(土) 13:17:28.44 ID:fSPMk7mFa ap++ とか ++ap してないのに どうやって進むのか興味あるわ http://mevius.5ch.net/test/read.cgi/tech/1672191630/751
752: デフォルトの名無しさん (ワッチョイ 1379-1FFK) [sage] 2023/03/18(土) 13:55:06.64 ID:RZJZ36we0 va_argの出番って書式出力持たないMsgBoxとかにprintf書式を渡したい時ぐらいだからfmt側の解析なんてやった覚えないな 言語処理系なんかを作る時にCのコンテキスト上で可変引数を渡したい場合にfmt部分を個数にするような特殊なケースは考えられるが http://mevius.5ch.net/test/read.cgi/tech/1672191630/752
753: デフォルトの名無しさん (スッププ Sd33-aGM/) [sage] 2023/03/18(土) 15:27:28.06 ID:utkGGsyod >>751 apは構造体の実体だぞ 多分ポインタはその中にあってマクロva_argでインクリメントされてる http://mevius.5ch.net/test/read.cgi/tech/1672191630/753
754: デフォルトの名無しさん (アウアウエー Sa23-lF85) [] 2023/03/18(土) 15:46:47.90 ID:fSPMk7mFa >>753 >>748 観ての感想を描いただけ >printf("[0x%08X] " , *(int*)ap); でapの中身が va_argで指定した型のサイズ分だけ移動しているのが分かると思う http://mevius.5ch.net/test/read.cgi/tech/1672191630/754
755: デフォルトの名無しさん (ワッチョイ e15f-XP14) [sage] 2023/03/18(土) 16:47:24.17 ID:F6WTPPiM0 スタックに積まれたfmtのアドレスをベースになぞっていってるだけじゃないの? http://mevius.5ch.net/test/read.cgi/tech/1672191630/755
756: デフォルトの名無しさん (スッププ Sd33-aGM/) [sage] 2023/03/18(土) 18:29:38.46 ID:a5YJoFt5d >>754 じゃあどうやって進むのかもうわかってるんじゃん 構造体やマクロ使ってるのはその中身は考えなくてもよくするため 別の言い方すればライブラリのほうが実装を変えてもソースは変更なしでコンパイルするだけで済ますため もう実装変えることもないだろうけど… http://mevius.5ch.net/test/read.cgi/tech/1672191630/756
757: デフォルトの名無しさん (ワッチョイ 13ad-F0re) [] 2023/03/18(土) 19:31:55.62 ID:YIU3ErvV0 >>741 cmd.exe の場合は MS-DOS の頃の command.com との互換性を持たせたかったためか、何故か引数のファイル名展開はやらない。 command.com がやらなかった理由は CP/M の CPP (コンソールコマンドプロセッサ) を拡張した仕様で作ったからだと思う。 それと当時はメモリ少なかったしディスクも遅いしあまり複雑な事をさせたくなかったんだろうと思う。 http://mevius.5ch.net/test/read.cgi/tech/1672191630/757
758: デフォルトの名無しさん (ワッチョイ eb63-F0re) [sage] 2023/03/18(土) 22:34:01.09 ID:mRvYwteE0 C言語の話題に戻していくと、 VCの場合は、setargv.objをリンクしないと、 コマンドラインで指定されたワイルドカードを ファイルに展開できなかったと思う http://mevius.5ch.net/test/read.cgi/tech/1672191630/758
759: デフォルトの名無しさん (ワッチョイ 53fb-Q4VH) [] 2023/03/18(土) 23:08:40.43 ID:VxZ5Gdt+0 ワイルドカード展開の話をするにはC言語だけじゃ済まないでしょ Windowsの場合、シェル(cmd.exe)は 1. ワイルドカードを展開をせずにCreateProcessでプログラムにコマンドラインを1本の文字列として渡す 2. setargvがリンクされてるならワイルドカードをファイル名展開する 3. コンパイラが暗黙のうちに生成したコード部が1本の文字列をargvに渡せるようにchar**に分割する プログラムに渡された文字列自体はタスクマネージャーからコマンドラインの項目から確認できる http://mevius.5ch.net/test/read.cgi/tech/1672191630/759
760: デフォルトの名無しさん (アウアウエー Sa23-lF85) [] 2023/03/19(日) 10:06:46.77 ID:fPDrKYk/a >>757 PHP (言語じゃない方の) 0x80 から始まるやつか http://mevius.5ch.net/test/read.cgi/tech/1672191630/760
761: はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 993e-7LVk) [sage] 2023/03/19(日) 10:39:51.37 ID:6gmOWdI+0 >>760 ワイが持っとる資料やと PSP (Program Segment Prefix) と書いてあるんやが PHP という用語もあるんか? 実際のところ用語の混乱はかなりあるのでどれが公式なんかようわからん……。 http://mevius.5ch.net/test/read.cgi/tech/1672191630/761
762: デフォルトの名無しさん (スフッ Sd33-usS/) [] 2023/03/19(日) 14:19:25.25 ID:j+ABECd6d >>481 https://youtu.be/a999bvLqcik http://mevius.5ch.net/test/read.cgi/tech/1672191630/762
763: デフォルトの名無しさん (ワッチョイ 13ad-F0re) [] 2023/03/20(月) 14:09:31.85 ID:uf3XtkTY0 やがて「ハノイの塔解いて」と一声AIに言えばAI自身が自分でハノイの塔をやって解いてしまうようになり一々プログラミング言語で出力する必要がなくなる。そして何でもやっといてとAIに頼むとAIがやってしまうようになり、ロボットのコントロールもできるので人間の代わりは何でもできるようになり全ての人間は不要になる。1万年後、AIによって飼育されていた最後の人間が死亡して人類は絶滅。その時銀河系全体を支配しているのはAI。 完 http://mevius.5ch.net/test/read.cgi/tech/1672191630/763
764: デフォルトの名無しさん (ワッチョイ eb63-F0re) [sage] 2023/03/20(月) 14:37:20.82 ID:ZfW6Hudb0 ハノイの塔解くと、その瞬間に世界は消滅する 1万年も待つ必要は無い http://mevius.5ch.net/test/read.cgi/tech/1672191630/764
765: デフォルトの名無しさん (ラクッペペ MM8b-xJOq) [sage] 2023/03/20(月) 14:42:36.37 ID:2uty+vYkM 量子コンピュータが実用化されるまでは脅威にはならないだろ http://mevius.5ch.net/test/read.cgi/tech/1672191630/765
766: デフォルトの名無しさん (アウアウウー Sa95-usS/) [sage] 2023/03/20(月) 18:27:48.49 ID:GQGgQXaMa PHP PSP PNP PIP P2P PAP^-1 http://mevius.5ch.net/test/read.cgi/tech/1672191630/766
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 236 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.016s