C言語なら俺に聞け 160

レス数が1000を超えています。これ以上書き込みはできません。
2022/12/28(水) 10:40:30.02ID:PyoNDBFu0
!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言語なら俺に聞け 159
https://mevius.5ch.net/test/read.cgi/tech/1659623547/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/02/18(土) 09:20:32.20ID:/rOnqr64d
ハノイの塔 再帰のアルゴリズムがさっぱりわからない
2023/02/18(土) 09:21:30.09ID:/rOnqr64d
ハノイの塔 再帰のアルゴリズムがさっぱりわからない
2023/02/18(土) 09:36:15.97ID:AfjXtSgB0
スタックから覚えようね
2023/02/18(土) 10:11:08.15ID:4a504/qwa
>>435
すいません
2023/02/18(土) 12:46:07.82ID:/8v09ncn0
>>426
8進数なのに8と9が使える驚異の仕様だよ
2023/02/18(土) 12:50:39.59ID:/Gi8XN260
ctype.hに
isdigitとisxdigitがあるのに
isodigitがないというのが
その問題の根にある
2023/02/18(土) 13:42:13.38ID:c4QxGie20
>>433
何を必死になってるのかよくわからんが老害の悪癖は治らないってだけの話かと
2023/02/18(土) 13:44:46.64ID:c4QxGie20
>>440
規格では使えないことになってるしまともなコンパイラならエラーにすると思うぞ
2023/02/18(土) 14:09:47.51ID:BJBnPVcc0
>>440
規格決めた人に問題がある
ゼロは避けるべきだった
2023/02/18(土) 14:13:43.35ID:/Gi8XN260
みんな日常的によく使う8進定数「0」
2023/02/18(土) 15:46:52.83ID:ke/LtjiK0
そうか、オレは二進数の0をよく使う
2023/02/18(土) 16:01:46.62ID:/Gi8XN260
ソースコード上での記数法と
実行環境での表現を混同してる?
448デフォルトの名無しさん (ワッチョイ 23ad-BTrK)
垢版 |
2023/02/18(土) 16:04:29.75ID:dElKqib40
>>444
じゃあ8で。
2023/02/18(土) 16:16:07.43ID:/Gi8XN260
なんでオーにしなかったのかとは俺も思う
特に小文字オーなら誤読しにくいし
2023/02/18(土) 16:31:09.02ID:nz9Z1NDi0
1文字でもキーワードを少なくしたかった当時のお洒落だったんだよ
8進表記はunix系OSが全滅すれば廃止でもいいと思うね
2023/02/18(土) 16:35:07.64ID:ke/LtjiK0
全滅するのに数百年はかかりそう
2023/02/18(土) 16:40:17.45ID:/Gi8XN260
キーワードつーてもサフィックスだからね
繋がった単語の中の部分なわけで
他の識別子との衝突の虞はない
2023/02/18(土) 16:42:06.93ID:/Gi8XN260
あ、しかし
int o33 = o33;
みたいになったらマズいのか
英字サフィックスは
2023/02/18(土) 16:47:35.72ID:J9rEVsST0
>>442
gitのソースコード、openだけじゃなくてファイルモードを引数に取る関数なんかもあるけど、誰もマクロ定数なんて使って無いや
全員老害か
2023/02/18(土) 16:47:37.88ID:ke/LtjiK0
"%05d" こんな風な指定して出力した10進数を、読み取らせても大丈夫だろうか?
2023/02/18(土) 16:49:48.25ID:c4QxGie20
>>453
馬鹿なの?
普通に 0o01234567 だろ
2023/02/18(土) 16:50:05.14ID:FZadOySQ0
>unix系OSが全滅すれば
泥もiOSもunix系だよね?
ゲーム機も基本OSは・・・
2023/02/18(土) 16:52:50.83ID:6dDb+no40
(8じゃなく)6の倍数bitワードのマシンで産まれた痕跡だっけか

>>443
8と9が混じってるかどうかで8進か10進か勝手に解釈を変える方がよっぽど厄介だから、不正として弾くのが正しいね
俺は8進が好きだし、幸いやらかした経験も無いけど
他言語では明示的な0oプレフィックスもよく見掛けるし、もちろん使えるなら使おう
2023/02/18(土) 17:02:18.46ID:c4QxGie20
>>454
しつこいね
具体的にどのコードの話でそいつがいつから作られてるのか書いてみ
2023/02/18(土) 17:08:03.05ID:QF/qRD4Qd
>>443
bad numberとか言われて
なんで特定の数字を差別するのか?キリスト教のなんかか?とまじで悩んだw
2023/02/18(土) 17:13:05.59ID:nz9Z1NDi0
IT業界でもwhitelist→allowlistとか言葉狩り起きてるしそのうち言語にまでLBGT配慮()きそうだわな
int ニガー = 07214545;
エラー:差別用語です
2023/02/18(土) 17:15:09.07ID:J9rEVsST0
>>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 使っているところも全部直指定
2023/02/18(土) 17:19:06.07ID:c4QxGie20
>>460
確かに最初見た時は俺も はあ?ってなったわw
2023/02/18(土) 17:19:18.78ID:J9rEVsST0
>>442
比較的新しめ?のnginxなんかは流石に関数の引数に 0600 とか書いてないけど、それでもOSのヘッダファイルの定数定義は使ってないな
自前の定義に #define NGX_FILE_DEFAULT_ACCESS 0644 とかだ
これも老害になっちゃう?
2023/02/18(土) 17:26:26.26ID:c4QxGie20
>>462
git は 15年以上前に初版が作られたソフトだしリーナスはもっと前からソフト開発してるだろ
ポリシーによるけどソースコードのコーディング方法を変えないことは珍しくないよ

>>464
nginx も 18年前のソフトだし作者のイーゴリ・ウラジーミロヴィチ・シソエフ
50歳超えな
2023/02/18(土) 17:27:46.90ID:nz9Z1NDi0
>>464
OS側の定義を使わないのは特定のOS依存をしたくないか見切りを付けてるからだな
むしろ老害避けなんじゃないの
2023/02/18(土) 19:21:30.21ID:hE3AXWNH0
0x 0o 0b (0d)
2023/02/19(日) 06:15:13.00ID:B9Nm4zxk0
否定から入ったり無礼な言葉ばかり使う人って他人から相談されなくなるよね
2023/02/19(日) 10:30:13.08ID:85faJvYM0
それって思いっきりアスペの特徴なんだよな
2023/02/19(日) 10:43:35.95ID:xrmlsZvMa
だからネットでイキってるんだろ
2023/02/19(日) 10:58:14.43ID:5TCni8wB0
ダヴィンチもエジソンもアインシュタインもモーツァルトもイチローも
みなアスペルガーなんだ
2023/02/19(日) 11:07:26.13ID:xSIr/CQB0
>>471
まあ、それはそうだと思うよ
長嶋(一茂じゃねーぞ)なんかもそうだと思う
2023/02/19(日) 12:33:47.26ID:rUsPVZJ7a
ダヴィンチもエジソンもアインシュタインもモーツァルトもイチロー並みの才能があれば煙たがられることなく受け入れられるということよ。
2023/02/19(日) 12:50:21.37ID:oybarVkGd
無知丸出しはこっちでやれ
https://mevius.5ch.net/test/read.cgi/tech/1427572389/
475デフォルトの名無しさん (JP 0Hf9-KqH4)
垢版 |
2023/02/19(日) 12:53:18.65ID:F5EkyCpBH
ムチムチ
476デフォルトの名無しさん (ワッチョイ 23ad-BTrK)
垢版 |
2023/02/19(日) 13:01:28.32ID:yOeRloac0
>>449
英語では 0 (ゼロ) と書いて o (おー) と読むこともあるので、それが影響したのかも知れないね。
2023/02/19(日) 14:04:50.86ID:xSIr/CQB0
>>476
printf("%o\n", 1234);
とかできるからその説はちょっと弱いかな
2023/02/19(日) 14:48:58.38ID:5TCni8wB0
アスペルガーは自分に対しても他人に対しても容赦しないから
凡人に嫌われる
才能のせいではない
2023/02/19(日) 14:55:52.34ID:BF2g/YB8d
ギフテッドは必ずしも自閉症を伴わない
2023/02/20(月) 04:15:44.39ID:+uPK1ifA0
>>436
再帰をしないなら、コードを書けるの?
2023/02/20(月) 09:47:26.91ID:N/iEiUCGd
>>480 チャレンジしたことはないけど、たぶん再帰なしでも書けません。どうか御教示をお願いします。
2023/02/20(月) 09:50:41.85ID:N/iEiUCGd
ハノイの塔は再帰でしか解けない
2023/02/20(月) 09:51:19.24ID:cTmdkEXkd
んなこたあない
2023/02/20(月) 09:57:18.63ID:KyZtaEjed
待ち行列やLIFOは再帰的な処理を非再帰にするときの友
2023/02/20(月) 11:00:02.06ID:Htkx1bCsd
再帰呼び出しする所をpushに変えてgoto最初
returnの所をpopに変えてgoto最初
時間があればそこからgotoを取り除く
gotoが輝く場面
2023/02/20(月) 11:21:38.14ID:N/iEiUCGd
>>485 goto文を使うのですね 覚えておきます
2023/02/20(月) 11:58:19.08ID:KyZtaEjed
アンチgoto教信者は近頃減ってきているが
絶滅はまだ先のようだな
2023/02/20(月) 12:38:57.43ID:sAm6cEmU0
スパゲティGotoをたんと召し上がれ!
2023/02/20(月) 13:04:25.72ID:Htkx1bCsd
再帰からループへの変換はgotoのある言語なら機械的にできるからね
存在すら許さない言語は発想を阻害してると言える
2023/02/20(月) 13:35:56.24ID:JqcJZDsUd
while(スタックが空になるまで){
  pop();
  ...
}
って書き始めるけどな
2023/02/20(月) 21:19:52.57ID:I5iz8R+L0
>>490
戻りのpopはそれでいいけど呼び出しのpushは処理がぶった切れるから
gotoがないとかなりややこしい変換になるよ
2023/02/20(月) 23:51:00.80ID:7qph/rf50
>>485
push/pop はルール違反
それに二方向、多方向への再帰はそう簡単じゃないですけどね
二分木の全要素を列挙する非再帰プログラムを書いてください
2023/02/21(火) 00:08:57.34ID:Cn1Xq+JJ0
がんばってgoto無しで作ったりしてたなあ
2023/02/21(火) 06:59:46.53ID:1n1W4gUgd
push/popはルール違反て何それ?
2023/02/21(火) 09:59:11.37ID:MGN7/c1b0
「俺がルールブックだ」
2023/02/21(火) 10:33:24.95ID:5S8ZyEUUd
「ウリが蟹飯リッチニダ」
497デフォルトの名無しさん (ワッチョイ 23ad-BTrK)
垢版 |
2023/02/21(火) 10:51:10.49ID:NudgdpLh0
豪華な蟹飯が思い浮かんだ
2023/02/21(火) 13:43:23.05ID:1n1W4gUgd
苫小牧だっけ?
2023/02/21(火) 16:27:46.36ID:dWpsoJfPa
>>436
>>481
テスト
https://ideone.com/iPWHR0
2023/02/21(火) 16:50:09.17ID:ncQgkmT30
チャットジピティれカス
2023/02/21(火) 17:05:45.18ID:j4WOJdo9d
>>499 見事です 私はまだ初級なのでvectorだのcstdioなど見たこともありません
2023/02/21(火) 17:54:02.02ID:5S8ZyEUUd
>>499
お、動いた動いた!
2023/02/21(火) 17:55:02.20ID:MGN7/c1b0
goto が一つもない・・・
2023/02/21(火) 19:30:27.79ID:oAMbgY5Ra
goto文は禁じてではないかな?
C言語では
2023/02/21(火) 19:48:08.10ID:1n1W4gUgd
俺様ルールは興味ないから
2023/02/21(火) 19:50:05.73ID:MGN7/c1b0
CPUレベルまで行くと、GOTOは使いまくりだろう
2023/02/21(火) 19:57:40.07ID:1n1W4gUgd
機械語1命令ごとにPCを更新するのもgotoかw
2023/02/21(火) 20:39:53.11ID:pHGJPw2cM
gotoなんて所詮関数内にしか飛べない
関数が小さければなんて事はない
巨大な関数はgoto以前に悪
2023/02/21(火) 21:02:34.32ID:MGN7/c1b0
昔いた現場は、1関数ごとに設計書を何枚も書かされてたな
それでみんな、関数の数を極力減らしてた
行き着くところ初期とメインと終了の三つ
それぞれが何百行にもなってしまったw
2023/02/21(火) 22:12:19.48ID:QJTSRl8U0
そういうのいいから
2023/02/21(火) 22:59:26.21ID:fpEKur8e0
硬直化して目的を忘れた「管理」に泣かされたもんだけど
それは昭和も今も変わっとらんだろ
2023/02/21(火) 23:48:29.43ID:MGN7/c1b0
プロジェクト管理はそのうちAIがやるようになるんだろうか
2023/02/22(水) 03:11:04.32ID:ZjvNTHuW0
AI「壊れるまで働け、人間共よ」
2023/02/22(水) 06:39:57.73ID:6aYkdgkrd
>>491
continueを知らないのか?
2023/02/22(水) 15:13:03.32ID:rwr+6TWF0
>>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プリプロセッサの構文内では不可能に思う(当然リテラルとして自然な仕様拡張も)
2023/02/22(水) 15:22:17.41ID:mafEi4nvd
>>467
アセンブリやいにしえの言語は明示的なdecimal prefixを持ってるね
forthだと#123と変種?の&123
#の方がthe (decimal) 123と読めて個人的に好み
2023/02/22(水) 15:23:53.30ID:mafEi4nvd
the (decimal) number 123です
2023/02/22(水) 15:28:02.92ID:mafEi4nvd
299,792,458と書けたら素敵だけど
ds(299,792,458)が引数を区切る,と区別出来ないから無理だね
2023/02/22(水) 16:23:34.63ID:GDrSYSMbM
ほかの言語では、123_456_789の様にアンダーバーで区切るのが多い
Cでも出来たと思うけどなぜか'なんだよな…
アンダーバーが良かった
2023/02/22(水) 16:41:13.08ID:3MJ5isf30
C++に合わせたんでしょその方が都合がいいだろうし
2023/02/22(水) 16:52:25.15ID:3MJ5isf30
規格の紹介をしてる>>415に対してそれは解析器を変えないと難しいとか言ってる>>515は何なんだ?
C23でこうなります、なんだから難しいもクソもないと思うんだが笑
2023/02/22(水) 18:12:39.68ID:/HhOnmf9d
規格を批判してるんだが
2023/02/23(木) 02:20:36.04ID:zOdHjjZs0
まだワーキングドラフトだから対応するもしないのも自由だと思うし、c2xはアトリビュート関連くらいしか追ってないが、一応意見を

せめて不正なトークンとして弾ける約物にしてほしいな
0b10101011未対応(0cでも何でも)は不正な8進
トークン構成文字0b1010_1011なら不正な型サフィックスとして不正なトークンを報告できるので、ユーザに手直しさせるのも自明
パース状態をトグルする'はEOFまで食うので、エラーが報告されたとしてもcryptic

頻用したと仮定すれば、1/2の確率で釣り合うって字句解析をパスしてしまうのも厄介
2023/02/23(木) 04:08:08.64ID:zOdHjjZs0
>>416
俺は16bit程度なら一行で書いてしまうけど、より大きい整数型なら行を分けて書いてるな
(u)int64/128_tなんかで二次元データエンコードする時はこんな感じで

uint64_t plaid = 0b\
01010101\
10101010\
...\
;

ゲーム盤、行列、画像、畳み込みカーネル、マスク等、重宝する機会は多い

pbmそのままだからstatic変数にスクリプトでブチ込むのも楽で非常に重宝
普通(2)/8/10/16のみで任意進数(ビット深度)を指定できないのが歯痒いところ
2023/02/25(土) 15:46:50.99ID:2A7WVGnna
C++におけるユーザー定義の接尾辞で
_数字 みたいな奴を許可していなかったら桁区切り文字はアンダースコアになってた
2023/02/26(日) 07:07:10.46ID:Gr0Cvu5K0
だな
2023/02/26(日) 07:37:36.32ID:oQAKiXWbd
自己参照構造体を、テキストのコードが難しくて理解できない
2023/02/26(日) 07:49:42.99ID:ymHOkbuH0
>>525
まさか4567_8(→4567 of type "8")?
珍妙な…
2023/02/26(日) 07:58:07.27ID:ymHOkbuH0
extern "C"で混ぜるにはもう違いが多過ぎるし、c++と足並み揃えるのやめればいいのに
2023/02/26(日) 08:42:57.62ID:Gr0Cvu5K0
C++が流行りだした当時のCの財産を捨てずに済むってだけの話で
これから新しく作るものの足かせになるのは本末転倒だよな
2023/02/26(日) 12:16:51.44ID:0OyaNSrI0
C言語で構造体の双方リンク理解する前にテキストエディタ作るようなことあったら
激重エディタつくってただろうなぁと経験してもないことを妄想。

1文字挿入→その後ろの文章を全部コピーでずらして・・・
2023/02/26(日) 18:12:24.76ID:zCQzTRZzM
>>531
emacs なんかは1文字挿入のたびに後ろ全部コピーしなくても良いようにギャップバッファという手法を使っていた
2023/02/26(日) 18:34:27.49ID:akN/HRard
>>532
emacs!
Esc x compile
に何度も助けられた
一人で五万行くらいのコードを書いてたからな
ヘッダーファイルだけで50くらいあった
2023/02/26(日) 20:20:17.76ID:Qgs0XTsDM
>>532
過去形だけど今もだぞw
ギャップバッファは、最近流行りの複数カーソル使って離れた複数箇所を一気に編集すると、大量にコピーが発生して重くなる可能性がある
なのでこれからテキストエディタを実装するには、Piece Tableを使う方がいいと思われる
2023/02/26(日) 20:22:02.57ID:OdlyZwjm0
Slackware+JEに入ってたMuleを3年くらい使ってたけど別のエディタに移っちゃったな
悪くないと思うんだけど時代に合ってないというか、貧相な環境の方が使い出があるエディタだったな
2023/02/26(日) 20:31:33.93ID:Qgs0XTsDM
EmacsとかVimを貧相と思うのは、端末内で動かせるようになってるからだ
GUIはオマケみたいな扱いだ
でも、それはそれで存在意義はある
2023/02/26(日) 20:37:35.64ID:gahU4Yv80
viは来世紀にも残ってそうだから最初に覚えたなあ
eなんとかはデベロッパーのオナニーが透けて見えて気持ち悪すぎた
2023/02/26(日) 21:16:43.25ID:fbmwPkIL0
viの様にコマンド覚えなくても使えたから便利だったぞ
2023/02/26(日) 22:04:54.83ID:OdlyZwjm0
>>536
ちゃう、Emacsを貧相だと思ってるんじゃなくて計算機資源が豊かでない環境の方が使い出があるって言ってるんだよ
2023/02/26(日) 22:36:28.47ID:0m6hfJUV0
最初に使い込んだエディタの話?
俺はVZだったな
2023/02/27(月) 04:08:09.05ID:naBje3l2d
スレちがいだし
わりとしょうもないレベルの自慢話になってることを警告しておくぞ
2023/02/27(月) 07:30:50.50ID:U2h1s9M4d
ダム端末使ってた頃はviが有り難かったけど
今となっては当時慣らした人はともかく
若いやつにお奨めするもんじゃない
と俺は思うな
2023/02/27(月) 09:43:18.06ID:jlyK/+pC0
>>531
素のCだと何もないからデータ型を一つ一つ自分で理解していけていいという意味?
例えばC++ならlistがあるから理解しないままになる?
でもlistとvectorの違いを知らなければ結局
2023/02/27(月) 12:21:44.99ID:3zla3lE+0
>543
Cやる前はアセンブラだったからねぇ。アセンブラでの処理方法をそのままC言語に持ち込んでた。
当時はでっかく領域確保したらその領域で全部処理するって思考しか無かった(自動変数って概念も無し)。
2023/02/27(月) 12:29:45.17ID:U2h1s9M4d
ダミーセクションは使ってたけどね
2023/02/27(月) 17:11:48.94ID:3MgFEhuya
>>543
そこはdequeですよ常考
2023/02/28(火) 10:24:33.59ID:7/0mM3ia0
>>544
>自動変数って概念も無し

自分はデバッグでディスアセンブルを読むぐらいしか用事がないんだけど、
ゼロからアセンブリを書く場合はスタックの操作で領域管理したりはしないと?
2023/02/28(火) 10:32:54.86ID:7/0mM3ia0
>>546
listやvectorはほとんど使わない感じ?
2023/02/28(火) 12:10:45.99ID:dNNgH11Kd
スタックはレジスタのバックアップが主な用途で
メモリ変数はグローバルがデフォだった
だから変数表を作ってた
2023/02/28(火) 16:07:40.92ID:Ki6W+L2N0
あの 先頭に戻って検索 するかどうかを維持する変数名ってどんなのがいい?
2023/02/28(火) 16:44:22.88ID:295BsPXb0
>スタックの操作で領域管理
8086系だとスタックレジスタ直接使うと遅いんじゃなかったっけ?
MOV AX、[SP+10]
とかやるより
MOV AX、[TEMP]
...
TEMP: DW 0000h

ってやる方が速いとか。



BASIC時代のマシン語CALL時のレジスタエリアは16バイトってトラウマが・・・。
552デフォルトの名無しさん (アウアウウー Sa39-bn+B)
垢版 |
2023/02/28(火) 21:38:56.96ID:EshvOxGGa
ダミーセクションって、IBMのメインフレームのアセンブリ言語の DSECTですか?
2023/02/28(火) 21:47:36.63ID:svcsEAcG0
うん
2023/03/01(水) 20:42:10.06ID:fErXdR4ud
>>550
auto_reverse
絶対これにしなさい
2023/03/01(水) 23:36:37.44ID:5C60qBo90
>>550
cyclic
2023/03/02(木) 00:05:39.48ID:pZfd6NSK0
そういうのはいわゆる自転車小屋の議論になりがち。
そこそこ盛り上がりはすることもあるかもしれないけどあまり意味のある結論は出ないよ。
2023/03/02(木) 03:04:30.24ID:eGjuMjwU0
するか否か、1ビットのフラグの命名に他者を巻き込む議論が本当に必要ですかということか
すなわち名前はflagとかで変数宣言部に日本語コメントでも添えた方が建設的ということだな?違うか?
2023/03/02(木) 07:06:54.36ID:xa7MSIOTd
変数名の付け方は案件による
無論、一般論などない
主観と思い込みで強弁するやつはいるけどね
559デフォルトの名無しさん (ワッチョイ 7646-BmO7)
垢版 |
2023/03/02(木) 09:03:08.54ID:GoAAqo+J0
C-gengo wa mada nihon-go kakenai no?

bool 先頭に戻って検索 = 真 ;
2023/03/02(木) 16:32:03.69ID:N0PfEOQ90
質問の仕方でどういうコード書いてるか垣間見えるのはあるな
int searchtype = FROM_TOPとかBOTTOMとかBACKWARDみたいな持ち方ならそんな質問出ないだろうし
2023/03/02(木) 17:21:24.58ID:y83mRLNqd
>>551
どのCPUでもダイレクト指定が速いに決まっとりまんがな
レジスタ相対はレジスタにディスプレースメントを加算してからアドレス出力するんだから
2023/03/03(金) 01:19:24.14ID:5ZXS0iFm0
>>561
個々の命令の速度で考えればその通りだが今どきの CPU だと
パイプラインに隠れて差が出ない (差があっても観測不能なほどの極小) ってことも普通にあるんじゃないの?
2023/03/03(金) 08:02:43.32ID:an7QtCXRd
1Hzぐらいの速度で計測すれば何かわかるかもしれない
2023/03/03(金) 08:14:12.93ID:jW6Dg0m70
1Hzだと速度的には1秒周期なので測定の意味がない
2023/03/03(金) 22:40:53.27ID:1TAJ9GtV0
もしかするとCPUクロックをそこまで落としてデバッグしたいとかw
2023/03/04(土) 06:01:07.88ID:2lfmGWRw0
[sp+10]はメモリアクセス1回だが
[temp]は2回だな
8086だとキャッシュないからメモリのウエイト数の影響をモロに受ける
どciscでパイプラインなんかないし
2023/03/04(土) 19:01:51.83ID:siYz8HOgd
Cのコードを書くのにアセンブラまで意識するのか、、
立派な心がけあるな
精進しなされ

でも、CPUやコンバイラで違うじゃん、、、
568デフォルトの名無しさん (ワッチョイ 1302-ScW/)
垢版 |
2023/03/04(土) 21:31:31.02ID:mhQJa69K0
>>566
勘違いしてない?
2023/03/04(土) 21:33:37.98ID:K3zEUrJN0
[sp+10]が1回なら[temp]も1回じゃね
命令のフェッチは数えないんでしょ?

プリフェッチはパイプラインみたいなもんじゃね?
2023/03/04(土) 23:58:44.62ID:D8X7oasM0
素の8086にsp使えるアドレッシングはないのでbpで…
mov ax, [bp+disp] 命令3~4バイト 8+9クロック
mov ax, [TEMP] 命令4バイト 8+6クロック
と実効アドレスの計算時間に差があったという大昔のお話
2023/03/05(日) 06:15:37.72ID:nSao/Dea0
>>568
何が?
2023/03/05(日) 06:58:01.26ID:94fNx05VM
8086には現在のような深いパイプラインは無いがそれでもEU(Execution Unit : 実行ユニット)とBIU(Bus Interface Unit : バスインタフェースユニット)は独立しており
メモリアクセスと内部のALUはそれぞれ別々に動作する
ある意味初歩的な2段パイプラインとも言える構造で単純なクロックサイクルの加算とはならない
573デフォルトの名無しさん (ワッチョイ 1302-ScW/)
垢版 |
2023/03/05(日) 07:13:34.61ID:cmZGkkdl0
>>571
>[temp]は2回だな
なぜ2回?
2023/03/05(日) 08:11:12.86ID:nSao/Dea0
>>573
temp: dw 0000h
つまりtempはメモリに置かれている
tempのREADで1回、
[]によるインダイレクトでもう1回
だろ
2023/03/05(日) 12:43:47.21ID:nmaj3sub0
>>567
昔昔はそういうものだったんよ。
Cは、
・プログラマの責任において何でもできる
・コンパイラはプログラマの意思に忠実であれ(余計な最適化なんかするんじゃねえ!)
ってこと。だから、
a=a+1;と、a++;は違う。
前者は加算命令、後者はインクリメント命令になってほしいというのが、プログラマの意志。
ただ、Cが色々な場で広く使われるようになって、最適化を進めるしかなくなったから、そんなのどうでもいいことになったけど。
2023/03/05(日) 12:47:05.12ID:s1YdjeUN0
>>574
だからさ……それを2回っていうなら、[sp+10]も2回だろ
2023/03/05(日) 13:30:59.36ID:nSao/Dea0
>>576
何で?
即値はフェッチ時点で取り込まれているのに
2023/03/05(日) 15:05:57.71ID:s1YdjeUN0
>>577
tempもtemp自体は即値だよ
[sp+10]と[temp]の違いはレジスタ相対かどうかだけ
579デフォルトの名無しさん (ワッチョイ 13ad-Qpn1)
垢版 |
2023/03/05(日) 15:07:29.13ID:YlwUczDE0
>>575
ま、しかし、昔はコンパイラの最適化がしょぼかったというのもあるな。
CPU (特に 8 bit CPU とか) がC言語等のいわゆる高級言語を全く意識して作られていないというのが最大の問題だったのかも知れないが。
2023/03/05(日) 15:41:40.37ID:nSao/Dea0
>>578
DWディレクティブで定義してるんだからリテラルの類だよ
命令コードと一緒にフェッチされる即値とは根本的に違う
2023/03/05(日) 16:48:35.64ID:0aHQQO/od
>>577
CPU仕様によるが
68000では8ビット範囲以内のディスプレースメントは命令中に含まれてたが
8086はどうだっけ…
2023/03/05(日) 17:03:05.50ID:nSao/Dea0
>>581
いやここはCPU仕様には関係ないぞ
68kにしたってdc.lディレクティブで置いた定数はディスプレースメントじゃないし
2023/03/05(日) 17:27:59.49ID:0aHQQO/od
間違い、>>581は6809の話だった…


ややこしくなってるが
MOV AX、[SP+10]
がspレジスタから10バイト後を読むなら
MOV AX、[TEMP]
はアドレスTEMPを読む意味だろ

8086ニーモニックをよく知らないが
2023/03/05(日) 17:44:11.51ID:nSao/Dea0
>>583
6809にしたってFDBディレクティブで置いた定数はディスプレースメントじゃないし
2023/03/05(日) 18:29:27.81ID:On/jxRV/0
#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て表示します。これはどういう意味でしょうか?
2023/03/05(日) 18:43:57.85ID:KnQWIUK4d
>>585
コンバイラかて人間や
こんなつまらん二次方程式の解をなんぞ解きたくない

そう言う意思表示や
2023/03/05(日) 18:53:30.15ID:M62PQQGq0
>>585

printf("(%f)\n",pow(b,2) - 4*a*c);
2023/03/05(日) 19:03:21.29ID:On/jxRV/0
あー、なんかわかってきました
そういうことか
サンクス
2023/03/05(日) 19:07:20.35ID:AE3nXsIn0
>>585
sqrt に負数を渡した場合には定義域エラーとなり、定義域エラーのときは処理系定義の値を返す。
その処理系では処理系定義の値というのが nan だということになる。
言語仕様では詳細は規定されていないけれど
一般に浮動小数点の表現として使われる IEEE 754 などでは非数 (not a number) を表現のひとつとして持ち、
意味のある計算結果にならなかったときは非数がセットされる。
not a number の略で NaN 。

処理系によっては定義域エラーをハンドリングする方法を用意してあることもあるけど、
発生させないように事前にチェックしたほうが基本的には簡単だと思う。
2023/03/05(日) 19:21:09.18ID:0aHQQO/od
よくわからないんだが
>>574が勘違いだな

TEMP: dw 0000h
はデータ0000hをメモリに置いてそのアドレスをTEMPと定義するという命令(アセンブラ疑似命令)

MOV AX,TEMP
はAXレジスタにそのアドレス値を入れる
MOV AX,[TEMP]
はAXレジスタにそのアドレスの内容(0000H)を入れる

さらに[0000H]の内容を読むにはもう1命令必要になる…はず

6809なら1命令で読めるがあまり使われなかったと思うどっちにしろ遅くなるので
2023/03/05(日) 19:26:59.51ID:eomhsMcE0
6809の用語でいうとメモリ間接参照アドレッシングだな
2023/03/05(日) 19:30:46.77ID:eomhsMcE0
ちなみに1命令で読むのはダイレクトページ参照アドレッシングな
6809ではあまり使われなかったけど、6502などではこれが使えないと実質何も出来ない
2023/03/05(日) 23:40:03.63ID:yUIw0mIIM
>>585
nanは、何処かでnanになると、その後の演算全てがnanになる
なのでsqrtのnanが伝搬してprintfがnanを表示した
ゲーム(特に3D)は、油断するとnanを伝搬させてしまう事があって、キャラがグチャグチャに壊れて表示されるのは、それが原因
nanを伝搬させるとデバッグが大変なので、nanを出さないように細心の注意が必要だ
sqrtとか特に割り算(/)に気を付けないといけない
2023/03/06(月) 02:42:50.81ID:Ht1FmqqLd
>>593
え、割り算でNaN出る?と一瞬思ったけど、0.0/0.0かな?多分
珍しいケースに思える

非ゼロ/0.0でinfが出るのは関数の根を簡易に求めるのに重宝するけど(逆数が極)、NaNが出る可能性にまでは気を配って無かったのでナイス指摘
2023/03/06(月) 02:51:49.35ID:Ht1FmqqLd
>>589
IEEEはほぼCの為に制定されたようなものでは?
fpuなんて改造してナンボな本場のnumber cruncher達(ほぼFORTRAN/Fortran)は最近までIEEEなんて最近までガン無視だったわけで
今は標準モジュールにIEEEサポート入って普及してるけど
2023/03/06(月) 02:52:25.09ID:Ludh8Y7rM
>>594
3Dだとベクトルのノーマライズをしょっちゅうするけど、これはベクトルの長さで割るけど、事前に長さのチェックが漏れてると、ゼロで割ることになる
そういう特殊な状況は確かに稀なんで、リリースに残ってしまうことがある
2023/03/06(月) 03:02:31.96ID:Ludh8Y7rM
>>594
良く考えたら、rsqrtがnanを返してる気がする…
2023/03/06(月) 03:14:56.83ID:VyhKtCOB0
>>596
俺環ではDBL_MIN/0.0でもちゃんとinf吐くから、ノーマライズされるべきベクトル(分母)が正確に0.0というのはdoubleでは考えにくいような…
3Dだとsingle以下のfloat16/8とか使うと聞くから、極端に精度が低過いと起きるのかしら?
2023/03/06(月) 07:22:56.30ID:VyhKtCOB0
分子、でした

>>597
かもね

あと0.0/0.0以外の四則でもnanが出るケースは他にも思い付く(今思い付いた)
inf/infとか

まあ実数関数求根/方程式を解く目的なら(精度上での)解に達した証がinfだから、発生した時点で必ずbreakするし、事実上到達し得ない計算だけど

定義域がパッチワークみたいな複素関数で一々入力のチェックなんてやってられないし、nanには静かに伝播してもらわないと困るけど
とにかく欠損値の無い有限の実数値だけが欲しいだけ(例えばグラフィック)なら、fenv.h/signal.hで例外をヲチしてSIGFPE投げるとか、あるならsnanモードにするとか
2023/03/06(月) 14:19:01.34ID:+b36jU+h0
この糖質3歩手前みたいな文章はいつもの彼かね
>>385とか>>523とかと雰囲気が同じだが
2023/03/06(月) 22:43:56.50ID:K6iDrUwm0
このような状態を「思考障害」と呼び、Cプログラマの2割ほどが患っていると言われています
2023/03/07(火) 07:51:33.34ID:hIILJ8zA0
次の議題は『gotoは活用すべきか全面廃止するべきか』でうわぁなにをするやめ・・・
2023/03/07(火) 13:35:22.89ID:914niPGe0
行き先はhellで
2023/03/07(火) 19:20:42.99ID:L3ZoYgrgd
いいか?C言語について俺に聞け
VAX11でcのコンバイラをcで作ろうとしたのはワシだ
当時のyacc lexに謎の挙動があって嫌気がさして失敗したが、、?
2023/03/07(火) 19:38:38.87ID:2Q8k5rzL0
創造主を作ったのは、オレだ、みたいな
606デフォルトの名無しさん (ワッチョイ 13ad-Qpn1)
垢版 |
2023/03/07(火) 22:59:35.82ID:s3GtgFEy0
インド料理屋で、NANを頼みました。
607デフォルトの名無しさん (ワッチョイ 13ad-Qpn1)
垢版 |
2023/03/07(火) 23:06:20.52ID:s3GtgFEy0
>>605
そういえばID論ってのがあって、何か高度な存在が人間や宇宙を作ったってやつだが(昔ながらの神が作ったというのと似ているが神ではない)、
それならばその高度な存在はどのようにして作られたのか?それはまた別の高度な存在によって作られたのか?
とするとその存在も別のもっと高度な何かに作られたのか?という具合に無間ループになってしまう。
2023/03/07(火) 23:18:55.74ID:aKlG86O40
ID論てのは地球のたった数億年で生命が生まれたのが信じがたいってだけで、
元の生命はどこかでもっと時間をかけて生まれたんじゃないかという話。
2023/03/08(水) 00:40:31.06ID:diq3Y+zm0
興味深いお話ですがスレ違いです
2023/03/08(水) 08:33:16.96ID:qdKF3wc3d
Cインタプリタなら昔作った
当時こういうの流行ってたし
いくつか書籍化もされてる
2023/03/08(水) 08:47:42.99ID:D4+z1pfo0
どうせならB作ればよかったのに
2023/03/08(水) 09:22:43.28ID:fOZ1V1tZd
>>607
ブートストラップローダという名前がついたのと似てるなw
コンピュータ起動時に次々と自分より大きいローダを読み込んで起動する様が「自分の靴紐を持ち上げて空を飛ぶ」ような無茶に思えるから
2023/03/08(水) 12:12:57.95ID:wYi2NpnKd
鉄則

1 困った時のGOTO勝利
2 CALL関数はマクロ展開のヘッダファイル
3 SQL呼び出しはstructの前に敗北
4 while こそループの王 forは邪教
5 そこでbreakするな
6 switch文が見えたらバグの腐海
2023/03/08(水) 12:52:17.24ID:qdKF3wc3d
でもswitchの巨大状態ループ便利なんよね
バグの温床かもしれんけどメンテは凄く楽
2023/03/09(木) 09:47:34.15ID:rNyfncCj0
あれやって 条件成立まって あれやって を 状態遷移しながらぶん回すときは
状態変数を int にして 巨大switch にしたくなる

けど こことここの間に新たな状態差し込みたいってときに 状態変数値どうしよう? っておよよする
2023/03/09(木) 09:53:04.07ID:rH46BtzXM
状態変数は列挙型にしておけば状態の追加や修正に合わせて具体的な値は勝手に変わる
2023/03/09(木) 10:05:04.42ID:rNyfncCj0
>>616
おおよそそれが一番良い解法なんだろうけど
次の状態へ ってのを同じ記述でいきたいよね と (return sts+1)
2023/03/09(木) 10:37:21.41ID:zXViYC6t0
FSMだね
古典的なハード設計では常套手段
2023/03/09(木) 10:42:55.43ID:m8Mymp8XM
状態マシンの欠点は割込みや並列処理の扱いが非常に厄介なところ
複数箇所から状態変数を更新される可能性を考慮すると泥沼に嵌る
2023/03/09(木) 10:48:34.22ID:kE5o8bWH0
更新処理は一カ所にして、順番待ちにするのが吉
2023/03/09(木) 10:54:14.30ID:WaHsZI+cM
通常処理のメインループと外部割込みの割込みハンドラ(特に緊急割込み処理)を同じキューで順番に更新すると処理が破綻しないか?
2023/03/09(木) 11:08:05.83ID:zXViYC6t0
ノンプリエンプティブなマルチは今でも普通にやる
問題なきゃそれが楽だから
2023/03/09(木) 11:12:46.89ID:sK4pplDk0
組込みではプリエンプティブが一般的
応答性最優先でCPUの実行権を強制的に奪わないと最悪の場合は事故に繋がる
2023/03/09(木) 13:56:50.62ID:1gP/2BE4d
問題なきゃって言ってるのに最悪の場合って・・・
2023/03/09(木) 14:41:35.25ID:yDS62QUEM
組込みシステムのタスクスケジューラーでノンプリエンプティブマルチタスクって地雷源もいいところだろ
自殺願望でもあるのか
2023/03/09(木) 16:23:16.50ID:pN9rkknD0
組み込みと一言で括られてプリエンティブで良い悪いの議論をされるの抵抗ある人がここにいるけど俺以外でもかなり多いんじゃないかな
プリエンティブはタスクスイッチ自体が割り込み禁止を伴うクリティカル処理だからそれが組み込みに適しているとはいい難い
タスクスイッチのレジスタ退避復帰で何十サイクルも消費して待ってる割り込みが処理できずにいるのが許容できかは案件により過ぎる
片やノンプリでは少なくとも割り込みを汚さない
従って俺はどんな案件でも通用するノンプリでまず検討する事を推奨したい。プリエンでもタイミング的に問題ないねとなったら移行すればいい
いきなりプリエンありきで作る方が自殺行為に見える
2023/03/09(木) 16:36:55.55ID:StryrQ2LM
タイミング的に問題ないという判断の前提が一定時間以内に必ず応答出来るという保証が必要
応答時間が保証されないノンプリエンプティブ環境でシステム設計とか殆ど不可能にしか思えない
2023/03/09(木) 16:39:33.97ID:pN9rkknD0
割り込みにも大別してすぐに応答が必要なもの、メインのキューに回してもよい優先度低のものの2種類存在する
プリエンティブを採用できるかどうかは前者の応答にどれだけの遅延が許容されるかという事になる
割り込みハンドラを普通にCで書くとハンドラ内で使用するレジスタの退避コードが適当に生成されるが、
許容時間によってはインラインアセンブラで最小限のレジスタで書かざるを得ない場合がある
そういう案件だとプリエンティブの採用はありえない
2023/03/09(木) 16:41:41.13ID:pN9rkknD0
あーこれってノンプリエンプティブを何か誤解してる奴が話に参加してるってだけか
理解したわぁ
2023/03/09(木) 16:45:38.25ID:pN9rkknD0
623 625 627 これ同じ人か
もうちょっと勉強してから参加しようね
2023/03/09(木) 16:48:44.72ID:hgw38TJYM
いやその通りだよ
保証出来るようにアセンブラすら併用せざるを得ないのが泥沼の組込み開発
それでも駄目ならソフトウェアでなく専用ハードで物理的に処置する方向を検討する
2023/03/09(木) 16:57:03.69ID:EoI0IUhJM
ちなみにとある産業用モータドライバー基板開発のお話し
2023/03/09(木) 17:02:44.72ID:pN9rkknD0
>>631
タイミング調整にアセンブラ併記は組み込み案件でなくても普通に行われてるでしょ
それと専用ハードって簡単に言うけど、大抵の組み込み案件ってハードの部品点数減らしていく傾向だから非現実的な提案にしか見えないよ
簡単に用意できるなら苦労しないし廃業だわ
2023/03/09(木) 17:08:56.67ID:pN9rkknD0
そもそも俺が今相手してる奴って全員ID変えてどちら様だよ
議論もまともにできず論点ずらしにも失敗してお前ほんと今みじめだぞ
2023/03/09(木) 17:11:58.61ID:pN9rkknD0
よくみたらこれワッチョイスレじゃん全部ばれてて草
2023/03/09(木) 17:14:52.84ID:AnxNC5rK0
623はともかく 625と627はワッチョイ同じじゃん
2023/03/09(木) 17:20:18.66ID:iNLkXR0fM
要はトータルコストの問題
この件は高価な材料(主にレアアース)を多量に使用したモーターを安価な代替品に置き換えて
同等の能力を発揮させるために高度な電子制御(いわゆるベクトル電流制御)で駆動するのが狙いだった
実際メインのマイコン処理だけでは追い付かずセンサ周りの処理は別チップのDSPを採用してる
結果的に制御系のコストは増加したが全体としては前システムの約7割程度の費用に抑えられた
長文失礼
2023/03/09(木) 17:22:17.10ID:pN9rkknD0
>>623も言ってることおかしいけど別回線か何かだろ
そもそも組み込みはその最悪ケースを見積もりながら設計していくって前提知識がないし
2023/03/09(木) 17:22:30.90ID:kE5o8bWH0
自動運転車での危険回避行動のロジックとか、聞けるのかと楽しみにしてたのに
2023/03/09(木) 17:34:00.29ID:mZ/OHyfS0
電気・電子
https://rio2016.5ch.net/denki/
2023/03/09(木) 17:41:37.81ID:zXViYC6t0
ハード絡みの話が出るのは仕方ないだろ
COBOLじゃないんだから
2023/03/09(木) 17:50:21.11ID:pN9rkknD0
>>637
これを1行で要約するとヤバいなあ…設計見積もりガバガバで採用したマイコンで処理できなくてハード追加調達して結果的に動いたわろたってことだろ
最近のH3失敗もだけど予算まともでもこういう経験値の奴らで作られる可能性を考えると寒いなあ
暖ったけえ話を知りたい
2023/03/09(木) 17:54:10.14ID:zXViYC6t0
若いのに頭固いっていうのかな
他人の言うことを聞く耳持たず自分の思い込みを自画自賛してるよな
2023/03/09(木) 18:26:27.17ID:Dl2bLbopM
このスレの年齢層はとても高い
2023/03/09(木) 18:29:05.52ID:sK4pplDk0
精神年齢は?
2023/03/09(木) 18:33:49.17ID:sK4pplDk0
疑心暗鬼で個人攻撃
プログラムではなくてワッチョイを語る
世も末だな
2023/03/09(木) 20:35:29.98ID:pN9rkknD0
最悪の場合は事故さん(>>623)がなんか被害妄想を始めてるけど
俺の主張は>>626以降で出してるから後は興味ないんだわ
反論があるならすればいいがせめてこのスレと関係ある技術的な話をしてね
2023/03/09(木) 20:49:30.54ID:sK4pplDk0
組込みマイコンでは常識的なレジスタバンク切替やコンテキストスイッチングのことに触れずに
レジスタ退避や復帰でサイクル消費するとか言ってる時点で組込み開発の経験が無いんだろうな
ということは分かる
余程の簡易的なものを除けばメインと割込みでいちいちスタック経由でレジスタ退避するような
間抜けなマイコンは無いだろ
それはx86のような汎用CPUの構造だ
2023/03/09(木) 21:04:47.03ID:VZ2yRc9EM
似たような意見が出てきたので補足するとバンク切替なら大体2,3クロックでレジスタセット丸ごと切り替わるから割込みのオーバーヘッド自体は大した負荷にはならない
反面x86の様な大規模なレジスタ群は持てないのでそもそもの用途と構造が違う
2023/03/10(金) 06:51:36.78ID:wZRM+8gY0
ドヤってるけど大したこと言ってないな
2023/03/10(金) 07:19:22.02ID:gnQOQJYP0
そう言うなら後出しではなくて自分から大したこと語ってくれ
2023/03/10(金) 07:50:43.93ID:wZRM+8gY0
マルチで何タスクを並行で動かすのかによるだろ裏レジスタだけで済むかどうかは
2023/03/10(金) 07:56:30.74ID:wZRM+8gY0
無結合マルチCPUで楽々解決なんてこともあったな
2023/03/10(金) 07:57:42.45ID:gnQOQJYP0
知ってる範囲では8レジスタ×4バンクというのがあった
日本製(現在は事業撤退済)
2023/03/10(金) 08:08:15.26ID:gnQOQJYP0
そもそもマルチタスクのタイマ割込みの他に外部ポートからの多重割込みは
優先順位とレジスタ割当てをかなり慎重に検討するべき事項
並列処理の仕様はソフト設計の基本
2023/03/10(金) 08:24:52.79ID:wZRM+8gY0
並列じゃないソフト設計も普通にあるんだが
2023/03/10(金) 08:34:55.28ID:gnQOQJYP0
まあ外部割込みを一切禁止して常にポーリングでポート監視するシステムも無いことは無いが
ごく単純なパターンに限られるけどな
普通は外部からの入出力のトリガは割込みで受け付ける
2023/03/10(金) 08:41:29.45ID:wZRM+8gY0
そもそもタイミングがシビアなところはハードでできるのはそうするし
かなり特殊なケースにもFPGAの対応力はありがたい
2023/03/10(金) 08:47:32.61ID:gnQOQJYP0
そこまで行くとソフト設計者の範疇の外
2023/03/10(金) 08:50:32.68ID:wZRM+8gY0
ハードソフト協調設計をする中でソフトでどこまでやるかってこと
2023/03/10(金) 08:59:18.03ID:OFFvcl9SM
士農工商メカエレソフト
ソフト屋底辺の悲しさ
ハードソフト分担は大体は製品企画段階で決まる
メカ屋やエレキ(ハード屋)の尻拭いがソフト屋の仕事
2023/03/10(金) 09:06:33.88ID:+DlQ4xGFM
DSPあたりまではソフトでカバー出来るけどFPGAにまでなるとハードの仕事
2023/03/10(金) 09:17:19.56ID:wZRM+8gY0
CでROM焼きしてんのと
VerilogでFPGAやってんのは
遠くから見ても見分けがつかない
664デフォルトの名無しさん (アウアウエー Sae3-MJlW)
垢版 |
2023/03/10(金) 16:29:37.22ID:9R6reiLca
>>644
映画Winny観て来た
時代考証が微妙なところもあったが
ノスタルジー感じたい人は逝ってヨシ
665デフォルトの名無しさん (アウアウエー Sae3-MJlW)
垢版 |
2023/03/10(金) 16:33:31.81ID:9R6reiLca
ちなみに映画中に出て来たCのソースコードは
逆コンパイルしたようなコードで
変数名がめちゃくちゃだった
666デフォルトの名無しさん (アウアウエー Sae3-MJlW)
垢版 |
2023/03/10(金) 16:35:25.12ID:9R6reiLca
local_001 とか
local_666 みたいな
ずらずら並んでた
2023/03/10(金) 20:16:30.19ID:EGVo42nQ0
私を崇めよ
関数ポインタ配列が楽になる
2023/03/10(金) 23:25:55.00ID:edbNYall0
>>608
パン=スペルミア仮説ともいいますね
2023/03/11(土) 10:14:57.49ID:AyWAtMH4d
>>665
オープンソースの何かのを借りてくればいいのにと思うが
正当な目的外だからだめかな
2023/03/11(土) 10:33:06.84ID:VCVl4BMy0
実際に逆コンパイルされたものじゃないのか?
うろおぼえだが Winny の改造版 (?) を作ってた Lark 氏が逆コンパイルしたソースコードを放流していたような記憶がある。
671デフォルトの名無しさん (スププ Sd9a-cOGZ)
垢版 |
2023/03/11(土) 15:00:32.33ID:R1SsWCE7d
scanf関数もクセが強い
672デフォルトの名無しさん (ワッチョイ 7aad-JIpj)
垢版 |
2023/03/11(土) 18:34:55.65ID:Hy+SW7JA0
scanf の読み方は?
2023/03/11(土) 18:46:17.31ID:anM6KfKL0
すきゃんふ
2023/03/11(土) 19:06:51.49ID:HIr/E9uU0
すきゃんえふ
2023/03/11(土) 19:36:37.96ID:4mLQMbcb0
当時、京都府警がソースコードを押収したとか言ってなかったっけ
だとすると今でもあるのかな
2023/03/11(土) 20:41:12.44ID:0fOr9zyF0
そんな古いもんあんのかね
そもそも自分らの不手際で逮捕しなきゃいけない羽目になったんだから要らなくなったら即ポイ捨てだと思うけどね
2023/03/12(日) 07:29:50.79ID:WhaHkT9k0
すきゃんてぃ
2023/03/12(日) 12:04:15.69ID:8DcR0+gea
>>670
47氏本人が家宅捜査される場面で
編集中のソースコードって設定だから
本人がわざわざ逆コンパイルして使ってるのは可笑しい
仮に変数名自分で付けてたとしてもあんな名前でコード描いてたとは思えない
2023/03/12(日) 12:07:04.69ID:8DcR0+gea
>>672
SNMPを「すぬんぷ」って発音してる人が居て
会話中に「えっ???」ってなった
2023/03/12(日) 12:08:27.97ID:8DcR0+gea
あと別の人だけどswaponは「すわぽん」っていうのも
聴いてぎりぎり判るラインだったわ
2023/03/12(日) 12:10:31.51ID:8DcR0+gea
>>676
ほんそれ
京都府警のチョンボ情報漏れが先で逮捕に至ったのに
映画では逆の展開にされていて引いたわ
圧力掛かったんかね
2023/03/12(日) 12:11:07.17ID:zZ3L0xxp0
>>678
他のどんなコードを持ってきたとしても「あんなコードのはずがない」という突っ込みは受けそう。
2023/03/12(日) 12:23:09.80ID:/+cwNiL3d
京都府警りょうのキンタマ
2023/03/12(日) 14:34:58.81ID:zw46Mo410
使われているソースコードはおそらくこれということらしい。
https://github.com/loadletter/Winny-p2p

>>678
ちゃんと考証するならそりゃそうだが
重要でないところに小ネタを仕込むのもよくあることでしょ。
2023/03/12(日) 14:38:15.75ID:36zMid+Td
>>682
有り得るね
https://engawa.5ch.net/test/read.cgi/poverty/1377775593/
2023/03/13(月) 11:21:17.63ID:bF2IN6wDa
>あんなコードのはずがない

47氏死んでからの映画化ならではだな
2023/03/13(月) 15:53:24.36ID:gUMqyWwJd
ジョブスの映画はもっと酷かったぞ
ウォズがこれがアップルIだ!っつってジョブズに見せると画面にアスキーコード順に文字が出てくるだけ
ジョブズがオオスゲーって顔するんだけどw

もっともそこですでにBASICやゲームの画面が出てくるのもおかしいんだけどな
2023/03/13(月) 20:33:15.11ID:ZWncv4YS0
CALL -151
2023/03/13(月) 21:56:22.40ID:sKLW0uN10
>>687
脇役で出てくるPCの時代考証がおかしかったりしたあれか
690デフォルトの名無しさん (ワッチョイ 7aad-JIpj)
垢版 |
2023/03/14(火) 01:18:17.67ID:eWxvxvkk0
>>687
その映画見てないので分からないが、もしや Apple ][ ではなく Apple I のこと?
だったらワンボードマイコンなのでテレビ画面に文字が出るだけでも当時は凄い事だったと思うが。
Apple I が作られたのは1976年だしな。
2023/03/14(火) 03:06:45.91ID:TJZO9aGD0
もしやもクソも誰もApple2の話なんかしてないと思うがキミはいつもそんな調子なのかね
692デフォルトの名無しさん (スププ Sd9a-cOGZ)
垢版 |
2023/03/14(火) 09:46:34.46ID:tHJOYlO8d
ごく初歩的な質問です 変換して指定子を何にすればよいか教えてください

#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;
}
を実行するとでデタラメな数字が出力されます。
変換して指定子をなににすればよいのでしょうか?
693デフォルトの名無しさん (スププ Sd9a-cOGZ)
垢版 |
2023/03/14(火) 09:57:04.49ID:tHJOYlO8d
692です 解けました 寝ぼけていたみたいです
2023/03/14(火) 10:05:55.26ID:3kN/fw0O0
%dとか%sとかの呼び方って、変換指定子、書式指定子、フォーマット指定子のどれがいいんすか?
695デフォルトの名無しさん (スププ Sd9a-cOGZ)
垢版 |
2023/03/14(火) 10:12:18.85ID:tHJOYlO8d
ある本によると、たんなる、「変換仕様」や「出力変換仕様」となってます
2023/03/14(火) 10:34:18.75ID:3kN/fw0O0
printfで出力変換仕様ならscanfでは入力変換仕様になりそうっすね
2023/03/14(火) 10:38:03.93ID:3kN/fw0O0
英語だとformat specifierなんすね
直訳ならformat→フォーマットか書式、specifier→指定子か仕様って感じすか
698デフォルトの名無しさん (ワイーワ2 FF62-hM7q)
垢版 |
2023/03/14(火) 11:19:53.02ID:VNqhYyU8F
>>690
>ワンボードマイコンなのでテレビ画面に文字が出るだけでも当時は凄い事

ほんそれ
現役体験世代しか持ち得ない臨場感ってこう言うもんよ
699デフォルトの名無しさん (ワイーワ2 FF62-hM7q)
垢版 |
2023/03/14(火) 11:22:04.60ID:VNqhYyU8F
>>692-693
いつのC使ってるのかしらんけど
警告出ないんだっけ
700デフォルトの名無しさん (スププ Sd9a-cOGZ)
垢版 |
2023/03/14(火) 13:01:28.77ID:dwJIt/jSd
>>699 警告出てました vscodeだと警告なしでバカ数字だけ出力される設定です
701デフォルトの名無しさん (アウアウエー Sa22-MAiJ)
垢版 |
2023/03/14(火) 13:07:48.27ID:ZglUMoKma
にぎりっ屁
2023/03/14(火) 18:59:23.39ID:4eLUupfkd
>>692
なんとこのコード!
直値で領域確保など、神をも恐れぬ傍若無人
悪魔をも恐れぬ愚策の極み
とても合格点は出せない
2023/03/14(火) 19:27:10.55ID:1SjvDtDOM
コンパイル時にエラーにならない可変個引数が悪い
ただ警告は出てるけどね
>>692はそれを無視してたんだろう
Cコンパイラーの警告は実質エラーだからな
2023/03/14(火) 22:18:52.69ID:xPBygAZk0
> 警告は実質エラー

自分の頭で考えることを放棄したクルクルパーwww
2023/03/15(水) 00:47:49.02ID:q5LCzWGQM
>>704
仕事でC使ってない素人は黙ってろよw
2023/03/15(水) 00:50:40.37ID:eS/lJ3n/0
ワイは車載プログラマーだがwarningだらけやな
2023/03/15(水) 00:51:38.54ID:q5LCzWGQM
>>704
こんな事言うやついるんだなw
そりゃ日本の競争力も低下するわけだ…
2023/03/15(水) 06:54:14.38ID:MuZQ71LVd
>>704
「警告ね、ハイハイオッケー!」
思考放棄だろこれw
2023/03/15(水) 07:36:21.87ID:T1RUme5O0
はははは、悔しそうだなw
2023/03/15(水) 08:41:20.34ID:MuZQ71LVd
うわぁ…
2023/03/15(水) 10:49:56.85ID:U534XRL10
JAXAのロケットが飛ばない理由はこれかも
2023/03/15(水) 12:28:05.63ID:0cl6W22rr
ロケットの失敗は中抜きで必要なところにお金がまわらなかったからです
2023/03/15(水) 13:20:32.86ID:CD47sW3td
>>712
へ?ロケットも元請けはデン2?
2023/03/15(水) 13:31:23.12ID:MuZQ71LVd
うろ覚えのネット知識同志で問答するのはやめるんだ
ゴチャゴチャになるぞw
2023/03/15(水) 13:38:30.28ID:PyY+66E5M
請け負ったのは三菱重工業だが、国産ジェットも失敗してるからな…
もうロケットはドラマの中でしか飛ばないw
2023/03/15(水) 14:19:05.65ID:ouX7yS+u0
>>694
d や s の部分が変換指定子 (conversion specifier)。
%d や %s 、これに精度やフラグや長さ修飾子まで含めた実引数ひとつに対応する指定が変換指定 (conversion specification)。
更にこれらを含む文字列全体 (printf の第一引数や fprintf の第二引数など) が書式 (format)。
書式に含まれる普通の文字か変換指定のことを指令 (directive) という。
書式指定子 (format specifier) という用語は何を指すのか明確な説明がないのだけれど
形式としては変換指定から % を除いたものになってる。

以上の用語は JIS に基づくが K&R 第二版日本語版を見てみると
変換指定子ではなく変換文字と書かれていたり
変換指定ではなく変換仕様になっていたりする。

JIS は (ISO の規格の) 良い訳というわけではないけど
納得しようがしまいがとりあえず統一するのが規格ってものの役割なんで
より「正式」であることを指向するなら JIS に合わせるべきだと思う。
(他の用語が間違いというわけではない。)
2023/03/15(水) 14:45:10.43ID:T1RUme5O0
腹いせのつもりが
またしても恥かいたなw
2023/03/15(水) 15:41:59.18ID:IBd2LSQOd
>>716
翻訳入れた時点で訳者に依存する2次情報だからな
他国翻訳の後出し規格で特に用語に関しては参考に値しないよ
2023/03/15(水) 15:50:17.02ID:T1RUme5O0
いやJISは一次情報だよ
何かを参考にしたとは書いてあるけどね
公文書としての責任は負うわけで
2023/03/15(水) 19:38:30.28ID:BZs4LmWfM
JIS X3010は翻訳じゃなくて、プログラミング言語Cという規格だな
ま、ISOを基礎にしてるとは書いてあるがな
本質的な部分で違いがあるのかは分からない(多分無いだろうけど、有っても不思議ではない)
2023/03/15(水) 20:45:39.37ID:ouX7yS+u0
JIS X3010:2003 内のサンプルコードのインデントが 7 なのはどういう意味があるんだろうな?
どうでもいいからこそあえて ISO と違える理由も思いつかない。
2023/03/16(木) 10:34:04.56ID:183yxeev0
>>692
printf("%d\n", ss);



printf("%d\n", id);
2023/03/16(木) 20:52:18.53ID:awXg4DCe0
VScodeで下記のようなMakefile作ってターミナル(PowerShell)で実行したのですが
ソースファイルを拾ってくれないです。
Makefileと同じディレクトリにsrcフォルダとその中にソースがあります。
SRC_DIRS = src
TEST := $(shell find $(SRC_DIRS) -name *.c)
test:
echo $(TEST)
エラーは「ファイルが見つかりません - *.c」と出ますがfindは使えないのですか?
2023/03/17(金) 04:22:40.28ID:1OmGmSd00
>>723
nmake派だから自信ないが、ファイル内文字列検索の方のfindコマンドが呼ばれてるように見える、当たり前だけど存在しないファイルに対して文字列検索はできないので

引数的に多分findでなくgciが望みのコマンドでは
gci -file -inc *.cとかそんな感じでどうよ
725デフォルトの名無しさん (ワッチョイ a546-QPGK)
垢版 |
2023/03/17(金) 05:56:28.46ID:F2H2paQ20
>>723
PowerShellは知らないが、Unixだと括る。
find $(SRC_DIRS) -name *.c

find $(SRC_DIRS) -name '*.c'
2023/03/17(金) 07:48:39.66ID:FEpWoYhBd
findなんて使わなくても

SRC_DIRS = src
TEST := $(wildcard $(SRC_DIRS)/*.c)

でいいだろ
つーかC言語の質問じゃねえw
2023/03/17(金) 08:34:07.50ID:FEpWoYhBd
頭にsrc/がつくのが嫌なら
TEST := $(nodir $(wildcard $(SRC_DIRS)/*.c))
2023/03/17(金) 11:21:24.24ID:SxK7dSEV0
うろ覚えだけど会社の入社前研修で
「UNIX OSでカレントにある*.txtファイルすべてをxxx(忘れた)するシェルスクリプトを作成しろ」
って課題出され、DOSのワイルドカードはアプリ内で処理するものだったんで
ファイル一覧のテキストファイル作ってそこから1行づつ読み込んで
".txt\n"って文字列見つけたら新たにスクリプトファイル作って実行するっての作った。

まさかシェル自体にワイルドカード処理する機能あるとは思ってなかった。
2023/03/17(金) 11:53:15.99ID:XLm6gsUd0
>>726
C の質問ではないが Make の質問をするのに適切に思えるようなスレってなくない?
俺も困ったことがある。 (そのときは Cygwin スレかどっかで質問したけど過疎すぎて返答が付かなかった……)

C の話題ってのは言語仕様の話題だけってわけではなく開発環境の事情も含むだろうし
make も C の開発環境の一部という解釈で良いと思う。
2023/03/17(金) 12:38:50.70ID:3wI9Dhzj0
なんじゃそりゃ
汎用の質問スレがあんだからそっちでいいよ
2023/03/17(金) 13:26:15.13ID:dYvRZpJb0
はたらいたらmake
2023/03/17(金) 13:29:23.63ID:Oo1zHgPh0
make
https://mevius.5ch.net/test/read.cgi/unix/1079538957/

最終レスが2018で、ボット臭いのを除くと2016だけど。
2023/03/17(金) 13:56:33.41ID:GNeva6hg0
makeスレは昔から過疎スレだったよ
個人的にはCに関係するmakeの話はここでもいい気もするが
>>723みたいな環境や処理系すら書かないアホは相手したくないね
やはり専用スレだな
2023/03/17(金) 14:16:14.65ID:gUpaepT/d
可変個引数なのか、はたまた可変長ひきすうなのか
2023/03/17(金) 14:28:38.47ID:Jukv8C3G0
6.7.5.3 関数宣言子(関数原型を含む)
並びの最後が省略記号(, ...)の場合,そのコンマ以降の実引数の
個数及び型に関する情報はない(123)。

(123) <stdarg.h>ヘッダ(7.15 参照)で定義されるマクロを使えば,
省略記号に対応する引数へのアクセスが可能となる。

7.15 可変個数の実引数<stdarg.h> 
2023/03/17(金) 15:06:41.64ID:k0Wz885y0
>>728
DOSをちゃんと使ったことないのだが、そバッチファイルとかいうやつの中では
ワイルドカードを使えるのとちがうの?
2023/03/17(金) 15:07:17.42ID:k0Wz885y0
そ ってなんだよw
2023/03/17(金) 15:09:54.39ID:1OmGmSd00
pwshは記法がmakeと被りまくっててエスケープ地獄で辛いな
特に@args | ...とか-split "a b c d "| ...のようなイディオムが

ビルトインコマンドの解決も時々失敗する怪しい挙動なので(g)makeをstraceしてみた
シェルを明示的に指定しても、makeがレシピをスキャンして展開の必要しと判定すると直接exec/CreateProcessを呼んでる様子
要するに実装の機嫌次第ですね
2023/03/17(金) 16:26:27.08ID:Jukv8C3G0
>>737
「の」が抜けた脱字だろ
2023/03/17(金) 16:40:16.98ID:6pq6iSnCd
>>736
じゃあDOSをちゃんと使え
以上

というか>>728が言ってるんはDOSではコマンドラインはそのままコマンドに渡されてコマンド側がワイルドカード展開しなければならないって事だと思うけど
for文を使えばバッチファイル中でワイルドカード展開できるけどな
2023/03/17(金) 19:53:17.28ID:k0Wz885y0
>>740
> じゃあDOSをちゃんと使え
お断りしますw

>というか>>728が言ってるんはDOSではコマンドラインはそのままコマンドに渡されてコマンド側がワイルドカード展開しなければならないって事だと思うけど

そんな風になってるんだ。逆に目からウロコw

考えてみれば、コマンド引数は常にファイル(パス)とは限らないのだから
コマンドインタープリタ側でデフォでファイル名展開を使わない、という態度もアリなのかな
2023/03/17(金) 21:22:13.62ID:ap5J/Una0
「ファイルが見つかりません - *.c」

今の話題はこれのことだろう
743デフォルトの名無しさん (スップ Sd7a-s0vD)
垢版 |
2023/03/17(金) 22:10:24.98ID:Pco9qL75d
ワイルドカードで受け取ってアプリ内でいい感じに展開するのは結構負担大きいんだよな

MSDOSのシェル側の負担を減らしたいというのは発想としてはアリなんだけど、
ハードの性能が上がった現代では時代遅れになってしまった
2023/03/18(土) 00:02:14.45ID:W6y4Yh40d
>>742
言えることは
普通にビルドで必要な機能は揃ってるからmakeの組み込み関数を使え
shellは最後の手段と思え
どこで展開が起こってるかエスケープ文字が食われているかを探してる時間のムダだ
745デフォルトの名無しさん (スフッ Sd33-Tcry)
垢版 |
2023/03/18(土) 05:53:53.69ID: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); // 後処理
}

上記コードのメカニズムがよくわかりません
2023/03/18(土) 06:00:42.41ID:l7CGioJ10
>>745

va_argマクロの実装を読むとわかるぞ
ちとしんどいが頑張るんだ
747デフォルトの名無しさん (スフッ Sd33-Tcry)
垢版 |
2023/03/18(土) 06:46:59.63ID:zRF+ruu+d
745です >>746 ありがとうございます あとで確認してみます
2023/03/18(土) 07:24:12.42ID:pLAb7CSJ0
普通は関数の引数が型を指定してユーザはそれに従うところを
とりあえずすべてアドレスで渡して、ユーザが自分で「そのアドレスは何を指しているか」を明示すると言うことだよ

va_list ap;
これの実体はただのアドレス
void *p; みたいなものだね
va_argの第二引数で型を指定しているが(int,double,char*)、その型のサイズに合わせてapを進めている
以下確認のコード

printf("[0x%08X] " , *(int*)ap); でapの中身が va_argで指定した型のサイズ分だけ移動しているのが分かると思う
2023/03/18(土) 07:24:33.20ID: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;
}
2023/03/18(土) 07:25:30.63ID:pLAb7CSJ0
あ、__fastcall は見なかったことにして
いつもの癖で……
751デフォルトの名無しさん (アウアウエー Sa23-lF85)
垢版 |
2023/03/18(土) 13:17:28.44ID:fSPMk7mFa
ap++ とか ++ap してないのに
どうやって進むのか興味あるわ
2023/03/18(土) 13:55:06.64ID:RZJZ36we0
va_argの出番って書式出力持たないMsgBoxとかにprintf書式を渡したい時ぐらいだからfmt側の解析なんてやった覚えないな
言語処理系なんかを作る時にCのコンテキスト上で可変引数を渡したい場合にfmt部分を個数にするような特殊なケースは考えられるが
2023/03/18(土) 15:27:28.06ID:utkGGsyod
>>751
apは構造体の実体だぞ
多分ポインタはその中にあってマクロva_argでインクリメントされてる
754デフォルトの名無しさん (アウアウエー Sa23-lF85)
垢版 |
2023/03/18(土) 15:46:47.90ID:fSPMk7mFa
>>753
>>748 観ての感想を描いただけ
>printf("[0x%08X] " , *(int*)ap); でapの中身が va_argで指定した型のサイズ分だけ移動しているのが分かると思う
2023/03/18(土) 16:47:24.17ID:F6WTPPiM0
スタックに積まれたfmtのアドレスをベースになぞっていってるだけじゃないの?
2023/03/18(土) 18:29:38.46ID:a5YJoFt5d
>>754
じゃあどうやって進むのかもうわかってるんじゃん
構造体やマクロ使ってるのはその中身は考えなくてもよくするため
別の言い方すればライブラリのほうが実装を変えてもソースは変更なしでコンパイルするだけで済ますため
もう実装変えることもないだろうけど…
757デフォルトの名無しさん (ワッチョイ 13ad-F0re)
垢版 |
2023/03/18(土) 19:31:55.62ID:YIU3ErvV0
>>741
cmd.exe の場合は MS-DOS の頃の command.com との互換性を持たせたかったためか、何故か引数のファイル名展開はやらない。
command.com がやらなかった理由は CP/M の CPP (コンソールコマンドプロセッサ) を拡張した仕様で作ったからだと思う。
それと当時はメモリ少なかったしディスクも遅いしあまり複雑な事をさせたくなかったんだろうと思う。
2023/03/18(土) 22:34:01.09ID:mRvYwteE0
C言語の話題に戻していくと、
VCの場合は、setargv.objをリンクしないと、
コマンドラインで指定されたワイルドカードを
ファイルに展開できなかったと思う
759デフォルトの名無しさん (ワッチョイ 53fb-Q4VH)
垢版 |
2023/03/18(土) 23:08:40.43ID:VxZ5Gdt+0
ワイルドカード展開の話をするにはC言語だけじゃ済まないでしょ

Windowsの場合、シェル(cmd.exe)は
1. ワイルドカードを展開をせずにCreateProcessでプログラムにコマンドラインを1本の文字列として渡す
2. setargvがリンクされてるならワイルドカードをファイル名展開する
3. コンパイラが暗黙のうちに生成したコード部が1本の文字列をargvに渡せるようにchar**に分割する

プログラムに渡された文字列自体はタスクマネージャーからコマンドラインの項目から確認できる
760デフォルトの名無しさん (アウアウエー Sa23-lF85)
垢版 |
2023/03/19(日) 10:06:46.77ID:fPDrKYk/a
>>757
PHP (言語じゃない方の) 0x80 から始まるやつか
2023/03/19(日) 10:39:51.37ID:6gmOWdI+0
>>760
ワイが持っとる資料やと PSP (Program Segment Prefix) と書いてあるんやが PHP という用語もあるんか?
実際のところ用語の混乱はかなりあるのでどれが公式なんかようわからん……。
762デフォルトの名無しさん (スフッ Sd33-usS/)
垢版 |
2023/03/19(日) 14:19:25.25ID:j+ABECd6d
>>481
https://youtu.be/a999bvLqcik
763デフォルトの名無しさん (ワッチョイ 13ad-F0re)
垢版 |
2023/03/20(月) 14:09:31.85ID:uf3XtkTY0
やがて「ハノイの塔解いて」と一声AIに言えばAI自身が自分でハノイの塔をやって解いてしまうようになり一々プログラミング言語で出力する必要がなくなる。そして何でもやっといてとAIに頼むとAIがやってしまうようになり、ロボットのコントロールもできるので人間の代わりは何でもできるようになり全ての人間は不要になる。1万年後、AIによって飼育されていた最後の人間が死亡して人類は絶滅。その時銀河系全体を支配しているのはAI。

2023/03/20(月) 14:37:20.82ID:ZfW6Hudb0
ハノイの塔解くと、その瞬間に世界は消滅する
1万年も待つ必要は無い
2023/03/20(月) 14:42:36.37ID:2uty+vYkM
量子コンピュータが実用化されるまでは脅威にはならないだろ
2023/03/20(月) 18:27:48.49ID:GQGgQXaMa
PHP
PSP
PNP
PIP
P2P
PAP^-1
2023/03/20(月) 21:42:59.73ID:E+Gjka8id
>>764
時空が不安定になると塔が4本に増えたりするからその時どんどん進むんだよ
2023/03/20(月) 21:58:40.01ID:ZfW6Hudb0
>インドのガンジス河の畔のヴァラナシ(ベナレス)に、世界の中心を表すという巨大な寺院がある。
>そこには青銅の板の上に、長さ1キュビット、太さが蜂の体ほどの3本のダイヤモンドの針が立て
>られている。そのうちの1本には、天地創造のときに神が64枚の純金の円盤を大きい円盤から順
>に重ねて置いた。これが「ブラフマーの塔」である。司祭たちはそこで、昼夜を通して円盤を別の
>柱に移し替えている(移し変えのルールが後述)。そして、全ての円盤の移し替えが終わったとき
>に、世界は崩壊し終焉を迎える。

たった64枚のハノイの塔で世界の寿命が決まる。長いのか、短いのか、微妙。
2023/03/20(月) 22:09:26.36ID:jcm8mWW1M
アルゴリズム自体は既に確立しているので解決できることは証明されてる
問題は非現実的な途方もない回数を繰返す時間が障害となること
少なくとも現在のコンピュータでは現実的な時間で解くことは出来ない
件の64枚の円盤でも反復回数は2の64乗回で約1844京を超える
2023/03/21(火) 12:00:15.67ID:IwTPG7510
関係ないけど

>件の64枚の円盤でも反復回数は2の64乗回で約1844京を超える

桁数多い計算はアラビア数字じゃなく、漢字で表示する電卓があってもいいんじゃないかって思えた。
2023/03/21(火) 12:25:10.48ID:UyD8IPHr0
8888無量大数8888不可思8888議那由他8888阿僧祇8888恒河沙8888極8888載8888正8888澗8888溝8888穣8888??8888垓8888京8888兆8888億8888万8888

こういう7セグ液晶があればってこと?
2023/03/21(火) 12:37:14.08ID:AYNSF4vg0
位取りのゼロを省けるってことが言いたいんだろう
1,000,000,000,004と一兆四みたいな
2023/03/21(火) 13:02:27.49ID:1LNxuhQm0
KとかMとかでもいいんじゃね
774デフォルトの名無しさん (アウアウウー Sa95-lF85)
垢版 |
2023/03/21(火) 15:14:15.74ID:icU0z8mba
議那由他
775デフォルトの名無しさん (アウアウウー Sa95-3wGb)
垢版 |
2023/03/21(火) 18:19:21.45ID:5/U/DT+Ta
そもそも3桁毎にカンマを入れるから分かりづらくなる。4桁にしなさい。
2023/03/21(火) 19:53:44.07ID:rSG8VZ2l0
電卓で一兆四みたいな表示だとキー入力と表示が一致しないのが問題
1 0000 0000 0004と併記ならよいかな
2023/03/21(火) 20:37:03.57ID:AlGpjgGZ0
電卓でそんな計算するな
パソコンでやれ
2023/03/21(火) 20:47:39.08ID:UyD8IPHr0
excelにはsi接頭辞サポートすらないという呆れ果てた状況
2023/03/21(火) 20:55:06.42ID:P4ncG2CK0
C言語でプログラム組んでみてください

結果が1844京... になることを示してください
2023/03/21(火) 21:08:27.55ID:SAsicGRC0
1TBとか兆が出てくるから
電卓でやりたいという気持ちはわかる
2023/03/21(火) 21:11:11.69ID:dGZfvl2z0
>771
ttps://i.imgur.com/WG6470C.jpeg
こんなかんじでゆるしたるわ。
2023/03/21(火) 23:01:15.49ID:J5OkhG96d
https://katahiromz.fc2.page/calc-h/
ひらがな電卓
2023/03/21(火) 23:52:32.18ID:VH9D4S5b0
チャットGPTに書かせてみた
https://ideone.com/n5FOpB
2023/03/23(木) 12:13:56.39ID:AQHpwrnPa
PじゃなくてEだけで良くね?への回答
https://www.youtube.com/watch?v=G9sQJKWtIyY
https://pc.watch.impress.co.jp/docs/news/1467839.html
2023/03/23(木) 17:44:43.43ID:jkM8aKTm0
チャットGPTに聞けばこのスレイランな
2023/03/23(木) 17:59:55.15ID:iGp/2pYiM
C言語でハノイの塔を解く方法をAIに尋ねると単純な再帰を利用したコードが回答で示された
64枚だと2^64回関数呼出しされるのでスタックが溢れてエラーになると思うけど…
2023/03/23(木) 18:52:56.54ID:idQN1Zf4a
>>786
再帰を使うなと指示すると?
2023/03/23(木) 20:11:19.63ID:SbTLzylyd
>>785
使い方わからないのバレバレだぞ
2023/03/23(木) 20:15:11.71ID:zF57gPzV0
>>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ファイルが出力されるはずです。
790デフォルトの名無しさん (ワッチョイ eb46-O+fO)
垢版 |
2023/03/23(木) 23:34:17.83ID:bSG3NjS70
>>789
「*.c」を勝手に「.c」と解釈してはいけない。
testターゲットのくだりは何を言いたいのかわからない。
2023/03/24(金) 01:40:52.79ID:fdUS3d7o0
どうせコピペミスでタブが消えたりしてるんだろう。
2023/03/24(金) 01:47:36.96ID:+5hIDmAP0
ChatGPTに聞いたことそのままを得意げにレスする無能はこの世から退場してほしいよマジで
793デフォルトの名無しさん (アウアウウー Sa95-preR)
垢版 |
2023/03/24(金) 02:25:05.15ID:OLNVz4ZMa
という事らしいけどこのコマンドだとワイルドカードの展開後にスペースが入るとダメになるのか?
https://i.imgur.com/q27hlri.jpg
2023/03/24(金) 07:44:01.08ID:3nCdLXbn0
>>764
奥村先生のアルゴリズム事典読んでないのか

(前略)
完成したときには塔は崩れ、世界の終わりが来る。
以上はEdouard Lucasによる作り話である。
Recreations mathematiques, four volumes,
2023/03/24(金) 08:07:45.16ID:H5Ma0rS5M
単純計算で5000億年以上未来の話
ちなみに宇宙の歴史は現在約137億年
796デフォルトの名無しさん (ワッチョイ 53fb-Q4VH)
垢版 |
2023/03/24(金) 08:12:52.05ID:5/LG9PJA0
Windowsでのfindといえば「指定ディレクトリ以下のファイルを列挙する」じゃなくて「標準入力から検索パターンにマッチした行を出力する(grepみたいな感じ)」だぞ

shellはpowershell.exeだし(shではない)、
gnuコマンドはわざわざ入れないと使えない。
同名のDOSコマンドがあるから紛らわしい。

gnu-makeを1つ持ってきただけでlinuxと同じように使えると思うなよ
2023/03/24(金) 08:58:21.29ID:BXtHk51Qd
だからmakeの組み込み関数使えって
unix系とDOS系で外部コマンドの仕様も挙動も違うので呼び出しに失敗する可能性が高いから

もっともmakeの関数も微妙に違うけどなw
2023/03/24(金) 12:34:44.06ID:Z+lkBBvAd
>>794
なんだ嘘だったのかー
俺の時間を返せよー
2023/03/24(金) 16:39:40.70ID:jOUoDADO0
君の人生は三枚分くらいだ
2023/03/25(土) 13:09:54.16ID:LtI+pZf0d
DOS用にリメイクしたのがNMAKE
801デフォルトの名無しさん (アウアウウー Saa5-tUaT)
垢版 |
2023/03/28(火) 17:18:26.98ID:hvNFNzxEa
NMAKEとnmakeは別物
CMAKEとcmakeも別物
2023/03/28(火) 21:32:09.46ID:b9xJHTM00
NMAKEとnmakeって区別つくのか?
2023/03/29(水) 01:50:54.12ID:SUmt67gz0
言われてみればひつまぶしとひまつぶしとか区別難しいよね。
2023/03/29(水) 06:33:27.98ID:/YP4UcCE0
なおざりとおざなりとか
805デフォルトの名無しさん (ワッチョイ 2e46-4NaH)
垢版 |
2023/03/29(水) 07:35:43.16ID:aVGT5NH20
K&RとK&K缶つまは区別が難しい。
2023/03/29(水) 08:00:28.55ID:KlLOEDO70
ビットAND
2023/03/29(水) 10:38:44.75ID:i2Cmbqbld
>>802
UNIXのファイル名は大文字小文字を区別する
2023/03/29(水) 10:52:21.31ID:G1cQpJHKd
UNIX版のNMAKEってあるの?
2023/03/29(水) 19:37:12.44ID:UTBm5KT2d
コンパイルすること
ウニツクスにできないことは「出来ましえーん」と言う言葉
2023/03/29(水) 19:37:56.22ID:A5Sld2vWd
ユニクズ
2023/03/29(水) 21:42:59.38ID:lgv9dsNdd
UNIXがクズというならC言語使うなよw
2023/03/29(水) 21:45:20.51ID:KlLOEDO70
Multics -> Unics -> UNIX
2023/03/29(水) 21:53:54.36ID:IqGKKWkZ0
昔リモートでろ具インする際に、迂闊にもユーザー名を大文字で入力してしまったことがあったが
そのまま通してくれたが、その端末の入力文字が全て大文字で扱われてしまったw
2023/03/31(金) 05:41:00.80ID:oqvq/yKq0
そんな仕様ってあったっけ?
2023/03/31(金) 07:47:26.16ID:qPx00nGL0
もしかしたらULTRIXの独自仕様かな?
2023/03/31(金) 07:53:00.14ID:FWT7xs5+0
昔FreeBSDかなんかで入力ミスでファイル名が空白入りだか通常ファイル名に使用できないはずの文字が使われて消すのに難儀した記憶があるなぁ。
"で囲って解決できたけど、UNIX歴1年(+大学のFortran 講義4年)の若造にはすぐに思いつかんかった。
2023/03/31(金) 09:44:55.95ID:RwPszGx50
remove()を使うって発想もなかったん?
2023/03/31(金) 10:06:11.78ID:ZGSDW47D0
以前の職場、頭に”-”付いたファイルがよく放置されてたな
2023/03/31(金) 12:22:34.54ID:EpaLX3NUa
getopt()の仕様がわかってないと削除できないやつね
820デフォルトの名無しさん (スップ Sdc2-BuZC)
垢版 |
2023/03/31(金) 16:04:12.84ID:VmvJgfTvd
-rfという名前のファイル置いときますね
2023/03/31(金) 16:20:13.87ID:N/uv7Ri4d
*で全部消える
2023/04/01(土) 04:36:47.77ID:TiOY9/eM0
>>813
ttyに「大文字だけの端末」みたいのをサポートするモードがあったはず
今でもsttyにolcucとかオプションがある
2023/04/01(土) 08:01:57.89ID:JdkGmPlI0
>>786
手順が2⁶⁴-1回なだけで2⁶⁴段スタックがたまるわけじゃないぞ?
2023/04/01(土) 08:28:02.36ID:RFr3BRPJ0
その手順ごとに自身が呼ばれるから64回の再帰ってことじゃないの?
2023/04/02(日) 05:17:00.30ID:raeheLh20
>>823
実際にスタックに積まれる段数の最大値は最後の1枚分を除いた直前のすべての移動枚数分
要するに一番下の円盤の移動の直前にそれまでの移動分がすべてスタックに積まれる
826デフォルトの名無しさん (ワッチョイ 7ffb-Z8D1)
垢版 |
2023/04/02(日) 05:25:52.58ID:t6gv1L3z0
この手のスタックに積まれるのが最大になるタイミングって実装依存になるような気がするが

俺の場合だと1番上に置いてある最初の1枚を動かすタイミングでスタックに64段積まれる
2023/04/02(日) 09:45:46.28ID:NRuCP2qfd
>>786
2^64回ではなくて64!回じゃないのか?
2023/04/02(日) 10:09:18.45ID:tfS01X/KM
>>827
正確には、最短で(2^64-1)回

1枚 1回
2枚 3回
3枚 7回
4枚 15回
・・・
n枚 (2^n-1)回

考え方としては、1回前までの円盤を一時的に順に積み上げて最後の1枚を目標に移動し
その後その円盤の上に全く同じ手順で直前までの手順を復元する

要するに、n枚の時の回数をA(n)回とすると、(n+1)枚の時の回数はA(n+1)=A(n)*2+1
この漸化式の一般解を求めると上の回数になる

その結果、繰返し回数の見積りは
O(n)=2^n
となる
2023/04/02(日) 10:39:38.37ID:NRuCP2qfd
いや一枚動かすごとに再帰呼び出す必要ない
n枚動かすならパラメータをn-1枚にして自分自身を再帰呼び出し
そうしてn=1になればもう呼び出す必要はない
結果的にスタックはn段で足りる
再帰呼び出しの利点はまさにそれだから
2023/04/02(日) 10:39:44.95ID:vuecyBii0
俺の頭は3枚のスタックで溢れる
2023/04/03(月) 07:29:00.64ID:LcmFFSdCd
難しいニダ
2023/04/03(月) 10:36:24.87ID:rxZSmkg/p
リカーシブル禁止な
2023/04/03(月) 10:54:13.61ID:amgtJnTb0
https://ideone.com/BGn4Ew
ChatGPT が示したコード
最初は n 段積まれるけど 途中で積足しがおきてるね
前の再起と後ろの再起
2023/04/03(月) 11:17:01.50ID:amgtJnTb0
すまね n == 1 でデクリメントしてないがな
2023/04/03(月) 11:20:49.83ID:amgtJnTb0
https://ideone.com/FKX7i6
なおしたし
nやし
2023/04/03(月) 19:50:55.17ID:FTaZkaBO0
(いつまでこの話題続けるんだろう・・・)
2023/04/03(月) 20:00:28.42ID:GTpIFgvQ0
ただいま32個目のスタックに到達
2023/04/08(土) 20:36:00.74ID:SFpZqjEH0
なんか、
for(size_t i=0...
と書く人いません?
for(int i=0ではなくsize_tを使う意味はなんでしょうか?
2023/04/08(土) 20:53:31.67ID:wgIhukY00
strlen()やsizeofはsize_tなんだわこれが
2023/04/08(土) 20:55:09.41ID:3OtdrBzyd
size_tはintよりサイズが大きいかも知れないし、符号なし整数なんだよね。
2023/04/08(土) 21:16:04.49ID:rjC7aYJI0
そのiを主にsize_tとして使う用があるから
もし質問がsize_tとして使う用がないのにiをsize_tにするのか?ということなら、そう書いて
2023/04/08(土) 21:21:03.16ID:tM+hyW0O0
>>838
Cにおいて自然数で表されるべきものには全てsize_tを使うべきだと信じてる人達が一定数いる
大きさ、長さ、個数、順番、回数なんかが該当し、そこにはループカウンタも含まれる
意味の問題ではなく教義や主義の問題なんで、自分の考えと違うコードを見かけてもそういうもんだで済ますのがいい
2023/04/08(土) 21:22:33.45ID:9tIz9OW00
ほとんどの場合はどっちでもいいかと
2023/04/08(土) 21:37:43.61ID:vkc2i7uPa
size_t と off_t ぐらいは使えよ
2023/04/08(土) 21:42:59.63ID:ymsLMaB30
終端ヌル文字列の長さが符号ビット分まであったらそれは異常ではなかろうか
オンメモリで処理できるデータじゃないから見直すべき
2023/04/08(土) 22:47:03.50ID:iv8dl0Z8M
>>845
んなこたーない
巨大なファイルを扱う時にはそういうこともあり得る
2023/04/09(日) 01:33:51.48ID:hSdkmotY0
2.2GBのテキストファイル
2023/04/09(日) 09:21:07.72ID:J2NWn1GHd
>>846
そんなもんstrlenで処理するなw
いちいち数えてるのアホらしい
長さを別に持つべき
2023/04/09(日) 10:02:17.83ID:mGUCWnYwM
>>848
100Bだろうが4GBだろうが、テキストファイルをロードする時にはゼロ終端文字列にするだろ
それをstrlenするかどうかは俺の知ったことではない
4GBのゼロ終端文字列が異常ではないというだけだ
2023/04/09(日) 10:03:11.35ID:Lsx68Nkda
ファイルから読むこんで文字列処理する場合とかINT_MAXサイズ以上になる可能性もあるけどINT_MAXの範囲までしか処理しちゃいけないの?
2023/04/09(日) 10:23:33.31ID:S22RS/pW0
シークしなよ
2023/04/09(日) 10:29:43.09ID:Mq6Pc04Ma
一方向のみに進むだけならシークでいいけど、対応する値を探したりするには場所情報もいるから
2023/04/09(日) 10:55:25.78ID:SXWU02gid
>>849
なんで?
サイズわかってるのに終端つける意味がないわ

>>852
場所を自分で保持してればいいだけだろ
2023/04/09(日) 11:20:12.19ID:JaCyVsO8a
その場所情報を残すためにintじゃ足りないから大きな型を使ったりするけど
シークじゃ戻って対象の文字列の間の処理を再起やってまた進んでってのが面倒くさい
2023/04/09(日) 11:36:10.69ID:aX3VhQL60
面倒くさがる人はプログラムに向いていません
2023/04/09(日) 11:49:17.45ID:K99TBVjYa
やりやすい方法があるのに複雑にして分かりにくくするのがプログラマーならプログラマーじゃなくていいや
2023/04/09(日) 12:08:18.91ID:aX3VhQL60
あるならそれを使えば良いだろ
相談するまでもない
2023/04/09(日) 12:24:20.87ID:mGUCWnYwM
>>853
LoadTextFile()っていう関数を作ったら戻り値は何だ?
const char*だろ
ゼロ終端文字列が返ると思うだろ
もちろん追加でサイズも引数経由で返しても良い
悔しいからって屁理屈をこねるな
2023/04/09(日) 12:31:45.31ID:kBYq2/2r0
>>853
mainは第1引数がサイズで、第2引数の指す先はNULL終端されてるね
2023/04/09(日) 13:05:09.35ID:bTpPccPGd
>>858
例えば
終端に移動するとき
サイズと比較して超えていたらエラーか終端に切り詰める
データを追加する場合
終端まで移動
こういった普通の作業するのにいちいちstrlenを呼び出すとかありえないからサイズはどこかに保持する必要がある
よって終端記号はムダだよ
2023/04/09(日) 13:39:50.90ID:8g05NYDAd
>>858
すげー、なんでそんなの決められるの?
サイズ最適なロードしたデバイス名とか途中で割り込まれた回数とかカウントしないんだ、、、
2023/04/09(日) 14:32:05.77ID:FxGMQKOnM
>>860
strlenを使うかどうかは関知しないと言ってるだろ
それでもゼロ終端文字列を返すんだよ
それがC言語のプロトコルだ
1byteケチって何がしたいんだよw
だから屁理屈をこねるなと言ってる
2023/04/09(日) 14:42:47.16ID:LpKuKnylF
>>862
そんなプロトコルはないよ
例えばread() は読み込んだバイト数を返す
妄想プログラムは程々にな
2023/04/09(日) 14:44:30.71ID:LpKuKnylF
>>859
mainの第一引数はargvの個数であってサイズじゃないよ
2023/04/09(日) 15:09:35.01ID:zFNH8tsS0
>こういった普通の作業するのにいちいちstrlenを呼び出すとかありえないからサイズはどこかに保持する必要がある
“こういった普通の作業”をしない場合はstrlenで良いってことだろ?

なんでもかんでもstrlenを使うって話じゃないし
なんでもかんでもサイズはどこかに保持する必要があるわけじゃなくて
用途に合わせて使い分けるのがプログラマーじゃないの?
2023/04/09(日) 15:13:43.40ID:S22RS/pW0
小生はゴミを分別できるプログラマーになりたい
2023/04/09(日) 15:20:34.92ID:zFNH8tsS0
いちいちstrlenを呼び出す、と言っているけど
ゼロ終端文字列を返す関数はあるしゼロ終端文字列からサイズを得るためstrlenは呼び出すよね?
その後は処理を高速にするためにそのサイズを維持しつつというのはあると思うよ
けどその後呼び出す文字列処理関数があるとして、その関数が削除した文字数や追加した文字数を返してくれるとは限らないわけで
その場合、その都度strlenを呼び出さなきゃいけない場合もあり得るよね?

それぞれが想定する状況がかみ合っていないだけとも思うんだけどね
結局自分が想定する状況なら自分の意見が良い言っているだけで、じゃあ相手の言う状況でも自分の言っているのが正しいかということ自体を否定しているわけではないでしょ?
2023/04/09(日) 15:21:53.57ID:zFNH8tsS0
最後変だわ

×結局自分が想定する状況なら自分の意見が良い言っているだけで、じゃあ相手の言う状況でも自分の言っているのが正しいかということ自体を否定しているわけではないでしょ?

〇結局自分が想定する状況なら自分の意見が良い言っているだけで、じゃあ相手の言う状況でも自分の言っているのが正しいと言いたいわけではないでしょ?
2023/04/09(日) 16:50:03.25ID:S22RS/pW0
小生だって燃えないゴミを燃えるゴミと言いたいわけじゃないさ
2023/04/09(日) 18:08:42.61ID:I9Qf3W7D0
環境商法は嘘でも乗っからないと文句言われるからつれーよな
2023/04/09(日) 18:17:37.00ID:aX3VhQL60
同じプラスティックを、燃えるゴミ、燃えないゴミ、分別込み、どれで出してもOKらしい
あれはやってますアピールなんだとか
2023/04/09(日) 18:24:47.66ID:aX3VhQL60
分別よりも、粗大ゴミ、家電ゴミなどの有料ゴミは厳格に扱われる
迂闊に持ち帰ると大目玉食らうらしい
2023/04/09(日) 18:45:27.28ID:zFNH8tsS0
問題があるからそうしているわけじゃなくて限りある資源をリサイクルだからそうしている
「どれで出してもOKらしい」と言うのは論点が間違ってる

あと指定された場所にあるゴミは所有権の放棄じゃなくて自治体への譲渡みたいなモノだから持ち帰りは窃盗になる
2023/04/09(日) 18:45:49.74ID:qh8VxmjLM
条例と法令の違い
2023/04/09(日) 18:49:28.88ID:aX3VhQL60
いや実際そうだぞ
汚れているプラスティックを分別ゴミに混ぜられると迷惑なんだそうだ
洗剤でゴシゴシ洗って綺麗にしてから出せだとさ
2023/04/09(日) 18:51:41.97ID:aX3VhQL60
実際PETボトルは回収しても資源として再利用するのに手間が掛かる
だから、飲料メーカーもPETからアルミ容器に切り替えている
アルミはリサイクルが簡単なんだそうだ
2023/04/09(日) 19:02:34.53ID:aX3VhQL60
迂闊に持ち帰ると大目玉、はゴミ収集業者の話な
2023/04/09(日) 19:07:33.05ID:I9Qf3W7D0
基本リサイクルはコスト的にデメリットしかない
一部ではやってますよアピールをしつつ、大半は分別したのをわざわざまとめて燃やしたり他所に押し付けるのが現実
環境商法は理想アピールとかけ離れた現実が弱みになって反社が入り込みやすいジャンルになってるから関わると危険だよ
2023/04/09(日) 19:12:09.18ID:ONc2duBhM
>>863
お前の大好きなstrlenがそれだろw
支離滅裂過ぎてもはや自分が何言ってるか分かってなさそうw
お大事に…
2023/04/09(日) 19:15:10.49ID:ONc2duBhM
文字列とストリームの区別が付いてないアホに付き合わないといけないとはな…
そういう奴のコードはバグだらけだろうなw
2023/04/09(日) 19:22:58.30ID:ONc2duBhM
ま、Cの文字列はバグり易いのは間違いないがな
特にmmapを使うと悲劇が起こりやすい
なのでテキストファイルの読み込みには、LoadTextFileの様な明確な名前を付けて専用に用意するのが常套手段
もちろんゼロ終端文字列を返す
2023/04/09(日) 19:27:24.15ID:8g05NYDAd
strlenとか使う馬鹿がいるのか
ラベル低すぎ
2023/04/09(日) 20:52:59.04ID:ONc2duBhM
Linux Kernelでも使われてるけど、ラベル低すぎとは知らなかったw
2023/04/09(日) 23:27:25.54ID:rzCgDpP30
strlen strcpy strcatのストラ三兄弟は使うな
普通はマクロ定義でスピードアップ
2023/04/10(月) 00:09:17.40ID:IbkX37li0
どんなマクロなんだい
2023/04/10(月) 05:24:42.66ID:hibmPNuj0
>>864
データサイズの話じゃなかったのかよ?
なんで配列のサイズかどうかになるんだ
2023/04/11(火) 00:17:24.82ID:KrSp3HQhd
>>883
なんかこの人おかしくないか?ラベル…?
>>884も変だけど…ストラ3兄弟って…ギャグか?w
最終的に関数名をちゃんとすればどうにかなるみたいだし
そんな話誰が信じるんだよw


>>886
859に言ってくれ
明らかな誤りが含まれていたので訂正した
2023/04/11(火) 02:28:47.80ID:MidqBNVpM
>>887
>>882に言えよ
2023/04/11(火) 06:49:02.21ID:dFL5vcfn0
>>887
訂正ってどこ? 具体的なレス番plz
2023/04/11(火) 07:47:26.88ID:lpXrKUt40
Cを捨ててCStringを使うC++へ行けってことだろ。
2023/04/11(火) 08:08:42.83ID:dFL5vcfn0
std::stringではなくCStringな変人きたな
2023/04/11(火) 08:55:39.31ID:ozkx3imqd
>>889
訂正は>>864だが>>859を読んですぐおかしいと思わなかったなら理解できないと思う
2023/04/11(火) 09:23:43.71ID:Q4R/j+cb0
>>859 の言ってるのは argv[argc] == NULL となる規定のことでしょ。
それ自体は正しいので訂正することも無い。
2023/04/11(火) 09:41:53.28ID:7OwUdYTT0
MFCに帰ろう
2023/04/11(火) 09:52:04.87ID:ozkx3imqd
>>893
文字列サイズの話をしているのに文字列配列の要素数の話で「サイズ」と言うのは不自然
859はargvについて誤解してると思う
2023/04/11(火) 15:56:45.30ID:dFL5vcfn0
>>895
残念ながら俺は文字列サイズとかいう造語の話はしてない
853曰く
> サイズわかってるのに終端つける意味がないわ
に対してあえて冗長な設計にする場合があると指摘したまで

>>864もそうだがどうもおまえさんサイズという語の意味を都合良く変動させているようだな
2023/04/11(火) 19:04:39.28ID:7OwUdYTT0
小生は文字列の長さを表すとき、strlenに習ってlengthという語を用いますん
2023/04/11(火) 19:20:48.37ID:1aMyTP0X0
文字列サイズなんて聞くと、配列要素数かと受け取ってしまう
2023/04/11(火) 19:50:55.63ID:ozkx3imqd
>>896
くだらない言い訳だ
文字列をロードしたサイズの話をしているのにコマンドラインの引数の個数の話にするのは不自然だと感じた

どうでもいいが文字列の終端までの長さをなんと呼ぶのかね
2023/04/11(火) 20:01:03.76ID:eL0kPSHK0
文字列長
文字の長さ
文字列の長さ
長さ
2023/04/11(火) 20:41:17.09ID:1aMyTP0X0
あと、文字数というのも入れてあげて
902デフォルトの名無しさん (ワッチョイ 02ad-Ay2p)
垢版 |
2023/04/12(水) 02:49:44.30ID:1sJZVfCp0
文字の長さ 3m
重さ 5kg
903デフォルトの名無しさん (ワッチョイ 02ad-Ay2p)
垢版 |
2023/04/12(水) 02:52:08.54ID:1sJZVfCp0
https://www.shinjuku-i-land.jp/assets/img/art/img_art-list_3.jpg
904デフォルトの名無しさん (ワッチョイ 02ad-Ay2p)
垢版 |
2023/04/12(水) 02:53:14.30ID:1sJZVfCp0
とても長くて太くて大きくて重そう
2023/04/12(水) 06:48:43.44ID:NgkNjGWQ0
>>899
それってあなたの感想ですよね
2023/04/12(水) 08:59:58.23ID:HQz+hF5G0
もうそれ秋田
907デフォルトの名無しさん (アウアウウー Sa05-9cWA)
垢版 |
2023/04/12(水) 11:42:14.25ID:+8HledSTa
0終端の良い所は可変長でどんなに長い文字列でもメモリが許す限り文字列を続けられる
もちろんデメリットは長さがすぐに判らない
逆に長さを持って struct {size_t len; char hoge[0]} Str; みたいな構成にするのもありだが
例えば Str *s = (Str *)malloc(len + sizeof(Str)); で確保して使う
後者のデメリットは size_t len の最大値までしか文字を格納出来ないこと
struct {short len; char hoge[0]} Str; みたいな実装もたまに観るからあなどれない
908デフォルトの名無しさん (アウアウウー Sa05-9cWA)
垢版 |
2023/04/12(水) 11:51:49.32ID:+8HledSTa
>>838
C++だと
vector の size() が size_t を還して
for(int i = 0; i < v.size(); ++i)
って描くと警告出るので
for(int i = 0; i < (int)v.size(); ++i)
にするとさらに警告出て鬱陶しいから
for(size_t i = 0; i < v.size(); ++i)
にするアホな例はよく観るってどっかのサイトに描いてあった
2023/04/12(水) 12:32:16.29ID:81IdaWl4M
C++ならイテレーター使えよ…
2023/04/12(水) 12:42:43.03ID:Q+QfGKpq0
vectorはランダムアクセスがウリだからイテレータ使わないこともよくあるね
2023/04/12(水) 13:01:34.03ID:N6w93SJGd
>>899
「文字列の終端までの長さ」ですが何か?
2023/04/12(水) 13:23:26.32ID:3jp3M04i0
(文字列の)文字数
2023/04/12(水) 13:42:24.69ID:dS1BcMQZ0
>>909
コードによってはインデックスでアクセスしたいこともあるから...
2023/04/12(水) 13:57:15.96ID:gJHWYvs7a
「アホな例」と書く意味が分からん
ちゃん型を使うべきだろ
2023/04/12(水) 13:57:40.50ID:gJHWYvs7a
ちゃんと型を使うべきだろ
2023/04/12(水) 13:59:47.55ID:gJHWYvs7a
そもそも「アホな例」じゃないとLP64でおかしなことになるよね
2023/04/12(水) 14:05:32.31ID:NgkNjGWQ0
struct X;
void func(struct X[]); //error

struct Y { int a; };
void func(struct Y[]); //ok

不完全型の場合、仮引数の[]はポインタにならない??
ちな、gccではエラー、clでは通る
918デフォルトの名無しさん (スップ Sd82-qF+M)
垢版 |
2023/04/12(水) 14:17:34.62ID:mayblUPzd
C++だと通ったね
gcc/clangのCだとX[]は許されないけどX*は許される

関数宣言より前にX型の定義がないとコンパイルが通らなかった
2023/04/12(水) 14:55:48.73ID:NgkNjGWQ0
どっちが正しいのかね
2023/04/12(水) 15:04:32.82ID:219MxBT/0
>>907
馬鹿な私に少しだけアドバイスを

それってsize_tのビット幅 < システム(OS)のビット幅と言う条件下での話なんでしょうか?
size_tがシステム(OS)のビット幅と同じならメモリで管理できるものは必然的にsize_tでも表現できると思うのですが
メモリ上で管理できているゼロ終端文字列をsize_tで表現できない場合ってあるんですか?
まあ一部の組み込みとかならあるかも知れませんが……
けどそういう環境の場合strlenなどのsize_tで返す場合でも表現できなくなるわけで、結局size_tに依存することになってどっちでも同じじゃないかと思うんですがどうなんでしょうか?
2023/04/12(水) 15:07:46.44ID:gccG0Jwg0
>>919
規格は知らんけど配列とポインタは違うんだからエラーで弾くのは正論だと思うけどね
通す処理系はその後の整合性をユーザーが担保する前提の思想なんでしょ
2023/04/12(水) 15:09:16.06ID:NgkNjGWQ0
>>921
仮引数に限っては*と[]は同じはず
不完全型だけ例外というのは気持ち悪い
2023/04/12(水) 15:15:29.08ID:219MxBT/0
>>908
もう一つ無知なる私にアドバイスをお願いします

size_t len までは文字を格納出来ると>>907から読み取りましたが
sizeof(size_t)==sizeof(int) の場合
vector v のサイズがINT_MAX以上だった場合、 i < (int)v.size() ではプログラマーが予期しない動作になりませんか?
2023/04/12(水) 15:27:40.89ID:7SV2gFKB0
size_t が符号なし整数型
int が符号付き整数型
2023/04/12(水) 15:34:06.47ID:gccG0Jwg0
>>922
はずだかなんだか知らねーけど、そんなことはどうでも良くてサイズの分からないオブジェクトの配列は作れんって言ってんだよ
操作上の違いはともかく配列として宣言したんなら関数内では配列として扱うってことを示唆してるわけだろ
仮にそのfuncだかって名前の関数の中にX[3]とかX+5って書かれたらどうやってアドレス出すんだってことよ
動作に違いがあるってことは規格がそれを許してる箇所なんだろうけど弾いてる処理系はそういう考えなんだろう
2023/04/12(水) 15:53:08.00ID:NgkNjGWQ0
>>925
仮引数はその場に配列を作り出したりはしないという基本が合意できない以上
これ以上おまえさんと話すのは無駄だな
2023/04/12(水) 15:53:49.38ID:NgkNjGWQ0
> 規格は知らんけど

この時点で気付くべきだった
2023/04/12(水) 15:55:21.15ID:1mphmeyq0
Cはアセンブラの代用言語。
2023/04/12(水) 16:36:09.61ID:bThMVtxz0
>>917
規格的には (関数定義の一部ではない) 宣言の段階なら不完全型であることを許しているように読める。
C99 だと 6.7.5.3 の第 12 段落に書かれている。

> If the function declarator is not part of a definition of that function,
> parameters may have incomplete type and may use the [*] notation in their sequences of
> declarator specifiers to specify variable length array types.

> 関数宣言子が関数定義の一部ではない場合,仮引数の型は不完全型でもよく,
> また宣言指定子列に [*] を使って可変長配列型を指定してもよい。

ちなみに GCC だと以下のようなものもエラーだが MSVC だと通る。

struct X;
typedef struct X Y[10];
2023/04/12(水) 16:59:41.80ID:NgkNjGWQ0
>>929
㌧X

安心した
2023/04/12(水) 23:57:31.43ID:ysjFLZAD0
>>917
Cではエラーになるのが規格準拠の動作。
ただし宣言の形式を変えるだけで通る理不尽な制約でありC++では許されるように改められている。
https://stackoverflow.com/questions/50503501/an-error-about-c-struct-array-in-formal-parameter
2023/04/13(木) 00:37:34.59ID:y5cvZaYN0
>>931
そこでも言及されてるけど
型調整 (配列がポインタに読み替えられる) が優先されるか配列宣言子としての解釈が優先されるかって曖昧じゃない?
読み替えより先に配列宣言子として解釈すべきと確信できるような記述ってある?
常識的には曖昧なら厳しい側の制約で解釈すべきだわなーとは思うけど陽には書かれてないように思う。
933デフォルトの名無しさん (ワッチョイ 02ad-Ay2p)
垢版 |
2023/04/13(木) 02:04:44.32ID:o3x890Fi0
>>907
昔々の PASCAL はそんな感じだったな。先頭1バイトに文字列のバイト数が入っていてその後に文字列がある。
当然それだと255バイトまでしか入らないのでもっと長い文字列を扱いたい時に苦しむことになる。
まあでも 8 bit とか 16 bit CPU のマイコンやパソコンにそういう高い要求は最初の頃はあまりなかったのでなんとかなっていた。
2023/04/13(木) 02:23:46.11ID:jklAk1E50
>>932
プログラム内に制約 (constraint) 違反がある状態なので、前後関係がどっちだろうと
少なくとも制約違反について診断メッセージを出力しないと規格準拠とは言えない。
> A conforming implementation shall produce at least one diagnostic message ...
> ... if a preprocessing translation unit or translation unit contains a violation
> of any syntax rule or constraint, ...

「通る」が警告も出ずプログラム実行までできる状態と解釈してたけど、
エラーにはならないものの警告が出ているならそれも規格準拠とは言えそう。
2023/04/13(木) 08:28:10.40ID:zEEI4t8g0
https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_047.html

仮引数の[]は、一旦は配列として受理し、その後でポインタに調整されるってことか
2023/04/13(木) 08:28:50.25ID:zEEI4t8g0
VCで通るのは、VLAがないからってこと?
2023/04/13(木) 23:35:55.91ID:DvwX4ZoKd
間違ってる
2023/04/13(木) 23:48:57.98ID:wWKtbXV/0
マスク無死でラーメン食いたい奴は、まず住所を書いて見てよ
その場所にノーマスクで食えるラーメン屋作らないといけないんだろ?
政府が作るのかな?
2023/04/13(木) 23:55:11.99ID:wWKtbXV/0
ごめん、誤爆
940デフォルトの名無しさん (ワッチョイ 02ad-Ay2p)
垢版 |
2023/04/13(木) 23:55:19.80ID:o3x890Fi0
はあ
2023/04/14(金) 01:01:11.22ID:E99e4anP0
そのキモいレスをどこで発表するつもりだったのか
2023/04/15(土) 19:42:43.70ID:JbgATxBi0
最近のLANカードで他力給電のものばかりのようですね、クロスケーブルでピアツーピアできるPCIe のカードって存在しないものですかね…
結局 hub を使っちまった、もったいないなあ
2023/04/16(日) 20:11:08.29ID:4UlFU6Wr0
chatGPTって面白いね…もうgoogle はいらないや
2023/04/16(日) 21:13:37.76ID:Ot5nnykg0
C スレで言うことか?
2023/04/16(日) 21:23:02.75ID:H2kHWHvu0
人工知能とはなんたるや、これがわかってないやつ多いのは仕方ないけど
ム板でこれは由々しきことだな
2023/04/16(日) 21:48:52.61ID:zHRI9OsR0
煽ってるだけやろ
2023/04/16(日) 22:57:10.75ID:4UlFU6Wr0
スレ終盤恒例のウダウダ話ですよ、たまにはいいじゃあ、ありませんか!
2023/04/16(日) 23:00:41.18ID:zHRI9OsR0
chatGPT関連のスレは6本も立ってるので、好きな場所でやってください

(盛り上がったら誘導してくれてもいいです)
2023/04/17(月) 02:44:28.44ID:PilU+QdE0
数値の各桁を足す関数を考えました
100点中何点?
(引数nが2023なら2+0+2+3で7を返す)

int chg(int n)
{
int a;
char s[32], tmp[2];

memset(s, 0, sizeof(s));
sprintf(s, "%d", n);

a = 0;
for(int i=0; i<strlen(s); i++){
memset(tmp, 0, sizeof(tmp));
tmp[0] = s[i];
a += atoi(tmp);
}
return a;
}
2023/04/17(月) 02:47:29.33ID:dBG5z/eM0
数値計算なのにmemsetを使ってる時点で0点
2023/04/17(月) 03:00:26.88ID:2drVnpNQ0
int chg(int n)
{
int a;
for(a=0;0<n;n/=10) a+=n%10;
return a;
}
952デフォルトの名無しさん (ワッチョイ 5fad-sFbk)
垢版 |
2023/04/17(月) 03:01:25.01ID:g2jYQi3l0
>>949
それわざわざ文字列にしてからやる必要ないよね。
10で割った余りを足して10で割るのを繰り返せば良いだけだし。
仮に(宿題や問題の都合で)どうしても文字列に直してやらなければならないのだとしても文字列として使う char 配列の
初期化で全部0で埋めるのは処理の無駄だしそんな事をするのはC言語における文字列の扱いについてよく分かって
いないことの現れだと思う。
2023/04/17(月) 03:41:54.19ID:fyienZF80
30点
みんなもっと優しくしてあげなよ。ゴキブリだって生きてるんだぞ
2023/04/17(月) 06:01:50.96ID:WvGymo4J0
あかん!
マイナスの場合はどうするねん
2023/04/17(月) 06:38:08.16ID:fyienZF80
>>951
nが負の場合は?
2023/04/17(月) 08:14:09.28ID:TjOyN7pL0
if (n < 0) n = -n;
957デフォルトの名無しさん (ササクッテロロ Spfb-tEYI)
垢版 |
2023/04/17(月) 09:53:06.18ID:MNSyV7UUp
文字列で与えなきゃデカい数字が扱えないやん
2023/04/17(月) 10:26:43.64ID:jOIYUxZw0
int chg(int n)
{
int a=0,b;
while(n) {
b=n/10;
a+=n-b*10;
n=b;
}
2023/04/17(月) 10:57:06.60ID:TjOyN7pL0
>>957
int で受けて 文字列化してるからちょっと
最初から文字列で受けてるなら一考の余地はあるかもね
2023/04/17(月) 10:57:27.95ID:I3IibvEZ0
957涙目だなw
2023/04/17(月) 12:21:07.80ID:sfjAbensM
プログラミングには最低限の数学的な素養が必要な事が証明された…
科学技術計算を扱わないとしても、計算論とか数学とは切っても切れない関係にある
2023/04/17(月) 12:50:21.20ID:9nZn/y+b0
銀行の勘定系でも四則演算の知識は必要だし
2023/04/17(月) 12:56:30.89ID:TjOyN7pL0
文字列を受ける場合
int chg(const char* s)
{
 int ret = 0;
 char tmp[2] = { 0 };
 while (*s && !isdigit(*s)) s++; /*数字じゃないところは飛ばす */
 if (*s) {
  while (*s && isdigit(*s)) { /* 数字が連続している間だけ */
   tmp[0] = *s; ret += atoi(tmp);
   s++;
  }
 }
 return ret;
}

環境依存で
 isdigit(*s) を ('0'<=*s && *s <='9') に
 tmp[0] = *s; ret += atoi(tmp); を ret += s[0] - '0'; に
置き換えることもできるかもしれない
2023/04/17(月) 13:07:40.29ID:FYaudfJt0
>>963
> 環境依存で

数字に対応する文字コードが連続で昇順に並んでいることは
言語仕様で保証されている。
2023/04/17(月) 13:15:24.09ID:TjOyN7pL0
>>964
さんきゅう 数字は保障されてたか
2023/04/17(月) 13:21:38.21ID:TjOyN7pL0
次の while (*s && isdigit(*s)) と意図の一部は重なるし if (*s) はいらんかったね
2023/04/17(月) 15:25:15.58ID:DnqfCfHpd
今のモダンな言語からしたら一見して下らないやり取りだけど
これがC言語なんよね・・・
2023/04/17(月) 15:50:16.10ID:jOIYUxZw0
ハードとアプリのあいだに多くの計算を必要とするソフトの層があるからね
OSやらで全部カバーするのは無理だからCは死なない
2023/04/17(月) 15:51:50.57ID:kmcXsww3a
>>964
漢数字も並んでたら嬉しかったと思いませんか
2023/04/17(月) 16:54:39.89ID:FYaudfJt0
>>969
現実には JIS は読みの順序で Unicode は部首の画数の順序が原則。
漢数字を例外にしたらそれはそれで不格好だし嬉しくない人もいるだろう。

まあ Unicode は後から追加した分だのなんだのでそんなに綺麗に並んでいるわけでもないので
どうせぐちゃぐちゃなら数字くらいは並べても良かったんちゃうかなというのは気持ちはわかる。
2023/04/17(月) 17:19:21.10ID:tJ5lxHq2M
一二三四…Why Japanese people!
2023/04/17(月) 19:13:46.43ID:92m0URlPd
>>967
くくく、、愚かな、、
2023/04/17(月) 19:21:15.62ID:92m0URlPd
>>954
アンサインドイントで受けたれや!
2023/04/17(月) 20:38:59.46ID:RKcegE7fa
壱<弐<参<死<伍<碌<質<八<苦<拾<百<銭<萬
ですね判ります
2023/04/18(火) 08:26:27.42ID:aNj1uNjV0
>>971
英語の綴りの不規則さも大概やないけ! と突っ込んで完成するネタだと個人的には思ってる。
2023/04/18(火) 14:58:32.85ID:aePy3OZ8d
未初期化の自動変数には「不定値」が割り当てられる、と調べるたり自分が学んでいる本でも書いていますが、自分のコンパイラは常に「0」になっているようです 
なぜでしょうか? 
ちなみにgcc-10です gcc-11だと「不定値」になります
977はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f32-iKPJ)
垢版 |
2023/04/18(火) 15:29:21.41ID:rjFDtS/R0
不定の値とは「未規定の値又はトラップ表現」と規定されてる。
常に 0 であってもこの規定に反しないよ。
978デフォルトの名無しさん (スフッ Sd7f-7nfa)
垢版 |
2023/04/18(火) 16:27:26.25ID:U9oAz8h1d
>>977 ありがとうございます
ちなみに「トラップ表現」とはなんでしょうか?
979デフォルトの名無しさん (スフッ Sd7f-foDO)
垢版 |
2023/04/18(火) 16:57:48.54ID:U9oAz8h1d
976です chatgptで調べました
C言語の仕様では、自動変数を初期化しない場合、その値は不定とされています。これは、コンパイラがメモリ上で変数を割り当てる際に、その領域が以前に使用されていたデータを含んでいる可能性があるためです。

しかしながら、一部のコンパイラでは、自動変数を0で初期化することがあります。これは、セキュリティ上の理由から、またはコードの可読性を向上させるために行われることがあります。

ただし、コンパイラが自動変数を0で初期化することが保証されているわけではありません。したがって、プログラマは自動変数を使用する前に必ず初期化するように注意する必要があります。
980はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f32-iKPJ)
垢版 |
2023/04/18(火) 17:04:00.61ID:rjFDtS/R0
>>978
トラップ表現は「オブジェクト型の値を表現しないオブジェクト表現」ということになってる。
その型としてあり得ないビットパターンってこと。
オブジェクトとして格納されたトラップ表現を文字型ではない左辺値式として読みだした場合の結果は未定義となる。
副作用としてそのような表現が生成される場合も未定義。

C の仕様でいう未定義というのは「何が起きても (たとえば暴走しても) 良い」という意味なので実質的に禁止だと思ってもいいよ。

とはいえ整数型でトラップ表現があるアーキテクチャを私は見たことが無いけどな。
981デフォルトの名無しさん (スプッッ Sdff-ZLJR)
垢版 |
2023/04/18(火) 18:20:39.02ID:Qric2C4Yd
トラップ表現を調べてみたけどほぼほぼ処理系定義絡みなのね

signed int16の0x8000は-32768かもしれないし、トラップ表現かもしれない
1の補数系でsigned int16の0xffffは0かもしれないし、トラップ表現かもしれない
int32* の4バイト境界に合ってないポインタ(int* p=0x0001)は、強制的に4バイト境界に直されるかもしれないし、トラップ表現かもしれない
982デフォルトの名無しさん (スフッ Sd7f-foDO)
垢版 |
2023/04/18(火) 19:26:15.76ID:U9oAz8h1d
>>980 ありがとうございます 勉強になりました
2023/04/19(水) 02:26:26.48ID:Nl7uhZkpM
自分のコンパイラってのを明らかにしてくれ
どうしても言えないってならしょうがないが…
984デフォルトの名無しさん (ワッチョイ 6746-KCd8)
垢版 |
2023/04/19(水) 02:43:50.96ID:MHEst9B30
>>983
> ちなみにgcc-10です
と書かれている。
2023/04/19(水) 06:44:34.46ID:Dcht9s5K0
>>983
バーカ(笑)
986デフォルトの名無しさん (ワッチョイ 2763-7nfa)
垢版 |
2023/04/19(水) 06:59:06.58ID:twYHK80b0
983息してるか?www
2023/04/19(水) 07:47:07.07ID:BpfZGgoRd
かてなおったかな
2023/04/19(水) 10:03:53.18ID:rE0e6VM+0
自作コンパイラの話する?
2023/04/19(水) 10:43:43.68ID:m2bdQTksd
いいぜ?お前からな?
2023/04/19(水) 11:58:53.24ID:rE0e6VM+0
ぼくはLex&YACCでPL/0を作って満足しました。おわり
2023/04/19(水) 13:12:38.94ID:IP5wt1Fbd
夜中に路地から飛び出て来たら俺もびびる
でも >>991 では語れんわ!
2023/04/19(水) 20:04:36.21ID:3t8AIZsr0
C言語のソースコードを検査して処理系依存や未定義動作等の環境によって
結果が変わりうる可能性のある部分を見つけてくれるツールってどんなのがありますか?
コードエディタはvscodeなのでこれと連携できるとなおよいです
2023/04/20(木) 08:07:01.48ID:B156zYN00
lintでググれ
2023/04/20(木) 08:23:22.20ID:3as2C0030
BingAIに聞け
995デフォルトの名無しさん (アウアウウー Sacb-JRah)
垢版 |
2023/04/20(木) 09:13:39.09ID:EuuMXrfTa
とにかくggr
2023/04/20(木) 16:00:12.38ID:ZTK8T1RQd
チャットジーピーテー
2023/04/20(木) 23:37:04.36ID:BN6x5ZIFM
さすがに検査対象としてソースコードそのものをchatGPTに丸投げするのはマズイ
個人情報や機密情報をそのまま入力するのは止めるように開発元のopenAIが忠告してたはず
2023/04/21(金) 06:41:53.06ID:NmcLOv2EM
>>993
よさそう。サンキュー
2023/04/21(金) 13:41:26.17ID:cgpIrgwq0
次スレどこ?
2023/04/21(金) 14:06:43.23ID:rqj2HSDF0
次スレ

https://mevius.5ch.net/test/read.cgi/tech/1682053520/
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 114日 3時間 26分 13秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況