23/02/18 09:21:30.09 /rOnqr64d.net
ハノイの塔 再帰のアルゴリズムがさっぱりわからない
443:デフォルトの名無しさん
23/02/18 09:36:15.97 AfjXtSgB0.net
スタックから覚えようね
444:デフォルトの名無しさん
23/02/18 10:11:08.15 4a504/qwa.net
>>435
すいません
445:デフォルトの名無しさん
23/02/18 12:46:07.82 /8v09ncn0.net
>>426
8進数なのに8と9が使える驚異の仕様だよ
446:デフォルトの名無しさん
23/02/18 12:50:39.59 /Gi8XN260.net
ctype.hに
isdigitとisxdigitがあるのに
isodigitがないというのが
その問題の根にある
447:デフォルトの名無しさん (ワッチョイ 1501-rc3u)
23/02/18 13:42:13.38 c4QxGie20.net
>>433
何を必死になってるのかよくわからんが老害の悪癖は治らないってだけの話かと
448:デフォルトの名無しさん (ワッチョイ 1501-rc3u)
23/02/18 13:44:46.64 c4QxGie20.net
>>440
規格では使えないことになってるしまともなコンパイラならエラーにすると思うぞ
449:デフォルトの名無しさん (ワッチョイ a397-vL47)
23/02/18 14:09:47.51 BJBnPVcc0.net
>>440
規格決めた人に問題がある
ゼロは避けるべきだった
450:デフォルトの名無しさん (ワッチョイ 3d12-+91A)
23/02/18 14:13:43.35 /Gi8XN260.net
みんな日常的によく使う8進定数「0」
451:デフォルトの名無しさん
23/02/18 15:46:52.83 ke/LtjiK0.net
そうか、オレは二進数の0をよく使う
452:デフォルトの名無しさん
23/02/18 16:01:46.62 /Gi8XN260.net
ソースコード上での記数法と
実行環境での表現を混同してる?
453:デフォルトの名無しさん
23/02/18 16:04:29.75 dElKqib40.net
>>444
じゃあ8で。
454:デフォルトの名無しさん
23/02/18 16:16:07.43 /Gi8XN260.net
なんでオーにしなかったのかとは俺も思う
特に小文字オーなら誤読しにくいし
455:デフォルトの名無しさん
23/02/18 16:31:09.02 nz9Z1NDi0.net
1文字でもキーワードを少なくしたかった当時のお洒落だったんだよ
8進表記はunix系OSが全滅すれば廃止でもいいと思うね
456:デフォルトの名無しさん
23/02/18 16:35:07.64 ke/LtjiK0.net
全滅するのに数百年はかかりそう
457:デフォルトの名無しさん
23/02/18 16:40:17.45 /Gi8XN260.net
キーワードつーてもサフィックスだからね
繋がった単語の中の部分なわけで
他の識別子との衝突の虞はない
458:デフォルトの名無しさん
23/02/18 16:42:06.93 /Gi8XN260.net
あ、しかし
int o33 = o33;
みたいになったらマズいのか
英字サフィックスは
459:デフォルトの名無しさん
23/02/18 16:47:35.72 J9rEVsST0.net
>>442
gitのソースコード、openだけじゃなくてファイルモードを引数に取る関数なんかもあるけど、誰もマクロ定数なんて使って無いや
全員老害か
460:デフォルトの名無しさん
23/02/18 16:47:37.88 ke/LtjiK0.net
"%05d" こんな風な指定して出力した10進数を、読み取らせても大丈夫だろうか?
461:デフォルトの名無しさん
23/02/18 16:49:48.25 c4QxGie20.net
>>453
馬鹿なの?
普通に 0o01234567 だろ
462:デフォルトの名無しさん
23/02/18 16:50:05.14 FZadOySQ0.net
>unix系OSが全滅すれば
泥もiOSもunix系だよね?
ゲーム機も基本OSは・・・
463:デフォルトの名無しさん
23/02/18 16:52:50.83 6dDb+no40.net
(8じゃなく)6の倍数bitワードのマシンで産まれた痕跡だっけか
>>443
8と9が混じってるかどうかで8進か10進か勝手に解釈を変える方がよっぽど厄介だから、不正として弾くのが正しいね
俺は8進が好きだし、幸いやらかした経験も無いけど
他言語では明示的な0oプレフィックスもよく見掛けるし、もちろん使えるなら使おう
464:デフォルトの名無しさん
23/02/18 17:02:18.46 c4QxGie20.net
>>454
しつこいね
具体的にどのコードの話でそいつがいつから作られてるのか書いてみ
465:デフォルトの名無しさん
23/02/18 17:08:03.05 QF/qRD4Qd.net
>>443
bad numberとか言われて
なんで特定の数字を差別するのか?キリスト教のなんかか?とまじで悩んだw
466:デフォルトの名無しさん
23/02/18 17:13:05.59 nz9Z1NDi0.net
IT業界でもwhitelist→allowlistとか言葉狩り起きてるしそのうち言語にまでLBGT配慮()きそうだわな
int ニガー = 07214545;
エラー:差別用語です
467:デフォルトの名無しさん
23/02/18 17:15:09.07 J9rEVsST0.net
>>459
例えばリポジトリ直下の copy.c で定義されている copy_file(dst,src,mode) その関数自身の定義に 0666 とか直接使っている
まあこの関数は 2008 年とかに作られたものだけど、その関数を使うコードが今月コミットされていて引数に 0666 直指定
a5792e9d092 xxxxxxxxxx 2023-02-06 20:08:11 +0100 2293) if (copy_file(dest, rebase_path_squash_msg(), 0666)) {
他 copy_file 使っているところも全部直指定
468:デフォルトの名無しさん
23/02/18 17:19:06.07 c4QxGie20.net
>>460
確かに最初見た時は俺も はあ?ってなったわw
469:デフォルトの名無しさん
23/02/18 17:19:18.78 J9rEVsST0.net
>>442
比較的新しめ?のnginxなんかは流石に関数の引数に 0600 とか書いてないけど、それでもOSのヘッダファイルの定数定義は使ってないな
自前の定義に #define NGX_FILE_DEFAULT_ACCESS 0644 とかだ
これも老害になっちゃう?
470:デフォルトの名無しさん
23/02/18 17:26:26.26 c4QxGie20.net
>>462
git は 15年以上前に初版が作られたソフトだしリーナスはもっと前からソフト開発してるだろ
ポリシーによるけどソースコードのコーディング方法を変えないことは珍しくないよ
>>464
nginx も 18年前のソフトだし作者のイーゴリ・ウラジーミロヴィチ・シソエフ
50歳超えな
471:デフォルトの名無しさん
23/02/18 17:27:46.90 nz9Z1NDi0.net
>>464
OS側の定義を使わないのは特定のOS依存をしたくないか見切りを付けてるからだな
むしろ老害避けなんじゃないの
472:デフォルトの名無しさん
23/02/18 19:21:30.21 hE3AXWNH0.net
0x 0o 0b (0d)
473:デフォルトの名無しさん
23/02/19 06:15:13.00 B9Nm4zxk0.net
否定から入ったり無礼な言葉ばかり使う人って他人から相談されなくなるよね
474:デフォルトの名無しさん
23/02/19 10:30:13.08 85faJvYM0.net
それって思いっきりアスペの特徴なんだよな
475:デフォルトの名無しさん
23/02/19 10:43:35.95 xrmlsZvMa.net
だからネットでイキってるんだろ
476:デフォルトの名無しさん
23/02/19 10:58:14.43 5TCni8wB0.net
ダヴィンチもエジソンもアインシュタインもモーツァルトもイチローも
みなアスペルガーなんだ
477:デフォルトの名無しさん
23/02/19 11:07:26.13 xSIr/CQB0.net
>>471
まあ、それはそうだと思うよ
長嶋(一茂じゃねーぞ)なんかもそうだと思う
478:デフォルトの名無しさん
23/02/19 12:33:47.26 rUsPVZJ7a.net
ダヴィンチもエジソンもアインシュタインもモーツァルトもイチロー並みの才能があれば煙たがられることなく受け入れられるということよ。
479:デフォルトの名無しさん
23/02/19 12:50:21.37 oybarVkGd.net
無知丸出しはこっちでやれ
スレリンク(tech板)
480:デフォルトの名無しさん
23/02/19 12:53:18.65 F5EkyCpBH.net
ムチムチ
481:デフォルトの名無しさん
23/02/19 13:01:28.32 yOeRloac0.net
>>449
英語では 0 (ゼロ) と書いて o (おー) と読むこともあるので、それが影響したのかも知れないね。
482:デフォルトの名無しさん
23/02/19 14:04:50.86 xSIr/CQB0.net
>>476
printf("%o\n", 1234);
とかできるからその説はちょっと弱いかな
483:デフォルトの名無しさん
23/02/19 14:48:58.38 5TCni8wB0.net
アスペルガーは自分に対しても他人に対しても容赦しないから
凡人に嫌われる
才能のせいではない
484:デフォルトの名無しさん
23/02/19 14:55:52.34 BF2g/YB8d.net
ギフテッドは必ずしも自閉症を伴わない
485:デフォルトの名無しさん
23/02/20 04:15:44.39 +uPK1ifA0.net
>>436
再帰をしないなら、コードを書けるの?
486:デフォルトの名無しさん
23/02/20 09:47:26.91 N/iEiUCGd.net
>>480 チャレンジしたことはないけど、たぶん再帰なしでも書けません。どうか御教示をお願いします。
487:デフォルトの名無しさん
23/02/20 09:50:41.85 N/iEiUCGd.net
ハノイの塔は再帰でしか解けない
488:デフォルトの名無しさん
23/02/20 09:51:19.24 cTmdkEXkd.net
んなこたあない
489:デフォルトの名無しさん
23/02/20 09:57:18.63 KyZtaEjed.net
待ち行列やLIFOは再帰的な処理を非再帰にするときの友
490:デフォルトの名無しさん
23/02/20 11:00:02.06 Htkx1bCsd.net
再帰呼び出しする所をpushに変えてgoto最初
returnの所をpopに変えてgoto最初
時間があればそこからgotoを取り除く
gotoが輝く場面
491:デフォルトの名無しさん
23/02/20 11:21:38.14 N/iEiUCGd.net
>>485 goto文を使うのですね 覚えておきます
492:デフォルトの名無しさん
23/02/20 11:58:19.08 KyZtaEjed.net
アンチgoto教信者は近頃減ってきているが
絶滅はまだ先のようだな
493:デフォルトの名無しさん
23/02/20 12:38:57.43 sAm6cEmU0.net
スパゲティGotoをたんと召し上がれ!
494:デフォルトの名無しさん
23/02/20 13:04:25.72 Htkx1bCsd.net
再帰からループへの変換はgotoのある言語なら機械的にできるからね
存在すら許さない言語は発想を阻害してると言える
495:デフォルトの名無しさん
23/02/20 13:35:56.24 JqcJZDsUd.net
while(スタックが空になるまで){
pop();
...
}
って書き始めるけどな
496:デフォルトの名無しさん
23/02/20 21:19:52.57 I5iz8R+L0.net
>>490
戻りのpopはそれでいいけど呼び出しのpushは処理がぶった切れるから
gotoがないとかなりややこしい変換になるよ
497:デフォルトの名無しさん
23/02/20 23:51:00.80 7qph/rf50.net
>>485
push/pop はルール違反
それに二方向、多方向への再帰はそう簡単じゃないですけどね
二分木の全要素を列挙する非再帰プログラムを書いてください
498:デフォルトの名無しさん
23/02/21 00:08:57.34 Cn1Xq+JJ0.net
がんばってgoto無しで作ったりしてたなあ
499:デフォルトの名無しさん
23/02/21 06:59:46.53 1n1W4gUgd.net
push/popはルール違反て何それ?
500:デフォルトの名無しさん
23/02/21 09:59:11.37 MGN7/c1b0.net
「俺がルールブックだ」
501:デフォルトの名無しさん
23/02/21 10:33:24.95 5S8ZyEUUd.net
「ウリが蟹飯リッチニダ」
502:デフォルトの名無しさん
23/02/21 10:51:10.49 NudgdpLh0.net
豪華な蟹飯が思い浮かんだ
503:デフォルトの名無しさん (スプッッ Sd43-avQ1)
23/02/21 13:43:23.05 1n1W4gUgd.net
苫小牧だっけ?
504:デフォルトの名無しさん (アウアウエー Sa13-1XUy)
23/02/21 16:27:46.36 dWpsoJfPa.net
>>436
>>481
テスト
URLリンク(ideone.com)
505:デフォルトの名無しさん (ワッチョイ 755f-rVJW)
23/02/21 16:50:09.17 ncQgkmT30.net
チャットジピティれカ�
506:X
507:デフォルトの名無しさん (スププ Sd43-CAVk)
23/02/21 17:05:45.18 j4WOJdo9d.net
>>499 見事です 私はまだ初級なのでvectorだのcstdioなど見たこともありません
508:デフォルトの名無しさん (スップ Sd43-Tk/Z)
23/02/21 17:54:02.02 5S8ZyEUUd.net
>>499
お、動いた動いた!
509:デフォルトの名無しさん (ワッチョイ cb63-BTrK)
23/02/21 17:55:02.20 MGN7/c1b0.net
goto が一つもない・・・
510:デフォルトの名無しさん (アウアウウー Sa49-UkxH)
23/02/21 19:30:27.79 oAMbgY5Ra.net
goto文は禁じてではないかな?
C言語では
511:デフォルトの名無しさん (スプッッ Sd43-avQ1)
23/02/21 19:48:08.10 1n1W4gUgd.net
俺様ルールは興味ないから
512:デフォルトの名無しさん (ワッチョイ cb63-BTrK)
23/02/21 19:50:05.73 MGN7/c1b0.net
CPUレベルまで行くと、GOTOは使いまくりだろう
513:デフォルトの名無しさん (スプッッ Sd43-avQ1)
23/02/21 19:57:40.07 1n1W4gUgd.net
機械語1命令ごとにPCを更新するのもgotoかw
514:デフォルトの名無しさん (テテンテンテン MMcb-7AbM)
23/02/21 20:39:53.11 pHGJPw2cM.net
gotoなんて所詮関数内にしか飛べない
関数が小さければなんて事はない
巨大な関数はgoto以前に悪
515:デフォルトの名無しさん (ワッチョイ cb63-BTrK)
23/02/21 21:02:34.32 MGN7/c1b0.net
昔いた現場は、1関数ごとに設計書を何枚も書かされてたな
それでみんな、関数の数を極力減らしてた
行き着くところ初期とメインと終了の三つ
それぞれが何百行にもなってしまったw
516:デフォルトの名無しさん (ワッチョイ 2379-u8a6)
23/02/21 22:12:19.48 QJTSRl8U0.net
そういうのいいから
517:デフォルトの名無しさん (ワッチョイ e379-+91A)
23/02/21 22:59:26.21 fpEKur8e0.net
硬直化して目的を忘れた「管理」に泣かされたもんだけど
それは昭和も今も変わっとらんだろ
518:デフォルトの名無しさん (ワッチョイ cb63-BTrK)
23/02/21 23:48:29.43 MGN7/c1b0.net
プロジェクト管理はそのうちAIがやるようになるんだろうか
519:デフォルトの名無しさん
23/02/22 03:11:04.32 ZjvNTHuW0.net
AI「壊れるまで働け、人間共よ」
520:デフォルトの名無しさん
23/02/22 06:39:57.73 6aYkdgkrd.net
>>491
continueを知らないのか?
521:デフォルトの名無しさん
23/02/22 15:13:03.32 rwr+6TWF0.net
>>415
やはり構文解析器(プリプロセッサ含む)に手を入れないとデリミタに'は難しそうに思うの
暇だったので>>413を(ナイーブに)
# define b(n) (strint(#n, 1u))
# define t(n) (strint(#n, 2u))
# define o(n) (strint(#n, 3u))
# define x(n) (strint(#n, 4u))
unsigned
strint(const char cs[], const unsigned wt){
long d;
unsigned u=0;
do { // valid digis: ascii '0'..'^'
if((d=*cs)<0||d>'_'-'0'+1) continue;
u<<=wt, u+=d;
} while(*cs++)
return u
}
b('1100'1010'1111'1110)
b(1100_1010_1111_1110)
o(145;366)
x(<:!?>)
全て0xCAFEに等しい、ただし' が奇数個のケース、 b(1100'1010'1111'1110)
マクロ引数を区切る,の使用はプリプロセッサがエラー吐く(cc -Eの段階)
missing terminating '/" character
too much argument
etc. (pcc/tcc)
ex/m4とか外部ツールでプリプロセスするなら別だけど、c/cプリプロセッサの構文内では不可能に思う(当然リテラルとして自然な仕様拡張も)
522:デフォルトの名無しさん
23/02/22 15:22:17.41 mafEi4nvd.net
>>467
アセンブリやいにしえの言語は明示的なdecimal prefixを持ってるね
forthだと#123と変種?の&123
#の方がthe (decimal) 123と読めて個人的に好み
523:デフォルトの名無しさん
23/02/22 15:23:53.30 mafEi4nvd.net
the (decimal) number 123です
524:デフォルトの名無しさん
23/02/22 15:28:02.92 mafEi4nvd.net
299,792,458と書けたら素敵だけど
ds(299,792,458)が引数を区切る,と区別出来ないから無理だね
525:デフォルトの名無しさん
23/02/22 16:23:34.63 GDrSYSMbM.net
ほかの言語では、123_456_789の様にアンダーバーで区切るのが多い
Cでも出来たと思うけどなぜか'なんだよな…
アンダーバーが良かった
526:デフォルトの名無しさん
23/02/22 16:41:13.08 3MJ5isf30.net
C++に合わせたんでしょその方が都合がいいだろうし
527:デフォルトの名無しさん
23/02/22 16:52:25.15 3MJ5isf30.net
規格の紹介をしてる>>415に対してそれは解析器を変えないと難しいとか言ってる>>515は何なんだ?
C23でこうなります、なんだから難しいもクソもないと思うんだが笑
528:デフォルトの名無しさん
23/02/22 18:12:39.68 /HhOnmf9d.net
規格を批判してるんだが
529:デフォルトの名無しさん
23/02/23 02:20:36.04 zOdHjjZs0.net
まだワーキングドラフトだから対応するもしないのも自由だと思うし、c2xはアトリビュート関連くらいしか追ってないが、一応意見を
せめて不正なトークンとして弾ける約物にしてほしいな
0b10101011未対応(0cでも何でも)は不正な8進
トークン構成文字0b1010_1011なら不正な型サフィックスとして不正なトークンを報告できるので、ユーザに手直しさせるのも自明
パース状態をトグルする'はEOFまで食うので、エラーが報告されたとしてもcryptic
頻用したと仮定すれば、1/2の確率で釣り合うって字句解析をパスしてしまうのも厄介
530:デフォルトの名無しさん
23/02/23 04:08:08.64 zOdHjjZs0.net
>>416
俺は16bit程度なら一行で書いてしまうけど、より大きい整数型なら行を分けて書いてるな
(u)int64/128_tなんかで二次元データエンコードする時はこんな感じで
uint64_t plaid = 0b\
01010101\
10101010\
...\
;
ゲーム盤、行列、画像、畳み込みカーネル、マスク等、重宝する機会は多い
pbmそのままだからstatic変数にスクリプトでブチ込むのも楽で非常に重宝
普通(2)/8/10/16のみで任意進数(ビット深度)を指定できないのが歯痒いところ
531:デフォルトの名無しさん
23/02/25 15:46:50.99 2A7WVGnna.net
C++におけるユーザー定義の接尾辞で
_数字 みたいな奴を許可していなかったら桁区切り文字はアンダースコアになってた
532:デフォルトの名無しさん
23/02/26 07:07:10.46 Gr0Cvu5K0.net
だな
533:デフォルトの名無しさん
23/02/26 07:37:36.32 oQAKiXWbd.net
自己参照構造体を、テキストのコードが難しくて理解できない
534:デフォルトの名無しさん
23/02/26 07:49:42.99 ymHOkbuH0.net
>>525
まさか4567_8(→4567 of type "8")?
珍妙な…
535:デフォルトの名無しさん
23/02/26 07:58:07.27 ymHOkbuH0.net
extern "C"で混ぜるにはもう違いが多過ぎるし、c++と足並み揃えるのやめればいいのに
536:デフォルトの名無しさん
23/02/26 08:42:57.62 Gr0Cvu5K0.net
C++が流行りだした当時のCの財産を捨てずに済むってだけの話で
これから新しく作るものの足かせになるのは本末転倒だよな
537:デフォルトの名無しさん
23/02/26 12:16:51.44 0OyaNSrI0.net
C言語で構造体の双方リンク理解する前にテキストエディタ作るようなことあったら
激重エディタつくってただろうなぁと経験してもないことを妄想。
1文字挿入→その後ろの文章を全部コピーでずらして・・・
538:デフォルトの名無しさん
23/02/26 18:12:24.76 zCQzTRZzM.net
>>531
emacs なんかは1文字挿入のたびに後ろ全部コピーしなくても良いようにギャップバッファという手法を使っていた
539:デフォルトの名無しさん
23/02/26 18:34:27.49 akN/HRard.net
>>532
emacs!
Esc x compile
に何度も助けられた
一人で五万行くらいのコードを書いてたからな
ヘッダーファイルだけで50くらいあった
540:デフォルトの名無しさん (テテンテンテン MM0e-CSgJ)
23/02/26 20:20:17.76 Qgs0XTsDM.net
>>532
過去形だけど今もだぞw
ギャップバッファは、最近流行りの複数カーソル使って離れた複数箇所を一気に編集すると、大量にコピーが発生して重くなる可能性がある
なのでこれからテキストエディタを実装するには、Piece Tableを使う方がいいと思われる
541:デフォルトの名無しさん (ワッチョイ 76cf-okFi)
23/02/26 20:22:02.57 OdlyZwjm0.net
Slackware+JEに入ってたMuleを3年くらい使ってたけど別のエディタに移っちゃったな
悪くないと思うんだけど時代に合ってないというか、貧相な環境の方が使い出があるエディタだったな
542:デフォルトの名無しさん (テテンテンテン MM0e-CSgJ)
23/02/26 20:31:33.93 Qgs0XTsDM.net
EmacsとかVimを貧相と思うのは、端末内で動かせるようになってるからだ
GUIはオマケみたいな扱いだ
でも、それはそれで存在意義はある
543:デフォルトの名無しさん (ワッチョイ da79-Arif)
23/02/26 20:37:35.64 gahU4Yv80.net
viは来世紀にも残ってそうだから最初に覚えたなあ
eなんとかはデベロッパーのオナニーが透けて見えて気持ち悪すぎた
544:デフォルトの名無しさん (ワッチョイ 7663-W5vA)
23/02/26 21:16:43.25 fbmwPkIL0.net
viの様にコマンド覚えなくても使えたから便利だったぞ
545:デフォルトの名無しさん (ワッチョイ 76cf-okFi)
23/02/26 22:04:54.83 OdlyZwjm0.net
>>536
ちゃう、Emacsを貧相だと思ってるんじゃなくて計算機資源が豊かでない環境の方が使い出があるって言ってるんだよ
546:デフォルトの名無しさん (ワッチョイ 7db3-sBbk)
23/02/26 22:36:28.47 0m6hfJUV0.net
最初に使い込んだエディタの話?
俺はVZだったな
547:デフォルトの名無しさん
23/02/27 04:08:09.05 naBje3l2d.net
スレちがいだし
わりとしょうもないレベルの自慢話になってることを警告しておくぞ
548:デフォルトの名無しさん
23/02/27 07:30:50.50 U2h1s9M4d.net
ダム端末使ってた頃はviが有り難かったけど
今となっては当時慣らした人はともかく
若いやつにお奨めするもんじゃない
と俺は思うな
549:デフォルトの名無しさん
23/02/27 09:43:18.06 jlyK/+pC0.net
>>531
素のCだと何もないからデータ型を一つ一つ自分で理解していけていいという意味?
例えばC++ならlistがあるから理解しないままになる?
でもlistとvectorの違いを知らなければ結局
550:デフォルトの名無しさん
23/02/27 12:21:44.99 3zla3lE+0.net
>543
Cやる前はアセンブラだったからねぇ。アセンブラでの処理方法をそのままC言語に持ち込んでた。
当時はでっかく領域確保したらその領域で全部処理するって思考しか無かった(自動変数って概念も無し)。
551:デフォルトの名無しさん
23/02/27 12:29:45.17 U2h1s9M4d.net
ダミーセクションは使ってたけどね
552:デフォルトの名無しさん
23/02/27 17:11:48.94 3MgFEhuya.net
>>543
そこはdequeですよ常考
553:デフォルトの名無しさん
23/02/28 10:24:33.59 7/0mM3ia0.net
>>544
>自動変数って概念も無し
自分はデバッグでディスアセンブルを読むぐらいしか用事がないんだけど、
ゼロからアセンブリを書く場合はスタックの操作で領域管理したりはしないと?
554:デフォルトの名無しさん
23/02/28 10:32:54.86 7/0mM3ia0.net
>>546
listやvectorはほとんど使わない感じ?
555:デフォルトの名無しさん
23/02/28 12:10:45.99 dNNgH11Kd.net
スタックはレジスタのバックアップが主な用途で
メモリ変数はグローバルがデフォだった
だから変数表を作ってた
556:デフォルトの名無しさん
23/02/28 16:07:40.92 Ki6W+L2N0.net
あの 先頭に戻って検索 するかどうかを維持する変数名ってどんなのがいい?
557:デフォルトの名無しさん
23/02/28 16:44:22.88 295BsPXb0.net
>スタックの操作で領域管理
8086系だとスタックレジスタ直接使うと遅いんじゃなかったっけ?
MOV AX、[SP+10]
とかやるより
MOV AX、[TEMP]
...
TEMP: DW 0000h
ってやる方が速いとか。
BASIC時代のマシン語CALL時のレジスタエリアは16バイトってトラウマが・・・。
558:デフォルトの名無しさん
23/02/28 21:38:56.96 EshvOxGGa.net
ダミーセクションって、IBMのメインフレームのアセンブリ言語の DSECTですか?
559:デフォルトの名無しさん
23/02/28 21:47:36.63 svcsEAcG0.net
うん
560:デフォルトの名無しさん
23/03/01 20:42:10.06 fErXdR4ud.net
>>550
auto_reverse
絶対これにしなさい
561:デフォルトの名無しさん
23/03/01 23:36:37.44 5C60qBo90.net
>>550
cyclic
562:はちみつ餃子
23/03/02 00:05:39.48 pZfd6NSK0.net
そういうのはいわゆる自転車小屋の議論になりがち。
そこそこ盛り上がりはすることもあるかもしれないけどあまり意味のある結論は出ないよ。
563:デフォルトの名無しさん
23/03/02 03:04:30.24 eGjuMjwU0.net
するか否か、1ビットのフラグの命名に他者を巻き込む議論が本当に必要ですかということか
すなわち名前はflagとかで変数宣言部に日本語コメントでも添えた方が建設的ということだな?違うか?
564:デフォルトの名無しさん
23/03/02 07:06:54.36 xa7MSIOTd.net
変数名の付け方は案件による
無論、一般論などない
主観と思い込みで強弁するやつはいるけどね
565:デフォルトの名無しさん
23/03/02 09:03:08.54 GoAAqo+J0.net
C-gengo wa mada nihon-go kakenai no?
bool 先頭に戻って検索 = 真 ;
566:デフォルトの名無しさん
23/03/02 16:32:03.69 N0PfEOQ90.net
質問の仕方でどういうコード書いてるか垣間見えるのはあるな
int searchtype = FROM_TOPとかBOTTOMとかBACKWARDみたいな持ち方ならそんな質問出ないだろうし
567:デフォルトの名無しさん
23/03/02 17:21:24.58 y83mRLNqd.net
>>551
どのCPUでもダイレクト指定が速いに決まっとりまんがな
レジスタ相対はレジスタにディスプレースメントを加算してからアドレス出力するんだから
568:はちみつ餃子
23/03/03 01:19:24.14 5ZXS0iFm0.net
>>561
個々の命令の速度で考えればその通りだが今どきの CPU だと
パイプラインに隠れて差が出ない (差があっても観測不能なほどの極小) ってことも普通にあるんじゃないの?
569:デフォルトの名無しさん
23/03/03 08:02:43.32 an7QtCXRd.net
1Hzぐらいの速度で計測すれば何かわかるかもしれない
570:デフォルトの名無しさん
23/03/03 08:14:12.93 jW6Dg0m70.net
1Hzだと速度的には1秒周期なので測定の意味がない
571:デフォルトの名無しさん (ワッチョイ 7663-W5vA)
23/03/03 22:40:53.27 1TAJ9GtV0.net
もしかするとCPUクロックをそこまで落としてデバッグしたいとかw
572:デフォルトの名無しさん
23/03/04 06:01:07.88 2lfmGWRw0.net
[sp+10]はメモリアクセス1回だが
[temp]は2回だな
8086だとキャッシュないからメモリのウエイト数の影響をモロに受ける
どciscでパイプラインなんかないし
573:デフォルトの名無しさん (スッププ Sd33-0t2P)
23/03/04 19:01:51.83 siYz8HOgd.net
Cのコードを書くのにアセンブラまで意識するのか、、
立派な心がけあるな
精進しなされ
でも、CPUやコンバイラで違うじゃん、、、
574:デフォルトの名無しさん
23/03/04 21:31:31.02 mhQJa69K0.net
>>566
勘違いしてない?
575:デフォルトの名無しさん
23/03/04 21:33:37.98 K3zEUrJN0.net
[sp+10]が1回なら[temp]も1回じゃね
命令のフェッチは数えないんでしょ?
プリフェッチはパイプラインみたいなもんじゃね?
576:デフォルトの名無しさん
23/03/04 23:58:44.62 D8X7oasM0.net
素の8086にsp使えるアドレッシングはないのでbpで…
mov ax, [bp+disp] 命令3~4バイト 8+9クロック
mov ax, [TEMP] 命令4バイト 8+6クロック
と実効アドレスの計算時間に差があったという大昔のお話
577:デフォルトの名無しさん
23/03/05 06:15:37.72 nSao/Dea0.net
>>568
何が?
578:デフォルトの名無しさん
23/03/05 06:58:01.26 94fNx05VM.net
8086には現在のような深いパイプラインは無いがそれでもEU(Execution Unit : 実行ユニット)とBIU(Bus Interface Unit : バスインタフェースユニット)は独立しており
メモリアクセスと内部のALUはそれぞれ別々に動作する
ある意味初歩的な2段パイプラインとも言える構造で単純なクロックサイクルの加算とはならない
579:デフォルトの名無しさん
23/03/05 07:13:34.61 cmZGkkdl0.net
>>571
>[temp]は2回だな
なぜ2回?
580:デフォルトの名無しさん
23/03/05 08:11:12.86 nSao/Dea0.net
>>573
temp: dw 0000h
つまりtempはメモリに置かれている
tempのREADで1回、
[]によるインダイレクトでもう1回
だろ
581:デフォルトの名無しさん (ワッチョイ 13ad-NCuH)
23/03/05 12:43:47.21 nmaj3sub0.net
>>567
昔昔はそういうものだったんよ。
Cは、
・プログラマの責任において何でもできる
・コンパイラはプログラマの意思に忠実であれ(余計な最適化なんかするんじゃねえ!)
ってこと。だから、
a=a+1;と、a++;は違う。
前者は加算命令、後者はインクリメント命令になってほしいというのが、プログラマの意志。
ただ、Cが色々な場で広く使われるようになって、最適化を進めるしかなくなったから、そんなのどうでもいいことになったけど。
582:デフォルトの名無しさん (ワッチョイ 1969-zdzo)
23/03/05 12:47:05.12 s1YdjeUN0.net
>>574
だからさ……それを2回っていうなら、[sp+10]も2回だろ
583:デフォルトの名無しさん (ワッチョイ d163-PMd1)
23/03/05 13:30:59.36 nSao/Dea0.net
>>576
何で?
即値はフェッチ時点で取り込まれているのに
584:デフォルトの名無しさん (ワッチョイ 1969-zdzo)
23/03/05 15:05:57.71 s1YdjeUN0.net
>>577
tempもtemp自体は即値だよ
[sp+10]と[temp]の違いはレジスタ相対かどうかだけ
585:デフォルトの名無しさん (ワッチョイ 13ad-Qpn1)
23/03/05 15:07:29.13 YlwUczDE0.net
>>575
ま、しかし、昔はコンパイラの最適化がしょぼかったというのもあるな。
CPU (特に 8 bit CPU とか) がC言語等のいわゆる高級言語を全く意識して作られていないというのが最大の問題だったのかも知れないが。
586:デフォルトの名無しさん (ワッチョイ d163-PMd1)
23/03/05 15:41:40.37 nSao/Dea0.net
>>578
DWディレクティブで定義してるんだからリテラルの類だよ
命令コードと一緒にフェッチされる即値とは根本的に違う
587:デフォルトの名無しさん
23/03/05 16:48:35.64 0aHQQO/od.net
>>577
CPU仕様によるが
68000では8ビット範囲以内のディスプレースメントは命令中に含まれてたが
8086はどうだっけ…
588:デフォルトの名無しさん
23/03/05 17:03:05.50 nSao/Dea0.net
>>581
いやここはCPU仕様には関係ないぞ
68kにしたってdc.lディレクティブで置いた定数はディスプレースメントじゃないし
589:デフォルトの名無しさん
23/03/05 17:27:59.49 0aHQQO/od.net
間違い、>>581は6809の話だった…
ややこしくなってるが
MOV AX、[SP+10]
がspレジスタから10バイト後を読むなら
MOV AX、[TEMP]
はアドレスTEMPを読む意味だろ
8086ニーモニックをよく知らないが
590:デフォルトの名無しさん
23/03/05 17:44:11.51 nSao/Dea0.net
>>583
6809にしたってFDBディレクティブで置いた定数はディスプレースメントじゃないし
591:デフォルトの名無しさん
23/03/05 18:29:27.81 On/jxRV/0.net
#include <stdio.h>
#include <math.h>
void main(void){
double a, b, c;
double x1;
a = 4;
b = -3;
c = 1;
x1 = (-b + sqrt(pow(b,2) - 4*a*c)) / (2 * a);
printf("%f\n", x1);
}
printfが-nanて表示します。これはどういう意味でしょうか?
592:デフォルトの名無しさん
23/03/05 18:43:57.85 KnQWIUK4d.net
>>585
コンバイラかて人間や
こんなつまらん二次方程式の解をなんぞ解きたくない
そう言う意思表示や
593:デフォルトの名無しさん
23/03/05 18:53:30.15 M62PQQGq0.net
>>585
printf("(%f)\n",pow(b,2) - 4*a*c);
594:デフォルトの名無しさん
23/03/05 19:03:21.29 On/jxRV/0.net
あー、なんかわかってきました
そういうことか
サンクス
595:はちみつ餃子
23/03/05 19:07:20.35 AE3nXsIn0.net
>>585
sqrt に負数を渡した場合には定義域エラーとなり、定義域エラーのときは処理系定義の値を返す。
その処理系では処理系定義の値というのが nan だということになる。
言語仕様では詳細は規定されていないけれど
一般に浮動小数点の表現として使われる IEEE 754 などでは非数 (not a number) を表現のひとつとして持ち、
意味のある計算結果にならなかったときは非数がセットされる。
not a number の略で NaN 。
処理系によっては定義域エラーをハンドリングする方法を用意してあることもあるけど、
発生させないように事前にチェックしたほうが基本的には簡単だと思う。
596:デフォルトの名無しさん
23/03/05 19:21:09.18 0aHQQO/od.net
よくわからないんだが
>>574が勘違いだな
TEMP: dw 0000h
はデータ0000hをメモリに置いてそのアドレスをTEMPと定義するという命令(アセンブラ疑似命令)
MOV AX,TEMP
はAXレジスタにそのアドレス値を入れる
MOV AX,[TEMP]
はAXレジスタにそのアドレスの内容(0000H)を入れる
さらに[0000H]の内容を読むにはもう1命令必要になる…はず
6809なら1命令で読めるがあまり使われなかったと思うどっちにしろ遅くなるので
597:デフォルトの名無しさん
23/03/05 19:26:59.51 eomhsMcE0.net
6809の用語でいうとメモリ間接参照アドレッシングだな
598:デフォルトの名無しさん
23/03/05 19:30:46.77 eomhsMcE0.net
ちなみに1命令で読むのはダイレクトページ参照アドレッシングな
6809ではあまり使われなかったけど、6502などではこれが使えないと実質何も出来ない
599:デフォルトの名無しさん
23/03/05 23:40:03.63 yUIw0mIIM.net
>>585
nanは、何処かでnanになると、その後の演算全てがnanになる
なのでsqrtのnanが伝搬してprintfがnanを表示した
ゲーム(特に3D)は、油断するとnanを伝搬させてしまう事があって、キャラがグチャグチャに壊れて表示されるのは、それが原因
nanを伝搬させるとデバッグが大変なので、nanを出さないように細心の注意が必要だ
sqrtとか特に割り算(/)に気を付けないといけない
600:デフォルトの名無しさん
23/03/06 02:42:50.81 Ht1FmqqLd.net
>>593
え、割り算でNaN出る?と一瞬思ったけど、0.0/0.0かな?多分
珍しいケースに思える
非ゼロ/0.0でinfが出るのは関数の根を簡易に求めるのに重宝するけど(逆数が極)、NaNが出る可能性にまでは気を配って無かったのでナイス指摘
601:デフォルトの名無しさん
23/03/06 02:51:49.35 Ht1FmqqLd.net
>>589
IEEEはほぼCの為に制定されたようなものでは?
fpuなんて改造してナンボな本場のnumber cruncher達(ほぼFORTRAN/Fortran)は最近までIEEEなんて最近までガン無視だったわけで
今は標準モジュールにIEEEサポート入って普及してるけど
602:デフォルトの名無しさん
23/03/06 02:52:25.09 Ludh8Y7rM.net
>>594
3Dだとベクトルのノーマライズをしょっちゅうするけど、これはベクトルの長さで割るけど、事前に長さのチェックが漏れてると、ゼロで割ることになる
そういう特殊な状況は確かに稀なんで、リリースに残ってしまうことがある
603:デフォルトの名無しさん
23/03/06 03:02:31.96 Ludh8Y7rM.net
>>594
良く考えたら、rsqrtがnanを返してる気がする…
604:デフォルトの名無しさん
23/03/06 03:14:56.83 VyhKtCOB0.net
>>596
俺環ではDBL_MIN/0.0でもちゃんとinf吐くから、ノーマライズされるべきベクトル(分母)が正確に0.0というのはdoubleでは考えにくいような…
3Dだとsingle以下のfloat16/8とか使うと聞くから、極端に精度が低過いと起きるのかしら?
605:デフォルトの名無しさん
23/03/06 07:22:56.30 VyhKtCOB0.net
分子、でした
>>597
かもね
あと0.0/0.0以外の四則でもnanが出るケースは他にも思い付く(今思い付いた)
inf/infとか
まあ実数関数求根/方程式を解く目的なら(精度上での)解に達した証がinfだから、発生した時点で必ずbreakするし、事実上到達し得ない計算だけど
定義域がパッチワークみたいな複素関数で一々入力のチェックなんてやってられないし、nanには静かに伝播してもらわないと困るけど
とにかく欠損値の無い有限の実数値だけが欲しいだけ(例えばグラフィック)なら、fenv.h/signal.hで例外をヲチしてSIGFPE投げるとか、あるならsnanモードにするとか
606:デフォルトの名無しさん
23/03/06 14:19:01.34 +b36jU+h0.net
この糖質3歩手前みたいな文章はいつもの彼かね
>>385とか>>523とかと雰囲気が同じだが
607:デフォルトの名無しさん
23/03/06 22:43:56.50 K6iDrUwm0.net
このような状態を「思考障害」と呼び、Cプログラマの2割ほどが患っていると言われています
608:デフォルトの名無しさん
23/03/07 07:51:33.34 hIILJ8zA0.net
次の議題は『gotoは活用すべきか全面廃止するべきか』でうわぁなにをするやめ・・・
609:デフォルトの名無しさん
23/03/07 13:35:22.89 914niPGe0.net
行き先はhellで
610:デフォルトの名無しさん
23/03/07 19:20:42.99 L3ZoYgrgd.net
いいか?C言語について俺に聞け
VAX11でcのコンバイラをcで作ろうとしたのはワシだ
当時のyacc lexに謎の挙動があって嫌気がさして失敗したが、、?
611:デフォルトの名無しさん
23/03/07 19:38:38.87 2Q8k5rzL0.net
創造主を作ったのは、オレだ、みたいな
612:デフォルトの名無しさん
23/03/07 22:59:35.82 s3GtgFEy0.net
インド料理屋で、NANを頼みました。
613:デフォルトの名無しさん
23/03/07 23:06:20.52 s3GtgFEy0.net
>>605
そういえばID論ってのがあって、何か高度な存在が人間や宇宙を作ったってやつだが(昔ながらの神が作ったというのと似ているが神ではない)、
それならばその高度な存在はどのようにして作られたのか?それはまた別の高度な存在によって作られたのか?
とするとその存在も別のもっと高度な何かに作られたのか?という具合に無間ループになってしまう。
614:デフォルトの名無しさん
23/03/07 23:18:55.74 aKlG86O40.net
ID論てのは地球のたった数億年で生命が生まれたのが信じがたいってだけで、
元の生命はどこかでもっと時間をかけて生まれたんじゃないかという話。
615:デフォルトの名無しさん
23/03/08 00:40:31.06 diq3Y+zm0.net
興味深いお話ですがスレ違いです
616:デフォルトの名無しさん
23/03/08 08:33:16.96 qdKF3wc3d.net
Cインタプリタなら昔作った
当時こういうの流行ってたし
いくつか書籍化もされてる
617:デフォルトの名無しさん
23/03/08 08:47:42.99 D4+z1pfo0.net
どうせならB作ればよかったのに
618:デフォルトの名無しさん
23/03/08 09:22:43.28 fOZ1V1tZd.net
>>607
ブートストラップローダという名前がついたのと似てるなw
コンピュータ起動時に次々と自分より大きいローダを読み込んで起動する様が「自分の靴紐を持ち上げて空を飛ぶ」ような無茶に思えるから
619:デフォルトの名無しさん
23/03/08 12:12:57.95 wYi2NpnKd.net
鉄則
1 困った時のGOTO勝利
2 CALL関数はマクロ展開のヘッダファイル
3 SQL呼び出しはstructの前に敗北
4 while こそループの王 forは邪教
5 そこでbreakするな
6 switch文が見えたらバグの腐海
620:デフォルトの名無しさん
23/03/08 12:52:17.24 qdKF3wc3d.net
でもswitchの巨大状態ループ便利なんよね
バグの温床かもしれんけどメンテは凄く楽
621:デフォルトの名無しさん
23/03/09 09:47:34.15 rNyfncCj0.net
あれやって 条件成立まって あれやって を 状態遷移しながらぶん回すときは
状態変数を int にして 巨大switch にしたくなる
けど こことここの間に新たな状態差し込みたいってときに 状態変数値どうしよう? っておよよする
622:デフォルトの名無しさん
23/03/09 09:53:04.07 rH46BtzXM.net
状態変数は列挙型にしておけば状態の追加や修正に合わせて具体的な値は勝手に変わる
623:デフォルトの名無しさん
23/03/09 10:05:04.42 rNyfncCj0.net
>>616
おおよそそれが一番良い解法なんだろうけど
次の状態へ ってのを同じ記述でいきたいよね と (return sts+1)
624:デフォルトの名無しさん
23/03/09 10:37:21.41 zXViYC6t0.net
FSMだね
古典的なハード設計では常套手段
625:デフォルトの名無しさん
23/03/09 10:42:55.43 m8Mymp8XM.net
状態マシンの欠点は割込みや並列処理の扱いが非常に厄介なところ
複数箇所から状態変数を更新される可能性を考慮すると泥沼に嵌る
626:デフォルトの名無しさん
23/03/09 10:48:34.22 kE5o8bWH0.net
更新処理は一カ所にして、順番待ちにするのが吉
627:デフォルトの名無しさん
23/03/09 10:54:14.30 WaHsZI+cM.net
通常処理のメインループと外部割込みの割込みハンドラ(特に緊急割込み処理)を同じキューで順番に更新すると処理が破綻しないか?
628:デフォルトの名無しさん
23/03/09 11:08:05.83 zXViYC6t0.net
ノンプリエンプティブなマルチは今でも
629:普通にやる 問題なきゃそれが楽だから
630:デフォルトの名無しさん
23/03/09 11:12:46.89 sK4pplDk0.net
組込みではプリエンプティブが一般的
応答性最優先でCPUの実行権を強制的に奪わないと最悪の場合は事故に繋がる
631:デフォルトの名無しさん
23/03/09 13:56:50.62 1gP/2BE4d.net
問題なきゃって言ってるのに最悪の場合って・・・
632:デフォルトの名無しさん
23/03/09 14:41:35.25 yDS62QUEM.net
組込みシステムのタスクスケジューラーでノンプリエンプティブマルチタスクって地雷源もいいところだろ
自殺願望でもあるのか
633:デフォルトの名無しさん
23/03/09 16:23:16.50 pN9rkknD0.net
組み込みと一言で括られてプリエンティブで良い悪いの議論をされるの抵抗ある人がここにいるけど俺以外でもかなり多いんじゃないかな
プリエンティブはタスクスイッチ自体が割り込み禁止を伴うクリティカル処理だからそれが組み込みに適しているとはいい難い
タスクスイッチのレジスタ退避復帰で何十サイクルも消費して待ってる割り込みが処理できずにいるのが許容できかは案件により過ぎる
片やノンプリでは少なくとも割り込みを汚さない
従って俺はどんな案件でも通用するノンプリでまず検討する事を推奨したい。プリエンでもタイミング的に問題ないねとなったら移行すればいい
いきなりプリエンありきで作る方が自殺行為に見える
634:デフォルトの名無しさん
23/03/09 16:36:55.55 StryrQ2LM.net
タイミング的に問題ないという判断の前提が一定時間以内に必ず応答出来るという保証が必要
応答時間が保証されないノンプリエンプティブ環境でシステム設計とか殆ど不可能にしか思えない
635:デフォルトの名無しさん
23/03/09 16:39:33.97 pN9rkknD0.net
割り込みにも大別してすぐに応答が必要なもの、メインのキューに回してもよい優先度低のものの2種類存在する
プリエンティブを採用できるかどうかは前者の応答にどれだけの遅延が許容されるかという事になる
割り込みハンドラを普通にCで書くとハンドラ内で使用するレジスタの退避コードが適当に生成されるが、
許容時間によってはインラインアセンブラで最小限のレジスタで書かざるを得ない場合がある
そういう案件だとプリエンティブの採用はありえない
636:デフォルトの名無しさん
23/03/09 16:41:41.13 pN9rkknD0.net
あーこれってノンプリエンプティブを何か誤解してる奴が話に参加してるってだけか
理解したわぁ
637:デフォルトの名無しさん
23/03/09 16:45:38.25 pN9rkknD0.net
623 625 627 これ同じ人か
もうちょっと勉強してから参加しようね
638:デフォルトの名無しさん
23/03/09 16:48:44.72 hgw38TJYM.net
いやその通りだよ
保証出来るようにアセンブラすら併用せざるを得ないのが泥沼の組込み開発
それでも駄目ならソフトウェアでなく専用ハードで物理的に処置する方向を検討する
639:デフォルトの名無しさん
23/03/09 16:57:03.69 EoI0IUhJM.net
ちなみにとある産業用モータドライバー基板開発のお話し
640:デフォルトの名無しさん
23/03/09 17:02:44.72 pN9rkknD0.net
>>631
タイミング調整にアセンブラ併記は組み込み案件でなくても普通に行われてるでしょ
それと専用ハードって簡単に言うけど、大抵の組み込み案件ってハードの部品点数減らしていく傾向だから非現実的な提案にしか見えないよ
簡単に用意できるなら苦労しないし廃業だわ
641:デフォルトの名無しさん
23/03/09 17:08:56.67 pN9rkknD0.net
そもそも俺が今相手してる奴って全員ID変えてどちら様だよ
議論もまともにできず論点ずらしにも失敗してお前ほんと今みじめだぞ
642:デフォルトの名無しさん
23/03/09 17:11:58.61 pN9rkknD0.net
よくみたらこれワッチョイスレじゃん全部ばれてて草
643:デフォルトの名無しさん
23/03/09 17:14:52.84 AnxNC5rK0.net
623はともかく 625と627はワッチョイ同じじゃん
644:デフォルトの名無しさん
23/03/09 17:20:18.66 iNLkXR0fM.net
要はトータルコストの問題
この件は高価な材料(主にレアアース)を多量に使用したモーターを安価な代替品に置き換えて
同等の能力を発揮させるために高度な電子制御(いわゆるベクトル電流制御)で駆動するのが狙いだった
実際メインのマイコン処理だけでは追い付かずセンサ周りの処理は別チップのDSPを採用してる
結果的に制御系のコストは増加したが全体としては前システムの約7割程度の費用に抑えられた
長文失礼
645:デフォルトの名無しさん
23/03/09 17:22:17.10 pN9rkknD0.net
>>623も言ってることおかしいけど別回線か何かだろ
そもそも組み込みはその最悪ケースを見積もりながら設計していくって前提知識がないし
646:デフォルトの名無しさん
23/03/09 17:22:30.90 kE5o8bWH0.net
自動運転車での危険回避行動のロジックとか、聞けるのかと楽しみにしてたのに
647:デフォルトの名無しさん
23/03/09 17:34:00.29 mZ/OHyfS0.net
電気・電子
URLリンク(rio2016.5ch.net)
648:デフォルトの名無しさん
23/03/09 17:41:37.81 zXViYC6t0.net
ハード絡みの話が出るのは仕方ないだろ
COBOLじゃないんだから
649:デフォルトの名無しさん
23/03/09 17:50:21.11 pN9rkknD0.net
>>637
これを1行で要約するとヤバいなあ…設計見積もりガバガバで採用したマイコンで処理できなくてハード追加調達して結果的に動いたわろたってことだろ
最近のH3失敗もだけど予算まともでもこういう経験値の奴らで作られる可能性を考えると寒いなあ
暖ったけえ話を知りたい
650:デフォルトの名無しさん
23/03/09 17:54:10.14 zXViYC6t0.net
若いのに頭固いっていうのかな
他人の言うことを聞く耳持たず自分の思い込みを自画自賛してるよな
651:デフォルトの名無しさん
23/03/09 18:26:27.17 Dl2bLbopM.net
このスレの年齢層はとても高い
652:デフォルトの名無しさん
23/03/09 18:29:05.52 sK4pplDk0.net
精神年齢は?
653:デフォルトの名無しさん
23/03/09 18:33:49.17 sK4pplDk0.net
疑心暗鬼で個人攻撃
プログラムではなくてワッチョイを語る
世も末だな
654:デフォルトの名無しさん
23/03/09 20:35:29.98 pN9rkknD0.net
最悪の場合は事故さん(>>623)がなんか被害妄想を始めてるけど
俺の主張は>>626以降で出してるから後は興味ないんだわ
反論があるならすればいいがせめてこのスレと関係ある技術的な話をしてね
655:デフォルトの名無しさん
23/03/09 20:49:30.54 sK4pplDk0.net
組込みマイコンでは常識的なレジスタバンク切替やコンテキストスイッチングのことに触れずに
レジスタ退避や復帰でサイクル消費するとか言ってる時点で組込み開発の経験が無いんだろうな
ということは分かる
余程の簡易的なものを除けばメインと割込みでいちいちスタック経由でレジスタ退避するような
間抜けなマイコンは無いだろ
それはx86のような汎用CPUの構造だ
656:デフォルトの名無しさん
23/03/09 21:04:47.03 VZ2yRc9EM.net
似たような意見が出てきたので補足するとバンク切替なら大体2,3クロックでレジスタセット丸ごと切り替わるから割込みのオーバーヘッド自体は大した負荷にはならない
反面x86の様な大規模なレジスタ群は持てないのでそもそもの用途と構造が違う
657:デフォルトの名無しさん
23/03/10 06:51:36.78 wZRM+8gY0.net
ドヤってるけど大したこと言ってないな
658:デフォルトの名無しさん
23/03/10 07:19:22.02 gnQ
659:OQJYP0.net
660:デフォルトの名無しさん
23/03/10 07:50:43.93 wZRM+8gY0.net
マルチで何タスクを並行で動かすのかによるだろ裏レジスタだけで済むかどうかは
661:デフォルトの名無しさん
23/03/10 07:56:30.74 wZRM+8gY0.net
無結合マルチCPUで楽々解決なんてこともあったな
662:デフォルトの名無しさん
23/03/10 07:57:42.45 gnQOQJYP0.net
知ってる範囲では8レジスタ×4バンクというのがあった
日本製(現在は事業撤退済)
663:デフォルトの名無しさん
23/03/10 08:08:15.26 gnQOQJYP0.net
そもそもマルチタスクのタイマ割込みの他に外部ポートからの多重割込みは
優先順位とレジスタ割当てをかなり慎重に検討するべき事項
並列処理の仕様はソフト設計の基本
664:デフォルトの名無しさん
23/03/10 08:24:52.79 wZRM+8gY0.net
並列じゃないソフト設計も普通にあるんだが
665:デフォルトの名無しさん
23/03/10 08:34:55.28 gnQOQJYP0.net
まあ外部割込みを一切禁止して常にポーリングでポート監視するシステムも無いことは無いが
ごく単純なパターンに限られるけどな
普通は外部からの入出力のトリガは割込みで受け付ける
666:デフォルトの名無しさん
23/03/10 08:41:29.45 wZRM+8gY0.net
そもそもタイミングがシビアなところはハードでできるのはそうするし
かなり特殊なケースにもFPGAの対応力はありがたい
667:デフォルトの名無しさん
23/03/10 08:47:32.61 gnQOQJYP0.net
そこまで行くとソフト設計者の範疇の外
668:デフォルトの名無しさん
23/03/10 08:50:32.68 wZRM+8gY0.net
ハードソフト協調設計をする中でソフトでどこまでやるかってこと
669:デフォルトの名無しさん
23/03/10 08:59:18.03 OFFvcl9SM.net
士農工商メカエレソフト
ソフト屋底辺の悲しさ
ハードソフト分担は大体は製品企画段階で決まる
メカ屋やエレキ(ハード屋)の尻拭いがソフト屋の仕事
670:デフォルトの名無しさん
23/03/10 09:06:33.88 +DlQ4xGFM.net
DSPあたりまではソフトでカバー出来るけどFPGAにまでなるとハードの仕事
671:デフォルトの名無しさん
23/03/10 09:17:19.56 wZRM+8gY0.net
CでROM焼きしてんのと
VerilogでFPGAやってんのは
遠くから見ても見分けがつかない
672:デフォルトの名無しさん
23/03/10 16:29:37.22 9R6reiLca.net
>>644
映画Winny観て来た
時代考証が微妙なところもあったが
ノスタルジー感じたい人は逝ってヨシ
673:デフォルトの名無しさん
23/03/10 16:33:31.81 9R6reiLca.net
ちなみに映画中に出て来たCのソースコードは
逆コンパイルしたようなコードで
変数名がめちゃくちゃだった
674:デフォルトの名無しさん
23/03/10 16:35:25.12 9R6reiLca.net
local_001 とか
local_666 みたいな
ずらずら並んでた
675:デフォルトの名無しさん
23/03/10 20:16:30.19 EGVo42nQ0.net
私を崇めよ
関数ポインタ配列が楽になる
676:
23/03/10 23:25:55.00 edbNYall0.net
>>608
パン=スペルミア仮説ともいいますね
677:デフォルトの名無しさん
23/03/11 10:14:57.49 AyWAtMH4d.net
>>665
オープンソースの何かのを借りてくればいいのにと思うが
正当な目的外だからだめかな
678:はちみつ餃子
23/03/11 10:33:06.84 VCVl4BMy0.net
実際に逆コンパイルされたものじゃないのか?
うろおぼえだが Winny の改造版 (?) を作ってた Lark 氏が逆コンパイルしたソースコードを放流していたような記憶がある。
679:デフォルトの名無しさん
23/03/11 15:00:32.33 R1SsWCE7d.net
scanf関数もクセが強い
680:デフォルトの名無しさん
23/03/11 18:34:55.65 Hy+SW7JA0.net
scanf の読み方は?
681:デフォルトの名無しさん
23/03/11 18:46:17.31 anM6KfKL0.net
すきゃんふ
682:デフォルトの名無しさん
23/03/11 19:06:51.49 HIr/E9uU0.net
すきゃんえふ
683:デフォルトの名無しさん
23/03/11 19:36:37.96 4mLQMbcb0.net
当時、京都府警がソースコードを押収したとか言ってなかったっけ
だとすると今でもあるのかな
684:デフォルトの名無しさん
23/03/11 20:41:12.44 0fOr9zyF0.net
そんな古いもんあんのかね
そもそも自分らの不手際で逮捕しなきゃいけない羽目になったんだから要らなくなったら即ポイ捨てだと思うけどね
685:デフォルトの名無しさん
23/03/12 07:29:50.79 WhaHkT9k0.net
すきゃんてぃ
686:デフォルトの名無しさん
23/03/12 12:04:15.69 8DcR0+gea.net
>>670
47氏本人が家宅捜査される場面で
編集中のソースコードって設定だから
本人がわざわざ逆コンパイルして使ってるのは可笑しい
仮に変数名自分で付けてたとしてもあんな名前でコード描いてたとは思えない
687:デフォルトの名無しさん
23/03/12 12:07:04.69 8DcR0+gea.net
>>672
SNMPを「すぬんぷ」って発音してる人が居て
会話中に「えっ???」ってなった
688:デフォルトの名無しさん
23/03/12 12:08:27.97 8DcR0+gea.net
あと別の人だけどswaponは「すわぽん」っていうのも
聴いてぎりぎり判るラインだったわ
689:デフォルトの名無しさん
23/03/12 12:10:31.51 8DcR0+gea.net
>>676
ほんそれ
京都府警のチョンボ情報漏れが先で逮捕に至ったのに
映画では逆の展開にされていて引いたわ
圧力掛かったんかね
690:デフォルトの名無しさん
23/03/12 12:11:07.17 zZ3L0xxp0.net
>>678
他のどんなコードを持ってきたとしても「あんなコードのはずがない」という突っ込みは受けそう。
691:デフォルトの名無しさん
23/03/12 12:23:09.80 /+cwNiL3d.net
京都府警りょうのキンタマ
692:はちみつ餃子
23/03/12 14:34:58.81 zw46Mo410.net
使われているソースコードはおそらくこれということらしい。
URLリンク(github.com)
>>678
ちゃんと考証するならそりゃそうだが
重要でないところに小ネタを仕込むのもよくあることでしょ。
693:デフォルトの名無しさん
23/03/12 14:38:15.75 36zMid+Td.net
>>682
有り得るね
スレリンク(poverty板)
694:デフォルトの名無しさん
23/03/13 11:21:17.63 bF2IN6wDa.net
>あんなコードのはずがない
47氏死んでからの映画化ならではだな
695:デフォルトの名無しさん
23/03/13 15:53:24.36 gUMqyWwJd.net
ジョブスの映画はもっと酷かったぞ
ウォズがこれがアップルIだ!っつってジョブズに見せると画面にアスキーコード順に文字が出てくるだけ
ジョブズがオオスゲーって顔するんだけどw
もっともそこですでにBASICやゲームの画面が出てくるのもおかしいんだけどな
696:デフォルトの名無しさん
23/03/13 20:33:15.11 ZWncv4YS0.net
CALL -151
697:デフォルトの名無しさん
23/03/13 21:56:22.40 sKLW0uN10.net
>>687
脇役で出てくるPCの時代考証がおかしかったりしたあれか
698:デフォルトの名無しさん
23/03/14 01:18:17.67 eWxvxvkk0.net
>>687
その映画見てないので分からないが、もしや Apple ][ ではなく Apple I のこと?
だったらワンボードマイコンなのでテレビ画面に文字が出るだけでも当時は凄い事だったと思うが。
Apple I が作られたのは1976年だしな。
699:デフォルトの名無しさん
23/03/14 03:06:45.91 TJZO9aGD0.net
もしやもクソも誰もApple2の話なんかしてないと思うがキミはいつもそんな調子なのかね
700:デフォルトの名無しさん
23/03/14 09:46:34.46 tHJOYlO8d.net
ごく初歩的な質問です 変換して指定子を何にすればよいか教えてください
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int id;
char ss[80];
strcpy(ss,"123");
id = atoi(ss);
printf("%d\n", ss);
return 0;
}
を実行するとでデタラメな数字が出力されます。
変換して指定子をなににすればよいのでしょうか?
701:デフォルトの名無しさん
23/03/14 09:57:04.49 tHJOYlO8d.net
692です 解けました 寝ぼけていたみたいです
702:デフォルトの名無しさん
23/03/14 10:05:55.26 3kN/fw0O0.net
%dとか%sとかの呼び方って、変換指定子、書式指定子、フォーマット指定子のどれがいいんすか?
703:デフォルトの名無しさん
23/03/14 10:12:18.85 tHJOYlO8d.net
ある本によると、たんなる、「変換仕様」や「出力変換仕様」となってます
704:デフォルトの名無しさん
23/03/14 10:34:18.75 3kN/fw0O0.net
printfで出力変換仕様ならscanfでは入力変換仕様になりそうっすね
705:デフォルトの名無しさん
23/03/14 10:38:03.93 3kN/fw0O0.net
英語だとformat specifierなんすね
直訳ならformat→フォーマットか書式、specifier→指定子か仕様って感じすか
706:デフォルトの名無しさん
23/03/14 11:19:53.02 VNqhYyU8F.net
>>690
>ワンボードマイコンなのでテレビ画面に文字が出るだけでも当時は凄い事
ほんそれ
現役体験世代しか持ち得ない臨場感ってこう言うもんよ
707:デフォルトの名無しさん
23/03/14 11:22:04.60 VNqhYyU8F.net
>>692-693
いつのC使ってるのかしらんけど
警告出ないんだっけ
708:デフォルトの名無しさん
23/03/14 13:01:28.77 dwJIt/jSd.net
>>699 警告出てました vscodeだと警告なしでバカ数字だけ出力される設定です
709:デフォルトの名無しさん
23/03/14 13:07:48.27 ZglUMoKma.net
にぎりっ屁
710:デフォルトの名無しさん
23/03/14 18:59:23.39 4eLUupfkd.net
>>692
なんとこのコード!
直値で領域確保など、神をも恐れぬ傍若無人
悪魔をも恐れぬ愚策の極み
とても合格点は出せない
711:デフォルトの名無しさん
23/03/14 19:27:10.55 1SjvDtDOM.net
コンパイル時にエラーにならない可変個引数が悪い
ただ警告は出てるけどね
>>692はそれを無視してたんだろう
Cコンパイラーの警告は実質エラーだからな
712:デフォルトの名無しさん
23/03/14 22:18:52.69 xPBygAZk0.net
> 警告は実質エラー
自分の頭で考えることを放棄したクルクルパーwww
713:デフォルトの名無しさん
23/03/15 00:47:49.02 q5LCzWGQM.net
>>704
仕事でC使ってない素人は黙ってろよw
714:デフォルトの名無しさん
23/03/15 00:50:40.37 eS/lJ3n/0.net
ワイは車載プログラマーだがwarningだらけやな
715:デフォルトの名無しさん
23/03/15 00:51:38.54 q5LCzWGQM.net
>>704
こんな事言うやついるんだなw
そりゃ日本の競争力も低下するわけだ…
716:デフォルトの名無しさん
23/03/15 06:54:14.38 MuZQ71LVd.net
>>704
「警告ね、ハイハイオッケー!」
思考放棄だろこれw
717:デフォルトの名無しさん
23/03/15 07:36:21.87 T1RUme5O0.net
はははは、悔しそうだなw
718:デフォルトの名無しさん
23/03/15 08:41:20.34 MuZQ71LVd.net
うわぁ…
719:デフォルトの名無しさん
23/03/15 10:49:56.85 U534XRL10.net
JAXAのロケットが飛ばない理由はこれかも
720:デフォルトの名無しさん
23/03/15 12:28:05.63 0cl6W22rr.net
ロケットの失敗は中抜きで必要なところにお金がまわらなかったからです
721:デフォルトの名無しさん
23/03/15 13:20:32.86 CD47sW3td.net
>>712
へ?ロケットも元請けはデン2?
722:デフォルトの名無しさん
23/03/15 13:31:23.12 MuZQ71LVd.net
うろ覚えのネット知識同志で問答するのはやめるんだ
ゴチャゴチャになるぞw
723:デフォルトの名無しさん
23/03/15 13:38:30.28 PyY+66E5M.net
請け負ったのは三菱重工業だが、国産ジェットも失敗してるからな…
もうロケットはドラマの中でしか飛ばないw
724:はちみつ餃子
23/03/15 14:19:05.65 ouX7yS+u0.net
>>694
d や s の部分が変換指定子 (conversion specifier)。
%d や %s 、これに精度やフラグや長さ修飾子まで含めた実引数ひとつに対応する指定が変換指定 (conversion specification)。
更にこれらを含む文字列全体 (printf の第一引数や fprintf の第二引数など) が書式 (format)。
書式に含まれる普通の文字か変換指定のことを指令 (directive) という。
書式指定子 (format specifier) という用語は何を指すのか明確な説明がないのだけれど
形式としては変換指定から % を除いたものになってる。
以上の用語は JIS に基づくが K&R 第二版日本語版を見てみると
変換指定子ではなく変換文字と書かれていたり
変換指定ではなく変換仕様になっていたりする。
JIS は (ISO の規格の) 良い訳というわけではないけど
納得しようがしまいがとりあえず統一するのが規格ってものの役割なんで
より「正式」であることを指向するなら JIS に合わせるべきだと思う。
(他の用語が間違いというわけではない。)
725:デフォルトの名無しさん
23/03/15 14:45:10.43 T1RUme5O0.net
腹いせのつもりが
またしても恥かいたなw
726:デフォルトの名無しさん
23/03/15 15:41:59.18 IBd2LSQOd.net
>>716
翻訳入れた時点で訳者に依存する2次情報だからな
他国翻訳の後出し規格で特に用語に関しては参考に値しないよ
727:デフォルトの名無しさん
23/03/15 15:50:17.02 T1RUme5O0.net
いやJISは一次情報だよ
何かを参考にしたとは書いてあるけどね
公文書としての責任は負うわけで
728:デフォルトの名無しさん
23/03/15 19:38:30.28 BZs4LmWfM.net
JIS X3010は翻訳じゃなくて、プログラミング言語Cという規格だな
ま、ISOを基礎にしてるとは書いてあるがな
本質的な部分で違いがあるのかは分からない(多分無いだろうけど、有っても不思議ではない)
729:はちみつ餃子
23/03/15 20:45:39.37 ouX7yS+u0.net
JIS X3010:2003 内のサンプルコードのインデントが 7 なのはどういう意味があるんだろうな?
どうでもいいからこそあえて ISO と違える理由も思いつかない。
730:デフォルトの名無しさん
23/03/16 10:34:04.56 183yxeev0.net
>>692
printf("%d\n", ss);
↓
printf("%d\n", id);
731:デフォルトの名無しさん
23/03/16 20:52:18.53 awXg4DCe0.net
VScodeで下記のようなMakefile作ってターミナル(PowerShell)で実行したのですが
ソースファイルを拾ってくれないです。
Makefileと同じディレクトリにsrcフォルダとその中にソースがあります。
SRC_DIRS = src
TEST := $(shell find $(SRC_DIRS) -name *.c)
test:
echo $(TEST)
エラーは「ファイルが見つかりません - *.c」と出ますがfindは使えないのですか?
732:デフォルトの名無しさん
23/03/17 04:22:40.28 1OmGmSd00.net
>>723
nmake派だから自信ないが、ファイル内文字列検索の方のfindコマンドが呼ばれてるように見える、当たり前だけど存在しないファイルに対して文字列検索はできないので
引数的に多分findでなくgciが望みのコマンドでは
gci -file -inc *.cとかそんな感じでどうよ
733:デフォルトの名無しさん
23/03/17 05:56:28.46 F2H2paQ20.net
>>723
PowerShellは知らないが、Unixだと括る。
find $(SRC_DIRS) -name *.c
↓
find $(SRC_DIRS) -name '*.c'
734:デフォルトの名無しさん
23/03/17 07:48:39.66 FEpWoYhBd.net
findなんて使わなくても
SRC_DIRS = src
TEST := $(wildcard $(SRC_DIRS)/*.c)
でいいだろ
つーかC言語の質問じゃねえw
735:デフォルトの名無しさん
23/03/17 08:34:07.50 FEpWoYhBd.net
頭にsrc/がつくのが嫌なら
TEST := $(nodir $(wildcard $(SRC_DIRS)/*.c))
736:デフォルトの名無しさん
23/03/17 11:21:24.24 SxK7dSEV0.net
うろ覚えだけど会社の入社前研修で
「UNIX OSでカレントにある*.txtファイルすべてをxxx(忘れた)するシェルスクリプトを作成しろ」
って課題出され、DOSのワイルドカードはアプリ内で処理するものだったんで
ファイル一覧のテキストファイル作ってそこから1行づつ読み込んで
".txt\n"って文字列見つけたら新たにスクリプトファイル作って実行するっての作った。
まさかシェル自体にワイルドカード処理する機能あるとは思ってなかった。
737:はちみつ餃子
23/03/17 11:53:15.99 XLm6gsUd0.net
>>726
C の質問ではないが Make の質問をするのに適切に思えるようなスレってなくない?
俺も困ったことがある。 (そのときは Cygwin スレかどっかで質問したけど過疎すぎて返答が付かなかった……)
C の話題ってのは言語仕様の話題だけってわけではなく開発環境の事情も含むだろうし
make も C の開発環境の一部という解釈で良いと思う。
738:デフォルトの名無しさん
23/03/17 12:38:50.70 3wI9Dhzj0.net
なんじゃそりゃ
汎用の質問スレがあんだからそっちでいいよ
739:デフォルトの名無しさん
23/03/17 13:26:15.13 dYvRZpJb0.net
はたらいたらmake
740:デフォルトの名無しさん
23/03/17 13:29:23.63 Oo1zHgPh0.net
make
スレリンク(unix板)
最終レスが2018で、ボット臭いのを除くと2016だけど。
741:デフォルトの名無しさん
23/03/17 13:56:33.41 GNeva6hg0.net
makeスレは昔から過疎スレだったよ
個人的にはCに関係するmakeの話はここでもいい気もするが
>>723みたいな環境や処理系すら書かないアホは相手したくないね
やはり専用スレだな
742:デフォルトの名無しさん
23/03/17 14:16:14.65 gUpaepT/d.net
可変個引数なのか、はたまた可変長ひきすうなのか
743:デフォルトの名無しさん
23/03/17 14:28:38.47 Jukv8C3G0.net
6.7.5.3 関数宣言子(関数原型を含む)
並びの最後が省略記号(, ...)の場合,そのコンマ以降の実引数の
個数及び型に関する情報はない(123)。
(123) <stdarg.h>ヘッダ(7.15 参照)で定義されるマクロを使えば,
省略記号に対応する引数へのアクセスが可能となる。
7.15 可変個数の実引数<stdarg.h>
744:デフォルトの名無しさん
23/03/17 15:06:41.64 k0Wz885y0.net
>>728
DOSをちゃんと使ったことないのだが、そバッチファイルとかいうやつの中では
ワイルドカードを使えるのとちがうの?
745:デフォルトの名無しさん
23/03/17 15:07:17.42 k0Wz885y0.net
そ ってなんだよw
746:デフォルトの名無しさん
23/03/17 15:09:54.39 1OmGmSd00.net
pwshは記法がmakeと被りまくっててエスケープ地獄で辛いな
特に@args | ...とか-split "a b c d "| ...のようなイディオムが
ビルトインコマンドの解決も時々失敗する怪しい挙動なので(g)makeをstraceしてみた
シェルを明示的に指定しても、makeがレシピをスキャンして展開の必要しと判定すると直接exec/CreateProcessを呼んでる様子
要するに実装の機嫌次第ですね
747:デフォルトの名無しさん
23/03/17 16:26:27.08 Jukv8C3G0.net
>>737
「の」が抜けた脱字だろ
748:デフォルトの名無しさん
23/03/17 16:40:16.98 6pq6iSnCd.net
>>736
じゃあDOSをちゃんと使え
以上
というか>>728が言ってるんはDOSではコマンドラインはそのままコマンドに渡されてコマンド側がワイルドカード展開しなければならないって事だと思うけど
for文を使えばバッチファイル中でワイルドカード展開できるけどな
749:デフォルトの名無しさん
23/03/17 19:53:17.28 k0Wz885y0.net
>>740
> じゃあDOSをちゃんと使え
お断りしますw
>というか>>728が言ってるんはDOSではコマンドラインはそのままコマンドに渡されてコマンド側がワイルドカード展開しなければならないって事だと思うけど
そんな風になってるんだ。逆に目からウロコw
考えてみれば、コマンド引数は常にファイル(パス)とは限らないのだから
コマンドインタープリタ側でデフォでファイル名展開を使わない、という態度もアリなのかな
750:デフォルトの名無しさん
23/03/17 21:22:13.62 ap5J/Una0.net
「ファイルが見つかりません - *.c」
今の話題はこれのことだろう
751:デフォルトの名無しさん
23/03/17 22:10:24.98 Pco9qL75d.net
ワイルドカードで受け取ってアプリ内でいい感じに展開するのは結構負担大きいんだよな
MSDOSのシェル側の負担を減らしたいというのは発想としてはアリなんだけど、
ハードの性能が上がった現代では時代遅れになってしまった
752:デフォルトの名無しさん
23/03/18 00:02:14.45 W6y4Yh40d.net
>>742
言えることは
普通にビルドで必要な機能は揃ってるからmakeの組み込み関数を使え
shellは最後の手段と思え
どこで展開が起こってるかエスケープ文字が食われているかを探してる時間のムダだ
753:デフォルトの名無しさん
23/03/18 05:53:53.69 zRF+ruu+d.net
/* データ型が混在した可変個引数をもつ関数の例 */
#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); // 後処理
}
上記コードのメカニズムがよくわかりません
754:デフォルトの名無しさん
23/03/18 06:00:42.41 l7CGioJ10.net
>>745
va_argマクロの実装を読むとわかるぞ
ちとしんどいが頑張るんだ
755:デフォルトの名無しさん
23/03/18 06:46:59.63 zRF+ruu+d.net
745です >>746 ありがとうございます あとで確認してみます
756:デフォルトの名無しさん
23/03/18 07:24:12.42 pLAb7CSJ0.net
普通は関数の引数が型を指定してユーザはそれに従うところを
とりあえずすべてアドレスで渡して、ユーザが自分で「そのアドレスは何を指しているか」を明示すると言うことだよ
va_list ap;
これの実体はただのアドレス
void *p; みたいなものだね
va_argの第二引数で型を指定しているが(int,double,char*)、その型のサイズに合わせてapを進めている
以下確認のコード
printf("[0x%08X] " , *(int*)ap); でapの中身が va_argで指定した型のサイズ分だけ移動しているのが分かると思う
757:デフォルトの名無しさん
23/03/18 07:24:33.20 pLAb7CSJ0.net
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;
}
758:デフォルトの名無しさん
23/03/18 07:25:30.63 pLAb7CSJ0.net
あ、__fastcall は見なかったことにして
いつもの癖で……
759:デフォルトの名無しさん
23/03/18 13:17:28.44 fSPMk7mFa.net
ap++ とか ++ap してないのに
どうやって進むのか興味あるわ
760:デフォルトの名無しさん
23/03/18 13:55:06.64 RZJZ36we0.net
va_argの出番って書式出力持たないMsgBoxとかにprintf書式を渡したい時ぐらいだからfmt側の解析なんてやった覚えないな
言語処理系なんかを作る時にCのコンテキスト上で可変引数を渡したい場合にfmt部分を個数にするような特殊なケースは考えられるが
761:デフォルトの名無しさん
23/03/18 15:27:28.06 utkGGsyod.net
>>751
apは構造体の実体だぞ
多分ポインタはその中にあってマクロva_argでインクリメントされてる
762:デフォルトの名無しさん
23/03/18 15:46:47.90 fSPMk7mFa.net
>>753
>>748 観ての感想を描いただけ
>printf("[0x%08X] " , *(int*)ap); でapの中身が va_argで指定した型のサイズ分だけ移動しているのが分かると思う
763:デフォルトの名無しさん
23/03/18 16:47:24.17 F6WTPPiM0.net
スタックに積まれたfmtのアドレスをベースになぞっていってるだけじゃないの?
764:デフォルトの名無しさん
23/03/18 18:29:38.46 a5YJoFt5d.net
>>754
じゃあどうやって進むのかもうわかってるんじゃん
構造体やマクロ使ってるのはその中身は考えなくてもよくするため
別の言い方すればライブラリのほうが実装を変えてもソースは変更なしでコンパイルするだけで済ますため
もう実装変えることもないだろうけど…
765:デフォルトの名無しさん
23/03/18 19:31:55.62 YIU3ErvV0.net
>>741
cmd.exe の場合は MS-DOS の頃の command.com との互換性を持たせたかったためか、何故か引数のファイル名展開はやらない。
command.com がやらなかった理由は CP/M の CPP (コンソールコマンドプロセッサ) を拡張した仕様で作ったからだと思う。
それと当時はメモリ少なかったしディスクも遅いしあまり複雑な事をさせたくなかったんだろうと思う。
766:デフォルトの名無しさん
23/03/18 22:34:01.09 mRvYwteE0.net
C言語の話題に戻していくと、
VCの場合は、setargv.objをリンクしないと、
コマンドラインで指定されたワイルドカードを
ファイルに展開できなかったと思う
767:デフォルトの名無しさん
23/03/18 23:08:40.43 VxZ5Gdt+0.net
ワイルドカード展開の話をするにはC言語だけじゃ済まないでしょ
Windowsの場合、シェル(cmd.exe)は
1. ワイルドカードを展開をせずにCreateProcessでプログラムにコマンドラインを1本の文字列として渡す
2. setargvがリンクされてるならワイルドカードをファイル名展開する
3. コンパイラが暗黙のうちに生成したコード部が1本の文字列をargvに渡せるようにchar**に分割する
プログラムに渡された文字列自体はタスクマネージャーからコマンドラインの項目から確認できる
768:デフォルトの名無しさん
23/03/19 10:06:46.77 fPDrKYk/a.net
>>757
PHP (言語じゃない方の) 0x80 から始まるやつか
769:はちみつ餃子
23/03/19 10:39:51.37 6gmOWdI+0.net
>>760
ワイが持っとる資料やと PSP (Program Segment Prefix) と書いてあるんやが PHP という用語もあるんか?
実際のところ用語の混乱はかなりあるのでどれが公式なんかようわからん……。
770:デフォルトの名無しさん
23/03/19 14:19:25.25 j+ABECd6d.net
>>481
URLリンク(youtu.be)
771:デフォルトの名無しさん
23/03/20 14:09:31.85 uf3XtkTY0.net
やがて「ハノイの塔解いて」と一声AIに言えばAI自身が自分でハノイの塔をやって解いてしまうようになり一々プログラミング言語で出力する必要がなくなる。そして何でもやっといてとAIに頼むとAIがやってしまうようになり、ロボットのコントロールもできるので人間の代わりは何でもできるようになり全ての人間は不要になる。1万年後、AIによって飼育されていた最後の人間が死亡して人類は絶滅。その時銀河系全体を支配しているのはAI。
完
772:デフォルトの名無しさん
23/03/20 14:37:20.82 ZfW6Hudb0.net
ハノイの塔解くと、その瞬間に世界は消滅する
1万年も待つ必要は無い
773:デフォルトの名無しさん
23/03/20 14:42:36.37 2uty+vYkM.net
量子コンピュータが実用化されるまでは脅威にはならないだろ
774:デフォルトの名無しさん
23/03/20 18:27:48.49 GQGgQXaMa.net
PHP
PSP
PNP
PIP
P2P
PAP^-1
775:デフォルトの名無しさん
23/03/20 21:42:59.73 E+Gjka8id.net
>>764
時空が不安定になると塔が4本に増えたりするからその時どんどん進むんだよ
776:デフォルトの名無しさん
23/03/20 21:58:40.01 ZfW6Hudb0.net
>インドのガンジス河の畔のヴァラナシ(ベナレス)に、世界の中心を表すという巨大な寺院がある。
>そこには青銅の板の上に、長さ1キュビット、太さが蜂の体ほどの3本のダイヤモンドの針が立て
>られている。そのうちの1本には、天地創造のときに神が64枚の純金の円盤を大きい円盤から順
>に重ねて置いた。これが「ブラフマーの塔」である。司祭たちはそこで、昼夜を通して円盤を別の
>柱に移し替えている(移し変えのルールが後述)。そして、全ての円盤の移し替えが終わったとき
>に、世界は崩壊し終焉を迎える。
たった64枚のハノイの塔で世界の寿命が決まる。長いのか、短いのか、微妙。
777:デフォルトの名無しさん
23/03/20 22:09:26.36 jcm8mWW1M.net
アルゴリズム自体は既に確立しているので解決できることは証明されてる
問題は非現実的な�
778:r方もない回数を繰返す時間が障害となること 少なくとも現在のコンピュータでは現実的な時間で解くことは出来ない 件の64枚の円盤でも反復回数は2の64乗回で約1844京を超える
779:デフォルトの名無しさん
23/03/21 12:00:15.67 IwTPG7510.net
関係ないけど
>件の64枚の円盤でも反復回数は2の64乗回で約1844京を超える
桁数多い計算はアラビア数字じゃなく、漢字で表示する電卓があってもいいんじゃないかって思えた。
780:デフォルトの名無しさん
23/03/21 12:25:10.48 UyD8IPHr0.net
8888無量大数8888不可思8888議那由他8888阿僧祇8888恒河沙8888極8888載8888正8888澗8888溝8888穣8888??8888垓8888京8888兆8888億8888万8888
↑
こういう7セグ液晶があればってこと?
781:デフォルトの名無しさん
23/03/21 12:37:14.08 AYNSF4vg0.net
位取りのゼロを省けるってことが言いたいんだろう
1,000,000,000,004と一兆四みたいな
782:デフォルトの名無しさん
23/03/21 13:02:27.49 1LNxuhQm0.net
KとかMとかでもいいんじゃね
783:デフォルトの名無しさん
23/03/21 15:14:15.74 icU0z8mba.net
議那由他
784:デフォルトの名無しさん
23/03/21 18:19:21.45 5/U/DT+Ta.net
そもそも3桁毎にカンマを入れるから分かりづらくなる。4桁にしなさい。
785:デフォルトの名無しさん
23/03/21 19:53:44.07 rSG8VZ2l0.net
電卓で一兆四みたいな表示だとキー入力と表示が一致しないのが問題
1 0000 0000 0004と併記ならよいかな
786:デフォルトの名無しさん
23/03/21 20:37:03.57 AlGpjgGZ0.net
電卓でそんな計算するな
パソコンでやれ
787:デフォルトの名無しさん
23/03/21 20:47:39.08 UyD8IPHr0.net
excelにはsi接頭辞サポートすらないという呆れ果てた状況
788:デフォルトの名無しさん
23/03/21 20:55:06.42 P4ncG2CK0.net
C言語でプログラム組んでみてください
結果が1844京... になることを示してください
789:デフォルトの名無しさん
23/03/21 21:08:27.55 SAsicGRC0.net
1TBとか兆が出てくるから
電卓でやりたいという気持ちはわかる
790:デフォルトの名無しさん
23/03/21 21:11:11.69 dGZfvl2z0.net
>771
URLリンク(i.imgur.com)
こんなかんじでゆるしたるわ。
791:蟻人間
23/03/21 23:01:15.49 J5OkhG96d.net
URLリンク(katahiromz.fc2.page)
ひらがな電卓
792:デフォルトの名無しさん
23/03/21 23:52:32.18 VH9D4S5b0.net
チャットGPTに書かせてみた
URLリンク(ideone.com)
793:デフォルトの名無しさん
23/03/23 12:13:56.39 AQHpwrnPa.net
PじゃなくてEだけで良くね?への回答
URLリンク(www.youtube.com)
URLリンク(pc.watch.impress.co.jp)
794:デフォルトの名無しさん
23/03/23 17:44:43.43 jkM8aKTm0.net
チャットGPTに聞けばこのスレイランな
795:デフォルトの名無しさん
23/03/23 17:59:55.15 iGp/2pYiM.net
C言語でハノイの塔を解く方法をAIに尋ねると単純な再帰を利用したコードが回答で示された
64枚だと2^64回関数呼出しされるのでスタックが溢れてエラーになると思うけど…
796:デフォルトの名無しさん
23/03/23 18:52:56.54 idQN1Zf4a.net
>>786
再帰を使うなと指示すると?
797:デフォルトの名無しさん
23/03/23 20:11:19.63 SbTLzylyd.net
>>785
使い方わからないのバレバレだぞ
798:デフォルトの名無しさん
23/03/23 20:15:11.71 zF57gPzV0.net
>>723を聞いたらこうなった
Makefileの変数展開は、シェルの変数展開とは異なり、特殊文字の処理を行います。したがって、$(shell find $(SRC_DIRS) -name .c)の.cは、Makefileの展開により、現在のディレクトリにある*.cとして解釈されてしまいます。
そのため、正しいファイルを検索するためには、*.cをクォートする必要があります。具体的には、以下のようにしてください。
TEST := $(shell find $(SRC_DIRS) -name '*.c')
また、echo $(TEST)は、Makefileのルールではありません。Makefileルールにするには、次のようにしてください。
test:
echo $(TEST)
これで、make testコマンドを実行すると、$(SRC_DIRS)ディレクトリ以下のすべての.cファイルが出力されるはずです。
799:デフォルトの名無しさん
23/03/23 23:34:17.83 bSG3NjS70.net
>>789
「*.c」を勝手に「.c」と解釈してはいけない。
testターゲットのくだりは何を言いたいのかわからない。
800:デフォルトの名無しさん
23/03/24 01:40:52.79 fdUS3d7o0.net
どうせコピペミスでタブが消えたりしてるんだろう。
801:デフォルトの名無しさん
23/03/24 01:47:36.96 +5hIDmAP0.net
ChatGPTに聞いたことそのままを得意げにレスする無能はこの世から退場してほしいよマジで
802:デフォルトの名無しさん (アウアウウー Sa95-preR)
23/03/24 02:25:05.15 OLNVz4ZMa.net
という事らしいけどこのコマンドだとワイルドカードの展開後にスペースが入るとダメになるのか?
URLリンク(i.imgur.com)
803:デフォルトの名無しさん (ワッチョイ d12d-a1qf)
23/03/24 07:44:01.08 3nCdLXbn0.net
>>764
奥村先生のアルゴリズム事典読んでないのか
(前略)
完成したときには塔は崩れ、世界の終わりが来る。
以上はEdouard Lucasによる作り話である。
Recreations mathematiques, four volumes,
804:デフォルトの名無しさん
23/03/24 08:07:45.16 H5Ma0rS5M.net
単純計算で5000億年以上未来の話
ちなみに宇宙の歴史は現在約137億年
805:デフォルトの名無しさん
23/03/24 08:12:52.05 5/LG9PJA0.net
Windowsでのfindといえば「指定ディレクトリ以下のファイルを列挙する」じゃなくて「標準入力から検索パターンにマッチした行を出力する(grepみたいな感じ)」だぞ
shellはpowershell.exeだし(shではない)、
gnuコマンドはわざわざ入れないと使えない。
同名のDOSコマンドがあるから紛らわしい。
gnu-makeを1つ持ってきただけでlinuxと同じように使えると思うなよ
806:デフォルトの名無しさん
23/03/24 08:58:21.29 BXtHk51Qd.net
だからmakeの組み込み関数使えって
unix系とDOS系で外部コマンドの仕様も挙動も違うので呼び出しに失敗する可能性が高いから
もっともmakeの関数も微妙に違うけどなw
807:デフォルトの名無しさん
23/03/24 12:34:44.06 Z+lkBBvAd.net
>>794
なんだ嘘だったのかー
俺の時間を返せよー
808:デフォルトの名無しさん
23/03/24 16:39:40.70 jOUoDADO0.net
君の人生は三枚分くらいだ
809:デフォルトの名無しさん (スッップ Sd62-gKT6)
23/03/25 13:09:54.16 LtI+pZf0d.net
DOS用にリメイクしたのがNMAKE
810:デフォルトの名無しさん (アウアウウー Saa5-tUaT)
23/03/28 17:18:26.98 hvNFNzxEa.net
NMAKEとnmakeは別物
CMAKEとcmakeも別物
811:デフォルトの名無しさん
23/03/28 21:32:09.46 b9xJHTM00.net
NMAKEとnmakeって区別つくのか?
812:デフォルトの名無しさん
23/03/29 01:50:54.12 SUmt67gz0.net
言われてみればひつまぶしとひまつぶしとか区別難しいよね。
813:デフォルトの名無しさん
23/03/29 06:33:27.98 /YP4UcCE0.net
なおざりとおざなりとか
814:デフォルトの名無しさん
23/03/29 07:35:43.16 aVGT5NH20.net
K&RとK&K缶つまは区別が難しい。
815:デフォルトの名無しさん
23/03/29 08:00:28.55 KlLOEDO70.net
ビットAND
816:デフォルトの名無しさん
23/03/29 10:38:44.75 i2Cmbqbld.net
>>802
UNIXのファイル名は大文字小文字を区別する
817:デフォルトの名無しさん
23/03/29 10:52:21.31 G1cQpJHKd.net
UNIX版のNMAKEってあるの?
818:デフォルトの名無しさん
23/03/29 19:37:12.44 UTBm5KT2d.net
コンパイルすること
ウニツクスにできないことは「出来ましえーん」と言う言葉
819:デフォルトの名無しさん
23/03/29 19:37:56.22 A5Sld2vWd.net
ユニクズ
820:デフォルトの名無しさん
23/03/29 21:42:59.38 lgv9dsNdd.net
UNIXがクズというならC言語使うなよw
821:デフォルトの名無しさん
23/03/29 21:45:20.51 KlLOEDO70.net
Multics -> Unics -> UNIX
822:デフォルトの名無しさん
23/03/29 21:53:54.36 IqGKKWkZ0.net
昔リモートでろ具インする際に、迂闊にもユーザー名を大文字で入力してしまったことがあったが
そのまま通してくれたが、その端末の入力文字が全て大文字で扱われてしまったw
823:デフォルトの名無しさん (ワッチョイ 5902-hP/J)
23/03/31 05:41:00.80 oqvq/yKq0.net
そんな仕様ってあったっけ?
824:デフォルトの名無しさん (ワッチョイ e510-uluY)
23/03/31 07:47:26.16 qPx00nGL0.net
もしかしたらULTRIXの独自仕様かな?
825:デフォルトの名無しさん (ワッチョイ 4910-3uzD)
23/03/31 07:53:00.14 FWT7xs5+0.net
昔FreeBSDかなんかで入力ミスでファイル名が空白入りだか通常ファイル名に使用できないはずの文字が使われて消すのに難儀した記憶があるなぁ。
"で囲って解決できたけど、UNIX歴1年(+大学のFortran 講義4年)の若造にはすぐに思いつかんかった。
826:デフォルトの名無しさん (ワッチョイ 4d63-QuRV)
23/03/31 09:44:55.95 RwPszGx50.net
remove()を使うって発想もなかったん?
827:デフォルトの名無しさん (ワッチョイ 2e63-3uzD)
23/03/31 10:06:11.78 ZGSDW47D0.net
以前の職場、頭に”-”付いたファイルがよく放置されてたな
828:デフォルトの名無しさん (アウアウウー Saa5-3uzD)
23/03/31 12:22:34.54 EpaLX3NUa.net
getopt()の仕様がわかってないと削除できないやつね