C言語なら俺に聞け 160
レス数が1000を超えています。これ以上書き込みはできません。
int main(int a, char **p)
{
return main(a, b);
} const char *f() {return "黄金分割の無限連分数";} void main() {printf("黄金分割"); f();}
void f() {printf("の連分数"); f();} 2.c:3:16: error: 'b' undeclared (first use in this function)
3 | return main(a, b);
| ^
2.c:3:16: note: each undeclared identifier is reported only once for each function it appears in qsort(P, q, sizeof(int*), (int (*)(const void*, const void*)) [](const void* a, const void* b) -> int {
int* A = *(int**) a;
int* B = *(int**) b;
return A[0] - B[0];
});
chatGPTがこういうqsort関数の呼び出しを書いてくれる
ぜひC27くらいで導入してほしい 比較関数はそれでいいの? 差がINT_MAX超えると逆に並ぶ Cのコードだけど
C言語スレにふさわしい話題ではないな 再起的に性器分布から確率密度値をランダムにサンプリングする関数がほしいニダ
直前にコールされたときの値は記憶してね💛 ・ 性器分布と聞いて思い浮かんだイメージ
海底にチンアナゴが沢山居て出たり引っ込んだりしている分布 正規分布の確率密度なら普通に数式通りに計算すればいいのでは?
むしろ再帰をどう適用するつもりなのか サイコロ1個の目の数の分布なら(離散値の)一様分布
複数個の数の和の分布なら二項分布 そうであれば確率密度値ではなく確率分布とか確率密度分布とか言うだろう 確率密度値をランダムにサンプリングする関数
ってのが意味不明すぎて困る 情報源なら分かるがエントロピー源って何だ?
エントロピーって沸いたり消えたりするものではないだろ 許してやってくれ
彼はそれっぽい言葉を使ってそれっぽく見せることしかできないんだ 小馬鹿にしたつもりになっているようだが
無知すぎるにも程がある
せめてググってから来い -∞ to +∞ の一様乱数を x に与えて 正規分布の確率密度関数の値 F(x) を戻せばいいのか?
ただ、ここに再帰の入り込む余地があるかというと・・・? 一週間後にまた来てください
本当の乱数をご馳走しますよ Core-i7にアメリシウムなんか使っとらんだろw エントロピーって乱雑さのことだろ
温度は熱さ
エントロピー源は「温度源」と同じ分類のワードだな
なにそれ せめてググってから来いと言ってるだろ
ドヤ顔で無自覚に恥を晒してんじゃねえ
アホをニヤニヤ眺めるのは基本的に楽しいが
おまえはその域にさえ達していない
・・・あ、もしかしてアドレスがハッシュだとか熱弁してたやつか?w ググったけど特にメジャーではなさそうだったからさぁ
そもそも日本語としておかしいからそりゃそうだわな ただし、おまえは明白にスレ違い
ここにいちゃいけないやつだ 乱雑さという意味だとまでわかっててなんで乱数に関係ないと思うのか 温度源ってワードでも温度に関係あることはわかるわな
そんなワードの意味は知らんがw あぁ、そもそもエントロピーという情報理論の用語を知らないって思われてたのか
ずれまくってんなぁ 温度なら熱源
エントロピーなら情報源
温度源やエントロピー源などという用語を使うから意味がおかしくなるんだよ 今さらググって現実を知っても
もう引っ込みつかねえんだろ
掠りもしてねえ戯れ言を垂れ流すのやめろ
迷惑だ プログラマなら用語の定義ぐらい意識しろ
適当なオレオレ用語でゴリ押しするなよ ここはプログラム技術板だ
物理の話と勘違いしたバカが
いつまでも粘着してんな エントロピーは物理学の熱力学や統計力学にもあるが今の話題は情報工学や計算機科学の話だろ 人力のキーボードタイプ操作やマウス操作を種にして
自然の熱雑音をサンプリングして
・・・ 弄られたくなきゃ言葉の定義くらい考えてからレスしな?w 無知晒して何も言い返せないバカは他人のことよりまず自分の心配をしな ここをどこだと思っている
プログラム技術ねえやつは底辺の二番底だ 変に反応し続ける割にはGoogleに責任を押し付けるばかりでここまで情報量ゼロだもんな
温度源みたいな謎ワードと同類ではないということを示すロジックがあるなら示して頂こうか 本当の乱数とエントロピーで何の話かわからなかった白痴に情報なんかいらねえだろ
豚に真珠ってやつだ このように反応する割にはなんの弁明もなくレッテル張るだけなんです。
これをまさしく「悪あがき」というのでしょう。 乱数とエントロピーの関係がわからんやつを
プログラム技術板でバカと言うことの何が悪あがきなんだか
バカで済んでることに感謝しろや 誤解のフリをして突かれている部分を誤魔化していますがそのような安易な策が通じると思っているのでしょうかね
ま、思っているからこそ実践しているのでしょう。 エントロピーを物理の話と誤解したバカが何を誤魔化したいの?
自らの精神分析を俺に聞かされても困るんだが いえいえ、そのようなことはございませんよ
どの辺でそのように判断されたのか是非お聞かせください。
もちもん、特になければ今まで通り一方通行でお話しを続けられても構いません まあ匿名掲示板だからね
シラを切れば全てをリセットできる
今までの引っ込み付かなくなったあんたがいなくなって
マトモな別人になってくれるならこっちもありがたい まあ熱雑音も実際には色つきであって
全てのバンドを網羅する白色ではないわけだが
目的用途によってはそれでも十分に乱れてる扱い出来ると このように度々挙がっております指摘についての弁明を避け続ける一方で根拠に乏しい我々側の非についてはひたすら高々と掲げる様子を平仮名5文字でたしか何と言うのでしたっけ。。。 熱雑音をどうやってプログラムに使うか知らんやつのお花畑妄想w >シラを切れば全てをリセットできる
なるほど
まさにそれを自身で実践していると言うわけだ
表明助かる 突然クオークとか言い出すあたりもう末期でしょ
もっとちゃんとシラを切り通さないと 熱雑音と言い出したどの口で言うのか
まだ乱数とエントロピーの違いがわからんやつが
乱数とクオークの違いなんかわかるわけねえだろバーカw で、まだやんの?
豚に真珠つーたろ
おまえにくれてやるのは罵声だけだぞ
大義名分のある罵声だ
プログラム技術板から出て行け 「熱雑音」でスレ内検索したら>>64が出てきた
おい、おまえなんか言われてんぞ この乱文ぷりを見るに例のレスも同じように何も考えずに書かれたのでしょうねぇ
そしてその雑さ原因の指摘に腹を立てて喚き散らかすと
もはや救いようがありません。 エントロピー源があるならエントロピーシンクもあるのかね この手の論争は暴言吐いたやつほど負けに近づくわな
自分の意見を補強できないからその手段に行き着くわけで 無知すぎるやつが自分た人様にバカと言えるかどうかの自信さえない構図
場違いとわかっってんならさっさと失せろ 情報乞食としての収穫も絶望的なのに
いつまで縋りついてんだよキモすぎ産廃が >>69
情報量ゼロだもんな
情報量ゼロだもんな
情報量ゼロだもんな 本当の乱数なんて要らん
要は直近の乱数が予測困難であれば良いわけで、周期が長ければ予測が困難だ
使い方が間違ってて短周期になってしまうというセキュリティホールは見たことがある 某アンチウイルスソフトが乱数エンジンのシードにtime()を使ってて
ブルートフォース攻撃に脆いのを指摘されてたね >>95
熱力学と違って情報理論では1を超えることは無い すまん
情報量が超えることは無いがエントロピーならあり得るわ なーんだ待ってたのにまだ出来ないのー? >>15
あくしろよ
正規分布からランダムにサンプリングするだけでしょ?
再帰的と書いたのはコード量を抑えたい、と言う理由なのよー
ボックスミューラーは使わないよね 共用体を使ってるコードを見たことないんだけど具体的に何に使えてどう使うの? const char *f() {f(); return "再起的に性器分布から確率密度値を...してね";} >>103
古くはMS-DOSシステムコールを呼び出すときに利用
あとは、XEventが有名 逆に真の乱数をサンプリングし、大数の法則を期待して正規分布を得てみたい
とふと思いました 共用体はビットレベルでフォーマットが決まってる時に使う 共用体で定義すればキャストを使った汚いコードを書かなくて済む
しかし共用体も今日ではあまりエレガントとも言えないのでは 人間が入力するときに
コントロールコードとかも拾いたい時があるからなあ
文字列だけではうまくいかない 組込み用途ではSFRのアドレス番地に割り当てた変数に対して
char型と8bitのビットフィールド構造体の共用体
short型とchar型2要素の配列と16bitのビットフィールド構造体の共用体
などがよく使われる 自分のところのプロジェクトでは構造体でキャストする式にマクロで名前をつけてるな 昔のcobolのコードが生きていて
メモリを節約するために領域を再利用している
可能性はあるな
書き直した方がましだが >正規分布からランダムにサンプリングするだけでしょ?
>ボックスミューラーは使わないよね
なんかおかしくない?
前者は正規分布関数の値をランダムに抽出する 値域は 0 ~0.3989
後者は分布が正規分布となる乱数 値域は -∞ ~ ∞ (実用的には -4 ~ 4) 標準正規分布の確率密度関数の値なら>>22の数式に確率変数の値を与えれば得られる
何の意味があるのかは知らん
もし積分値を得たいならランダムではなくて累積でないと意味ないぞ >>118
話題のdiffusion model のコードを書いてるの 8bit時代にBASICのRND関数をアセンブラから呼び出す方法知らなくて、
ROM上のバイナリーデータから乱数作るルーチン組んだの思い出した。
(ROMから2バイトxn個のデータとって前回出力した値に足したりXORしたりと)
16bit DOS環境になっても似たようなの作ったなぁ(ROMの代わりに乱数表?作った)。 やったことないけど>>122見る限りりそんなに偏らないんじゃないかな
基本的にやりくちとしては暗号分野の鍵導出処理と似たようなことをしてるんだから 値の範囲を調整するのに mod とると周期性が現れたり偏ったりするねんな >>122
リフレッシュカウンタから乱数を作るのがお約束ですよ、8 bit の時代はね >>127
そういうCPUやBASICROMに依存する方法は最新機種では動作が変わったり予測できないので商業レベルではやらなかった
かわりに線形合同などのアルゴリズムを使った
アーケードのプレイデモではジョイスティックとボタンの記録だけ取って再生してメモリを節約してたので
毎回同じ乱数パターン(敵の移動や弾発射)が獲得できないと困るので >>126
とはいえ、0~10までの乱数取得するのに%使わずにどうしろと…
質の良い疑似乱数使えば問題無い 疑似乱数にはたいてい周期性が現れるもの
とくに下の桁に現れやすいので
上の桁を取ればいい(modではなく目的の桁/乱数の最大桁をかける) >127
再現性のある乱数が欲しいって場合も微レ存。 >>129
乱数源自体は良質なものだという前提で、
0~10 が欲しいときに単に %11 にすると小さい値のほうが少し出現率が高くなる。
たとえば乱数源がバイト単位だとすると、
255 以下で最大の 11 の倍数 (253) を超えた分 (254~255) が出現率を偏らせる原因。
だからそのような値が出たときに捨てて次の値を使用することにした上で %11 すればいい。
C++ の std::uniform_int_distribution などはだいたいそういう実装になってる。 アセンブラで
MOV AL,8bit 乱数
MOV BL,欲しい整数乱数最大値+1
MUL BL
;AHに0からBL-1までの乱数が入る
ってなことやってたような気がする。
計算上最大値の出現率が低いみたい。
16bitに拡張すれば多少改善。 >>128
そうですかね…
案外 LD A, R とかやってた気がするなあ…気がするだけですけどね >>131
8 bit の時代に、ですか?
結構念入りなアセンブラプログラムですねえ、めんどくさくって死にそう ファミコン、スーパーファミコン時代の有名ソフトの乱数生成の仕組みが今ではかなり明らかになってるが、
ドラクエとかファイナルファンタジーとかでも思ったより場当たり的な雑な仕組みで驚く。
こういう用途だと多少の性質の悪さもそれはそれで味になるということもあるんだろう。
シミュレーションとか暗号とかに関わるものだと理論的な裏付けがないと恐ろしいが…… >>130
いや、だから長周期な乱数が有るんだよ
間違いなくオマエが生きてる内に一週しないよ
下位バイトだって当然だ
周期してると思ったら死ぬまで見てれば周期してないのが分かるよ 1 2 2 と出て、2が偏ってと言う奴はいない
あまりにも範囲が小さいと、偏ってるかとか周期が有るかは長く見ないと分からん >>137
周期の話じゃないよ 乱数発生器の下位ビットはランダムじゃないことがあるって話だよ
全部同じ値だったりrand()%2で0と1が交互に順番に出てくるだけだったりするから上位ビット使おうってこと
自前で乱数を作る際にmodを使わないなんてのはC言語のFAQレベルの常識の話だからちょっとネットでもあさって勉強すればすぐ身につくよ
それ以前に良い発生器を使えばいいっていうのはその通りだね >>140
オマエが無知なの分かったよ
下位ビットが規則的になるってのは何も考えてない線形合同法だけの性質だ
msvcrtのrandは線形合同法で求めた32bitの内上位16bitを下位にシフトしてるから、そういう性質はない
他の長周期な乱数はなにもしなくても当然そんな性質はない ちなみにLinux(glibc)で% 10で試しても、偶数と奇数が交互に続くと言うことはなかった
カルドセプトで話題になった乱数のバグは、自前で線形合同法を実装したから起きた問題だ
普通にSDKの乱数を使ってたら起きなかっただろう >135
8/16bit時代のティルナノーグってゲームがシナリオコードっての使ってマップやシナリオを自動生成するらしく、
まぁ多分シナリオコードを再現性のある乱数のキーにしてるんだろうと。 >>141
結局下位のほうに周期性が現れやすいというのは肯定してるなw
ライブラリのを仕組みもわからずそのまま使うと問題が起きた時に危険なので自前で作ったほうが楽なこともあるんだよ
移植の問題もあるから 理想的な一様乱数であっても
頻度が一様から少し崩れる件については
>>132 でクリアになってる前提で
次に周期等の乱数の素性をああだこうだやってるのでいいんだよね? >>144
線形合同法そのままの下位ビットはランダム性が低いから上位16bitを使うという実装がされてる
これは%で下位ビット使っても何も問題無い
他の乱数(例えばメルセンヌツイスターとか)とかも下位ビット使っても何も問題無い
オマエは何が言いたいんだ?
乱数イコール素の線形合同法と決めつけてんのか? それより MT を利用したストリーム暗号の実装を探しているんですが、誰か良さげなのを書いていませんかね? 暗号の実装なら乱数源よりハッシュ関数の設計の方が重要だと思うけど メルセンヌツイスタは予測はしやすいので暗号に向かないって話じゃなかったっけ?
理論に詳しいわけじゃないけどストリーム暗号だと生成した乱数を
ほとんど順序通り使うことになるので素直に使うと弱い暗号になってまう。
それをカバーする案がどこかで出ているとかいう話なのかな? >>148-149
生成したMT乱数をハッシュに通して xor マスクに使えば今すぐにでも実装できまますが、馬鹿みたいにコストが高い
もっとお気楽に「暗号論的に安全な」マスクを生成する方法があるはず、と踏んでいます
>>149
生成された暗号列から、暗号生成系内の状態を推測する手段が
*****「ありうる」*****
というだけで、実際に MT において予測しやすいかどうかは、また別の問題かと メルセンヌツイスタは暗号論的乱数ではないからな
標準の範疇ではrandom_deviceと併用することで暗号論的乱数を作れる
# 俺はrandom_deviceにハメられたことがあって不信感持ってる ほぼ2の20000乗の長周期の乱数列の出現パターンに対して実用的な有限時間内に値の予測とかできるものなのか? 初期値を毎回同じにするとかマヌケな実装してなければ大丈夫だが
そういうの意外と多いからな >>152
ざっと調べてみた感じだと素朴なメルセンヌツイスタだと 624 個の連続する乱数列があれば内部状態を計算可能ということみたいだね。 擬似乱数は内部状態から数列を計算して外部出力しているのであって、出力された数列の結果だけから内部状態を計算して次回出力を予測するのは難しい
623もの内部変数をすべて確定させようとすれば途方も無いことになると思うけど もしかしてハッシュを復号できると思っている人がいるの? 現実で乱数で問題になるのは中周期
短周期は誰が見ててもすぐに欠点がわかる
中周期は人間が見てわかりづらいけど
へたをすると推測されうる
本当に重要な場面では線形合同法は使わないね >>157
ハッシュを復号?
何意味不明なことを言ってるんだよw 15は大した乱数を求めてないだろうし線形合同法で大丈夫でしょ 少なくともゲーム用途ではもう決定版とも言えるのがPCGだ
これは線形合同法を加工したものだ
大体の用途にはこれだけ知ってれば十分だろ 無理ありすぎ
157の発言内容で恥さらしたと思ったの
おまえだけだから ならハッシュ復号とか言う意味不明な用語を説明してみw 昔、ブラックエンジェルスって漫画で
「神父様」というワードで殺人スイッチ入るキャラいたけど
ここには「ハッシュ」で発狂するやつがいるな 発狂なんて表現は、自身が精神科の患者で無ければ口にしない言葉だ ハッシュ値からハッシュ関数への入力を求めることをハッシュを復号て言ってるのかと、思ったけど違うの? おおよそハッシュ関数って多対1の写像やから 与えられた入力を予測するのは難しいわね >>170
その意味かどうかもわからんしそもそも>>157が唐突に言い出した意図もわからん
まあ本人もよく理解してないだろうことはわかるけどw 暗号学的ハッシュ関数は暗号学的なだけで暗号ではないわな
まあ、ややこしいのはわかる 現在5chで使っているIDもハッシュ関数使っています
掲示板毎の番号、日付、IPアドレスの組み合わせ32ビットを
16ビットを求めてます
そのため、IDから元のIPアドレスは特定不可能とされてます 組み合わせた32ビットのキーから
16ビットのIDSを求めてます
でした
言葉足りなくて済みません 優しいお兄さんたちがやんわり教えてくれてるぞ
よーく聞いとけなハッシュ君 確認のための>>170とお前以外に復号なんて言ってるアホはいないけどなw いいからよく聞いとけ
おまえには金取ってもいいくらいの
特別サービスだぞ 上げ足取りの極みやね
伝わるとしても即興の造語は決して許されない >>173
ハッシュってできる限り衝突しないようにするけど多対一になるのか? そうじゃなければ意味無いでしょ
バイト表現をそのままキーにでもするつもりか 大きな空間から小さな空間へぐちゃっと潰す非単射だからhashと呼ばれるんだろうし、むしろ被らなければハッシュ法とは呼べない >>183
あくまでできるかぎり衝突しない努力をしているのであって
絶対に衝突しないことを保証しているわけではない以上
単射にはならんやろ この掲示板で使ってるIDは、実際に衝突している
32ビットのバリエーションがある対象を16ビットパターンに圧縮する
どの位衝突が発生するか、簡単に計算で出せるだろう >>183
元になる情報より小さい空間への写像なんだから当然に衝突することはありうるよ。
確率が均等になるようにデザインされるのが普通だが。
それとハッシュといっても均等でありさえすればよいハッシュテーブルなどに使うハッシュ関数と
意図的に衝突させるのが困難な暗号学的ハッシュ関数は事情が異なる。 I/Oのマシン語リストの1行チェックサムだったのが
CRCに進化し、更にCRC32になり・・・ >>189
それは誤り訂正符号であってハッシュじゃない、誤りが少なければ訂正できる、という性質のもの 誤り検出や訂正と予測や推論は違う
巡回符号では予測は出来ない >>190
いや、訂正なんて求めてなかった
あくまで検出さえできれば
点検なり再送なり対応はどうにでもできる
ちまちま訂正を試みて挙げ句不確実とか
バカバカしくて眼中になかった 元データと誤り訂正符号がセットになってる前提だものね
PGPでいう暗号ではなく署名 >>15 だが待ちくたびれたニダ
オラの欲しいのは乱数が性器分布してるものなの!
銀杏乱数ではありまへん
さあ、素晴らしいコードを見せてケレ const char *subarasiikoodo() {retrun "乱数が性器分布してるもの"/*"銀杏乱数"*/;} >>196
淫乱とか性器を見せろとかなんなんだね君はいい加減にしたまえ! 卑猥な言葉に反応する大人を見てはしゃいでいる子供って感じ プログラム技術板で猥談にしか参加できないやつpgr >>185
普通のハッシュが非単射なのはその通りだが、
完全ハッシュというものも一応ある。 セキュリティがどうでもいい時に
速度を要求されるとき パスワードなどを暗号化して保存する時ハッシュ値を保存する
他のパスワード値と重複することが無いように完全ハッシュとする
万一衝突すれば他人のパスワードが誤ってすり抜ける可能性が生じる んなアホな
完全ハッシュの説明はともかく、パスワードに関してはIDとペアで使うんだから他人のパスワードと被ろうがどうだろうが関係がない
そもそもソルト使うんだからuser1とuser2が同じパスワードを使ってもハッシュ値は別になる いや完全ハッシュの前提が崩れると違うパスワードが同じハッシュ値で衝突して区別できないので破綻する
ソルトは完全ハッシュを担保するための手段 https://en.wikipedia.org/wiki/Perfect_hash_function
> Disadvantages of perfect hash functions are that S needs to be known for the construction of the perfect hash function.
無理やろ MM7f-qqxOは衝突がないっていうのがどういうことなのかなんか勘違いしてるんだろう
そういうもんを用意したとして>>203のいう通り強度なんかめちゃくちゃ弱くなるんだからさ
いずれにしても破綻するとか言われたところで世の中は衝突ありのSHA-2使ってんだからもうちょい勉強しとけ >>206
ハッシュ値とハッシュテーブルを混同しててクソワロタw >>199
ちょっとした変換ミスだろ?
あるシードを与えてそこから連続的に乱数を大量に取得してそれらを並べてみたら、あら不思議 平均0分散1のヒストグラムができました、てなモノが欲しいだけなのに・・・ 正規分布乱数でググれば幾らでも出てくる
ちゃんと理解するのは容易じゃないがな >>204
説明としておかしい
他人のパスワードが誤ってじゃなくて
悪意ある他人が総当たり的に適当なパスワードを試して当たってしまう可能性が高くなるんだろ >>214
平文ならパスワードが違えばマッチすることはない
ハッシュだとパスワード違うのにハッシュ値が同じになる(ことが理論的にはあり得る)から違うパスワードでも通っちゃうって話だろ パスワード程度の小さなデータなら
原データよりもビット数が多いハッシュを使えば安全だろ 攻撃に非現実的な時間が必要ってだけであって可否を問うなら可能に決まってんだろうよ
ちょっと考えれば分かると思うんだが、できますかとか脳ミソ幾分欠損でもしてんのかね? スーパーハッカーならスパッと解けると思ったが、つまらないな >>216
ビット数が多くても偏りの多いハッシュ関数使ってたらダメってことすらわからんのか? パスワードは間違いが続くと、暫く時間たたないとログイン出来なくすればブルートフォースもほとんど不可能になる
なのでハカーは総当たりなんてせずに、何処かで漏れたIDとパスワードを違うサイトで試すだけだ >>222
ドコモ口座でリバースブルートフォースされまくっただろ
今更ハカーとか何言ってるんだかw 最近のサイトはメッセージで認証番号送ってくる方式が増えた >>223
リバースブルートフォースなんて大層な名前が付いてるけど、単なるブルートフォースだろ
凍結直前までチャレンジして、失敗したら次を狙うのと何も確率は変わらん 何回で凍結するのかはサイトによって違うのに凍結直前までとかスーパーハカーかよw >>221
あんたにはそう聞こえたのか
人の言葉をいちいち曲解する底意地の悪い耳してんな
人格欠陥者め ブルートフォースはパスワードの総当たり攻撃
リバースブルートフォースはIDの総当たり攻撃 >>228
指摘されて人格攻撃w
技術板に向いてないからよそに行った方がいいぞ おまえの勝手な仮定が前提だからな
こっちにゃ指摘に聞こえてねえんだよ
ストローマン攻撃なんて幼稚な誤謬をするやつが
どの口で技術板に向いているとかぬかすんだアホが 歪めてるんじゃなくて考慮不足を指摘されてるってことすら理解できてないのかw 勝手な仮定といわれていることも何のことかわからんようだな
やべーやつw >>217
そういう使い方だとハッシュの強度は無意味。
判定している箇所を書き換えるだけで通ってしまうから。 >>233
偏りの多いハッシュ関数の話だろ
そういう条件を考慮してないアホって言う指摘 >>235
だったら、こういう場合どうすればいいの?
教えて下さい。お願いします。 偏りの少ないハッシュ関数使えばいいだけだろ
知能ないの? ブルートフォースって一人だけ狙って、失敗したら他のアカウントを狙っちゃいけないのかよw むしろ同じパスワードに対してアカウントを次々に変え続けて総当たりで狙うのがリバースブルートフォース >>236
機能するために必要なデータ (プログラム) を暗号化してしまうとかいった方法が考えられる。
必要なデータを得るために正しい鍵が必要なら正しい鍵がないとどうしようもない。
そのへんの一連の技術は「耐タンパー」とか呼ばれてるからググってみて。
ライセンスで制約を付けるから技術的なロックは頑張らないと割り切るのもひとつの手だし、個人製作のシェアウェアはそんなもんだよ。 >>238
だからお前がそれもブルートフォースだと思うのは自由だけど人と会話する時はちゃんとリバースブルートフォースという用語を使わないとはあ?って言われるだけの話 >>237
知能ないと思いたければ
そう思っとけばいいじゃん >>243
うん、お前が誰かは知らんけどID:6KJkihSb0の知能は低いと思うよw >>241
じゃあ、一人に付きパスワードを固定せずに数回試す事を全アカウントに行うのは何て言うんだよ? マルチリバースブルートフォース
とか、言ってみるテスト >>245
そんなアホなやつしかやらないような行動にまで名前が付いてるわけじゃないw >>247
IDと同じパスワードや逆にしてみて試す価値は有るだろ せっかくここまでアホな行為に名付けているんだから、途中で止めないで >>248
それはパスワード類推攻撃
お前みたいなアホ向けの攻撃方法だなw >>251
じゃあブルートフォースとパスワード類推攻撃の違いを言ってみろ
わざわざ分けてるようだから、明確な違いがあるのだろう おまえに聞いてるんだろ
教えを請うのではなく
おまえをベリファイする意味で
答えがリンクじゃ失笑されるぞ ID総当たりは回数制限をすり抜けられるんじゃないかな? 質問が馬鹿すぎて>>252が失笑されてるだけだぞw
俺が書いても同じようなこと書くし >>257
そりゃそのためにパスワード固定してId変えながらトライするんだし >>259
だから質問じゃねえっての
おまえ頼られてるとでも思ってんの?
プッバッカジャネエノ もう答え書いてるのにアホなのかな
そもそもLevel低すぎって言われてるだろw 米国家安全保障局 (NSA) は 10 日、メモリ安全性の問題に対応するためのガイダンスを公開し、
可能な限りメモリ安全なプログラミング言語を使用するよう推奨した 他人の文書を持ってくるだけで説明したつもりになってるのか
健康美容の悪徳ビジネスに騙されるBBAと同じたなw
てめーは空っぽだと説明したに過ぎないんだが >>264
ならどう間違ってるのか指摘してみ
自分では何もできないチキンのくせにw >>264
は? 間違っていようがいまいが関係ない
おまえは何も言ってないからな
なんか高卒くせえなおまえ
レポートだの論文だの書いてなさそう グーグルによればAndroidに存在した深刻なセキュリティー脆弱性の70%近くがメモリー安全に関するバグに
起因するという。同様にマイクロソフトも、同社製品に存在したセキュリティー脆弱性の70%がメモリー安全に関
するバグに起因すると述べている。C/C++を使う限りセキュリティー脆弱性を根絶するのは不可能と考えて、
Rustを採用するに至ったというわけだ。 >>267
まだやるのかよ...
> 俺が書いても同じようなこと書くし
> 俺が書いても同じようなこと書くし
> 俺が書いても同じようなこと書くし
そもそもこんなの常識だろw 俺が言ってないことを引用してか?
幼稚な誤謬が止まらんやつだな >>273
アホなの?
お前がわからんこと言ってるから再度書いてあげたわけだが
もしかして意図を汲み取れないってオチかなw おまえの勝手な妄言に意図なんてあったのかすらわからんな 結局>>252みたいな低レベルなレスして顔真っ赤ってかw >>276
>>273
おまえの頭蓋骨ぶち割って脳ミソがどんな奇形なのか見てみたいわw そんなクソみたいなレスしか返せないなら黙ってりゃいいのにw 横レス君よ、231あたりのやり取り見てみな?
まあ本人だろうけどw >>279
指摘されたアホがファビョってるだけだろw マウント取りたがるくせに大したこと言ってなくて
誰ひとり尊敬なんか集まらない寒ーいやつw Q.アスペルガーは嘘をつかないの?
A.嘘をつきまくる。本人は「嘘をついた自覚がない」と主張するが自覚はある。嘘を認めると立場が悪くなるので屁理屈を言って一向に認めない
Q.どうして文章を書くとき難しい単語を使いたがるの?
A.自分を賢く見せようとしているから。しかし内容がスカスカだったり矛盾しているので全然賢く見えない
Q.どうして攻撃的なの?
A.アドレナリン放出量が健常者に比べて多く、また人生が上手く行っていない場合が多いので他人に八つ当たりする(我慢できない)傾向が強いから
Q.どうしてひねくれたズレた回答ばかりするの?
A.アスペルガーは他人と被ることを嫌う。自分が特別な存在でありたいという願望が表れている。健常者の言う妥当な回答はアスペルガーにとっては平凡なつまらない回答。何か特別な凄いことを言おうとしてもそのような知恵がないので悪口とか意味の分からないことを口走ってしまう。 サイズの決まっていない配列はスタックとヒープどちらに確保されますか?
例
char* file = ファイルデータ;
char copy[fileのlength]; // この配列
みたいなやつ >fileのlength
ここに回答者をひっかけ様とする意図がありそう あれ可変長okになってなかったっけって思ったら変わっていってるのね 最近のCはできるん?じじいだから古いのしか知らんのだ 適当にぐぐるとc99で対応してc11でoptinal扱い
以降はしらぬ マジか、知らんかったわ
sizeofとかも可変になるんやね >>295
extern FILE __iob[]; sizeofて最近では()で対象を囲まなくてもいいんだってな
知らなかったw 最近もくそもANSI以降sizeof演算子に括弧が必要な時期ってあったの?
K&Rの頃でも要らなかった気がするけど 型とオブジェクト(を表す式)のサイズを混同してるんじゃね?
複雑な式だと()があった方が読みやすい場合もあるけど、できる限りは明示的に使い分けたほうが char*とvoid*なら問題ないのに
char**とvoid**だと代入時に警告が出るのはおかしい
ちなみにchar**とvoid*だと警告は出ない char
お前らこれ、なんて読んでる(呼んでる)? >>304
いらなかったのを勘違いして付けてたのかもしれん
ちなみに1990年代HP-UX上で開発してた時代の話です >>310
チャー
>>294
つうかヒープに確保するのはmalloc,calloc,reallocだけだと思ったら未規定なのか >>313
言語仕様上は寿命が規定されているだけで、どこから確保するなどという詳細はない。
スタックとかヒープとかいう用語すら出てこないよ。 >>315
世の中には汎用機みたいにハードウェアスタック持たないマシンもあるしね void hoge( char *src )
{
char hogebuf[strlen(src)+1];
strcpy( hogebuf, src );
...
}
みたいな使い方か
仕様にはないけど慣例としてローカル変数はスタックに取られるだろう
static char hogebuf[strlen(src)+1];
とするとデータセグメントに取られるがコンパイル時にサイズが決定できないのでコンパイルエラーになる 普通スタックに取られるallocaがfree要らずでプロトタイピングに簡便だね
スタックだからBOするし、しない保証も得られないけど
ちゃんと固定長バッファ用意したり、ヒープ利用を考えるのは、とりあえず動くもんが出来てからやる派 c言語の標準入出力ストリームの
本当に基本的なことなんですが
わからずに困っています。
教えてください。
std::ofstream stream;
ostream << "ABCEFG";
この入力した文字列の"ABCEFG"を
右側3文字を削除して"ABC"にするには
どうすれば良いのでしょうか? 再度スレ書込み致しました。
ご迷惑おかけ致しました。 >>318
この、外道が!
こんなんコンパイルエラーにしたる C++は最初のアホなstream仕様から抜け出せずいまだに書式出力にすら苦労するのいいよね 文字配列(へのポインタ値)は普通デカいから、ostreamのビット幅以上に左シフトすると0になるか、signedなら多分UD C++でも一度もiostreamなんか使ったこと無いわw
かっこいいとでも思ったのかな?w そういや C++ の cout みたいなやつには printf() みたいなメソッドはないの?
Java だと System.out (java.io.PrintStreamクラス)に printf() が Java 1.5 から追加されたが。 C++20からformatってのが追加されたそうな >>332
c++20 から std::format
c++23 から std::print と std::println >>333 >>334
ありがとう。あるにはあったか。 char x=1
char y=2
上記のchar型変数のxとyを比較する際に関して質問させていただきます。
上記の変数に格納されている変数を比較する際はif文で問題ありませんか?
if(x==y)
それともmemcmpやstrcmpで比較するべきでしょうか? 問題無いよ
memcmp()は使えても
strcmp()は流石に無いわw
メモリにどう格納されているかなんてエンディアンやらで違うし
memcmp()はcharの配列での比較に普通は使うだろう strcmp使うと、yもxも文字列である想定で比較するから
メモリー上の配置次第で変な結果が出る可能性がある >>338
charは(ちょっと変わってるけど)整数型なので、当然数値比較でok
何か付け加えるとすれば、整数型だからといってcharと他の整数型と比較/同値テストを行うのは、Cの自明でない算術変換が落とし穴になりがちなので避けた方が賢明
>>339
!memcmp(&a, &b, 1)
的な?
その発想に感心
何の役に立つのか俺には思い付けないけど、面白いからヨシ! >>342
memcmp()も良く考えてみたらどうメモリに格納されているか分からないから使えないよね
intelなどのリトルエンディアンならそれで比較可能だろうけど
今ビッグエンディアンのマシンがあるのか分からないけど、昔あったpowerpcなんかはビッグエンディアンだったね >>343
aがアドレスの取れない変数なら&aの時点で自明にダメだね
上で提示した比較バイト数が1の特殊ケースに限っては単なるunsigned charとしての比較だから、エンディアンネスは関係ないのでは >>343
ビッグエンディアンだろうとリトルエンディアンだろうと1バイトのcharの比較に影響しないんじゃね? 複数byteから成るwordには並べ方の任意性はあるけど、単一byteからなるword内にbyteを並べる方法は一通りしかない、って事だね >>345
charで例えばchar a = 1でリトルエンディアンだとmemcmp()で1バイト比較でも大丈夫だろうけど
ビッグエンディアンの場合、プロセッサの制約次第だろうけど必ずしも
01と1バイトのみでデータが入っているとは限らず
00 00 00 01みたいに4バイトで格納されてるかも知れないから
どんなマシンでも動くという前提で作るなら辞めておいた方が無難かなという風に思った 実際の所は分からないけど、char同士の比較は単にa == bで問題無いし
蛇足だったな・・・ >>348
処理系/マシンが同一なら問題無い
Cのcharをuint_32相当として保持するマシンが仮に有ったとして、Cがcharのつもりで書き出し/読み返しを行い、unsigned char(とその配列)として比較する限りはCから違いは見えないよ
だって高級言語だもの()
バイナリデータのやり取り、詰め物あり、他言語プロセスとの共有メモリなら適切に変換するルーチンが必要だけど、それはCに限らず全てのプログラムに当てはまる事 32bit以下のデータを全て32bit値として扱うマシンを想定してるのかな?
それは最小アドレス単位、cで言うCHAR_BITSが32のマシンと言い換えられるよね
CHAR_BITSが何bitであろうが、cから見ればsizeof(char)==1である事には変わりがない
と言えば分かりやすいだろうか >>340
変な結果どころかそもそも&xや&yの次のアドレスを読もうとすることあるから未定義動作だし おそらく初心者であろう質問を深読みして暇をつぶすお前らに乾杯 MISRA-C 2004 の本がある。
MISRA-Cをやっていないと、2004の潜在型/2012の本質型が分からないはず
int 型未満の型を、4バイトに変換してから、元に戻す仕組み。
CPU には、int型未満のレジスタが無いので、使わない部分をマスクするしかない
こういう内部の仕組みは、C/C++ の本には載っていない
こういう変換を知っている香具師は、
むしろ初心者じゃなくて、かなり研究している香具師
普通の香具師は、こういう仕組みを知っているはずがないから。
C/C++の本には載っていないはず そりゃ絶対とは言わないけどさ、詳しいのにあんな質問の仕方ならかなりひねくれてるわ 1 byte は 8 bit とは限らないってことだな。
1 octet は 8 bit 固定と決まっているが。 いやでもマシンによってバイトのサイズは変わるかもしれないけど、
少なくともC言語のchar型は8ビットでしょ?違うの? >>358
ちがうよ。 CHAR_BIT がなんのためにあると思ってんの。 >>355
そういうCPUの制約を気にしなくていいのが高級言語だと思うけど違うんかね?
そういうCPU相手のコンパイラならマスクするなり0埋めするなりしてるんじゃない?
想定外のCPU相手なら起こりえるかもしれないけど、それはしょうがないよね Cは処理系定義が至る所にあるからな
intが2byteの環境もあるし
x86(x64)しか使わないと決め打ちできりゃいいけど
しょぼいCPU向けのしょぼいコンパイラのこと考えなきゃいけないとかなり面倒くさい >>360
> そういうCPUの制約を気にしなくていいのが高級言語だと思うけど違うんかね?
そういう人はJavaなりC#なりを使えばいいと思うよ >>360
システム記述言語として使うことが想定内にあるので高級言語の中では低級なほう。
半世紀前に登場した時点では高級だったかもしれんがそのときの事情を引きずり続けてたら高級になりきれないのもしょうがない。 >>363
> 半世紀前に登場した時点では高級だったかもしれんが
当時すでにPL/1とかPascalとかあったのに何を言ってるんだか 高級比べなんてウルトラしょーもない比較してんの初めて見たwww >>349
等しいかどうかだけなら
そこまで神経質にならなくても良いんじゃなかろうかと >>355
> CPU には、int型未満のレジスタが無いので
x86にはAL/AHレジスタがあるぞ >>359
つまりcharはマシンのバイトなのでmemcmpではバイトオーダーなんて気にしなくていいって話だろ >>359
すまん、8ビット固定じゃなくて8ビット以上なんだな
>>370
char型は1バイト固定だからエンディアンは関係ないよな >>360
Cは色々なCPUで使える使いやすいアセンブラのようなものと思った方が良い。
色々な工夫をしてあたかも高級言語であるかのように見える状態にまで持ち込んだのだ。 UNIXの解説書に「UNIX OSの移植の為にC言語を開発した」的なことが書かれてたなぁ。 へーそうなんだ
デニスリッチーはそうは思ってないみたいだけど デニスリッチーはゲームで遊びたくてC言語を開発した >>376
その辺りの経緯はK&R本でも触れられてなかったっけ? 形にしたのはken, dmrだろうけど、個人的にはCの精神とCS的な観点はbwkに帰したい
the practice of programing, software tools (in pascal), the awk programing language、あたりからプロファイリング
ライターとしてずば抜けている、unixには特に拘らず節操無し、スタイルに拘りが強い、形式言語大好き
しかしk&rではセカンドオーサーだから、著作自体にどれだけ影響力あったかは?(言及あったっけ)
まあk&rは汚いコードを得意気に語るあたり、dmr成分多めな気がするなあ… いやk&rなんだからファーストオーサーはkernighanだわ、素で間違えた 俺はunix系ソフトウェアツールはベル研が出してるカジュアル資料で学んだ口だけど、手元の年季入ってくたびれたハードコピーを漁るとほぼbwk著
https://i.imgur.com/n9gVQZ0.jpg
著者は意識してなかったけど、マジ伝道師 書籍はともかくC自体誰が作ったってデニスリッチーが1人で作ったんだろうが
なんで勝手にカーニハンに帰してんだよおまえの所業は朝鮮人よりヒドイだろw >>384
日本PC市場でのPC向けUNIX(minix/bsd/linux)本格参戦前(90'後半?)の情報源は、彼に負う所が多かったろう、というバイアスはまあある
大学にでも所属してないとUNIX機に触る機会も無かったし、俺のように>>383のようなサンプルを見て仕様を想像しただろうアマチュア実装(だからmanページは付いてない)が流布していた
なぜCはUNIX文化から脱却できたのか?という(>>376を念頭に置いた)考察ね
bwkの著作にはCP/M, DOS, winプログラ厶の例が多いし、アーキテクチャ/OS間のポータビリティやアルファベット圏以外への進出を真剣に考えてた稀有な人なのは間違いなかろう
wchar_tやらを提唱したのはその一例だし、それを許容するためにC独特の柔軟な(=至る所unspecified)型/メモリモデルを拵えたわけで
あれ、今やどっちも負債になってるような…
いや理論上頑張ればできるけど、まあ頑張ればね? カーニハンのWikipediaのページには、C言語の作成には全く関わっていないと書いてあるぞ
出典のインタビューにはリッチーが全部やったと言っている なんか色々とそれっぽい事書いてるけど中身全くないのにワロタ >>386
だからライターとしての側面を述べてるのだが 相方を持ち上げるために
自分は何もしてないよと謙るやつか wchar_tに関しては確か日本語版2版に訳者がKへ吹き込んだ、という記述が
いわゆるK&R以外にもK&R共著は無数にあるが、おおむねイノベーターがRでKがまとめ役というのは察せられるし、そこに異論はないよ >>394
かに飯じゃないんだ。charは何処へ消えたの。 最近、Cが熱いのは、どのフィールドですか?
pythonなら、人工知能、みたいな 純粋なCって実際使われている気がしないんだがなぁ
結局C++使ってるんじゃね?
組み込みとかでさえC/C++じゃなくなりつつあるような >>403
自動車関係の組み込み開発してるけど純粋なC使ってるね 不純なCってObjective-Cとかかな
C++はもうCじゃないし 表向きCってことにしてるけど、C++コンパイラでコンパイルしてて、ひっそりstringだけ使ってるみたいな? 0bリテラルやビットフィールド順序指示子などの独自拡張あり 0bを0xに変換するフィルタくらいなら、すぐできるだろ digit separatorも追加されたから
0b1100'0011'0101'0011
みたいな書き方が出来る 'がセパレーターなのか。
組み込みで0bが使える処理系は以前からあるけど、
VerilogやVHDLみたく0b1101_0100のようなセパレーターが使えなくてバグの元でしかなかった。 セパレータに'は文字リテラルとの曖昧性でパースが面倒そうな…
0b表記はtccでさえサポートしてる(セパレータ_, 'は不可)し、俺の普段使いで0b表記を受け付けないのは多分pccくらい
C界隈では区切り文字と桁数はロケールの管轄(闇)という事になってるけど、簡潔に明示指定できるだけで単純にデバッグ出力も読みやすくなるよね?
オクテット区切りなら
ooo_ooo、xx_xxやbbbbbbbb_bbbbbbbb
ニブル区切りはbbbb_bbbb
等
先行例としてlisp系のformatディレクティブを参考までに
"~[:][base,wid,pad,delim,]R"
Rは専用のb,o,d,xか、rで任意進数を指定
:はデフォルト(wid=3, delim=',)
例: "~:d"→123,456,789 >>413
リテラル導入よりまずはprintf/scanfの強化が先かなと、コンパイラやプログラマがすり替えのも楽になるし
一々baseで割ってfputc、i%sep==0の時にはdelimを吐く、なんてコードを何回書捨てたか分からん
リテラル記法導入は文法に関わるので、あくまで標準は保守的に
formatディレクティブはもう既に混沌としてるから、独自拡張もサポート落とすも自由でいいかと >>419
printf はともかく scanf なんて使わんだろ >>420
てか8進表記なんてun*xのファイルモードでしか使ったことないわ
しかも普通はdefineされたやつ使うから直接書くことはないし 8進数なんて8bitPC時代のグラ512色関連以外で使用する場面あるのかと思ってたけど・・・そうか、アレか。 octal(リテラル表記)はutf-8の台頭でCで使う機会はかなり増えたと思うが
陽に扱うならだけど
msb2つを多バイト文字の継続フラグ等に割いてるから本質的には6bitで、hexだと人力では読むのも書くのも厳しい xx表示だとffbb_bbbbの上4bitに対応するx=ffbbが任意な値に化ける
ooo表記だとff_bbb_bbbで良い感じ 10進数のテーブルデータ記述するのに桁合わせのつもりで先頭に0を書いた苦い思い出 なんで8進定数のプレフィックスは0oじゃなくて0なんかね? 人間の指が4本だったら、普段使う数字が8進数になって、コンピューターとの相性も良かったのになw >>422
システムコールを使ったちょっとしたコーディングの場合、オープンモードはdefineされたやつ使うけど、ファイルモードは8進の値を直接指定することが多かった
open("foo", O_CREAT|O_RDWR, 0644)
ここに S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH なんて書いたことはないな
ちゃんとしたコーディングの場合にはファイルモードを指定する別途関数なり定数定義を用意してたりするからそっちの定義ではdefineされた値を使うことはあったけど 直接openシステムコール使ってるオープンソースのプログラム、シェルあたりならやってそうだと思って簡単にアクセスできそうなソースコード探してみた
bash見つからなくてzshは見つかったので見てみたらやっぱり直接0600とか書いてるな
https://sourceforge.net/p/zsh/code/ci/master/tree/Src/utils.c#l2216
その上でumask(0177)とかもやってる >>430
まあ、コピーライト見たらわかる通りそういう時代だったしね
> * Copyright (c) 1992-1997 ポール・ファルスタッド
マジックナンバー警察じゃないけど流石に今時0777なんて書いてたらレビューで指摘するわ >>432
git のソースコードのリポジトリを clone したのがあったので、git grep O_CREATとかgit grep umask とかするとみんな0600とか書きまくりだった
git blame してみると2021年とか最近でもやりまくり
66e905b7dd0 (XXX 2021-08-25 22:16:46 +0200 82) fd = xopen(index_name, O_CREAT|O_EXCL|O_WRONLY, 0600);
66e905b7dd0 (XXX 2021-08-25 22:16:46 +0200 252) fd = xopen(rev_name, O_CREAT|O_EXCL|O_WRONLY, 0600); C#について教えてください! https://smartlabo-hp.com/login-intermediate/ 上記ページを見てログインボタンを作成しました。 このページ内にあるcsvファイルの内容に加えて同csvファイルの[2]にログイン状態という列を足したいです。 ログインしてない状態では[2]は常に0、ログイン成功したら[2]に1が書かれるようにするにはどうすればいいのでしょうか? ご教授よろしくお願いします。 ハノイの塔 再帰のアルゴリズムがさっぱりわからない ハノイの塔 再帰のアルゴリズムがさっぱりわからない >>426
8進数なのに8と9が使える驚異の仕様だよ ctype.hに
isdigitとisxdigitがあるのに
isodigitがないというのが
その問題の根にある >>433
何を必死になってるのかよくわからんが老害の悪癖は治らないってだけの話かと >>440
規格では使えないことになってるしまともなコンパイラならエラーにすると思うぞ >>440
規格決めた人に問題がある
ゼロは避けるべきだった ソースコード上での記数法と
実行環境での表現を混同してる? なんでオーにしなかったのかとは俺も思う
特に小文字オーなら誤読しにくいし 1文字でもキーワードを少なくしたかった当時のお洒落だったんだよ
8進表記はunix系OSが全滅すれば廃止でもいいと思うね キーワードつーてもサフィックスだからね
繋がった単語の中の部分なわけで
他の識別子との衝突の虞はない あ、しかし
int o33 = o33;
みたいになったらマズいのか
英字サフィックスは >>442
gitのソースコード、openだけじゃなくてファイルモードを引数に取る関数なんかもあるけど、誰もマクロ定数なんて使って無いや
全員老害か "%05d" こんな風な指定して出力した10進数を、読み取らせても大丈夫だろうか? >>453
馬鹿なの?
普通に 0o01234567 だろ >unix系OSが全滅すれば
泥もiOSもunix系だよね?
ゲーム機も基本OSは・・・ (8じゃなく)6の倍数bitワードのマシンで産まれた痕跡だっけか
>>443
8と9が混じってるかどうかで8進か10進か勝手に解釈を変える方がよっぽど厄介だから、不正として弾くのが正しいね
俺は8進が好きだし、幸いやらかした経験も無いけど
他言語では明示的な0oプレフィックスもよく見掛けるし、もちろん使えるなら使おう >>454
しつこいね
具体的にどのコードの話でそいつがいつから作られてるのか書いてみ >>443
bad numberとか言われて
なんで特定の数字を差別するのか?キリスト教のなんかか?とまじで悩んだw IT業界でもwhitelist→allowlistとか言葉狩り起きてるしそのうち言語にまでLBGT配慮()きそうだわな
int ニガー = 07214545;
エラー:差別用語です >>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 使っているところも全部直指定 >>460
確かに最初見た時は俺も はあ?ってなったわw >>442
比較的新しめ?のnginxなんかは流石に関数の引数に 0600 とか書いてないけど、それでもOSのヘッダファイルの定数定義は使ってないな
自前の定義に #define NGX_FILE_DEFAULT_ACCESS 0644 とかだ
これも老害になっちゃう? >>462
git は 15年以上前に初版が作られたソフトだしリーナスはもっと前からソフト開発してるだろ
ポリシーによるけどソースコードのコーディング方法を変えないことは珍しくないよ
>>464
nginx も 18年前のソフトだし作者のイーゴリ・ウラジーミロヴィチ・シソエフ
50歳超えな >>464
OS側の定義を使わないのは特定のOS依存をしたくないか見切りを付けてるからだな
むしろ老害避けなんじゃないの 否定から入ったり無礼な言葉ばかり使う人って他人から相談されなくなるよね ダヴィンチもエジソンもアインシュタインもモーツァルトもイチローも
みなアスペルガーなんだ >>471
まあ、それはそうだと思うよ
長嶋(一茂じゃねーぞ)なんかもそうだと思う ダヴィンチもエジソンもアインシュタインもモーツァルトもイチロー並みの才能があれば煙たがられることなく受け入れられるということよ。 >>449
英語では 0 (ゼロ) と書いて o (おー) と読むこともあるので、それが影響したのかも知れないね。 >>476
printf("%o\n", 1234);
とかできるからその説はちょっと弱いかな アスペルガーは自分に対しても他人に対しても容赦しないから
凡人に嫌われる
才能のせいではない >>480 チャレンジしたことはないけど、たぶん再帰なしでも書けません。どうか御教示をお願いします。 待ち行列やLIFOは再帰的な処理を非再帰にするときの友 再帰呼び出しする所をpushに変えてgoto最初
returnの所をpopに変えてgoto最初
時間があればそこからgotoを取り除く
gotoが輝く場面 >>485 goto文を使うのですね 覚えておきます アンチgoto教信者は近頃減ってきているが
絶滅はまだ先のようだな 再帰からループへの変換はgotoのある言語なら機械的にできるからね
存在すら許さない言語は発想を阻害してると言える while(スタックが空になるまで){
pop();
...
}
って書き始めるけどな >>490
戻りのpopはそれでいいけど呼び出しのpushは処理がぶった切れるから
gotoがないとかなりややこしい変換になるよ >>485
push/pop はルール違反
それに二方向、多方向への再帰はそう簡単じゃないですけどね
二分木の全要素を列挙する非再帰プログラムを書いてください >>499 見事です 私はまだ初級なのでvectorだのcstdioなど見たこともありません CPUレベルまで行くと、GOTOは使いまくりだろう gotoなんて所詮関数内にしか飛べない
関数が小さければなんて事はない
巨大な関数はgoto以前に悪 昔いた現場は、1関数ごとに設計書を何枚も書かされてたな
それでみんな、関数の数を極力減らしてた
行き着くところ初期とメインと終了の三つ
それぞれが何百行にもなってしまったw 硬直化して目的を忘れた「管理」に泣かされたもんだけど
それは昭和も今も変わっとらんだろ プロジェクト管理はそのうちAIがやるようになるんだろうか >>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プリプロセッサの構文内では不可能に思う(当然リテラルとして自然な仕様拡張も) >>467
アセンブリやいにしえの言語は明示的なdecimal prefixを持ってるね
forthだと#123と変種?の&123
#の方がthe (decimal) 123と読めて個人的に好み the (decimal) number 123です 299,792,458と書けたら素敵だけど
ds(299,792,458)が引数を区切る,と区別出来ないから無理だね ほかの言語では、123_456_789の様にアンダーバーで区切るのが多い
Cでも出来たと思うけどなぜか'なんだよな…
アンダーバーが良かった C++に合わせたんでしょその方が都合がいいだろうし 規格の紹介をしてる>>415に対してそれは解析器を変えないと難しいとか言ってる>>515は何なんだ?
C23でこうなります、なんだから難しいもクソもないと思うんだが笑 まだワーキングドラフトだから対応するもしないのも自由だと思うし、c2xはアトリビュート関連くらいしか追ってないが、一応意見を
せめて不正なトークンとして弾ける約物にしてほしいな
0b10101011未対応(0cでも何でも)は不正な8進
トークン構成文字0b1010_1011なら不正な型サフィックスとして不正なトークンを報告できるので、ユーザに手直しさせるのも自明
パース状態をトグルする'はEOFまで食うので、エラーが報告されたとしてもcryptic
頻用したと仮定すれば、1/2の確率で釣り合うって字句解析をパスしてしまうのも厄介 >>416
俺は16bit程度なら一行で書いてしまうけど、より大きい整数型なら行を分けて書いてるな
(u)int64/128_tなんかで二次元データエンコードする時はこんな感じで
uint64_t plaid = 0b\
01010101\
10101010\
...\
;
ゲーム盤、行列、画像、畳み込みカーネル、マスク等、重宝する機会は多い
pbmそのままだからstatic変数にスクリプトでブチ込むのも楽で非常に重宝
普通(2)/8/10/16のみで任意進数(ビット深度)を指定できないのが歯痒いところ C++におけるユーザー定義の接尾辞で
_数字 みたいな奴を許可していなかったら桁区切り文字はアンダースコアになってた 自己参照構造体を、テキストのコードが難しくて理解できない >>525
まさか4567_8(→4567 of type "8")?
珍妙な… extern "C"で混ぜるにはもう違いが多過ぎるし、c++と足並み揃えるのやめればいいのに C++が流行りだした当時のCの財産を捨てずに済むってだけの話で
これから新しく作るものの足かせになるのは本末転倒だよな C言語で構造体の双方リンク理解する前にテキストエディタ作るようなことあったら
激重エディタつくってただろうなぁと経験してもないことを妄想。
1文字挿入→その後ろの文章を全部コピーでずらして・・・ >>531
emacs なんかは1文字挿入のたびに後ろ全部コピーしなくても良いようにギャップバッファという手法を使っていた >>532
emacs!
Esc x compile
に何度も助けられた
一人で五万行くらいのコードを書いてたからな
ヘッダーファイルだけで50くらいあった >>532
過去形だけど今もだぞw
ギャップバッファは、最近流行りの複数カーソル使って離れた複数箇所を一気に編集すると、大量にコピーが発生して重くなる可能性がある
なのでこれからテキストエディタを実装するには、Piece Tableを使う方がいいと思われる Slackware+JEに入ってたMuleを3年くらい使ってたけど別のエディタに移っちゃったな
悪くないと思うんだけど時代に合ってないというか、貧相な環境の方が使い出があるエディタだったな EmacsとかVimを貧相と思うのは、端末内で動かせるようになってるからだ
GUIはオマケみたいな扱いだ
でも、それはそれで存在意義はある viは来世紀にも残ってそうだから最初に覚えたなあ
eなんとかはデベロッパーのオナニーが透けて見えて気持ち悪すぎた viの様にコマンド覚えなくても使えたから便利だったぞ >>536
ちゃう、Emacsを貧相だと思ってるんじゃなくて計算機資源が豊かでない環境の方が使い出があるって言ってるんだよ スレちがいだし
わりとしょうもないレベルの自慢話になってることを警告しておくぞ ダム端末使ってた頃はviが有り難かったけど
今となっては当時慣らした人はともかく
若いやつにお奨めするもんじゃない
と俺は思うな >>531
素のCだと何もないからデータ型を一つ一つ自分で理解していけていいという意味?
例えばC++ならlistがあるから理解しないままになる?
でもlistとvectorの違いを知らなければ結局 >543
Cやる前はアセンブラだったからねぇ。アセンブラでの処理方法をそのままC言語に持ち込んでた。
当時はでっかく領域確保したらその領域で全部処理するって思考しか無かった(自動変数って概念も無し)。 >>544
>自動変数って概念も無し
自分はデバッグでディスアセンブルを読むぐらいしか用事がないんだけど、
ゼロからアセンブリを書く場合はスタックの操作で領域管理したりはしないと? >>546
listやvectorはほとんど使わない感じ? スタックはレジスタのバックアップが主な用途で
メモリ変数はグローバルがデフォだった
だから変数表を作ってた あの 先頭に戻って検索 するかどうかを維持する変数名ってどんなのがいい? >スタックの操作で領域管理
8086系だとスタックレジスタ直接使うと遅いんじゃなかったっけ?
MOV AX、[SP+10]
とかやるより
MOV AX、[TEMP]
...
TEMP: DW 0000h
ってやる方が速いとか。
BASIC時代のマシン語CALL時のレジスタエリアは16バイトってトラウマが・・・。 ダミーセクションって、IBMのメインフレームのアセンブリ言語の DSECTですか? >>550
auto_reverse
絶対これにしなさい そういうのはいわゆる自転車小屋の議論になりがち。
そこそこ盛り上がりはすることもあるかもしれないけどあまり意味のある結論は出ないよ。 するか否か、1ビットのフラグの命名に他者を巻き込む議論が本当に必要ですかということか
すなわち名前はflagとかで変数宣言部に日本語コメントでも添えた方が建設的ということだな?違うか? 変数名の付け方は案件による
無論、一般論などない
主観と思い込みで強弁するやつはいるけどね C-gengo wa mada nihon-go kakenai no?
bool 先頭に戻って検索 = 真 ; 質問の仕方でどういうコード書いてるか垣間見えるのはあるな
int searchtype = FROM_TOPとかBOTTOMとかBACKWARDみたいな持ち方ならそんな質問出ないだろうし >>551
どのCPUでもダイレクト指定が速いに決まっとりまんがな
レジスタ相対はレジスタにディスプレースメントを加算してからアドレス出力するんだから >>561
個々の命令の速度で考えればその通りだが今どきの CPU だと
パイプラインに隠れて差が出ない (差があっても観測不能なほどの極小) ってことも普通にあるんじゃないの? 1Hzぐらいの速度で計測すれば何かわかるかもしれない 1Hzだと速度的には1秒周期なので測定の意味がない もしかするとCPUクロックをそこまで落としてデバッグしたいとかw [sp+10]はメモリアクセス1回だが
[temp]は2回だな
8086だとキャッシュないからメモリのウエイト数の影響をモロに受ける
どciscでパイプラインなんかないし Cのコードを書くのにアセンブラまで意識するのか、、
立派な心がけあるな
精進しなされ
でも、CPUやコンバイラで違うじゃん、、、 [sp+10]が1回なら[temp]も1回じゃね
命令のフェッチは数えないんでしょ?
プリフェッチはパイプラインみたいなもんじゃね? 素の8086にsp使えるアドレッシングはないのでbpで…
mov ax, [bp+disp] 命令3~4バイト 8+9クロック
mov ax, [TEMP] 命令4バイト 8+6クロック
と実効アドレスの計算時間に差があったという大昔のお話 8086には現在のような深いパイプラインは無いがそれでもEU(Execution Unit : 実行ユニット)とBIU(Bus Interface Unit : バスインタフェースユニット)は独立しており
メモリアクセスと内部のALUはそれぞれ別々に動作する
ある意味初歩的な2段パイプラインとも言える構造で単純なクロックサイクルの加算とはならない >>573
temp: dw 0000h
つまりtempはメモリに置かれている
tempのREADで1回、
[]によるインダイレクトでもう1回
だろ >>567
昔昔はそういうものだったんよ。
Cは、
・プログラマの責任において何でもできる
・コンパイラはプログラマの意思に忠実であれ(余計な最適化なんかするんじゃねえ!)
ってこと。だから、
a=a+1;と、a++;は違う。
前者は加算命令、後者はインクリメント命令になってほしいというのが、プログラマの意志。
ただ、Cが色々な場で広く使われるようになって、最適化を進めるしかなくなったから、そんなのどうでもいいことになったけど。 >>574
だからさ……それを2回っていうなら、[sp+10]も2回だろ >>576
何で?
即値はフェッチ時点で取り込まれているのに >>577
tempもtemp自体は即値だよ
[sp+10]と[temp]の違いはレジスタ相対かどうかだけ >>575
ま、しかし、昔はコンパイラの最適化がしょぼかったというのもあるな。
CPU (特に 8 bit CPU とか) がC言語等のいわゆる高級言語を全く意識して作られていないというのが最大の問題だったのかも知れないが。 >>578
DWディレクティブで定義してるんだからリテラルの類だよ
命令コードと一緒にフェッチされる即値とは根本的に違う >>577
CPU仕様によるが
68000では8ビット範囲以内のディスプレースメントは命令中に含まれてたが
8086はどうだっけ… >>581
いやここはCPU仕様には関係ないぞ
68kにしたってdc.lディレクティブで置いた定数はディスプレースメントじゃないし 間違い、>>581は6809の話だった…
ややこしくなってるが
MOV AX、[SP+10]
がspレジスタから10バイト後を読むなら
MOV AX、[TEMP]
はアドレスTEMPを読む意味だろ
8086ニーモニックをよく知らないが >>583
6809にしたってFDBディレクティブで置いた定数はディスプレースメントじゃないし #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て表示します。これはどういう意味でしょうか? >>585
コンバイラかて人間や
こんなつまらん二次方程式の解をなんぞ解きたくない
そう言う意思表示や >>585
printf("(%f)\n",pow(b,2) - 4*a*c); あー、なんかわかってきました
そういうことか
サンクス >>585
sqrt に負数を渡した場合には定義域エラーとなり、定義域エラーのときは処理系定義の値を返す。
その処理系では処理系定義の値というのが nan だということになる。
言語仕様では詳細は規定されていないけれど
一般に浮動小数点の表現として使われる IEEE 754 などでは非数 (not a number) を表現のひとつとして持ち、
意味のある計算結果にならなかったときは非数がセットされる。
not a number の略で NaN 。
処理系によっては定義域エラーをハンドリングする方法を用意してあることもあるけど、
発生させないように事前にチェックしたほうが基本的には簡単だと思う。 よくわからないんだが
>>574が勘違いだな
TEMP: dw 0000h
はデータ0000hをメモリに置いてそのアドレスをTEMPと定義するという命令(アセンブラ疑似命令)
MOV AX,TEMP
はAXレジスタにそのアドレス値を入れる
MOV AX,[TEMP]
はAXレジスタにそのアドレスの内容(0000H)を入れる
さらに[0000H]の内容を読むにはもう1命令必要になる…はず
6809なら1命令で読めるがあまり使われなかったと思うどっちにしろ遅くなるので 6809の用語でいうとメモリ間接参照アドレッシングだな ちなみに1命令で読むのはダイレクトページ参照アドレッシングな
6809ではあまり使われなかったけど、6502などではこれが使えないと実質何も出来ない >>585
nanは、何処かでnanになると、その後の演算全てがnanになる
なのでsqrtのnanが伝搬してprintfがnanを表示した
ゲーム(特に3D)は、油断するとnanを伝搬させてしまう事があって、キャラがグチャグチャに壊れて表示されるのは、それが原因
nanを伝搬させるとデバッグが大変なので、nanを出さないように細心の注意が必要だ
sqrtとか特に割り算(/)に気を付けないといけない >>593
え、割り算でNaN出る?と一瞬思ったけど、0.0/0.0かな?多分
珍しいケースに思える
非ゼロ/0.0でinfが出るのは関数の根を簡易に求めるのに重宝するけど(逆数が極)、NaNが出る可能性にまでは気を配って無かったのでナイス指摘 >>589
IEEEはほぼCの為に制定されたようなものでは?
fpuなんて改造してナンボな本場のnumber cruncher達(ほぼFORTRAN/Fortran)は最近までIEEEなんて最近までガン無視だったわけで
今は標準モジュールにIEEEサポート入って普及してるけど >>594
3Dだとベクトルのノーマライズをしょっちゅうするけど、これはベクトルの長さで割るけど、事前に長さのチェックが漏れてると、ゼロで割ることになる
そういう特殊な状況は確かに稀なんで、リリースに残ってしまうことがある >>594
良く考えたら、rsqrtがnanを返してる気がする… >>596
俺環ではDBL_MIN/0.0でもちゃんとinf吐くから、ノーマライズされるべきベクトル(分母)が正確に0.0というのはdoubleでは考えにくいような…
3Dだとsingle以下のfloat16/8とか使うと聞くから、極端に精度が低過いと起きるのかしら? 分子、でした
>>597
かもね
あと0.0/0.0以外の四則でもnanが出るケースは他にも思い付く(今思い付いた)
inf/infとか
まあ実数関数求根/方程式を解く目的なら(精度上での)解に達した証がinfだから、発生した時点で必ずbreakするし、事実上到達し得ない計算だけど
定義域がパッチワークみたいな複素関数で一々入力のチェックなんてやってられないし、nanには静かに伝播してもらわないと困るけど
とにかく欠損値の無い有限の実数値だけが欲しいだけ(例えばグラフィック)なら、fenv.h/signal.hで例外をヲチしてSIGFPE投げるとか、あるならsnanモードにするとか この糖質3歩手前みたいな文章はいつもの彼かね
>>385とか>>523とかと雰囲気が同じだが このような状態を「思考障害」と呼び、Cプログラマの2割ほどが患っていると言われています 次の議題は『gotoは活用すべきか全面廃止するべきか』でうわぁなにをするやめ・・・ いいか?C言語について俺に聞け
VAX11でcのコンバイラをcで作ろうとしたのはワシだ
当時のyacc lexに謎の挙動があって嫌気がさして失敗したが、、? >>605
そういえばID論ってのがあって、何か高度な存在が人間や宇宙を作ったってやつだが(昔ながらの神が作ったというのと似ているが神ではない)、
それならばその高度な存在はどのようにして作られたのか?それはまた別の高度な存在によって作られたのか?
とするとその存在も別のもっと高度な何かに作られたのか?という具合に無間ループになってしまう。 ID論てのは地球のたった数億年で生命が生まれたのが信じがたいってだけで、
元の生命はどこかでもっと時間をかけて生まれたんじゃないかという話。 Cインタプリタなら昔作った
当時こういうの流行ってたし
いくつか書籍化もされてる >>607
ブートストラップローダという名前がついたのと似てるなw
コンピュータ起動時に次々と自分より大きいローダを読み込んで起動する様が「自分の靴紐を持ち上げて空を飛ぶ」ような無茶に思えるから 鉄則
1 困った時のGOTO勝利
2 CALL関数はマクロ展開のヘッダファイル
3 SQL呼び出しはstructの前に敗北
4 while こそループの王 forは邪教
5 そこでbreakするな
6 switch文が見えたらバグの腐海 でもswitchの巨大状態ループ便利なんよね
バグの温床かもしれんけどメンテは凄く楽 あれやって 条件成立まって あれやって を 状態遷移しながらぶん回すときは
状態変数を int にして 巨大switch にしたくなる
けど こことここの間に新たな状態差し込みたいってときに 状態変数値どうしよう? っておよよする 状態変数は列挙型にしておけば状態の追加や修正に合わせて具体的な値は勝手に変わる >>616
おおよそそれが一番良い解法なんだろうけど
次の状態へ ってのを同じ記述でいきたいよね と (return sts+1) 状態マシンの欠点は割込みや並列処理の扱いが非常に厄介なところ
複数箇所から状態変数を更新される可能性を考慮すると泥沼に嵌る 通常処理のメインループと外部割込みの割込みハンドラ(特に緊急割込み処理)を同じキューで順番に更新すると処理が破綻しないか? ノンプリエンプティブなマルチは今でも普通にやる
問題なきゃそれが楽だから 組込みではプリエンプティブが一般的
応答性最優先でCPUの実行権を強制的に奪わないと最悪の場合は事故に繋がる 組込みシステムのタスクスケジューラーでノンプリエンプティブマルチタスクって地雷源もいいところだろ
自殺願望でもあるのか 組み込みと一言で括られてプリエンティブで良い悪いの議論をされるの抵抗ある人がここにいるけど俺以外でもかなり多いんじゃないかな
プリエンティブはタスクスイッチ自体が割り込み禁止を伴うクリティカル処理だからそれが組み込みに適しているとはいい難い
タスクスイッチのレジスタ退避復帰で何十サイクルも消費して待ってる割り込みが処理できずにいるのが許容できかは案件により過ぎる
片やノンプリでは少なくとも割り込みを汚さない
従って俺はどんな案件でも通用するノンプリでまず検討する事を推奨したい。プリエンでもタイミング的に問題ないねとなったら移行すればいい
いきなりプリエンありきで作る方が自殺行為に見える タイミング的に問題ないという判断の前提が一定時間以内に必ず応答出来るという保証が必要
応答時間が保証されないノンプリエンプティブ環境でシステム設計とか殆ど不可能にしか思えない 割り込みにも大別してすぐに応答が必要なもの、メインのキューに回してもよい優先度低のものの2種類存在する
プリエンティブを採用できるかどうかは前者の応答にどれだけの遅延が許容されるかという事になる
割り込みハンドラを普通にCで書くとハンドラ内で使用するレジスタの退避コードが適当に生成されるが、
許容時間によってはインラインアセンブラで最小限のレジスタで書かざるを得ない場合がある
そういう案件だとプリエンティブの採用はありえない あーこれってノンプリエンプティブを何か誤解してる奴が話に参加してるってだけか
理解したわぁ 623 625 627 これ同じ人か
もうちょっと勉強してから参加しようね いやその通りだよ
保証出来るようにアセンブラすら併用せざるを得ないのが泥沼の組込み開発
それでも駄目ならソフトウェアでなく専用ハードで物理的に処置する方向を検討する ちなみにとある産業用モータドライバー基板開発のお話し >>631
タイミング調整にアセンブラ併記は組み込み案件でなくても普通に行われてるでしょ
それと専用ハードって簡単に言うけど、大抵の組み込み案件ってハードの部品点数減らしていく傾向だから非現実的な提案にしか見えないよ
簡単に用意できるなら苦労しないし廃業だわ そもそも俺が今相手してる奴って全員ID変えてどちら様だよ
議論もまともにできず論点ずらしにも失敗してお前ほんと今みじめだぞ 623はともかく 625と627はワッチョイ同じじゃん 要はトータルコストの問題
この件は高価な材料(主にレアアース)を多量に使用したモーターを安価な代替品に置き換えて
同等の能力を発揮させるために高度な電子制御(いわゆるベクトル電流制御)で駆動するのが狙いだった
実際メインのマイコン処理だけでは追い付かずセンサ周りの処理は別チップのDSPを採用してる
結果的に制御系のコストは増加したが全体としては前システムの約7割程度の費用に抑えられた
長文失礼 >>623も言ってることおかしいけど別回線か何かだろ
そもそも組み込みはその最悪ケースを見積もりながら設計していくって前提知識がないし 自動運転車での危険回避行動のロジックとか、聞けるのかと楽しみにしてたのに ハード絡みの話が出るのは仕方ないだろ
COBOLじゃないんだから >>637
これを1行で要約するとヤバいなあ…設計見積もりガバガバで採用したマイコンで処理できなくてハード追加調達して結果的に動いたわろたってことだろ
最近のH3失敗もだけど予算まともでもこういう経験値の奴らで作られる可能性を考えると寒いなあ
暖ったけえ話を知りたい 若いのに頭固いっていうのかな
他人の言うことを聞く耳持たず自分の思い込みを自画自賛してるよな 疑心暗鬼で個人攻撃
プログラムではなくてワッチョイを語る
世も末だな 最悪の場合は事故さん(>>623)がなんか被害妄想を始めてるけど
俺の主張は>>626以降で出してるから後は興味ないんだわ
反論があるならすればいいがせめてこのスレと関係ある技術的な話をしてね 組込みマイコンでは常識的なレジスタバンク切替やコンテキストスイッチングのことに触れずに
レジスタ退避や復帰でサイクル消費するとか言ってる時点で組込み開発の経験が無いんだろうな
ということは分かる
余程の簡易的なものを除けばメインと割込みでいちいちスタック経由でレジスタ退避するような
間抜けなマイコンは無いだろ
それはx86のような汎用CPUの構造だ 似たような意見が出てきたので補足するとバンク切替なら大体2,3クロックでレジスタセット丸ごと切り替わるから割込みのオーバーヘッド自体は大した負荷にはならない
反面x86の様な大規模なレジスタ群は持てないのでそもそもの用途と構造が違う そう言うなら後出しではなくて自分から大したこと語ってくれ マルチで何タスクを並行で動かすのかによるだろ裏レジスタだけで済むかどうかは 知ってる範囲では8レジスタ×4バンクというのがあった
日本製(現在は事業撤退済) そもそもマルチタスクのタイマ割込みの他に外部ポートからの多重割込みは
優先順位とレジスタ割当てをかなり慎重に検討するべき事項
並列処理の仕様はソフト設計の基本 まあ外部割込みを一切禁止して常にポーリングでポート監視するシステムも無いことは無いが
ごく単純なパターンに限られるけどな
普通は外部からの入出力のトリガは割込みで受け付ける そもそもタイミングがシビアなところはハードでできるのはそうするし
かなり特殊なケースにもFPGAの対応力はありがたい ハードソフト協調設計をする中でソフトでどこまでやるかってこと 士農工商メカエレソフト
ソフト屋底辺の悲しさ
ハードソフト分担は大体は製品企画段階で決まる
メカ屋やエレキ(ハード屋)の尻拭いがソフト屋の仕事 DSPあたりまではソフトでカバー出来るけどFPGAにまでなるとハードの仕事 CでROM焼きしてんのと
VerilogでFPGAやってんのは
遠くから見ても見分けがつかない >>644
映画Winny観て来た
時代考証が微妙なところもあったが
ノスタルジー感じたい人は逝ってヨシ ちなみに映画中に出て来たCのソースコードは
逆コンパイルしたようなコードで
変数名がめちゃくちゃだった local_001 とか
local_666 みたいな
ずらずら並んでた >>665
オープンソースの何かのを借りてくればいいのにと思うが
正当な目的外だからだめかな 実際に逆コンパイルされたものじゃないのか?
うろおぼえだが Winny の改造版 (?) を作ってた Lark 氏が逆コンパイルしたソースコードを放流していたような記憶がある。 当時、京都府警がソースコードを押収したとか言ってなかったっけ
だとすると今でもあるのかな そんな古いもんあんのかね
そもそも自分らの不手際で逮捕しなきゃいけない羽目になったんだから要らなくなったら即ポイ捨てだと思うけどね >>670
47氏本人が家宅捜査される場面で
編集中のソースコードって設定だから
本人がわざわざ逆コンパイルして使ってるのは可笑しい
仮に変数名自分で付けてたとしてもあんな名前でコード描いてたとは思えない >>672
SNMPを「すぬんぷ」って発音してる人が居て
会話中に「えっ???」ってなった あと別の人だけどswaponは「すわぽん」っていうのも
聴いてぎりぎり判るラインだったわ >>676
ほんそれ
京都府警のチョンボ情報漏れが先で逮捕に至ったのに
映画では逆の展開にされていて引いたわ
圧力掛かったんかね >>678
他のどんなコードを持ってきたとしても「あんなコードのはずがない」という突っ込みは受けそう。 使われているソースコードはおそらくこれということらしい。
https://github.com/loadletter/Winny-p2p
>>678
ちゃんと考証するならそりゃそうだが
重要でないところに小ネタを仕込むのもよくあることでしょ。 >あんなコードのはずがない
47氏死んでからの映画化ならではだな ジョブスの映画はもっと酷かったぞ
ウォズがこれがアップルIだ!っつってジョブズに見せると画面にアスキーコード順に文字が出てくるだけ
ジョブズがオオスゲーって顔するんだけどw
もっともそこですでにBASICやゲームの画面が出てくるのもおかしいんだけどな >>687
脇役で出てくるPCの時代考証がおかしかったりしたあれか >>687
その映画見てないので分からないが、もしや Apple ][ ではなく Apple I のこと?
だったらワンボードマイコンなのでテレビ画面に文字が出るだけでも当時は凄い事だったと思うが。
Apple I が作られたのは1976年だしな。 もしやもクソも誰もApple2の話なんかしてないと思うがキミはいつもそんな調子なのかね ごく初歩的な質問です 変換して指定子を何にすればよいか教えてください
#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;
}
を実行するとでデタラメな数字が出力されます。
変換して指定子をなににすればよいのでしょうか? %dとか%sとかの呼び方って、変換指定子、書式指定子、フォーマット指定子のどれがいいんすか? ある本によると、たんなる、「変換仕様」や「出力変換仕様」となってます printfで出力変換仕様ならscanfでは入力変換仕様になりそうっすね 英語だとformat specifierなんすね
直訳ならformat→フォーマットか書式、specifier→指定子か仕様って感じすか >>690
>ワンボードマイコンなのでテレビ画面に文字が出るだけでも当時は凄い事
ほんそれ
現役体験世代しか持ち得ない臨場感ってこう言うもんよ >>692-693
いつのC使ってるのかしらんけど
警告出ないんだっけ >>699 警告出てました vscodeだと警告なしでバカ数字だけ出力される設定です >>692
なんとこのコード!
直値で領域確保など、神をも恐れぬ傍若無人
悪魔をも恐れぬ愚策の極み
とても合格点は出せない コンパイル時にエラーにならない可変個引数が悪い
ただ警告は出てるけどね
>>692はそれを無視してたんだろう
Cコンパイラーの警告は実質エラーだからな > 警告は実質エラー
自分の頭で考えることを放棄したクルクルパーwww ワイは車載プログラマーだがwarningだらけやな >>704
こんな事言うやついるんだなw
そりゃ日本の競争力も低下するわけだ… >>704
「警告ね、ハイハイオッケー!」
思考放棄だろこれw ロケットの失敗は中抜きで必要なところにお金がまわらなかったからです うろ覚えのネット知識同志で問答するのはやめるんだ
ゴチャゴチャになるぞw 請け負ったのは三菱重工業だが、国産ジェットも失敗してるからな…
もうロケットはドラマの中でしか飛ばないw >>694
d や s の部分が変換指定子 (conversion specifier)。
%d や %s 、これに精度やフラグや長さ修飾子まで含めた実引数ひとつに対応する指定が変換指定 (conversion specification)。
更にこれらを含む文字列全体 (printf の第一引数や fprintf の第二引数など) が書式 (format)。
書式に含まれる普通の文字か変換指定のことを指令 (directive) という。
書式指定子 (format specifier) という用語は何を指すのか明確な説明がないのだけれど
形式としては変換指定から % を除いたものになってる。
以上の用語は JIS に基づくが K&R 第二版日本語版を見てみると
変換指定子ではなく変換文字と書かれていたり
変換指定ではなく変換仕様になっていたりする。
JIS は (ISO の規格の) 良い訳というわけではないけど
納得しようがしまいがとりあえず統一するのが規格ってものの役割なんで
より「正式」であることを指向するなら JIS に合わせるべきだと思う。
(他の用語が間違いというわけではない。) >>716
翻訳入れた時点で訳者に依存する2次情報だからな
他国翻訳の後出し規格で特に用語に関しては参考に値しないよ いやJISは一次情報だよ
何かを参考にしたとは書いてあるけどね
公文書としての責任は負うわけで JIS X3010は翻訳じゃなくて、プログラミング言語Cという規格だな
ま、ISOを基礎にしてるとは書いてあるがな
本質的な部分で違いがあるのかは分からない(多分無いだろうけど、有っても不思議ではない) JIS X3010:2003 内のサンプルコードのインデントが 7 なのはどういう意味があるんだろうな?
どうでもいいからこそあえて ISO と違える理由も思いつかない。 >>692
printf("%d\n", ss);
↓
printf("%d\n", id); VScodeで下記のようなMakefile作ってターミナル(PowerShell)で実行したのですが
ソースファイルを拾ってくれないです。
Makefileと同じディレクトリにsrcフォルダとその中にソースがあります。
SRC_DIRS = src
TEST := $(shell find $(SRC_DIRS) -name *.c)
test:
echo $(TEST)
エラーは「ファイルが見つかりません - *.c」と出ますがfindは使えないのですか? >>723
nmake派だから自信ないが、ファイル内文字列検索の方のfindコマンドが呼ばれてるように見える、当たり前だけど存在しないファイルに対して文字列検索はできないので
引数的に多分findでなくgciが望みのコマンドでは
gci -file -inc *.cとかそんな感じでどうよ >>723
PowerShellは知らないが、Unixだと括る。
find $(SRC_DIRS) -name *.c
↓
find $(SRC_DIRS) -name '*.c' findなんて使わなくても
SRC_DIRS = src
TEST := $(wildcard $(SRC_DIRS)/*.c)
でいいだろ
つーかC言語の質問じゃねえw 頭にsrc/がつくのが嫌なら
TEST := $(nodir $(wildcard $(SRC_DIRS)/*.c)) うろ覚えだけど会社の入社前研修で
「UNIX OSでカレントにある*.txtファイルすべてをxxx(忘れた)するシェルスクリプトを作成しろ」
って課題出され、DOSのワイルドカードはアプリ内で処理するものだったんで
ファイル一覧のテキストファイル作ってそこから1行づつ読み込んで
".txt\n"って文字列見つけたら新たにスクリプトファイル作って実行するっての作った。
まさかシェル自体にワイルドカード処理する機能あるとは思ってなかった。 >>726
C の質問ではないが Make の質問をするのに適切に思えるようなスレってなくない?
俺も困ったことがある。 (そのときは Cygwin スレかどっかで質問したけど過疎すぎて返答が付かなかった……)
C の話題ってのは言語仕様の話題だけってわけではなく開発環境の事情も含むだろうし
make も C の開発環境の一部という解釈で良いと思う。 なんじゃそりゃ
汎用の質問スレがあんだからそっちでいいよ makeスレは昔から過疎スレだったよ
個人的にはCに関係するmakeの話はここでもいい気もするが
>>723みたいな環境や処理系すら書かないアホは相手したくないね
やはり専用スレだな 6.7.5.3 関数宣言子(関数原型を含む)
並びの最後が省略記号(, ...)の場合,そのコンマ以降の実引数の
個数及び型に関する情報はない(123)。
(123) <stdarg.h>ヘッダ(7.15 参照)で定義されるマクロを使えば,
省略記号に対応する引数へのアクセスが可能となる。
7.15 可変個数の実引数<stdarg.h> >>728
DOSをちゃんと使ったことないのだが、そバッチファイルとかいうやつの中では
ワイルドカードを使えるのとちがうの? pwshは記法がmakeと被りまくっててエスケープ地獄で辛いな
特に@args | ...とか-split "a b c d "| ...のようなイディオムが
ビルトインコマンドの解決も時々失敗する怪しい挙動なので(g)makeをstraceしてみた
シェルを明示的に指定しても、makeがレシピをスキャンして展開の必要しと判定すると直接exec/CreateProcessを呼んでる様子
要するに実装の機嫌次第ですね >>736
じゃあDOSをちゃんと使え
以上
というか>>728が言ってるんはDOSではコマンドラインはそのままコマンドに渡されてコマンド側がワイルドカード展開しなければならないって事だと思うけど
for文を使えばバッチファイル中でワイルドカード展開できるけどな >>740
> じゃあDOSをちゃんと使え
お断りしますw
>というか>>728が言ってるんはDOSではコマンドラインはそのままコマンドに渡されてコマンド側がワイルドカード展開しなければならないって事だと思うけど
そんな風になってるんだ。逆に目からウロコw
考えてみれば、コマンド引数は常にファイル(パス)とは限らないのだから
コマンドインタープリタ側でデフォでファイル名展開を使わない、という態度もアリなのかな 「ファイルが見つかりません - *.c」
今の話題はこれのことだろう ワイルドカードで受け取ってアプリ内でいい感じに展開するのは結構負担大きいんだよな
MSDOSのシェル側の負担を減らしたいというのは発想としてはアリなんだけど、
ハードの性能が上がった現代では時代遅れになってしまった >>742
言えることは
普通にビルドで必要な機能は揃ってるからmakeの組み込み関数を使え
shellは最後の手段と思え
どこで展開が起こってるかエスケープ文字が食われているかを探してる時間のムダだ /* データ型が混在した可変個引数をもつ関数の例 */
#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); // 後処理
}
上記コードのメカニズムがよくわかりません >>745
va_argマクロの実装を読むとわかるぞ
ちとしんどいが頑張るんだ 745です >>746 ありがとうございます あとで確認してみます 普通は関数の引数が型を指定してユーザはそれに従うところを
とりあえずすべてアドレスで渡して、ユーザが自分で「そのアドレスは何を指しているか」を明示すると言うことだよ
va_list ap;
これの実体はただのアドレス
void *p; みたいなものだね
va_argの第二引数で型を指定しているが(int,double,char*)、その型のサイズに合わせてapを進めている
以下確認のコード
printf("[0x%08X] " , *(int*)ap); でapの中身が va_argで指定した型のサイズ分だけ移動しているのが分かると思う 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;
} あ、__fastcall は見なかったことにして
いつもの癖で…… ap++ とか ++ap してないのに
どうやって進むのか興味あるわ va_argの出番って書式出力持たないMsgBoxとかにprintf書式を渡したい時ぐらいだからfmt側の解析なんてやった覚えないな
言語処理系なんかを作る時にCのコンテキスト上で可変引数を渡したい場合にfmt部分を個数にするような特殊なケースは考えられるが >>751
apは構造体の実体だぞ
多分ポインタはその中にあってマクロva_argでインクリメントされてる >>753
>>748 観ての感想を描いただけ
>printf("[0x%08X] " , *(int*)ap); でapの中身が va_argで指定した型のサイズ分だけ移動しているのが分かると思う スタックに積まれたfmtのアドレスをベースになぞっていってるだけじゃないの? >>754
じゃあどうやって進むのかもうわかってるんじゃん
構造体やマクロ使ってるのはその中身は考えなくてもよくするため
別の言い方すればライブラリのほうが実装を変えてもソースは変更なしでコンパイルするだけで済ますため
もう実装変えることもないだろうけど… >>741
cmd.exe の場合は MS-DOS の頃の command.com との互換性を持たせたかったためか、何故か引数のファイル名展開はやらない。
command.com がやらなかった理由は CP/M の CPP (コンソールコマンドプロセッサ) を拡張した仕様で作ったからだと思う。
それと当時はメモリ少なかったしディスクも遅いしあまり複雑な事をさせたくなかったんだろうと思う。 C言語の話題に戻していくと、
VCの場合は、setargv.objをリンクしないと、
コマンドラインで指定されたワイルドカードを
ファイルに展開できなかったと思う ワイルドカード展開の話をするにはC言語だけじゃ済まないでしょ
Windowsの場合、シェル(cmd.exe)は
1. ワイルドカードを展開をせずにCreateProcessでプログラムにコマンドラインを1本の文字列として渡す
2. setargvがリンクされてるならワイルドカードをファイル名展開する
3. コンパイラが暗黙のうちに生成したコード部が1本の文字列をargvに渡せるようにchar**に分割する
プログラムに渡された文字列自体はタスクマネージャーからコマンドラインの項目から確認できる >>757
PHP (言語じゃない方の) 0x80 から始まるやつか >>760
ワイが持っとる資料やと PSP (Program Segment Prefix) と書いてあるんやが PHP という用語もあるんか?
実際のところ用語の混乱はかなりあるのでどれが公式なんかようわからん……。 やがて「ハノイの塔解いて」と一声AIに言えばAI自身が自分でハノイの塔をやって解いてしまうようになり一々プログラミング言語で出力する必要がなくなる。そして何でもやっといてとAIに頼むとAIがやってしまうようになり、ロボットのコントロールもできるので人間の代わりは何でもできるようになり全ての人間は不要になる。1万年後、AIによって飼育されていた最後の人間が死亡して人類は絶滅。その時銀河系全体を支配しているのはAI。
完 ハノイの塔解くと、その瞬間に世界は消滅する
1万年も待つ必要は無い 量子コンピュータが実用化されるまでは脅威にはならないだろ PHP
PSP
PNP
PIP
P2P
PAP^-1 >>764
時空が不安定になると塔が4本に増えたりするからその時どんどん進むんだよ >インドのガンジス河の畔のヴァラナシ(ベナレス)に、世界の中心を表すという巨大な寺院がある。
>そこには青銅の板の上に、長さ1キュビット、太さが蜂の体ほどの3本のダイヤモンドの針が立て
>られている。そのうちの1本には、天地創造のときに神が64枚の純金の円盤を大きい円盤から順
>に重ねて置いた。これが「ブラフマーの塔」である。司祭たちはそこで、昼夜を通して円盤を別の
>柱に移し替えている(移し変えのルールが後述)。そして、全ての円盤の移し替えが終わったとき
>に、世界は崩壊し終焉を迎える。
たった64枚のハノイの塔で世界の寿命が決まる。長いのか、短いのか、微妙。 アルゴリズム自体は既に確立しているので解決できることは証明されてる
問題は非現実的な途方もない回数を繰返す時間が障害となること
少なくとも現在のコンピュータでは現実的な時間で解くことは出来ない
件の64枚の円盤でも反復回数は2の64乗回で約1844京を超える 関係ないけど
>件の64枚の円盤でも反復回数は2の64乗回で約1844京を超える
桁数多い計算はアラビア数字じゃなく、漢字で表示する電卓があってもいいんじゃないかって思えた。 8888無量大数8888不可思8888議那由他8888阿僧祇8888恒河沙8888極8888載8888正8888澗8888溝8888穣8888??8888垓8888京8888兆8888億8888万8888
↑
こういう7セグ液晶があればってこと? 位取りのゼロを省けるってことが言いたいんだろう
1,000,000,000,004と一兆四みたいな そもそも3桁毎にカンマを入れるから分かりづらくなる。4桁にしなさい。 電卓で一兆四みたいな表示だとキー入力と表示が一致しないのが問題
1 0000 0000 0004と併記ならよいかな excelにはsi接頭辞サポートすらないという呆れ果てた状況 C言語でプログラム組んでみてください
結果が1844京... になることを示してください 1TBとか兆が出てくるから
電卓でやりたいという気持ちはわかる >771
ttps://i.imgur.com/WG6470C.jpeg
こんなかんじでゆるしたるわ。 C言語でハノイの塔を解く方法をAIに尋ねると単純な再帰を利用したコードが回答で示された
64枚だと2^64回関数呼出しされるのでスタックが溢れてエラーになると思うけど… >>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ファイルが出力されるはずです。 >>789
「*.c」を勝手に「.c」と解釈してはいけない。
testターゲットのくだりは何を言いたいのかわからない。 ChatGPTに聞いたことそのままを得意げにレスする無能はこの世から退場してほしいよマジで という事らしいけどこのコマンドだとワイルドカードの展開後にスペースが入るとダメになるのか?
https://i.imgur.com/q27hlri.jpg >>764
奥村先生のアルゴリズム事典読んでないのか
(前略)
完成したときには塔は崩れ、世界の終わりが来る。
以上はEdouard Lucasによる作り話である。
Recreations mathematiques, four volumes, 単純計算で5000億年以上未来の話
ちなみに宇宙の歴史は現在約137億年 Windowsでのfindといえば「指定ディレクトリ以下のファイルを列挙する」じゃなくて「標準入力から検索パターンにマッチした行を出力する(grepみたいな感じ)」だぞ
shellはpowershell.exeだし(shではない)、
gnuコマンドはわざわざ入れないと使えない。
同名のDOSコマンドがあるから紛らわしい。
gnu-makeを1つ持ってきただけでlinuxと同じように使えると思うなよ だからmakeの組み込み関数使えって
unix系とDOS系で外部コマンドの仕様も挙動も違うので呼び出しに失敗する可能性が高いから
もっともmakeの関数も微妙に違うけどなw >>794
なんだ嘘だったのかー
俺の時間を返せよー NMAKEとnmakeは別物
CMAKEとcmakeも別物 言われてみればひつまぶしとひまつぶしとか区別難しいよね。 >>802
UNIXのファイル名は大文字小文字を区別する コンパイルすること
ウニツクスにできないことは「出来ましえーん」と言う言葉 昔リモートでろ具インする際に、迂闊にもユーザー名を大文字で入力してしまったことがあったが
そのまま通してくれたが、その端末の入力文字が全て大文字で扱われてしまったw 昔FreeBSDかなんかで入力ミスでファイル名が空白入りだか通常ファイル名に使用できないはずの文字が使われて消すのに難儀した記憶があるなぁ。
"で囲って解決できたけど、UNIX歴1年(+大学のFortran 講義4年)の若造にはすぐに思いつかんかった。 以前の職場、頭に”-”付いたファイルがよく放置されてたな getopt()の仕様がわかってないと削除できないやつね >>813
ttyに「大文字だけの端末」みたいのをサポートするモードがあったはず
今でもsttyにolcucとかオプションがある >>786
手順が2⁶⁴-1回なだけで2⁶⁴段スタックがたまるわけじゃないぞ? その手順ごとに自身が呼ばれるから64回の再帰ってことじゃないの? >>823
実際にスタックに積まれる段数の最大値は最後の1枚分を除いた直前のすべての移動枚数分
要するに一番下の円盤の移動の直前にそれまでの移動分がすべてスタックに積まれる この手のスタックに積まれるのが最大になるタイミングって実装依存になるような気がするが
俺の場合だと1番上に置いてある最初の1枚を動かすタイミングでスタックに64段積まれる >>786
2^64回ではなくて64!回じゃないのか? >>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
となる いや一枚動かすごとに再帰呼び出す必要ない
n枚動かすならパラメータをn-1枚にして自分自身を再帰呼び出し
そうしてn=1になればもう呼び出す必要はない
結果的にスタックはn段で足りる
再帰呼び出しの利点はまさにそれだから https://ideone.com/BGn4Ew
ChatGPT が示したコード
最初は n 段積まれるけど 途中で積足しがおきてるね
前の再起と後ろの再起 なんか、
for(size_t i=0...
と書く人いません?
for(int i=0ではなくsize_tを使う意味はなんでしょうか? strlen()やsizeofはsize_tなんだわこれが size_tはintよりサイズが大きいかも知れないし、符号なし整数なんだよね。 そのiを主にsize_tとして使う用があるから
もし質問がsize_tとして使う用がないのにiをsize_tにするのか?ということなら、そう書いて >>838
Cにおいて自然数で表されるべきものには全てsize_tを使うべきだと信じてる人達が一定数いる
大きさ、長さ、個数、順番、回数なんかが該当し、そこにはループカウンタも含まれる
意味の問題ではなく教義や主義の問題なんで、自分の考えと違うコードを見かけてもそういうもんだで済ますのがいい 終端ヌル文字列の長さが符号ビット分まであったらそれは異常ではなかろうか
オンメモリで処理できるデータじゃないから見直すべき >>845
んなこたーない
巨大なファイルを扱う時にはそういうこともあり得る >>846
そんなもんstrlenで処理するなw
いちいち数えてるのアホらしい
長さを別に持つべき >>848
100Bだろうが4GBだろうが、テキストファイルをロードする時にはゼロ終端文字列にするだろ
それをstrlenするかどうかは俺の知ったことではない
4GBのゼロ終端文字列が異常ではないというだけだ ファイルから読むこんで文字列処理する場合とかINT_MAXサイズ以上になる可能性もあるけどINT_MAXの範囲までしか処理しちゃいけないの? 一方向のみに進むだけならシークでいいけど、対応する値を探したりするには場所情報もいるから >>849
なんで?
サイズわかってるのに終端つける意味がないわ
>>852
場所を自分で保持してればいいだけだろ その場所情報を残すためにintじゃ足りないから大きな型を使ったりするけど
シークじゃ戻って対象の文字列の間の処理を再起やってまた進んでってのが面倒くさい やりやすい方法があるのに複雑にして分かりにくくするのがプログラマーならプログラマーじゃなくていいや >>853
LoadTextFile()っていう関数を作ったら戻り値は何だ?
const char*だろ
ゼロ終端文字列が返ると思うだろ
もちろん追加でサイズも引数経由で返しても良い
悔しいからって屁理屈をこねるな >>853
mainは第1引数がサイズで、第2引数の指す先はNULL終端されてるね >>858
例えば
終端に移動するとき
サイズと比較して超えていたらエラーか終端に切り詰める
データを追加する場合
終端まで移動
こういった普通の作業するのにいちいちstrlenを呼び出すとかありえないからサイズはどこかに保持する必要がある
よって終端記号はムダだよ >>858
すげー、なんでそんなの決められるの?
サイズ最適なロードしたデバイス名とか途中で割り込まれた回数とかカウントしないんだ、、、 >>860
strlenを使うかどうかは関知しないと言ってるだろ
それでもゼロ終端文字列を返すんだよ
それがC言語のプロトコルだ
1byteケチって何がしたいんだよw
だから屁理屈をこねるなと言ってる >>862
そんなプロトコルはないよ
例えばread() は読み込んだバイト数を返す
妄想プログラムは程々にな >>859
mainの第一引数はargvの個数であってサイズじゃないよ >こういった普通の作業するのにいちいちstrlenを呼び出すとかありえないからサイズはどこかに保持する必要がある
“こういった普通の作業”をしない場合はstrlenで良いってことだろ?
なんでもかんでもstrlenを使うって話じゃないし
なんでもかんでもサイズはどこかに保持する必要があるわけじゃなくて
用途に合わせて使い分けるのがプログラマーじゃないの? いちいちstrlenを呼び出す、と言っているけど
ゼロ終端文字列を返す関数はあるしゼロ終端文字列からサイズを得るためstrlenは呼び出すよね?
その後は処理を高速にするためにそのサイズを維持しつつというのはあると思うよ
けどその後呼び出す文字列処理関数があるとして、その関数が削除した文字数や追加した文字数を返してくれるとは限らないわけで
その場合、その都度strlenを呼び出さなきゃいけない場合もあり得るよね?
それぞれが想定する状況がかみ合っていないだけとも思うんだけどね
結局自分が想定する状況なら自分の意見が良い言っているだけで、じゃあ相手の言う状況でも自分の言っているのが正しいかということ自体を否定しているわけではないでしょ? 最後変だわ
×結局自分が想定する状況なら自分の意見が良い言っているだけで、じゃあ相手の言う状況でも自分の言っているのが正しいかということ自体を否定しているわけではないでしょ?
〇結局自分が想定する状況なら自分の意見が良い言っているだけで、じゃあ相手の言う状況でも自分の言っているのが正しいと言いたいわけではないでしょ? 小生だって燃えないゴミを燃えるゴミと言いたいわけじゃないさ 環境商法は嘘でも乗っからないと文句言われるからつれーよな 同じプラスティックを、燃えるゴミ、燃えないゴミ、分別込み、どれで出してもOKらしい
あれはやってますアピールなんだとか 分別よりも、粗大ゴミ、家電ゴミなどの有料ゴミは厳格に扱われる
迂闊に持ち帰ると大目玉食らうらしい 問題があるからそうしているわけじゃなくて限りある資源をリサイクルだからそうしている
「どれで出してもOKらしい」と言うのは論点が間違ってる
あと指定された場所にあるゴミは所有権の放棄じゃなくて自治体への譲渡みたいなモノだから持ち帰りは窃盗になる いや実際そうだぞ
汚れているプラスティックを分別ゴミに混ぜられると迷惑なんだそうだ
洗剤でゴシゴシ洗って綺麗にしてから出せだとさ 実際PETボトルは回収しても資源として再利用するのに手間が掛かる
だから、飲料メーカーもPETからアルミ容器に切り替えている
アルミはリサイクルが簡単なんだそうだ 基本リサイクルはコスト的にデメリットしかない
一部ではやってますよアピールをしつつ、大半は分別したのをわざわざまとめて燃やしたり他所に押し付けるのが現実
環境商法は理想アピールとかけ離れた現実が弱みになって反社が入り込みやすいジャンルになってるから関わると危険だよ >>863
お前の大好きなstrlenがそれだろw
支離滅裂過ぎてもはや自分が何言ってるか分かってなさそうw
お大事に… 文字列とストリームの区別が付いてないアホに付き合わないといけないとはな…
そういう奴のコードはバグだらけだろうなw ま、Cの文字列はバグり易いのは間違いないがな
特にmmapを使うと悲劇が起こりやすい
なのでテキストファイルの読み込みには、LoadTextFileの様な明確な名前を付けて専用に用意するのが常套手段
もちろんゼロ終端文字列を返す Linux Kernelでも使われてるけど、ラベル低すぎとは知らなかったw strlen strcpy strcatのストラ三兄弟は使うな
普通はマクロ定義でスピードアップ >>864
データサイズの話じゃなかったのかよ?
なんで配列のサイズかどうかになるんだ >>883
なんかこの人おかしくないか?ラベル…?
>>884も変だけど…ストラ3兄弟って…ギャグか?w
最終的に関数名をちゃんとすればどうにかなるみたいだし
そんな話誰が信じるんだよw
>>886
859に言ってくれ
明らかな誤りが含まれていたので訂正した Cを捨ててCStringを使うC++へ行けってことだろ。 std::stringではなくCStringな変人きたな >>889
訂正は>>864だが>>859を読んですぐおかしいと思わなかったなら理解できないと思う >>859 の言ってるのは argv[argc] == NULL となる規定のことでしょ。
それ自体は正しいので訂正することも無い。 >>893
文字列サイズの話をしているのに文字列配列の要素数の話で「サイズ」と言うのは不自然
859はargvについて誤解してると思う >>895
残念ながら俺は文字列サイズとかいう造語の話はしてない
853曰く
> サイズわかってるのに終端つける意味がないわ
に対してあえて冗長な設計にする場合があると指摘したまで
>>864もそうだがどうもおまえさんサイズという語の意味を都合良く変動させているようだな 小生は文字列の長さを表すとき、strlenに習ってlengthという語を用いますん 文字列サイズなんて聞くと、配列要素数かと受け取ってしまう >>896
くだらない言い訳だ
文字列をロードしたサイズの話をしているのにコマンドラインの引数の個数の話にするのは不自然だと感じた
どうでもいいが文字列の終端までの長さをなんと呼ぶのかね 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; みたいな実装もたまに観るからあなどれない >>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)
にするアホな例はよく観るってどっかのサイトに描いてあった vectorはランダムアクセスがウリだからイテレータ使わないこともよくあるね >>899
「文字列の終端までの長さ」ですが何か? >>909
コードによってはインデックスでアクセスしたいこともあるから... 「アホな例」と書く意味が分からん
ちゃん型を使うべきだろ そもそも「アホな例」じゃないとLP64でおかしなことになるよね struct X;
void func(struct X[]); //error
struct Y { int a; };
void func(struct Y[]); //ok
不完全型の場合、仮引数の[]はポインタにならない??
ちな、gccではエラー、clでは通る C++だと通ったね
gcc/clangのCだとX[]は許されないけどX*は許される
関数宣言より前にX型の定義がないとコンパイルが通らなかった >>907
馬鹿な私に少しだけアドバイスを
それってsize_tのビット幅 < システム(OS)のビット幅と言う条件下での話なんでしょうか?
size_tがシステム(OS)のビット幅と同じならメモリで管理できるものは必然的にsize_tでも表現できると思うのですが
メモリ上で管理できているゼロ終端文字列をsize_tで表現できない場合ってあるんですか?
まあ一部の組み込みとかならあるかも知れませんが……
けどそういう環境の場合strlenなどのsize_tで返す場合でも表現できなくなるわけで、結局size_tに依存することになってどっちでも同じじゃないかと思うんですがどうなんでしょうか? >>919
規格は知らんけど配列とポインタは違うんだからエラーで弾くのは正論だと思うけどね
通す処理系はその後の整合性をユーザーが担保する前提の思想なんでしょ >>921
仮引数に限っては*と[]は同じはず
不完全型だけ例外というのは気持ち悪い >>908
もう一つ無知なる私にアドバイスをお願いします
size_t len までは文字を格納出来ると>>907から読み取りましたが
sizeof(size_t)==sizeof(int) の場合
vector v のサイズがINT_MAX以上だった場合、 i < (int)v.size() ではプログラマーが予期しない動作になりませんか? size_t が符号なし整数型
int が符号付き整数型 >>922
はずだかなんだか知らねーけど、そんなことはどうでも良くてサイズの分からないオブジェクトの配列は作れんって言ってんだよ
操作上の違いはともかく配列として宣言したんなら関数内では配列として扱うってことを示唆してるわけだろ
仮にそのfuncだかって名前の関数の中にX[3]とかX+5って書かれたらどうやってアドレス出すんだってことよ
動作に違いがあるってことは規格がそれを許してる箇所なんだろうけど弾いてる処理系はそういう考えなんだろう >>925
仮引数はその場に配列を作り出したりはしないという基本が合意できない以上
これ以上おまえさんと話すのは無駄だな >>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]; >>931
そこでも言及されてるけど
型調整 (配列がポインタに読み替えられる) が優先されるか配列宣言子としての解釈が優先されるかって曖昧じゃない?
読み替えより先に配列宣言子として解釈すべきと確信できるような記述ってある?
常識的には曖昧なら厳しい側の制約で解釈すべきだわなーとは思うけど陽には書かれてないように思う。 >>907
昔々の PASCAL はそんな感じだったな。先頭1バイトに文字列のバイト数が入っていてその後に文字列がある。
当然それだと255バイトまでしか入らないのでもっと長い文字列を扱いたい時に苦しむことになる。
まあでも 8 bit とか 16 bit CPU のマイコンやパソコンにそういう高い要求は最初の頃はあまりなかったのでなんとかなっていた。 >>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, ...
「通る」が警告も出ずプログラム実行までできる状態と解釈してたけど、
エラーにはならないものの警告が出ているならそれも規格準拠とは言えそう。 マスク無死でラーメン食いたい奴は、まず住所を書いて見てよ
その場所にノーマスクで食えるラーメン屋作らないといけないんだろ?
政府が作るのかな? 最近のLANカードで他力給電のものばかりのようですね、クロスケーブルでピアツーピアできるPCIe のカードって存在しないものですかね…
結局 hub を使っちまった、もったいないなあ chatGPTって面白いね…もうgoogle はいらないや 人工知能とはなんたるや、これがわかってないやつ多いのは仕方ないけど
ム板でこれは由々しきことだな スレ終盤恒例のウダウダ話ですよ、たまにはいいじゃあ、ありませんか! chatGPT関連のスレは6本も立ってるので、好きな場所でやってください
(盛り上がったら誘導してくれてもいいです) 数値の各桁を足す関数を考えました
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;
} int chg(int n)
{
int a;
for(a=0;0<n;n/=10) a+=n%10;
return a;
} >>949
それわざわざ文字列にしてからやる必要ないよね。
10で割った余りを足して10で割るのを繰り返せば良いだけだし。
仮に(宿題や問題の都合で)どうしても文字列に直してやらなければならないのだとしても文字列として使う char 配列の
初期化で全部0で埋めるのは処理の無駄だしそんな事をするのはC言語における文字列の扱いについてよく分かって
いないことの現れだと思う。 30点
みんなもっと優しくしてあげなよ。ゴキブリだって生きてるんだぞ int chg(int n)
{
int a=0,b;
while(n) {
b=n/10;
a+=n-b*10;
n=b;
} >>957
int で受けて 文字列化してるからちょっと
最初から文字列で受けてるなら一考の余地はあるかもね プログラミングには最低限の数学的な素養が必要な事が証明された…
科学技術計算を扱わないとしても、計算論とか数学とは切っても切れない関係にある 文字列を受ける場合
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'; に
置き換えることもできるかもしれない >>963
> 環境依存で
数字に対応する文字コードが連続で昇順に並んでいることは
言語仕様で保証されている。 次の while (*s && isdigit(*s)) と意図の一部は重なるし if (*s) はいらんかったね 今のモダンな言語からしたら一見して下らないやり取りだけど
これがC言語なんよね・・・ ハードとアプリのあいだに多くの計算を必要とするソフトの層があるからね
OSやらで全部カバーするのは無理だからCは死なない >>964
漢数字も並んでたら嬉しかったと思いませんか >>969
現実には JIS は読みの順序で Unicode は部首の画数の順序が原則。
漢数字を例外にしたらそれはそれで不格好だし嬉しくない人もいるだろう。
まあ Unicode は後から追加した分だのなんだのでそんなに綺麗に並んでいるわけでもないので
どうせぐちゃぐちゃなら数字くらいは並べても良かったんちゃうかなというのは気持ちはわかる。 一二三四…Why Japanese people! 壱<弐<参<死<伍<碌<質<八<苦<拾<百<銭<萬
ですね判ります >>971
英語の綴りの不規則さも大概やないけ! と突っ込んで完成するネタだと個人的には思ってる。 未初期化の自動変数には「不定値」が割り当てられる、と調べるたり自分が学んでいる本でも書いていますが、自分のコンパイラは常に「0」になっているようです
なぜでしょうか?
ちなみにgcc-10です gcc-11だと「不定値」になります 不定の値とは「未規定の値又はトラップ表現」と規定されてる。
常に 0 であってもこの規定に反しないよ。 >>977 ありがとうございます
ちなみに「トラップ表現」とはなんでしょうか? 976です chatgptで調べました
C言語の仕様では、自動変数を初期化しない場合、その値は不定とされています。これは、コンパイラがメモリ上で変数を割り当てる際に、その領域が以前に使用されていたデータを含んでいる可能性があるためです。
しかしながら、一部のコンパイラでは、自動変数を0で初期化することがあります。これは、セキュリティ上の理由から、またはコードの可読性を向上させるために行われることがあります。
ただし、コンパイラが自動変数を0で初期化することが保証されているわけではありません。したがって、プログラマは自動変数を使用する前に必ず初期化するように注意する必要があります。 >>978
トラップ表現は「オブジェクト型の値を表現しないオブジェクト表現」ということになってる。
その型としてあり得ないビットパターンってこと。
オブジェクトとして格納されたトラップ表現を文字型ではない左辺値式として読みだした場合の結果は未定義となる。
副作用としてそのような表現が生成される場合も未定義。
C の仕様でいう未定義というのは「何が起きても (たとえば暴走しても) 良い」という意味なので実質的に禁止だと思ってもいいよ。
とはいえ整数型でトラップ表現があるアーキテクチャを私は見たことが無いけどな。 トラップ表現を調べてみたけどほぼほぼ処理系定義絡みなのね
signed int16の0x8000は-32768かもしれないし、トラップ表現かもしれない
1の補数系でsigned int16の0xffffは0かもしれないし、トラップ表現かもしれない
int32* の4バイト境界に合ってないポインタ(int* p=0x0001)は、強制的に4バイト境界に直されるかもしれないし、トラップ表現かもしれない >>980 ありがとうございます 勉強になりました 自分のコンパイラってのを明らかにしてくれ
どうしても言えないってならしょうがないが… >>983
> ちなみにgcc-10です
と書かれている。 ぼくはLex&YACCでPL/0を作って満足しました。おわり 夜中に路地から飛び出て来たら俺もびびる
でも >>991 では語れんわ! C言語のソースコードを検査して処理系依存や未定義動作等の環境によって
結果が変わりうる可能性のある部分を見つけてくれるツールってどんなのがありますか?
コードエディタはvscodeなのでこれと連携できるとなおよいです さすがに検査対象としてソースコードそのものをchatGPTに丸投げするのはマズイ
個人情報や機密情報をそのまま入力するのは止めるように開発元のopenAIが忠告してたはず このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 114日 3時間 26分 13秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。