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