X



C言語なら俺に聞け 160
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ ff63-dxp0)
垢版 |
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
0002デフォルトの名無しさん (アウアウウー Sa1f-SHOq)
垢版 |
2022/12/28(水) 15:59:24.74ID:wx2BQ76Ga
int main(int a, char **p)
{
return main(a, b);
}
0011デフォルトの名無しさん (ワッチョイ c12d-tb1I)
垢版 |
2023/01/07(土) 08:38:32.97ID:kxyDDio80
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くらいで導入してほしい
0014デフォルトの名無しさん (アウアウウー Sa85-DH5p)
垢版 |
2023/01/11(水) 12:02:46.97ID:6xJiw1N1a
Cのコードだけど
C言語スレにふさわしい話題ではないな
0019デフォルトの名無しさん (ワッチョイ caad-f6s+)
垢版 |
2023/01/15(日) 04:48:51.36ID:FV+qvPCN0
・ 性器分布と聞いて思い浮かんだイメージ

海底にチンアナゴが沢山居て出たり引っ込んだりしている分布
0042デフォルトの名無しさん (ワッチョイ cd35-5Koo)
垢版 |
2023/01/16(月) 21:36:15.99ID:g4WuDF5W0
エントロピーって乱雑さのことだろ
温度は熱さ
エントロピー源は「温度源」と同じ分類のワードだな
なにそれ
0043デフォルトの名無しさん (ワッチョイ cd35-5Koo)
垢版 |
2023/01/16(月) 21:37:06.90ID:g4WuDF5W0
ま、どうでもいいがw
0044デフォルトの名無しさん (ワッチョイ 1dc2-K8ze)
垢版 |
2023/01/16(月) 22:09:50.55ID:M8pzDDkF0
せめてググってから来いと言ってるだろ
ドヤ顔で無自覚に恥を晒してんじゃねえ

アホをニヤニヤ眺めるのは基本的に楽しいが
おまえはその域にさえ達していない

・・・あ、もしかしてアドレスがハッシュだとか熱弁してたやつか?w
0045デフォルトの名無しさん (ワッチョイ cd35-5Koo)
垢版 |
2023/01/16(月) 23:13:48.33ID:g4WuDF5W0
ググったけど特にメジャーではなさそうだったからさぁ
そもそも日本語としておかしいからそりゃそうだわな
0049デフォルトの名無しさん (ワッチョイ cd35-5Koo)
垢版 |
2023/01/17(火) 00:23:19.36ID:NbLfYJo10
温度源ってワードでも温度に関係あることはわかるわな
そんなワードの意味は知らんがw
0050デフォルトの名無しさん (ワッチョイ cd35-5Koo)
垢版 |
2023/01/17(火) 00:25:59.94ID:NbLfYJo10
あぁ、そもそもエントロピーという情報理論の用語を知らないって思われてたのか
ずれまくってんなぁ
0051デフォルトの名無しさん (ワッチョイ cd35-5Koo)
垢版 |
2023/01/17(火) 00:29:29.11ID:NbLfYJo10
ま、どうでもいいがw
0066デフォルトの名無しさん (アウアウウー Sa91-HawO)
垢版 |
2023/01/17(火) 20:13:41.53ID:reGY8TLTa
弄られたくなきゃ言葉の定義くらい考えてからレスしな?w
0069デフォルトの名無しさん (ワッチョイ cd35-5Koo)
垢版 |
2023/01/17(火) 20:23:55.07ID:NbLfYJo10
変に反応し続ける割にはGoogleに責任を押し付けるばかりでここまで情報量ゼロだもんな
温度源みたいな謎ワードと同類ではないということを示すロジックがあるなら示して頂こうか
0073デフォルトの名無しさん (ワッチョイ cd35-5Koo)
垢版 |
2023/01/17(火) 20:48:05.96ID:NbLfYJo10
誤解のフリをして突かれている部分を誤魔化していますがそのような安易な策が通じると思っているのでしょうかね
ま、思っているからこそ実践しているのでしょう。
0075デフォルトの名無しさん (ワッチョイ cd35-5Koo)
垢版 |
2023/01/17(火) 21:00:12.90ID:NbLfYJo10
いえいえ、そのようなことはございませんよ
どの辺でそのように判断されたのか是非お聞かせください。
もちもん、特になければ今まで通り一方通行でお話しを続けられても構いません
0076デフォルトの名無しさん (ワッチョイ 1dc2-K8ze)
垢版 |
2023/01/17(火) 21:05:58.17ID:qA7lxKdi0
まあ匿名掲示板だからね
シラを切れば全てをリセットできる

今までの引っ込み付かなくなったあんたがいなくなって
マトモな別人になってくれるならこっちもありがたい
0078デフォルトの名無しさん (ワッチョイ cd35-5Koo)
垢版 |
2023/01/17(火) 21:30:32.61ID:NbLfYJo10
このように度々挙がっております指摘についての弁明を避け続ける一方で根拠に乏しい我々側の非についてはひたすら高々と掲げる様子を平仮名5文字でたしか何と言うのでしたっけ。。。
0080デフォルトの名無しさん (アウアウウー Sa91-HawO)
垢版 |
2023/01/17(火) 21:40:34.37ID:4lzoCN/Pa
>シラを切れば全てをリセットできる

なるほど
まさにそれを自身で実践していると言うわけだ
表明助かる
0082デフォルトの名無しさん (アウアウウー Sa91-HawO)
垢版 |
2023/01/17(火) 21:44:32.57ID:4lzoCN/Pa
突然クオークとか言い出すあたりもう末期でしょ
もっとちゃんとシラを切り通さないと
0085デフォルトの名無しさん (アウアウウー Sa91-HawO)
垢版 |
2023/01/17(火) 21:55:32.49ID:DPhLiFAha
「熱雑音」でスレ内検索したら>>64が出てきた
おい、おまえなんか言われてんぞ
0086デフォルトの名無しさん (ワッチョイ cd35-5Koo)
垢版 |
2023/01/17(火) 22:02:12.15ID:NbLfYJo10
この乱文ぷりを見るに例のレスも同じように何も考えずに書かれたのでしょうねぇ
そしてその雑さ原因の指摘に腹を立てて喚き散らかすと
もはや救いようがありません。
0088デフォルトの名無しさん (アウアウウー Sa91-HawO)
垢版 |
2023/01/17(火) 22:27:26.96ID:F7Tmfdoea
エントロピー源があるならエントロピーシンクもあるのかね
0093デフォルトの名無しさん (アウアウウー Sa91-HawO)
垢版 |
2023/01/17(火) 23:11:09.87ID:vHSNNv2Oa
壊れたレイディオ
0096デフォルトの名無しさん (テテンテンテン MMde-tpib)
垢版 |
2023/01/18(水) 00:59:14.46ID:lSAVVSLnM
本当の乱数なんて要らん
要は直近の乱数が予測困難であれば良いわけで、周期が長ければ予測が困難だ
使い方が間違ってて短周期になってしまうというセキュリティホールは見たことがある
0102デフォルトの名無しさん (スップ Sdea-3JZN)
垢版 |
2023/01/18(水) 18:41:44.13ID:bRSYEzcmd
なーんだ待ってたのにまだ出来ないのー? >>15
あくしろよ

正規分布からランダムにサンプリングするだけでしょ?
再帰的と書いたのはコード量を抑えたい、と言う理由なのよー
ボックスミューラーは使わないよね
0114デフォルトの名無しさん (ワッチョイ beda-jwHR)
垢版 |
2023/01/18(水) 22:16:14.48ID:fAl7sUlA0
組込み用途ではSFRのアドレス番地に割り当てた変数に対して
char型と8bitのビットフィールド構造体の共用体
short型とchar型2要素の配列と16bitのビットフィールド構造体の共用体
などがよく使われる
0117デフォルトの名無しさん (ワッチョイ 9569-hn8B)
垢版 |
2023/01/19(木) 08:31:08.40ID:m5q+i06r0
>正規分布からランダムにサンプリングするだけでしょ?

>ボックスミューラーは使わないよね

なんかおかしくない?
前者は正規分布関数の値をランダムに抽出する 値域は 0 ~0.3989
後者は分布が正規分布となる乱数 値域は -∞ ~ ∞ (実用的には -4 ~ 4)
0122デフォルトの名無しさん (ワッチョイ 9510-f6s+)
垢版 |
2023/01/20(金) 13:52:09.56ID:KaoK9Arp0
8bit時代にBASICのRND関数をアセンブラから呼び出す方法知らなくて、
ROM上のバイナリーデータから乱数作るルーチン組んだの思い出した。
(ROMから2バイトxn個のデータとって前回出力した値に足したりXORしたりと)

16bit DOS環境になっても似たようなの作ったなぁ(ROMの代わりに乱数表?作った)。
0128デフォルトの名無しさん (スッップ Sdea-2YtF)
垢版 |
2023/01/20(金) 19:28:35.95ID:R9yntGVvd
>>127
そういうCPUやBASICROMに依存する方法は最新機種では動作が変わったり予測できないので商業レベルではやらなかった
かわりに線形合同などのアルゴリズムを使った
アーケードのプレイデモではジョイスティックとボタンの記録だけ取って再生してメモリを節約してたので
毎回同じ乱数パターン(敵の移動や弾発射)が獲得できないと困るので
0132はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0a3e-w88e)
垢版 |
2023/01/20(金) 21:21:15.74ID:FDJF8fJ70
>>129
乱数源自体は良質なものだという前提で、
0~10 が欲しいときに単に %11 にすると小さい値のほうが少し出現率が高くなる。
たとえば乱数源がバイト単位だとすると、
255 以下で最大の 11 の倍数 (253) を超えた分 (254~255) が出現率を偏らせる原因。

だからそのような値が出たときに捨てて次の値を使用することにした上で %11 すればいい。
C++ の std::uniform_int_distribution などはだいたいそういう実装になってる。
0133デフォルトの名無しさん (ワッチョイ 6a36-f6s+)
垢版 |
2023/01/20(金) 21:27:39.82ID:A1RdTars0
アセンブラで

MOV AL,8bit 乱数
MOV BL,欲しい整数乱数最大値+1
MUL BL
;AHに0からBL-1までの乱数が入る

ってなことやってたような気がする。
計算上最大値の出現率が低いみたい。
16bitに拡張すれば多少改善。
0136はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0a3e-w88e)
垢版 |
2023/01/20(金) 23:11:55.26ID:FDJF8fJ70
ファミコン、スーパーファミコン時代の有名ソフトの乱数生成の仕組みが今ではかなり明らかになってるが、
ドラクエとかファイナルファンタジーとかでも思ったより場当たり的な雑な仕組みで驚く。
こういう用途だと多少の性質の悪さもそれはそれで味になるということもあるんだろう。

シミュレーションとか暗号とかに関わるものだと理論的な裏付けがないと恐ろしいが……
0140デフォルトの名無しさん (ワッチョイ cfcf-Jpma)
垢版 |
2023/01/21(土) 00:55:32.36ID:iEE3pXT90
>>137
周期の話じゃないよ 乱数発生器の下位ビットはランダムじゃないことがあるって話だよ
全部同じ値だったりrand()%2で0と1が交互に順番に出てくるだけだったりするから上位ビット使おうってこと
自前で乱数を作る際にmodを使わないなんてのはC言語のFAQレベルの常識の話だからちょっとネットでもあさって勉強すればすぐ身につくよ
それ以前に良い発生器を使えばいいっていうのはその通りだね
0141デフォルトの名無しさん (テテンテンテン MM7f-TAsf)
垢版 |
2023/01/21(土) 01:15:16.87ID:EJn7glvGM
>>140
オマエが無知なの分かったよ
下位ビットが規則的になるってのは何も考えてない線形合同法だけの性質だ
msvcrtのrandは線形合同法で求めた32bitの内上位16bitを下位にシフトしてるから、そういう性質はない
他の長周期な乱数はなにもしなくても当然そんな性質はない
0142デフォルトの名無しさん (テテンテンテン MM7f-TAsf)
垢版 |
2023/01/21(土) 01:36:04.58ID:EJn7glvGM
ちなみにLinux(glibc)で% 10で試しても、偶数と奇数が交互に続くと言うことはなかった
カルドセプトで話題になった乱数のバグは、自前で線形合同法を実装したから起きた問題だ
普通にSDKの乱数を使ってたら起きなかっただろう
0143デフォルトの名無しさん (ワッチョイ 7f36-88l+)
垢版 |
2023/01/21(土) 02:05:39.28ID:sslkm/QP0
>135
8/16bit時代のティルナノーグってゲームがシナリオコードっての使ってマップやシナリオを自動生成するらしく、
まぁ多分シナリオコードを再現性のある乱数のキーにしてるんだろうと。
0144デフォルトの名無しさん (スッップ Sd1f-iFXH)
垢版 |
2023/01/21(土) 05:00:16.98ID:Q9FQ3lI1d
>>141
結局下位のほうに周期性が現れやすいというのは肯定してるなw
ライブラリのを仕組みもわからずそのまま使うと問題が起きた時に危険なので自前で作ったほうが楽なこともあるんだよ
移植の問題もあるから
0146デフォルトの名無しさん (テテンテンテン MM7f-TAsf)
垢版 |
2023/01/21(土) 12:57:12.01ID:EJn7glvGM
>>144
線形合同法そのままの下位ビットはランダム性が低いから上位16bitを使うという実装がされてる
これは%で下位ビット使っても何も問題無い
他の乱数(例えばメルセンヌツイスターとか)とかも下位ビット使っても何も問題無い
オマエは何が言いたいんだ?
乱数イコール素の線形合同法と決めつけてんのか?
0149はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-j5s0)
垢版 |
2023/01/21(土) 23:09:55.12ID:AnImjWZM0
メルセンヌツイスタは予測はしやすいので暗号に向かないって話じゃなかったっけ?
理論に詳しいわけじゃないけどストリーム暗号だと生成した乱数を
ほとんど順序通り使うことになるので素直に使うと弱い暗号になってまう。
それをカバーする案がどこかで出ているとかいう話なのかな?
0150デフォルトの名無しさん (ワッチョイ 7f47-j5s0)
垢版 |
2023/01/21(土) 23:25:57.01ID:PxhUXXTz0
>>148-149
生成したMT乱数をハッシュに通して xor マスクに使えば今すぐにでも実装できまますが、馬鹿みたいにコストが高い
もっとお気楽に「暗号論的に安全な」マスクを生成する方法があるはず、と踏んでいます

>>149
生成された暗号列から、暗号生成系内の状態を推測する手段が
*****「ありうる」*****
というだけで、実際に MT において予測しやすいかどうかは、また別の問題かと
0151デフォルトの名無しさん (ワッチョイ d3a7-Pfi1)
垢版 |
2023/01/22(日) 06:45:18.91ID:5LyKSzcv0
メルセンヌツイスタは暗号論的乱数ではないからな
標準の範疇ではrandom_deviceと併用することで暗号論的乱数を作れる

# 俺はrandom_deviceにハメられたことがあって不信感持ってる
0155デフォルトの名無しさん (ラクッペペ MM7f-qqxO)
垢版 |
2023/01/22(日) 11:55:01.35ID:2NQ69pgqM
擬似乱数は内部状態から数列を計算して外部出力しているのであって、出力された数列の結果だけから内部状態を計算して次回出力を予測するのは難しい
623もの内部変数をすべて確定させようとすれば途方も無いことになると思うけど
0158デフォルトの名無しさん (ワッチョイ ff02-Jpma)
垢版 |
2023/01/22(日) 17:32:55.31ID:KzI8pxO80
現実で乱数で問題になるのは中周期
短周期は誰が見ててもすぐに欠点がわかる
中周期は人間が見てわかりづらいけど
へたをすると推測されうる

本当に重要な場面では線形合同法は使わないね
0176デフォルトの名無しさん (ワッチョイ cf63-88l+)
垢版 |
2023/01/23(月) 19:37:29.31ID:ZftbX+tS0
現在5chで使っているIDもハッシュ関数使っています
掲示板毎の番号、日付、IPアドレスの組み合わせ32ビットを
16ビットを求めてます
そのため、IDから元のIPアドレスは特定不可能とされてます
0187デフォルトの名無しさん (ワッチョイ cf63-88l+)
垢版 |
2023/01/24(火) 00:14:26.83ID:D+LPvIAC0
この掲示板で使ってるIDは、実際に衝突している
32ビットのバリエーションがある対象を16ビットパターンに圧縮する
どの位衝突が発生するか、簡単に計算で出せるだろう
0188はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-j5s0)
垢版 |
2023/01/24(火) 00:47:30.90ID:Ago7Tr1G0
>>183
元になる情報より小さい空間への写像なんだから当然に衝突することはありうるよ。
確率が均等になるようにデザインされるのが普通だが。

それとハッシュといっても均等でありさえすればよいハッシュテーブルなどに使うハッシュ関数と
意図的に衝突させるのが困難な暗号学的ハッシュ関数は事情が異なる。
0193デフォルトの名無しさん (スップ Sd1f-N2va)
垢版 |
2023/01/24(火) 07:45:39.55ID:eIuiRJ7Hd
>>190
いや、訂正なんて求めてなかった
あくまで検出さえできれば
点検なり再送なり対応はどうにでもできる
ちまちま訂正を試みて挙げ句不確実とか
バカバカしくて眼中になかった
0204デフォルトの名無しさん (ラクッペペ MM7f-qqxO)
垢版 |
2023/01/27(金) 08:04:21.64ID:DHOIN7NEM
パスワードなどを暗号化して保存する時ハッシュ値を保存する
他のパスワード値と重複することが無いように完全ハッシュとする
万一衝突すれば他人のパスワードが誤ってすり抜ける可能性が生じる
0205デフォルトの名無しさん (ワッチョイ cfcf-Jpma)
垢版 |
2023/01/27(金) 09:53:14.54ID:hWSIv7AR0
んなアホな
完全ハッシュの説明はともかく、パスワードに関してはIDとペアで使うんだから他人のパスワードと被ろうがどうだろうが関係がない
そもそもソルト使うんだからuser1とuser2が同じパスワードを使ってもハッシュ値は別になる
0209デフォルトの名無しさん (ワッチョイ cfcf-Jpma)
垢版 |
2023/01/27(金) 11:02:54.46ID:hWSIv7AR0
MM7f-qqxOは衝突がないっていうのがどういうことなのかなんか勘違いしてるんだろう
そういうもんを用意したとして>>203のいう通り強度なんかめちゃくちゃ弱くなるんだからさ
いずれにしても破綻するとか言われたところで世の中は衝突ありのSHA-2使ってんだからもうちょい勉強しとけ
0211デフォルトの名無しさん (スッップ Sd1f-P0Of)
垢版 |
2023/01/27(金) 18:34:56.90ID:I0K5YroCd
>>199
ちょっとした変換ミスだろ?
あるシードを与えてそこから連続的に乱数を大量に取得してそれらを並べてみたら、あら不思議 平均0分散1のヒストグラムができました、てなモノが欲しいだけなのに・・・
0215デフォルトの名無しさん (アウアウウー Sa47-hj3w)
垢版 |
2023/01/28(土) 14:42:34.89ID:dMjf5U6fa
>>214
平文ならパスワードが違えばマッチすることはない
ハッシュだとパスワード違うのにハッシュ値が同じになる(ことが理論的にはあり得る)から違うパスワードでも通っちゃうって話だろ
0218デフォルトの名無しさん (ワッチョイ 4ecf-2biX)
垢版 |
2023/01/28(土) 15:29:16.38ID:x6yOEZAM0
攻撃に非現実的な時間が必要ってだけであって可否を問うなら可能に決まってんだろうよ
ちょっと考えれば分かると思うんだが、できますかとか脳ミソ幾分欠損でもしてんのかね?
0222デフォルトの名無しさん (テテンテンテン MMb6-YANd)
垢版 |
2023/01/28(土) 17:23:18.26ID:btPcpkQFM
パスワードは間違いが続くと、暫く時間たたないとログイン出来なくすればブルートフォースもほとんど不可能になる
なのでハカーは総当たりなんてせずに、何処かで漏れたIDとパスワードを違うサイトで試すだけだ
0231デフォルトの名無しさん (ワッチョイ 1a34-5WkL)
垢版 |
2023/01/29(日) 09:01:19.16ID:6KJkihSb0
おまえの勝手な仮定が前提だからな
こっちにゃ指摘に聞こえてねえんだよ

ストローマン攻撃なんて幼稚な誤謬をするやつが
どの口で技術板に向いているとかぬかすんだアホが
0240はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b63e-fO7+)
垢版 |
2023/01/29(日) 15:19:25.16ID:2OIx0YXk0
>>236
機能するために必要なデータ (プログラム) を暗号化してしまうとかいった方法が考えられる。
必要なデータを得るために正しい鍵が必要なら正しい鍵がないとどうしようもない。
そのへんの一連の技術は「耐タンパー」とか呼ばれてるからググってみて。

ライセンスで制約を付けるから技術的なロックは頑張らないと割り切るのもひとつの手だし、個人製作のシェアウェアはそんなもんだよ。
0263デフォルトの名無しさん (ワッチョイ 4e63-+rQD)
垢版 |
2023/01/30(月) 14:15:02.42ID:dm4YanUU0
米国家安全保障局 (NSA) は 10 日、メモリ安全性の問題に対応するためのガイダンスを公開し、
可能な限りメモリ安全なプログラミング言語を使用するよう推奨した
0264デフォルトの名無しさん (スップ Sd5a-VuUV)
垢版 |
2023/01/30(月) 14:15:26.05ID:BI3s5DYMd
他人の文書を持ってくるだけで説明したつもりになってるのか
健康美容の悪徳ビジネスに騙されるBBAと同じたなw
てめーは空っぽだと説明したに過ぎないんだが
0268デフォルトの名無しさん (ワッチョイ 4e63-+rQD)
垢版 |
2023/01/30(月) 17:22:08.99ID:dm4YanUU0
 グーグルによればAndroidに存在した深刻なセキュリティー脆弱性の70%近くがメモリー安全に関するバグに
起因するという。同様にマイクロソフトも、同社製品に存在したセキュリティー脆弱性の70%がメモリー安全に関
するバグに起因すると述べている。C/C++を使う限りセキュリティー脆弱性を根絶するのは不可能と考えて、
Rustを採用するに至ったというわけだ。
0283デフォルトの名無しさん (アウアウウー Sa47-ZLxo)
垢版 |
2023/01/31(火) 12:50:49.15ID:xZwYkSvIa
煽りじゃなくて率直に疑問なんだが
君ら何歳?
0288デフォルトの名無しさん (ワッチョイ 0b01-+rQD)
垢版 |
2023/02/01(水) 07:42:58.57ID:cqn38iow0
Q.アスペルガーは嘘をつかないの?
A.嘘をつきまくる。本人は「嘘をついた自覚がない」と主張するが自覚はある。嘘を認めると立場が悪くなるので屁理屈を言って一向に認めない

Q.どうして文章を書くとき難しい単語を使いたがるの?
A.自分を賢く見せようとしているから。しかし内容がスカスカだったり矛盾しているので全然賢く見えない

Q.どうして攻撃的なの?
A.アドレナリン放出量が健常者に比べて多く、また人生が上手く行っていない場合が多いので他人に八つ当たりする(我慢できない)傾向が強いから

Q.どうしてひねくれたズレた回答ばかりするの?
A.アスペルガーは他人と被ることを嫌う。自分が特別な存在でありたいという願望が表れている。健常者の言う妥当な回答はアスペルガーにとっては平凡なつまらない回答。何か特別な凄いことを言おうとしてもそのような知恵がないので悪口とか意味の分からないことを口走ってしまう。
0292デフォルトの名無しさん (ワッチョイ 361f-+rQD)
垢版 |
2023/02/02(木) 04:21:08.56ID:+vgs1l/J0
サイズの決まっていない配列はスタックとヒープどちらに確保されますか?


char* file = ファイルデータ;
char copy[fileのlength]; // この配列

みたいなやつ
0293デフォルトの名無しさん (ワッチョイ b302-zxNY)
垢版 |
2023/02/02(木) 06:26:11.41ID:0H/6GH320
スタックじゃね
それ関数内の一時変数だろ
0306デフォルトの名無しさん (ワッチョイ 0e02-+gdS)
垢版 |
2023/02/02(木) 14:56:34.41ID:H/TFSr7b0
型とオブジェクト(を表す式)のサイズを混同してるんじゃね?
複雑な式だと()があった方が読みやすい場合もあるけど、できる限りは明示的に使い分けたほうが
0313デフォルトの名無しさん (ワッチョイ b302-zxNY)
垢版 |
2023/02/02(木) 16:06:25.05ID:0H/6GH320
>>310
チャー

>>294
つうかヒープに確保するのはmalloc,calloc,reallocだけだと思ったら未規定なのか
0315デフォルトの名無しさん (ワッチョイ b302-zxNY)
垢版 |
2023/02/02(木) 18:27:38.70ID:0H/6GH320
>>314
なるほどね
0318デフォルトの名無しさん (スッププ Sdba-7Y05)
垢版 |
2023/02/02(木) 22:48:09.79ID:hiwLlcVmd
void hoge( char *src )
{
char hogebuf[strlen(src)+1];
strcpy( hogebuf, src );
...
}

みたいな使い方か
仕様にはないけど慣例としてローカル変数はスタックに取られるだろう
static char hogebuf[strlen(src)+1];
とするとデータセグメントに取られるがコンパイル時にサイズが決定できないのでコンパイルエラーになる
0320デフォルトの名無しさん (ワッチョイ 0e02-+gdS)
垢版 |
2023/02/03(金) 02:49:42.07ID:y/daVwxe0
普通スタックに取られるallocaがfree要らずでプロトタイピングに簡便だね
スタックだからBOするし、しない保証も得られないけど

ちゃんと固定長バッファ用意したり、ヒープ利用を考えるのは、とりあえず動くもんが出来てからやる派
0321デフォルトの名無しさん (ラクッペペ MMb6-Go++)
垢版 |
2023/02/03(金) 11:57:56.75ID:31rfnruOM
c言語の標準入出力ストリームの
本当に基本的なことなんですが
わからずに困っています。
教えてください。

std::ofstream stream;

ostream << "ABCEFG";

この入力した文字列の"ABCEFG"を
右側3文字を削除して"ABC"にするには
どうすれば良いのでしょうか?
0326デフォルトの名無しさん (ワッチョイ 3fad-4osW)
垢版 |
2023/02/04(土) 18:01:20.17ID:8KrfBFTv0
>>321
それはC言語ではない。
0330デフォルトの名無しさん (ワッチョイ 3fad-4osW)
垢版 |
2023/02/05(日) 02:05:11.68ID:5cc7+aVs0
君の言っていることがよく分からない。
0332デフォルトの名無しさん (ワッチョイ 3fad-4osW)
垢版 |
2023/02/05(日) 14:25:38.00ID:5cc7+aVs0
そういや C++ の cout みたいなやつには printf() みたいなメソッドはないの?
Java だと System.out (java.io.PrintStreamクラス)に printf() が Java 1.5 から追加されたが。
0335デフォルトの名無しさん (ワッチョイ 3fad-4osW)
垢版 |
2023/02/05(日) 15:16:48.89ID:5cc7+aVs0
>>333 >>334
ありがとう。あるにはあったか。
0338デフォルトの名無しさん (ワッチョイ cfab-wNzk)
垢版 |
2023/02/05(日) 22:53:24.77ID:Xg2vo6vu0
char x=1
char y=2

上記のchar型変数のxとyを比較する際に関して質問させていただきます。

上記の変数に格納されている変数を比較する際はif文で問題ありませんか?
if(x==y)

それともmemcmpやstrcmpで比較するべきでしょうか?
0339デフォルトの名無しさん (ワッチョイ 3f7c-4osW)
垢版 |
2023/02/05(日) 23:00:33.79ID:N1CrWJVM0
問題無いよ
memcmp()は使えても
strcmp()は流石に無いわw
メモリにどう格納されているかなんてエンディアンやらで違うし
memcmp()はcharの配列での比較に普通は使うだろう
0342デフォルトの名無しさん (ワッチョイ 7f02-g5ke)
垢版 |
2023/02/05(日) 23:41:43.70ID:7rKpaUoS0
>>338
charは(ちょっと変わってるけど)整数型なので、当然数値比較でok

何か付け加えるとすれば、整数型だからといってcharと他の整数型と比較/同値テストを行うのは、Cの自明でない算術変換が落とし穴になりがちなので避けた方が賢明

>>339
!memcmp(&a, &b, 1)
的な?
その発想に感心
何の役に立つのか俺には思い付けないけど、面白いからヨシ!
0343デフォルトの名無しさん (ワッチョイ 3f7c-4osW)
垢版 |
2023/02/05(日) 23:51:31.50ID:N1CrWJVM0
>>342
memcmp()も良く考えてみたらどうメモリに格納されているか分からないから使えないよね
intelなどのリトルエンディアンならそれで比較可能だろうけど
今ビッグエンディアンのマシンがあるのか分からないけど、昔あったpowerpcなんかはビッグエンディアンだったね
0344デフォルトの名無しさん (ワッチョイ 7f02-g5ke)
垢版 |
2023/02/05(日) 23:59:54.19ID:7rKpaUoS0
>>343
aがアドレスの取れない変数なら&aの時点で自明にダメだね

上で提示した比較バイト数が1の特殊ケースに限っては単なるunsigned charとしての比較だから、エンディアンネスは関係ないのでは
0345デフォルトの名無しさん
垢版 |
2023/02/06(月) 00:52:52.00ID:X/MVAKzo0
>>343
ビッグエンディアンだろうとリトルエンディアンだろうと1バイトのcharの比較に影響しないんじゃね?
0348デフォルトの名無しさん (ワッチョイ 3f7c-4osW)
垢版 |
2023/02/06(月) 01:12:53.01ID:7Y+tRqBu0
>>345
charで例えばchar a = 1でリトルエンディアンだとmemcmp()で1バイト比較でも大丈夫だろうけど
ビッグエンディアンの場合、プロセッサの制約次第だろうけど必ずしも
01と1バイトのみでデータが入っているとは限らず
00 00 00 01みたいに4バイトで格納されてるかも知れないから
どんなマシンでも動くという前提で作るなら辞めておいた方が無難かなという風に思った
0351デフォルトの名無しさん (ワッチョイ 7f02-g5ke)
垢版 |
2023/02/06(月) 02:12:44.74ID:Dw7rHwSO0
>>348
処理系/マシンが同一なら問題無い
Cのcharをuint_32相当として保持するマシンが仮に有ったとして、Cがcharのつもりで書き出し/読み返しを行い、unsigned char(とその配列)として比較する限りはCから違いは見えないよ
だって高級言語だもの()

バイナリデータのやり取り、詰め物あり、他言語プロセスとの共有メモリなら適切に変換するルーチンが必要だけど、それはCに限らず全てのプログラムに当てはまる事
0352デフォルトの名無しさん (ワッチョイ 7f02-g5ke)
垢版 |
2023/02/06(月) 02:49:15.07ID:Dw7rHwSO0
32bit以下のデータを全て32bit値として扱うマシンを想定してるのかな?

それは最小アドレス単位、cで言うCHAR_BITSが32のマシンと言い換えられるよね
CHAR_BITSが何bitであろうが、cから見ればsizeof(char)==1である事には変わりがない

と言えば分かりやすいだろうか
0355デフォルトの名無しさん (アウアウウー Sa93-qdck)
垢版 |
2023/02/06(月) 11:15:52.75ID:t0SsOUx4a
MISRA-C 2004 の本がある。
MISRA-Cをやっていないと、2004の潜在型/2012の本質型が分からないはず

int 型未満の型を、4バイトに変換してから、元に戻す仕組み。
CPU には、int型未満のレジスタが無いので、使わない部分をマスクするしかない

こういう内部の仕組みは、C/C++ の本には載っていない

こういう変換を知っている香具師は、
むしろ初心者じゃなくて、かなり研究している香具師

普通の香具師は、こういう仕組みを知っているはずがないから。
C/C++の本には載っていないはず
0357デフォルトの名無しさん (ワッチョイ 3fad-4osW)
垢版 |
2023/02/06(月) 15:55:39.76ID:Pcm2g4vQ0
1 byte は 8 bit とは限らないってことだな。
1 octet は 8 bit 固定と決まっているが。
0360デフォルトの名無しさん
垢版 |
2023/02/06(月) 18:13:28.24ID:X/MVAKzo0
>>355
そういうCPUの制約を気にしなくていいのが高級言語だと思うけど違うんかね?
そういうCPU相手のコンパイラならマスクするなり0埋めするなりしてるんじゃない?
想定外のCPU相手なら起こりえるかもしれないけど、それはしょうがないよね
0361デフォルトの名無しさん (スップ Sddf-WS7p)
垢版 |
2023/02/06(月) 18:36:57.74ID:Zh5BYfUjd
Cは処理系定義が至る所にあるからな
intが2byteの環境もあるし

x86(x64)しか使わないと決め打ちできりゃいいけど
しょぼいCPU向けのしょぼいコンパイラのこと考えなきゃいけないとかなり面倒くさい
0363はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cf3e-F1up)
垢版 |
2023/02/06(月) 20:45:09.59ID:uFl4yuTv0
>>360
システム記述言語として使うことが想定内にあるので高級言語の中では低級なほう。
半世紀前に登場した時点では高級だったかもしれんがそのときの事情を引きずり続けてたら高級になりきれないのもしょうがない。
0372デフォルトの名無しさん (ワッチョイ 3fad-4osW)
垢版 |
2023/02/07(火) 17:31:48.89ID:I8JfvgXk0
>>360
Cは色々なCPUで使える使いやすいアセンブラのようなものと思った方が良い。
色々な工夫をしてあたかも高級言語であるかのように見える状態にまで持ち込んだのだ。
0374デフォルトの名無しさん (ワッチョイ 7f46-+GrI)
垢版 |
2023/02/07(火) 19:08:47.78ID:0Pg2e1tw0
名誉高級言語
0375デフォルトの名無しさん (ワッチョイ cf02-2Zio)
垢版 |
2023/02/08(水) 04:20:38.79ID:sW7k1sH00
なるほどね
0377デフォルトの名無しさん (ワッチョイ 3fad-2sfl)
垢版 |
2023/02/08(水) 23:07:52.52ID:tLamaggb0
そうそう。
0381デフォルトの名無しさん (ワッチョイ 7f02-g5ke)
垢版 |
2023/02/10(金) 01:35:56.41ID:y8U7vNGg0
形にしたのはken, dmrだろうけど、個人的にはCの精神とCS的な観点はbwkに帰したい
the practice of programing, software tools (in pascal), the awk programing language、あたりからプロファイリング

ライターとしてずば抜けている、unixには特に拘らず節操無し、スタイルに拘りが強い、形式言語大好き

しかしk&rではセカンドオーサーだから、著作自体にどれだけ影響力あったかは?(言及あったっけ)
まあk&rは汚いコードを得意気に語るあたり、dmr成分多めな気がするなあ…
0385デフォルトの名無しさん (ワッチョイ 7f02-g5ke)
垢版 |
2023/02/10(金) 04:20:45.54ID:y8U7vNGg0
>>384
日本PC市場でのPC向けUNIX(minix/bsd/linux)本格参戦前(90'後半?)の情報源は、彼に負う所が多かったろう、というバイアスはまあある
大学にでも所属してないとUNIX機に触る機会も無かったし、俺のように>>383のようなサンプルを見て仕様を想像しただろうアマチュア実装(だからmanページは付いてない)が流布していた

なぜCはUNIX文化から脱却できたのか?という(>>376を念頭に置いた)考察ね
bwkの著作にはCP/M, DOS, winプログラ厶の例が多いし、アーキテクチャ/OS間のポータビリティやアルファベット圏以外への進出を真剣に考えてた稀有な人なのは間違いなかろう

wchar_tやらを提唱したのはその一例だし、それを許容するためにC独特の柔軟な(=至る所unspecified)型/メモリモデルを拵えたわけで

あれ、今やどっちも負債になってるような…
いや理論上頑張ればできるけど、まあ頑張ればね?
0390デフォルトの名無しさん (スププ Sd5f-g5ke)
垢版 |
2023/02/10(金) 15:51:06.46ID:OadphjcVd
wchar_tに関しては確か日本語版2版に訳者がKへ吹き込んだ、という記述が

いわゆるK&R以外にもK&R共著は無数にあるが、おおむねイノベーターがRでKがまとめ役というのは察せられるし、そこに異論はないよ
0396デフォルトの名無しさん (ワッチョイ 1e46-kPwk)
垢版 |
2023/02/12(日) 05:54:47.01ID:DTNrGkO70
>>394
かに飯じゃないんだ。charは何処へ消えたの。
0397デフォルトの名無しさん (ワッチョイ 8aad-D0vN)
垢版 |
2023/02/13(月) 03:01:58.65ID:euuzmFvH0
Kani & chaRhan
0407デフォルトの名無しさん (ワッチョイ 1e46-kPwk)
垢版 |
2023/02/15(水) 22:41:28.51ID:PTreX2Lr0
不純なCって...
0416デフォルトの名無しさん (ワッチョイ 4a7c-WEwL)
垢版 |
2023/02/16(木) 15:47:22.38ID:oZu+eRtF0
'がセパレーターなのか。
組み込みで0bが使える処理系は以前からあるけど、
VerilogやVHDLみたく0b1101_0100のようなセパレーターが使えなくてバグの元でしかなかった。
0417デフォルトの名無しさん (アウアウウー Sa4f-STvZ)
垢版 |
2023/02/16(木) 17:05:43.13ID:5AcA3bi5a
不純な C って Win32API のことかな
0418デフォルトの名無しさん (ワッチョイ de02-6did)
垢版 |
2023/02/16(木) 17:21:05.96ID:XEsPtkpG0
セパレータに'は文字リテラルとの曖昧性でパースが面倒そうな…

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
0419デフォルトの名無しさん (スフッ Sdaa-6did)
垢版 |
2023/02/16(木) 17:37:10.74ID:CsQoVivgd
>>413
リテラル導入よりまずはprintf/scanfの強化が先かなと、コンパイラやプログラマがすり替えのも楽になるし

一々baseで割ってfputc、i%sep==0の時にはdelimを吐く、なんてコードを何回書捨てたか分からん

リテラル記法導入は文法に関わるので、あくまで標準は保守的に
formatディレクティブはもう既に混沌としてるから、独自拡張もサポート落とすも自由でいいかと
0424デフォルトの名無しさん (ワッチョイ de02-6did)
垢版 |
2023/02/17(金) 11:02:28.45ID:DgZQWw4l0
octal(リテラル表記)はutf-8の台頭でCで使う機会はかなり増えたと思うが
陽に扱うならだけど

msb2つを多バイト文字の継続フラグ等に割いてるから本質的には6bitで、hexだと人力では読むのも書くのも厳しい
0429デフォルトの名無しさん (ワッチョイ 8be4-eTyR)
垢版 |
2023/02/17(金) 14:24:53.50ID:vP8p7Q2U0
>>422
システムコールを使ったちょっとしたコーディングの場合、オープンモードはdefineされたやつ使うけど、ファイルモードは8進の値を直接指定することが多かった
open("foo", O_CREAT|O_RDWR, 0644)
ここに S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH なんて書いたことはないな
ちゃんとしたコーディングの場合にはファイルモードを指定する別途関数なり定数定義を用意してたりするからそっちの定義ではdefineされた値を使うことはあったけど
0430デフォルトの名無しさん (ワッチョイ 8be4-eTyR)
垢版 |
2023/02/17(金) 14:44:42.94ID:vP8p7Q2U0
直接openシステムコール使ってるオープンソースのプログラム、シェルあたりならやってそうだと思って簡単にアクセスできそうなソースコード探してみた
bash見つからなくてzshは見つかったので見てみたらやっぱり直接0600とか書いてるな
https://sourceforge.net/p/zsh/code/ci/master/tree/Src/utils.c#l2216
その上でumask(0177)とかもやってる
0432デフォルトの名無しさん (ワッチョイ d301-GLFt)
垢版 |
2023/02/17(金) 20:16:44.94ID:KJxAAApA0
>>430
まあ、コピーライト見たらわかる通りそういう時代だったしね
> * Copyright (c) 1992-1997 ポール・ファルスタッド
マジックナンバー警察じゃないけど流石に今時0777なんて書いてたらレビューで指摘するわ
0433デフォルトの名無しさん (ワッチョイ 8be4-eTyR)
垢版 |
2023/02/17(金) 20:50:25.13ID:vP8p7Q2U0
>>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);
0434デフォルトの名無しさん (アウアウエー Sa13-nl9c)
垢版 |
2023/02/18(土) 09:01:47.10ID:4a504/qwa
C#について教えてください! https://smartlabo-hp.com/login-intermediate/ 上記ページを見てログインボタンを作成しました。 このページ内にあるcsvファイルの内容に加えて同csvファイルの[2]にログイン状態という列を足したいです。 ログインしてない状態では[2]は常に0、ログイン成功したら[2]に1が書かれるようにするにはどうすればいいのでしょうか? ご教授よろしくお願いします。
0448デフォルトの名無しさん (ワッチョイ 23ad-BTrK)
垢版 |
2023/02/18(土) 16:04:29.75ID:dElKqib40
>>444
じゃあ8で。
0458デフォルトの名無しさん (ワッチョイ 4b02-bChI)
垢版 |
2023/02/18(土) 16:52:50.83ID:6dDb+no40
(8じゃなく)6の倍数bitワードのマシンで産まれた痕跡だっけか

>>443
8と9が混じってるかどうかで8進か10進か勝手に解釈を変える方がよっぽど厄介だから、不正として弾くのが正しいね
俺は8進が好きだし、幸いやらかした経験も無いけど
他言語では明示的な0oプレフィックスもよく見掛けるし、もちろん使えるなら使おう
0462デフォルトの名無しさん (ワッチョイ 85e4-XsNi)
垢版 |
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 使っているところも全部直指定
0464デフォルトの名無しさん (ワッチョイ 85e4-XsNi)
垢版 |
2023/02/18(土) 17:19:18.78ID:J9rEVsST0
>>442
比較的新しめ?のnginxなんかは流石に関数の引数に 0600 とか書いてないけど、それでもOSのヘッダファイルの定数定義は使ってないな
自前の定義に #define NGX_FILE_DEFAULT_ACCESS 0644 とかだ
これも老害になっちゃう?
0465デフォルトの名無しさん (ワッチョイ 1501-rc3u)
垢版 |
2023/02/18(土) 17:26:26.26ID:c4QxGie20
>>462
git は 15年以上前に初版が作られたソフトだしリーナスはもっと前からソフト開発してるだろ
ポリシーによるけどソースコードのコーディング方法を変えないことは珍しくないよ

>>464
nginx も 18年前のソフトだし作者のイーゴリ・ウラジーミロヴィチ・シソエフ
50歳超えな
0475デフォルトの名無しさん (JP 0Hf9-KqH4)
垢版 |
2023/02/19(日) 12:53:18.65ID:F5EkyCpBH
ムチムチ
0476デフォルトの名無しさん (ワッチョイ 23ad-BTrK)
垢版 |
2023/02/19(日) 13:01:28.32ID:yOeRloac0
>>449
英語では 0 (ゼロ) と書いて o (おー) と読むこともあるので、それが影響したのかも知れないね。
0497デフォルトの名無しさん (ワッチョイ 23ad-BTrK)
垢版 |
2023/02/21(火) 10:51:10.49ID:NudgdpLh0
豪華な蟹飯が思い浮かんだ
0509デフォルトの名無しさん (ワッチョイ cb63-BTrK)
垢版 |
2023/02/21(火) 21:02:34.32ID:MGN7/c1b0
昔いた現場は、1関数ごとに設計書を何枚も書かされてたな
それでみんな、関数の数を極力減らしてた
行き着くところ初期とメインと終了の三つ
それぞれが何百行にもなってしまったw
0515デフォルトの名無しさん (ワッチョイ 6502-bChI)
垢版 |
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プリプロセッサの構文内では不可能に思う(当然リテラルとして自然な仕様拡張も)
0523デフォルトの名無しさん (ワッチョイ ed02-bChI)
垢版 |
2023/02/23(木) 02:20:36.04ID:zOdHjjZs0
まだワーキングドラフトだから対応するもしないのも自由だと思うし、c2xはアトリビュート関連くらいしか追ってないが、一応意見を

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

頻用したと仮定すれば、1/2の確率で釣り合うって字句解析をパスしてしまうのも厄介
0524デフォルトの名無しさん (ワッチョイ ed02-bChI)
垢版 |
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のみで任意進数(ビット深度)を指定できないのが歯痒いところ
0531デフォルトの名無しさん (ワッチョイ 7d10-W5vA)
垢版 |
2023/02/26(日) 12:16:51.44ID:0OyaNSrI0
C言語で構造体の双方リンク理解する前にテキストエディタ作るようなことあったら
激重エディタつくってただろうなぁと経験してもないことを妄想。

1文字挿入→その後ろの文章を全部コピーでずらして・・・
0534デフォルトの名無しさん (テテンテンテン MM0e-CSgJ)
垢版 |
2023/02/26(日) 20:20:17.76ID:Qgs0XTsDM
>>532
過去形だけど今もだぞw
ギャップバッファは、最近流行りの複数カーソル使って離れた複数箇所を一気に編集すると、大量にコピーが発生して重くなる可能性がある
なのでこれからテキストエディタを実装するには、Piece Tableを使う方がいいと思われる
0535デフォルトの名無しさん (ワッチョイ 76cf-okFi)
垢版 |
2023/02/26(日) 20:22:02.57ID:OdlyZwjm0
Slackware+JEに入ってたMuleを3年くらい使ってたけど別のエディタに移っちゃったな
悪くないと思うんだけど時代に合ってないというか、貧相な環境の方が使い出があるエディタだったな
0543デフォルトの名無しさん (ワッチョイ 2e9a-0raA)
垢版 |
2023/02/27(月) 09:43:18.06ID:jlyK/+pC0
>>531
素のCだと何もないからデータ型を一つ一つ自分で理解していけていいという意味?
例えばC++ならlistがあるから理解しないままになる?
でもlistとvectorの違いを知らなければ結局
0544デフォルトの名無しさん (ワッチョイ 7d10-W5vA)
垢版 |
2023/02/27(月) 12:21:44.99ID:3zla3lE+0
>543
Cやる前はアセンブラだったからねぇ。アセンブラでの処理方法をそのままC言語に持ち込んでた。
当時はでっかく領域確保したらその領域で全部処理するって思考しか無かった(自動変数って概念も無し)。
0547デフォルトの名無しさん (ワッチョイ 2e9a-0raA)
垢版 |
2023/02/28(火) 10:24:33.59ID:7/0mM3ia0
>>544
>自動変数って概念も無し

自分はデバッグでディスアセンブルを読むぐらいしか用事がないんだけど、
ゼロからアセンブリを書く場合はスタックの操作で領域管理したりはしないと?
0550デフォルトの名無しさん
垢版 |
2023/02/28(火) 16:07:40.92ID:Ki6W+L2N0
あの 先頭に戻って検索 するかどうかを維持する変数名ってどんなのがいい?
0551デフォルトの名無しさん (ワッチョイ 7d10-W5vA)
垢版 |
2023/02/28(火) 16:44:22.88ID:295BsPXb0
>スタックの操作で領域管理
8086系だとスタックレジスタ直接使うと遅いんじゃなかったっけ?
MOV AX、[SP+10]
とかやるより
MOV AX、[TEMP]
...
TEMP: DW 0000h

ってやる方が速いとか。



BASIC時代のマシン語CALL時のレジスタエリアは16バイトってトラウマが・・・。
0552デフォルトの名無しさん (アウアウウー Sa39-bn+B)
垢版 |
2023/02/28(火) 21:38:56.96ID:EshvOxGGa
ダミーセクションって、IBMのメインフレームのアセンブリ言語の DSECTですか?
0557デフォルトの名無しさん (ワッチョイ da79-Arif)
垢版 |
2023/03/02(木) 03:04:30.24ID:eGjuMjwU0
するか否か、1ビットのフラグの命名に他者を巻き込む議論が本当に必要ですかということか
すなわち名前はflagとかで変数宣言部に日本語コメントでも添えた方が建設的ということだな?違うか?
0559デフォルトの名無しさん (ワッチョイ 7646-BmO7)
垢版 |
2023/03/02(木) 09:03:08.54ID:GoAAqo+J0
C-gengo wa mada nihon-go kakenai no?

bool 先頭に戻って検索 = 真 ;
0562はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 693e-wWxq)
垢版 |
2023/03/03(金) 01:19:24.14ID:5ZXS0iFm0
>>561
個々の命令の速度で考えればその通りだが今どきの CPU だと
パイプラインに隠れて差が出ない (差があっても観測不能なほどの極小) ってことも普通にあるんじゃないの?
0568デフォルトの名無しさん (ワッチョイ 1302-ScW/)
垢版 |
2023/03/04(土) 21:31:31.02ID:mhQJa69K0
>>566
勘違いしてない?
0570デフォルトの名無しさん (ワッチョイ 1361-y7Dr)
垢版 |
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クロック
と実効アドレスの計算時間に差があったという大昔のお話
0572デフォルトの名無しさん (ラクッペペ MMeb-UQad)
垢版 |
2023/03/05(日) 06:58:01.26ID:94fNx05VM
8086には現在のような深いパイプラインは無いがそれでもEU(Execution Unit : 実行ユニット)とBIU(Bus Interface Unit : バスインタフェースユニット)は独立しており
メモリアクセスと内部のALUはそれぞれ別々に動作する
ある意味初歩的な2段パイプラインとも言える構造で単純なクロックサイクルの加算とはならない
0573デフォルトの名無しさん (ワッチョイ 1302-ScW/)
垢版 |
2023/03/05(日) 07:13:34.61ID:cmZGkkdl0
>>571
>[temp]は2回だな
なぜ2回?
0575デフォルトの名無しさん (ワッチョイ 13ad-NCuH)
垢版 |
2023/03/05(日) 12:43:47.21ID:nmaj3sub0
>>567
昔昔はそういうものだったんよ。
Cは、
・プログラマの責任において何でもできる
・コンパイラはプログラマの意思に忠実であれ(余計な最適化なんかするんじゃねえ!)
ってこと。だから、
a=a+1;と、a++;は違う。
前者は加算命令、後者はインクリメント命令になってほしいというのが、プログラマの意志。
ただ、Cが色々な場で広く使われるようになって、最適化を進めるしかなくなったから、そんなのどうでもいいことになったけど。
0579デフォルトの名無しさん (ワッチョイ 13ad-Qpn1)
垢版 |
2023/03/05(日) 15:07:29.13ID:YlwUczDE0
>>575
ま、しかし、昔はコンパイラの最適化がしょぼかったというのもあるな。
CPU (特に 8 bit CPU とか) がC言語等のいわゆる高級言語を全く意識して作られていないというのが最大の問題だったのかも知れないが。
0583デフォルトの名無しさん (スッップ Sd33-c1aN)
垢版 |
2023/03/05(日) 17:27:59.49ID:0aHQQO/od
間違い、>>581は6809の話だった…


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

8086ニーモニックをよく知らないが
0585デフォルトの名無しさん (ワッチョイ e9b3-ftr4)
垢版 |
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て表示します。これはどういう意味でしょうか?
0589はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 013e-zdzo)
垢版 |
2023/03/05(日) 19:07:20.35ID:AE3nXsIn0
>>585
sqrt に負数を渡した場合には定義域エラーとなり、定義域エラーのときは処理系定義の値を返す。
その処理系では処理系定義の値というのが nan だということになる。
言語仕様では詳細は規定されていないけれど
一般に浮動小数点の表現として使われる IEEE 754 などでは非数 (not a number) を表現のひとつとして持ち、
意味のある計算結果にならなかったときは非数がセットされる。
not a number の略で NaN 。

処理系によっては定義域エラーをハンドリングする方法を用意してあることもあるけど、
発生させないように事前にチェックしたほうが基本的には簡単だと思う。
0590デフォルトの名無しさん (スッップ Sd33-c1aN)
垢版 |
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命令で読めるがあまり使われなかったと思うどっちにしろ遅くなるので
0593デフォルトの名無しさん (テテンテンテン MMeb-8VhG)
垢版 |
2023/03/05(日) 23:40:03.63ID:yUIw0mIIM
>>585
nanは、何処かでnanになると、その後の演算全てがnanになる
なのでsqrtのnanが伝搬してprintfがnanを表示した
ゲーム(特に3D)は、油断するとnanを伝搬させてしまう事があって、キャラがグチャグチャに壊れて表示されるのは、それが原因
nanを伝搬させるとデバッグが大変なので、nanを出さないように細心の注意が必要だ
sqrtとか特に割り算(/)に気を付けないといけない
0594デフォルトの名無しさん (スフッ Sd33-RL4O)
垢版 |
2023/03/06(月) 02:42:50.81ID:Ht1FmqqLd
>>593
え、割り算でNaN出る?と一瞬思ったけど、0.0/0.0かな?多分
珍しいケースに思える

非ゼロ/0.0でinfが出るのは関数の根を簡易に求めるのに重宝するけど(逆数が極)、NaNが出る可能性にまでは気を配って無かったのでナイス指摘
0595デフォルトの名無しさん (スフッ Sd33-RL4O)
垢版 |
2023/03/06(月) 02:51:49.35ID:Ht1FmqqLd
>>589
IEEEはほぼCの為に制定されたようなものでは?
fpuなんて改造してナンボな本場のnumber cruncher達(ほぼFORTRAN/Fortran)は最近までIEEEなんて最近までガン無視だったわけで
今は標準モジュールにIEEEサポート入って普及してるけど
0596デフォルトの名無しさん (テテンテンテン MMeb-8VhG)
垢版 |
2023/03/06(月) 02:52:25.09ID:Ludh8Y7rM
>>594
3Dだとベクトルのノーマライズをしょっちゅうするけど、これはベクトルの長さで割るけど、事前に長さのチェックが漏れてると、ゼロで割ることになる
そういう特殊な状況は確かに稀なんで、リリースに残ってしまうことがある
0598デフォルトの名無しさん (ワッチョイ 9102-RL4O)
垢版 |
2023/03/06(月) 03:14:56.83ID:VyhKtCOB0
>>596
俺環ではDBL_MIN/0.0でもちゃんとinf吐くから、ノーマライズされるべきベクトル(分母)が正確に0.0というのはdoubleでは考えにくいような…
3Dだとsingle以下のfloat16/8とか使うと聞くから、極端に精度が低過いと起きるのかしら?
0599デフォルトの名無しさん (ワッチョイ 9102-RL4O)
垢版 |
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モードにするとか
0606デフォルトの名無しさん (ワッチョイ 13ad-Qpn1)
垢版 |
2023/03/07(火) 22:59:35.82ID:s3GtgFEy0
インド料理屋で、NANを頼みました。
0607デフォルトの名無しさん (ワッチョイ 13ad-Qpn1)
垢版 |
2023/03/07(火) 23:06:20.52ID:s3GtgFEy0
>>605
そういえばID論ってのがあって、何か高度な存在が人間や宇宙を作ったってやつだが(昔ながらの神が作ったというのと似ているが神ではない)、
それならばその高度な存在はどのようにして作られたのか?それはまた別の高度な存在によって作られたのか?
とするとその存在も別のもっと高度な何かに作られたのか?という具合に無間ループになってしまう。
0612デフォルトの名無しさん (スッップ Sd33-c1aN)
垢版 |
2023/03/08(水) 09:22:43.28ID:fOZ1V1tZd
>>607
ブートストラップローダという名前がついたのと似てるなw
コンピュータ起動時に次々と自分より大きいローダを読み込んで起動する様が「自分の靴紐を持ち上げて空を飛ぶ」ような無茶に思えるから
0613デフォルトの名無しさん (スップ Sd73-YAma)
垢版 |
2023/03/08(水) 12:12:57.95ID:wYi2NpnKd
鉄則

1 困った時のGOTO勝利
2 CALL関数はマクロ展開のヘッダファイル
3 SQL呼び出しはstructの前に敗北
4 while こそループの王 forは邪教
5 そこでbreakするな
6 switch文が見えたらバグの腐海
0615デフォルトの名無しさん (ワッチョイ 8b69-nyng)
垢版 |
2023/03/09(木) 09:47:34.15ID:rNyfncCj0
あれやって 条件成立まって あれやって を 状態遷移しながらぶん回すときは
状態変数を int にして 巨大switch にしたくなる

けど こことここの間に新たな状態差し込みたいってときに 状態変数値どうしよう? っておよよする
0626デフォルトの名無しさん (ワッチョイ 1379-rvSK)
垢版 |
2023/03/09(木) 16:23:16.50ID:pN9rkknD0
組み込みと一言で括られてプリエンティブで良い悪いの議論をされるの抵抗ある人がここにいるけど俺以外でもかなり多いんじゃないかな
プリエンティブはタスクスイッチ自体が割り込み禁止を伴うクリティカル処理だからそれが組み込みに適しているとはいい難い
タスクスイッチのレジスタ退避復帰で何十サイクルも消費して待ってる割り込みが処理できずにいるのが許容できかは案件により過ぎる
片やノンプリでは少なくとも割り込みを汚さない
従って俺はどんな案件でも通用するノンプリでまず検討する事を推奨したい。プリエンでもタイミング的に問題ないねとなったら移行すればいい
いきなりプリエンありきで作る方が自殺行為に見える
0627デフォルトの名無しさん (ラクッペペ MMeb-UQad)
垢版 |
2023/03/09(木) 16:36:55.55ID:StryrQ2LM
タイミング的に問題ないという判断の前提が一定時間以内に必ず応答出来るという保証が必要
応答時間が保証されないノンプリエンプティブ環境でシステム設計とか殆ど不可能にしか思えない
0628デフォルトの名無しさん (ワッチョイ 1379-rvSK)
垢版 |
2023/03/09(木) 16:39:33.97ID:pN9rkknD0
割り込みにも大別してすぐに応答が必要なもの、メインのキューに回してもよい優先度低のものの2種類存在する
プリエンティブを採用できるかどうかは前者の応答にどれだけの遅延が許容されるかという事になる
割り込みハンドラを普通にCで書くとハンドラ内で使用するレジスタの退避コードが適当に生成されるが、
許容時間によってはインラインアセンブラで最小限のレジスタで書かざるを得ない場合がある
そういう案件だとプリエンティブの採用はありえない
0631デフォルトの名無しさん (ラクッペペ MMeb-UQad)
垢版 |
2023/03/09(木) 16:48:44.72ID:hgw38TJYM
いやその通りだよ
保証出来るようにアセンブラすら併用せざるを得ないのが泥沼の組込み開発
それでも駄目ならソフトウェアでなく専用ハードで物理的に処置する方向を検討する
0633デフォルトの名無しさん (ワッチョイ 1379-rvSK)
垢版 |
2023/03/09(木) 17:02:44.72ID:pN9rkknD0
>>631
タイミング調整にアセンブラ併記は組み込み案件でなくても普通に行われてるでしょ
それと専用ハードって簡単に言うけど、大抵の組み込み案件ってハードの部品点数減らしていく傾向だから非現実的な提案にしか見えないよ
簡単に用意できるなら苦労しないし廃業だわ
0637デフォルトの名無しさん (ラクッペペ MMeb-UQad)
垢版 |
2023/03/09(木) 17:20:18.66ID:iNLkXR0fM
要はトータルコストの問題
この件は高価な材料(主にレアアース)を多量に使用したモーターを安価な代替品に置き換えて
同等の能力を発揮させるために高度な電子制御(いわゆるベクトル電流制御)で駆動するのが狙いだった
実際メインのマイコン処理だけでは追い付かずセンサ周りの処理は別チップのDSPを採用してる
結果的に制御系のコストは増加したが全体としては前システムの約7割程度の費用に抑えられた
長文失礼
0642デフォルトの名無しさん (ワッチョイ 1379-rvSK)
垢版 |
2023/03/09(木) 17:50:21.11ID:pN9rkknD0
>>637
これを1行で要約するとヤバいなあ…設計見積もりガバガバで採用したマイコンで処理できなくてハード追加調達して結果的に動いたわろたってことだろ
最近のH3失敗もだけど予算まともでもこういう経験値の奴らで作られる可能性を考えると寒いなあ
暖ったけえ話を知りたい
0648デフォルトの名無しさん (ワッチョイ fbda-VwsU)
垢版 |
2023/03/09(木) 20:49:30.54ID:sK4pplDk0
組込みマイコンでは常識的なレジスタバンク切替やコンテキストスイッチングのことに触れずに
レジスタ退避や復帰でサイクル消費するとか言ってる時点で組込み開発の経験が無いんだろうな
ということは分かる
余程の簡易的なものを除けばメインと割込みでいちいちスタック経由でレジスタ退避するような
間抜けなマイコンは無いだろ
それはx86のような汎用CPUの構造だ
0649デフォルトの名無しさん (ラクッペペ MMeb-UQad)
垢版 |
2023/03/09(木) 21:04:47.03ID:VZ2yRc9EM
似たような意見が出てきたので補足するとバンク切替なら大体2,3クロックでレジスタセット丸ごと切り替わるから割込みのオーバーヘッド自体は大した負荷にはならない
反面x86の様な大規模なレジスタ群は持てないのでそもそもの用途と構造が違う
0655デフォルトの名無しさん (ワッチョイ fbda-VwsU)
垢版 |
2023/03/10(金) 08:08:15.26ID:gnQOQJYP0
そもそもマルチタスクのタイマ割込みの他に外部ポートからの多重割込みは
優先順位とレジスタ割当てをかなり慎重に検討するべき事項
並列処理の仕様はソフト設計の基本
0657デフォルトの名無しさん (ワッチョイ fbda-VwsU)
垢版 |
2023/03/10(金) 08:34:55.28ID:gnQOQJYP0
まあ外部割込みを一切禁止して常にポーリングでポート監視するシステムも無いことは無いが
ごく単純なパターンに限られるけどな
普通は外部からの入出力のトリガは割込みで受け付ける
0664デフォルトの名無しさん (アウアウエー Sae3-MJlW)
垢版 |
2023/03/10(金) 16:29:37.22ID:9R6reiLca
>>644
映画Winny観て来た
時代考証が微妙なところもあったが
ノスタルジー感じたい人は逝ってヨシ
0665デフォルトの名無しさん (アウアウエー Sae3-MJlW)
垢版 |
2023/03/10(金) 16:33:31.81ID:9R6reiLca
ちなみに映画中に出て来たCのソースコードは
逆コンパイルしたようなコードで
変数名がめちゃくちゃだった
0666デフォルトの名無しさん (アウアウエー Sae3-MJlW)
垢版 |
2023/03/10(金) 16:35:25.12ID:9R6reiLca
local_001 とか
local_666 みたいな
ずらずら並んでた
0670はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f93e-S+nL)
垢版 |
2023/03/11(土) 10:33:06.84ID:VCVl4BMy0
実際に逆コンパイルされたものじゃないのか?
うろおぼえだが Winny の改造版 (?) を作ってた Lark 氏が逆コンパイルしたソースコードを放流していたような記憶がある。
0671デフォルトの名無しさん (スププ Sd9a-cOGZ)
垢版 |
2023/03/11(土) 15:00:32.33ID:R1SsWCE7d
scanf関数もクセが強い
0672デフォルトの名無しさん (ワッチョイ 7aad-JIpj)
垢版 |
2023/03/11(土) 18:34:55.65ID:Hy+SW7JA0
scanf の読み方は?
0678デフォルトの名無しさん (アウアウエー Sa22-MAiJ)
垢版 |
2023/03/12(日) 12:04:15.69ID:8DcR0+gea
>>670
47氏本人が家宅捜査される場面で
編集中のソースコードって設定だから
本人がわざわざ逆コンパイルして使ってるのは可笑しい
仮に変数名自分で付けてたとしてもあんな名前でコード描いてたとは思えない
0687デフォルトの名無しさん (スップ Sd9a-9LRx)
垢版 |
2023/03/13(月) 15:53:24.36ID:gUMqyWwJd
ジョブスの映画はもっと酷かったぞ
ウォズがこれがアップルIだ!っつってジョブズに見せると画面にアスキーコード順に文字が出てくるだけ
ジョブズがオオスゲーって顔するんだけどw

もっともそこですでにBASICやゲームの画面が出てくるのもおかしいんだけどな
0690デフォルトの名無しさん (ワッチョイ 7aad-JIpj)
垢版 |
2023/03/14(火) 01:18:17.67ID:eWxvxvkk0
>>687
その映画見てないので分からないが、もしや Apple ][ ではなく Apple I のこと?
だったらワンボードマイコンなのでテレビ画面に文字が出るだけでも当時は凄い事だったと思うが。
Apple I が作られたのは1976年だしな。
0692デフォルトの名無しさん (スププ 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;
}
を実行するとでデタラメな数字が出力されます。
変換して指定子をなににすればよいのでしょうか?
0693デフォルトの名無しさん (スププ Sd9a-cOGZ)
垢版 |
2023/03/14(火) 09:57:04.49ID:tHJOYlO8d
692です 解けました 寝ぼけていたみたいです
0695デフォルトの名無しさん (スププ Sd9a-cOGZ)
垢版 |
2023/03/14(火) 10:12:18.85ID:tHJOYlO8d
ある本によると、たんなる、「変換仕様」や「出力変換仕様」となってます
0698デフォルトの名無しさん (ワイーワ2 FF62-hM7q)
垢版 |
2023/03/14(火) 11:19:53.02ID:VNqhYyU8F
>>690
>ワンボードマイコンなのでテレビ画面に文字が出るだけでも当時は凄い事

ほんそれ
現役体験世代しか持ち得ない臨場感ってこう言うもんよ
0699デフォルトの名無しさん (ワイーワ2 FF62-hM7q)
垢版 |
2023/03/14(火) 11:22:04.60ID:VNqhYyU8F
>>692-693
いつのC使ってるのかしらんけど
警告出ないんだっけ
0700デフォルトの名無しさん (スププ Sd9a-cOGZ)
垢版 |
2023/03/14(火) 13:01:28.77ID:dwJIt/jSd
>>699 警告出てました vscodeだと警告なしでバカ数字だけ出力される設定です
0701デフォルトの名無しさん (アウアウエー Sa22-MAiJ)
垢版 |
2023/03/14(火) 13:07:48.27ID:ZglUMoKma
にぎりっ屁
0716はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f93e-S+nL)
垢版 |
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 に合わせるべきだと思う。
(他の用語が間違いというわけではない。)
0720デフォルトの名無しさん (テテンテンテン MMee-+RpY)
垢版 |
2023/03/15(水) 19:38:30.28ID:BZs4LmWfM
JIS X3010は翻訳じゃなくて、プログラミング言語Cという規格だな
ま、ISOを基礎にしてるとは書いてあるがな
本質的な部分で違いがあるのかは分からない(多分無いだろうけど、有っても不思議ではない)
0723デフォルトの名無しさん (ワッチョイ f9ad-QDb6)
垢版 |
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は使えないのですか?
0724デフォルトの名無しさん (ワッチョイ 8102-oxQa)
垢版 |
2023/03/17(金) 04:22:40.28ID:1OmGmSd00
>>723
nmake派だから自信ないが、ファイル内文字列検索の方のfindコマンドが呼ばれてるように見える、当たり前だけど存在しないファイルに対して文字列検索はできないので

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

find $(SRC_DIRS) -name '*.c'
0728デフォルトの名無しさん (ワッチョイ 4d10-JIpj)
垢版 |
2023/03/17(金) 11:21:24.24ID:SxK7dSEV0
うろ覚えだけど会社の入社前研修で
「UNIX OSでカレントにある*.txtファイルすべてをxxx(忘れた)するシェルスクリプトを作成しろ」
って課題出され、DOSのワイルドカードはアプリ内で処理するものだったんで
ファイル一覧のテキストファイル作ってそこから1行づつ読み込んで
".txt\n"って文字列見つけたら新たにスクリプトファイル作って実行するっての作った。

まさかシェル自体にワイルドカード処理する機能あるとは思ってなかった。
0729はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f93e-S+nL)
垢版 |
2023/03/17(金) 11:53:15.99ID:XLm6gsUd0
>>726
C の質問ではないが Make の質問をするのに適切に思えるようなスレってなくない?
俺も困ったことがある。 (そのときは Cygwin スレかどっかで質問したけど過疎すぎて返答が付かなかった……)

C の話題ってのは言語仕様の話題だけってわけではなく開発環境の事情も含むだろうし
make も C の開発環境の一部という解釈で良いと思う。
0733デフォルトの名無しさん (ワッチョイ 7a79-EKUa)
垢版 |
2023/03/17(金) 13:56:33.41ID:GNeva6hg0
makeスレは昔から過疎スレだったよ
個人的にはCに関係するmakeの話はここでもいい気もするが
>>723みたいな環境や処理系すら書かないアホは相手したくないね
やはり専用スレだな
0735デフォルトの名無しさん (ワッチョイ a163-DvKe)
垢版 |
2023/03/17(金) 14:28:38.47ID:Jukv8C3G0
6.7.5.3 関数宣言子(関数原型を含む)
並びの最後が省略記号(, ...)の場合,そのコンマ以降の実引数の
個数及び型に関する情報はない(123)。

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

7.15 可変個数の実引数<stdarg.h> 
0738デフォルトの名無しさん (ワッチョイ 8102-oxQa)
垢版 |
2023/03/17(金) 15:09:54.39ID:1OmGmSd00
pwshは記法がmakeと被りまくっててエスケープ地獄で辛いな
特に@args | ...とか-split "a b c d "| ...のようなイディオムが

ビルトインコマンドの解決も時々失敗する怪しい挙動なので(g)makeをstraceしてみた
シェルを明示的に指定しても、makeがレシピをスキャンして展開の必要しと判定すると直接exec/CreateProcessを呼んでる様子
要するに実装の機嫌次第ですね
0740デフォルトの名無しさん (スッププ Sd5e-9LRx)
垢版 |
2023/03/17(金) 16:40:16.98ID:6pq6iSnCd
>>736
じゃあDOSをちゃんと使え
以上

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

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

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

考えてみれば、コマンド引数は常にファイル(パス)とは限らないのだから
コマンドインタープリタ側でデフォでファイル名展開を使わない、という態度もアリなのかな
0743デフォルトの名無しさん (スップ Sd7a-s0vD)
垢版 |
2023/03/17(金) 22:10:24.98ID:Pco9qL75d
ワイルドカードで受け取ってアプリ内でいい感じに展開するのは結構負担大きいんだよな

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

上記コードのメカニズムがよくわかりません
0747デフォルトの名無しさん (スフッ Sd33-Tcry)
垢版 |
2023/03/18(土) 06:46:59.63ID:zRF+ruu+d
745です >>746 ありがとうございます あとで確認してみます
0748デフォルトの名無しさん
垢版 |
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で指定した型のサイズ分だけ移動しているのが分かると思う
0749デフォルトの名無しさん
垢版 |
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;
}
0751デフォルトの名無しさん (アウアウエー Sa23-lF85)
垢版 |
2023/03/18(土) 13:17:28.44ID:fSPMk7mFa
ap++ とか ++ap してないのに
どうやって進むのか興味あるわ
0752デフォルトの名無しさん (ワッチョイ 1379-1FFK)
垢版 |
2023/03/18(土) 13:55:06.64ID:RZJZ36we0
va_argの出番って書式出力持たないMsgBoxとかにprintf書式を渡したい時ぐらいだからfmt側の解析なんてやった覚えないな
言語処理系なんかを作る時にCのコンテキスト上で可変引数を渡したい場合にfmt部分を個数にするような特殊なケースは考えられるが
0754デフォルトの名無しさん (アウアウエー Sa23-lF85)
垢版 |
2023/03/18(土) 15:46:47.90ID:fSPMk7mFa
>>753
>>748 観ての感想を描いただけ
>printf("[0x%08X] " , *(int*)ap); でapの中身が va_argで指定した型のサイズ分だけ移動しているのが分かると思う
0756デフォルトの名無しさん (スッププ Sd33-aGM/)
垢版 |
2023/03/18(土) 18:29:38.46ID:a5YJoFt5d
>>754
じゃあどうやって進むのかもうわかってるんじゃん
構造体やマクロ使ってるのはその中身は考えなくてもよくするため
別の言い方すればライブラリのほうが実装を変えてもソースは変更なしでコンパイルするだけで済ますため
もう実装変えることもないだろうけど…
0757デフォルトの名無しさん (ワッチョイ 13ad-F0re)
垢版 |
2023/03/18(土) 19:31:55.62ID:YIU3ErvV0
>>741
cmd.exe の場合は MS-DOS の頃の command.com との互換性を持たせたかったためか、何故か引数のファイル名展開はやらない。
command.com がやらなかった理由は CP/M の CPP (コンソールコマンドプロセッサ) を拡張した仕様で作ったからだと思う。
それと当時はメモリ少なかったしディスクも遅いしあまり複雑な事をさせたくなかったんだろうと思う。
0759デフォルトの名無しさん (ワッチョイ 53fb-Q4VH)
垢版 |
2023/03/18(土) 23:08:40.43ID:VxZ5Gdt+0
ワイルドカード展開の話をするにはC言語だけじゃ済まないでしょ

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

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

0768デフォルトの名無しさん (ワッチョイ eb63-F0re)
垢版 |
2023/03/20(月) 21:58:40.01ID:ZfW6Hudb0
>インドのガンジス河の畔のヴァラナシ(ベナレス)に、世界の中心を表すという巨大な寺院がある。
>そこには青銅の板の上に、長さ1キュビット、太さが蜂の体ほどの3本のダイヤモンドの針が立て
>られている。そのうちの1本には、天地創造のときに神が64枚の純金の円盤を大きい円盤から順
>に重ねて置いた。これが「ブラフマーの塔」である。司祭たちはそこで、昼夜を通して円盤を別の
>柱に移し替えている(移し変えのルールが後述)。そして、全ての円盤の移し替えが終わったとき
>に、世界は崩壊し終焉を迎える。

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

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

桁数多い計算はアラビア数字じゃなく、漢字で表示する電卓があってもいいんじゃないかって思えた。
0771デフォルトの名無しさん (ワッチョイ a963-4ZMk)
垢版 |
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セグ液晶があればってこと?
0774デフォルトの名無しさん (アウアウウー Sa95-lF85)
垢版 |
2023/03/21(火) 15:14:15.74ID:icU0z8mba
議那由他
0775デフォルトの名無しさん (アウアウウー Sa95-3wGb)
垢版 |
2023/03/21(火) 18:19:21.45ID:5/U/DT+Ta
そもそも3桁毎にカンマを入れるから分かりづらくなる。4桁にしなさい。
0789デフォルトの名無しさん (ワッチョイ 934b-Z/XC)
垢版 |
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ファイルが出力されるはずです。
0790デフォルトの名無しさん (ワッチョイ eb46-O+fO)
垢版 |
2023/03/23(木) 23:34:17.83ID:bSG3NjS70
>>789
「*.c」を勝手に「.c」と解釈してはいけない。
testターゲットのくだりは何を言いたいのかわからない。
0793デフォルトの名無しさん (アウアウウー Sa95-preR)
垢版 |
2023/03/24(金) 02:25:05.15ID:OLNVz4ZMa
という事らしいけどこのコマンドだとワイルドカードの展開後にスペースが入るとダメになるのか?
https://i.imgur.com/q27hlri.jpg
0794デフォルトの名無しさん (ワッチョイ d12d-a1qf)
垢版 |
2023/03/24(金) 07:44:01.08ID:3nCdLXbn0
>>764
奥村先生のアルゴリズム事典読んでないのか

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

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

gnu-makeを1つ持ってきただけでlinuxと同じように使えると思うなよ
0801デフォルトの名無しさん (アウアウウー Saa5-tUaT)
垢版 |
2023/03/28(火) 17:18:26.98ID:hvNFNzxEa
NMAKEとnmakeは別物
CMAKEとcmakeも別物
0805デフォルトの名無しさん (ワッチョイ 2e46-4NaH)
垢版 |
2023/03/29(水) 07:35:43.16ID:aVGT5NH20
K&RとK&K缶つまは区別が難しい。
0813デフォルトの名無しさん (ワッチョイ 2e63-3uzD)
垢版 |
2023/03/29(水) 21:53:54.36ID:IqGKKWkZ0
昔リモートでろ具インする際に、迂闊にもユーザー名を大文字で入力してしまったことがあったが
そのまま通してくれたが、その端末の入力文字が全て大文字で扱われてしまったw
0816デフォルトの名無しさん (ワッチョイ 4910-3uzD)
垢版 |
2023/03/31(金) 07:53:00.14ID:FWT7xs5+0
昔FreeBSDかなんかで入力ミスでファイル名が空白入りだか通常ファイル名に使用できないはずの文字が使われて消すのに難儀した記憶があるなぁ。
"で囲って解決できたけど、UNIX歴1年(+大学のFortran 講義4年)の若造にはすぐに思いつかんかった。
0820デフォルトの名無しさん (スップ Sdc2-BuZC)
垢版 |
2023/03/31(金) 16:04:12.84ID:VmvJgfTvd
-rfという名前のファイル置いときますね
0825デフォルトの名無しさん (ワッチョイ ffda-no2l)
垢版 |
2023/04/02(日) 05:17:00.30ID:raeheLh20
>>823
実際にスタックに積まれる段数の最大値は最後の1枚分を除いた直前のすべての移動枚数分
要するに一番下の円盤の移動の直前にそれまでの移動分がすべてスタックに積まれる
0826デフォルトの名無しさん (ワッチョイ 7ffb-Z8D1)
垢版 |
2023/04/02(日) 05:25:52.58ID:t6gv1L3z0
この手のスタックに積まれるのが最大になるタイミングって実装依存になるような気がするが

俺の場合だと1番上に置いてある最初の1枚を動かすタイミングでスタックに64段積まれる
0828デフォルトの名無しさん (ラクッペペ MM4f-+zBY)
垢版 |
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
となる
0829デフォルトの名無しさん (スッププ Sd8f-Yz/h)
垢版 |
2023/04/02(日) 10:39:38.37ID:NRuCP2qfd
いや一枚動かすごとに再帰呼び出す必要ない
n枚動かすならパラメータをn-1枚にして自分自身を再帰呼び出し
そうしてn=1になればもう呼び出す必要はない
結果的にスタックはn段で足りる
再帰呼び出しの利点はまさにそれだから
0842デフォルトの名無しさん (ワッチョイ 6ecf-Rzwh)
垢版 |
2023/04/08(土) 21:21:03.16ID:tM+hyW0O0
>>838
Cにおいて自然数で表されるべきものには全てsize_tを使うべきだと信じてる人達が一定数いる
大きさ、長さ、個数、順番、回数なんかが該当し、そこにはループカウンタも含まれる
意味の問題ではなく教義や主義の問題なんで、自分の考えと違うコードを見かけてもそういうもんだで済ますのがいい
0849デフォルトの名無しさん (テテンテンテン MM66-xOzU)
垢版 |
2023/04/09(日) 10:02:17.83ID:mGUCWnYwM
>>848
100Bだろうが4GBだろうが、テキストファイルをロードする時にはゼロ終端文字列にするだろ
それをstrlenするかどうかは俺の知ったことではない
4GBのゼロ終端文字列が異常ではないというだけだ
0860デフォルトの名無しさん (スッププ Sd22-QGEt)
垢版 |
2023/04/09(日) 13:05:09.35ID:bTpPccPGd
>>858
例えば
終端に移動するとき
サイズと比較して超えていたらエラーか終端に切り詰める
データを追加する場合
終端まで移動
こういった普通の作業するのにいちいちstrlenを呼び出すとかありえないからサイズはどこかに保持する必要がある
よって終端記号はムダだよ
0865デフォルトの名無しさん
垢版 |
2023/04/09(日) 15:09:35.01ID:zFNH8tsS0
>こういった普通の作業するのにいちいちstrlenを呼び出すとかありえないからサイズはどこかに保持する必要がある
“こういった普通の作業”をしない場合はstrlenで良いってことだろ?

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

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

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

〇結局自分が想定する状況なら自分の意見が良い言っているだけで、じゃあ相手の言う状況でも自分の言っているのが正しいと言いたいわけではないでしょ?
0873デフォルトの名無しさん
垢版 |
2023/04/09(日) 18:45:27.28ID:zFNH8tsS0
問題があるからそうしているわけじゃなくて限りある資源をリサイクルだからそうしている
「どれで出してもOKらしい」と言うのは論点が間違ってる

あと指定された場所にあるゴミは所有権の放棄じゃなくて自治体への譲渡みたいなモノだから持ち帰りは窃盗になる
0876デフォルトの名無しさん (ワッチョイ 6e63-Ay2p)
垢版 |
2023/04/09(日) 18:51:41.97ID:aX3VhQL60
実際PETボトルは回収しても資源として再利用するのに手間が掛かる
だから、飲料メーカーもPETからアルミ容器に切り替えている
アルミはリサイクルが簡単なんだそうだ
0878デフォルトの名無しさん (ワッチョイ 0279-90pI)
垢版 |
2023/04/09(日) 19:07:33.05ID:I9Qf3W7D0
基本リサイクルはコスト的にデメリットしかない
一部ではやってますよアピールをしつつ、大半は分別したのをわざわざまとめて燃やしたり他所に押し付けるのが現実
環境商法は理想アピールとかけ離れた現実が弱みになって反社が入り込みやすいジャンルになってるから関わると危険だよ
0881デフォルトの名無しさん (テテンテンテン MM66-xOzU)
垢版 |
2023/04/09(日) 19:22:58.30ID:ONc2duBhM
ま、Cの文字列はバグり易いのは間違いないがな
特にmmapを使うと悲劇が起こりやすい
なのでテキストファイルの読み込みには、LoadTextFileの様な明確な名前を付けて専用に用意するのが常套手段
もちろんゼロ終端文字列を返す
0887デフォルトの名無しさん (スッププ Sd22-QGEt)
垢版 |
2023/04/11(火) 00:17:24.82ID:KrSp3HQhd
>>883
なんかこの人おかしくないか?ラベル…?
>>884も変だけど…ストラ3兄弟って…ギャグか?w
最終的に関数名をちゃんとすればどうにかなるみたいだし
そんな話誰が信じるんだよw


>>886
859に言ってくれ
明らかな誤りが含まれていたので訂正した
0896デフォルトの名無しさん (ワッチョイ 2d63-r2C4)
垢版 |
2023/04/11(火) 15:56:45.30ID:dFL5vcfn0
>>895
残念ながら俺は文字列サイズとかいう造語の話はしてない
853曰く
> サイズわかってるのに終端つける意味がないわ
に対してあえて冗長な設計にする場合があると指摘したまで

>>864もそうだがどうもおまえさんサイズという語の意味を都合良く変動させているようだな
0899デフォルトの名無しさん (スッップ Sd22-QGEt)
垢版 |
2023/04/11(火) 19:50:55.63ID:ozkx3imqd
>>896
くだらない言い訳だ
文字列をロードしたサイズの話をしているのにコマンドラインの引数の個数の話にするのは不自然だと感じた

どうでもいいが文字列の終端までの長さをなんと呼ぶのかね
0902デフォルトの名無しさん (ワッチョイ 02ad-Ay2p)
垢版 |
2023/04/12(水) 02:49:44.30ID:1sJZVfCp0
文字の長さ 3m
重さ 5kg
0904デフォルトの名無しさん (ワッチョイ 02ad-Ay2p)
垢版 |
2023/04/12(水) 02:53:14.30ID:1sJZVfCp0
とても長くて太くて大きくて重そう
0907デフォルトの名無しさん (アウアウウー 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; みたいな実装もたまに観るからあなどれない
0908デフォルトの名無しさん (アウアウウー 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)
にするアホな例はよく観るってどっかのサイトに描いてあった
0918デフォルトの名無しさん (スップ Sd82-qF+M)
垢版 |
2023/04/12(水) 14:17:34.62ID:mayblUPzd
C++だと通ったね
gcc/clangのCだとX[]は許されないけどX*は許される

関数宣言より前にX型の定義がないとコンパイルが通らなかった
0920デフォルトの名無しさん
垢版 |
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に依存することになってどっちでも同じじゃないかと思うんですがどうなんでしょうか?
0923デフォルトの名無しさん
垢版 |
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() ではプログラマーが予期しない動作になりませんか?
0925デフォルトの名無しさん (ワッチョイ 6ecf-Rzwh)
垢版 |
2023/04/12(水) 15:34:06.47ID:gccG0Jwg0
>>922
はずだかなんだか知らねーけど、そんなことはどうでも良くてサイズの分からないオブジェクトの配列は作れんって言ってんだよ
操作上の違いはともかく配列として宣言したんなら関数内では配列として扱うってことを示唆してるわけだろ
仮にそのfuncだかって名前の関数の中にX[3]とかX+5って書かれたらどうやってアドレス出すんだってことよ
動作に違いがあるってことは規格がそれを許してる箇所なんだろうけど弾いてる処理系はそういう考えなんだろう
0929はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/aea)
垢版 |
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];
0932はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/aea)
垢版 |
2023/04/13(木) 00:37:34.59ID:y5cvZaYN0
>>931
そこでも言及されてるけど
型調整 (配列がポインタに読み替えられる) が優先されるか配列宣言子としての解釈が優先されるかって曖昧じゃない?
読み替えより先に配列宣言子として解釈すべきと確信できるような記述ってある?
常識的には曖昧なら厳しい側の制約で解釈すべきだわなーとは思うけど陽には書かれてないように思う。
0933デフォルトの名無しさん (ワッチョイ 02ad-Ay2p)
垢版 |
2023/04/13(木) 02:04:44.32ID:o3x890Fi0
>>907
昔々の PASCAL はそんな感じだったな。先頭1バイトに文字列のバイト数が入っていてその後に文字列がある。
当然それだと255バイトまでしか入らないのでもっと長い文字列を扱いたい時に苦しむことになる。
まあでも 8 bit とか 16 bit CPU のマイコンやパソコンにそういう高い要求は最初の頃はあまりなかったのでなんとかなっていた。
0934デフォルトの名無しさん (ワッチョイ 495f-/aea)
垢版 |
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, ...

「通る」が警告も出ずプログラム実行までできる状態と解釈してたけど、
エラーにはならないものの警告が出ているならそれも規格準拠とは言えそう。
0940デフォルトの名無しさん (ワッチョイ 02ad-Ay2p)
垢版 |
2023/04/13(木) 23:55:19.80ID:o3x890Fi0
はあ
0942◆QZaw55cn4c (ワッチョイ 07e6-DPrL)
垢版 |
2023/04/15(土) 19:42:43.70ID:JbgATxBi0
最近のLANカードで他力給電のものばかりのようですね、クロスケーブルでピアツーピアできるPCIe のカードって存在しないものですかね…
結局 hub を使っちまった、もったいないなあ
0949デフォルトの名無しさん (ワッチョイ c7b3-5oiz)
垢版 |
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;
}
0952デフォルトの名無しさん (ワッチョイ 5fad-sFbk)
垢版 |
2023/04/17(月) 03:01:25.01ID:g2jYQi3l0
>>949
それわざわざ文字列にしてからやる必要ないよね。
10で割った余りを足して10で割るのを繰り返せば良いだけだし。
仮に(宿題や問題の都合で)どうしても文字列に直してやらなければならないのだとしても文字列として使う char 配列の
初期化で全部0で埋めるのは処理の無駄だしそんな事をするのはC言語における文字列の扱いについてよく分かって
いないことの現れだと思う。
0957デフォルトの名無しさん (ササクッテロロ Spfb-tEYI)
垢版 |
2023/04/17(月) 09:53:06.18ID:MNSyV7UUp
文字列で与えなきゃデカい数字が扱えないやん
0963デフォルトの名無しさん (ワッチョイ 67c9-ieXZ)
垢版 |
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'; に
置き換えることもできるかもしれない
0970はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-S3w6)
垢版 |
2023/04/17(月) 16:54:39.89ID:FYaudfJt0
>>969
現実には JIS は読みの順序で Unicode は部首の画数の順序が原則。
漢数字を例外にしたらそれはそれで不格好だし嬉しくない人もいるだろう。

まあ Unicode は後から追加した分だのなんだのでそんなに綺麗に並んでいるわけでもないので
どうせぐちゃぐちゃなら数字くらいは並べても良かったんちゃうかなというのは気持ちはわかる。
0976デフォルトの名無しさん (スフッ Sd7f-fSvC)
垢版 |
2023/04/18(火) 14:58:32.85ID:aePy3OZ8d
未初期化の自動変数には「不定値」が割り当てられる、と調べるたり自分が学んでいる本でも書いていますが、自分のコンパイラは常に「0」になっているようです 
なぜでしょうか? 
ちなみにgcc-10です gcc-11だと「不定値」になります
0977はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f32-iKPJ)
垢版 |
2023/04/18(火) 15:29:21.41ID:rjFDtS/R0
不定の値とは「未規定の値又はトラップ表現」と規定されてる。
常に 0 であってもこの規定に反しないよ。
0978デフォルトの名無しさん (スフッ Sd7f-7nfa)
垢版 |
2023/04/18(火) 16:27:26.25ID:U9oAz8h1d
>>977 ありがとうございます
ちなみに「トラップ表現」とはなんでしょうか?
0979デフォルトの名無しさん (スフッ Sd7f-foDO)
垢版 |
2023/04/18(火) 16:57:48.54ID:U9oAz8h1d
976です chatgptで調べました
C言語の仕様では、自動変数を初期化しない場合、その値は不定とされています。これは、コンパイラがメモリ上で変数を割り当てる際に、その領域が以前に使用されていたデータを含んでいる可能性があるためです。

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

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

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

とはいえ整数型でトラップ表現があるアーキテクチャを私は見たことが無いけどな。
0981デフォルトの名無しさん (スプッッ 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バイト境界に直されるかもしれないし、トラップ表現かもしれない
0982デフォルトの名無しさん (スフッ Sd7f-foDO)
垢版 |
2023/04/18(火) 19:26:15.76ID:U9oAz8h1d
>>980 ありがとうございます 勉強になりました
0984デフォルトの名無しさん (ワッチョイ 6746-KCd8)
垢版 |
2023/04/19(水) 02:43:50.96ID:MHEst9B30
>>983
> ちなみにgcc-10です
と書かれている。
0986デフォルトの名無しさん (ワッチョイ 2763-7nfa)
垢版 |
2023/04/19(水) 06:59:06.58ID:twYHK80b0
983息してるか?www
0992デフォルトの名無しさん (ワッチョイ 4701-JFqP)
垢版 |
2023/04/19(水) 20:04:36.21ID:3t8AIZsr0
C言語のソースコードを検査して処理系依存や未定義動作等の環境によって
結果が変わりうる可能性のある部分を見つけてくれるツールってどんなのがありますか?
コードエディタはvscodeなのでこれと連携できるとなおよいです
0995デフォルトの名無しさん (アウアウウー Sacb-JRah)
垢版 |
2023/04/20(木) 09:13:39.09ID:EuuMXrfTa
とにかくggr
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を超えています。これ以上書き込みはできません。

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