C言語なら俺に聞け 160

■ このスレッドは過去ログ倉庫に格納されています
2022/12/28(水) 10:40:30.02ID:PyoNDBFu0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 159
https://mevius.5ch.net/test/read.cgi/tech/1659623547/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/03/23(木) 12:13:56.39ID:AQHpwrnPa
PじゃなくてEだけで良くね?への回答
https://www.youtube.com/watch?v=G9sQJKWtIyY
https://pc.watch.impress.co.jp/docs/news/1467839.html
2023/03/23(木) 17:44:43.43ID:jkM8aKTm0
チャットGPTに聞けばこのスレイランな
2023/03/23(木) 17:59:55.15ID:iGp/2pYiM
C言語でハノイの塔を解く方法をAIに尋ねると単純な再帰を利用したコードが回答で示された
64枚だと2^64回関数呼出しされるのでスタックが溢れてエラーになると思うけど…
2023/03/23(木) 18:52:56.54ID:idQN1Zf4a
>>786
再帰を使うなと指示すると?
2023/03/23(木) 20:11:19.63ID:SbTLzylyd
>>785
使い方わからないのバレバレだぞ
2023/03/23(木) 20:15:11.71ID:zF57gPzV0
>>723を聞いたらこうなった

Makefileの変数展開は、シェルの変数展開とは異なり、特殊文字の処理を行います。したがって、$(shell find $(SRC_DIRS) -name .c)の.cは、Makefileの展開により、現在のディレクトリにある*.cとして解釈されてしまいます。

そのため、正しいファイルを検索するためには、*.cをクォートする必要があります。具体的には、以下のようにしてください。

TEST := $(shell find $(SRC_DIRS) -name '*.c')

また、echo $(TEST)は、Makefileのルールではありません。Makefileルールにするには、次のようにしてください。

test:
echo $(TEST)

これで、make testコマンドを実行すると、$(SRC_DIRS)ディレクトリ以下のすべての.cファイルが出力されるはずです。
790デフォルトの名無しさん (ワッチョイ eb46-O+fO)
垢版 |
2023/03/23(木) 23:34:17.83ID:bSG3NjS70
>>789
「*.c」を勝手に「.c」と解釈してはいけない。
testターゲットのくだりは何を言いたいのかわからない。
2023/03/24(金) 01:40:52.79ID:fdUS3d7o0
どうせコピペミスでタブが消えたりしてるんだろう。
2023/03/24(金) 01:47:36.96ID:+5hIDmAP0
ChatGPTに聞いたことそのままを得意げにレスする無能はこの世から退場してほしいよマジで
793デフォルトの名無しさん (アウアウウー Sa95-preR)
垢版 |
2023/03/24(金) 02:25:05.15ID:OLNVz4ZMa
という事らしいけどこのコマンドだとワイルドカードの展開後にスペースが入るとダメになるのか?
https://i.imgur.com/q27hlri.jpg
2023/03/24(金) 07:44:01.08ID:3nCdLXbn0
>>764
奥村先生のアルゴリズム事典読んでないのか

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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