[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 09/06 12:27 / Filesize : 234 KB / Number-of Response : 1016
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 160



1 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 10:40:30.02 ID:PyoNDBFu0.net]
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

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

C11
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
www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
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

751 名前:デフォルトの名無しさん [2023/03/17(金) 22:10:24.98 ID:Pco9qL75d.net]
ワイルドカードで受け取ってアプリ内でいい感じに展開するのは結構負担大きいんだよな

MSDOSのシェル側の負担を減らしたいというのは発想としてはアリなんだけど、
ハードの性能が上がった現代では時代遅れになってしまった

752 名前:デフォルトの名無しさん mailto:sage [2023/03/18(土) 00:02:14.45 ID:W6y4Yh40d.net]
>>742
言えることは
普通にビルドで必要な機能は揃ってるからmakeの組み込み関数を使え
shellは最後の手段と思え
どこで展開が起こってるかエスケープ文字が食われているかを探してる時間のムダだ

753 名前:デフォルトの名無しさん [2023/03/18(土) 05:53:53.69 ID:zRF+ruu+d.net]
/* データ型が混在した可変個引数をもつ関数の例 */
#include <stdio.h>
#include <stdarg.h>

void unidisp(char *fmt, ...);

int main(void)
{
unidisp("iii",100, 200, 300); // 3つのデータ表示
unidisp("idsids", 11, 22.22, "aaaa", 33, 44.44, "bbbbb") // 6つのデータ表示
return 0;
}
/* fmt内容 → i:int値表示 d:double値表示 s:文字列表示 */
void unidisp(char *fmt, ...)
{
va_list ap; // 構造体オブジェクトを確保
va_start(ap,fmt); // 最終引数を指定してapを設定
while (*fmt) {
if (*fmt == 'i') printf("%d\n", va_arg(ap, int)); // int値表示
if (*fmt == 'd') printf("%f\n", va_arg(ap, double)); // double値表示
if (*fmt == 's') printf("%s\n", va_arg(ap, char *)); // 文字列表示

++fmt;
}
va_end(ap); // 後処理
}

上記コードのメカニズムがよくわかりません

754 名前:デフォルトの名無しさん mailto:sage [2023/03/18(土) 06:00:42.41 ID:l7CGioJ10.net]
>>745

va_argマクロの実装を読むとわかるぞ
ちとしんどいが頑張るんだ

755 名前:デフォルトの名無しさん [2023/03/18(土) 06:46:59.63 ID:zRF+ruu+d.net]
745です >>746 ありがとうございます あとで確認してみます

756 名前:デフォルトの名無しさん mailto:sage [2023/03/18(土) 07:24:12.42 ID:pLAb7CSJ0.net]
普通は関数の引数が型を指定してユーザはそれに従うところを
とりあえずすべてアドレスで渡して、ユーザが自分で「そのアドレスは何を指しているか」を明示すると言うことだよ

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

printf("[0x%08X] " , *(int*)ap); でapの中身が va_argで指定した型のサイズ分だけ移動しているのが分かると思う

757 名前:デフォルトの名無しさん mailto:sage [2023/03/18(土) 07:24:33.20 ID:pLAb7CSJ0.net]
void __fastcall PrintBuffer(va_list *ap)
{
int i;
char *buf = (char*)ap;
int len=sizeof(va_list);
for(i=0;i<len;i++) printf("%02X ", buf[i] & 0xFF);
printf("[0x%08X] " , *(int*)ap);

}
/* fmt内容 → i:int値表示 d:double値表示 s:文字列表示 */
void unidisp(char *fmt, ...)
{
va_list ap; // 構造体オブジェクトを確保
va_start(ap,fmt); // 最終引数を指定してapを設定
while (*fmt) {
PrintBuffer(&ap);
if (*fmt == 'i') printf("%d sizeof(int) = %d\n", va_arg(ap, int) , sizeof(int)); // int値表示
if (*fmt == 'd') printf("%f sizeof(double) = %d\n", va_arg(ap, double) , sizeof(double)); // double値表示
if (*fmt == 's') printf("%s sizeof(char *) = %d\n", va_arg(ap, char *) , sizeof(char *)); // 文字列表示

++fmt;
}
va_end(ap); // 後処理
}

int main(void)
{
unidisp("iii",100, 200, 300); printf("\r\n"); // 3つのデータ表示
unidisp("idsids", 11, 22.22, "aaaa", 33, 44.44, "bbbbb"); // 6つのデータ表示
return 0;
}

758 名前:デフォルトの名無しさん mailto:sage [2023/03/18(土) 07:25:30.63 ID:pLAb7CSJ0.net]
あ、__fastcall は見なかったことにして
いつもの癖で……

759 名前:デフォルトの名無しさん [2023/03/18(土) 13:17:28.44 ID:fSPMk7mFa.net]
ap++ とか ++ap してないのに
どうやって進むのか興味あるわ



760 名前:デフォルトの名無しさん mailto:sage [2023/03/18(土) 13:55:06.64 ID:RZJZ36we0.net]
va_argの出番って書式出力持たないMsgBoxとかにprintf書式を渡したい時ぐらいだからfmt側の解析なんてやった覚えないな
言語処理系なんかを作る時にCのコンテキスト上で可変引数を渡したい場合にfmt部分を個数にするような特殊なケースは考えられるが

761 名前:デフォルトの名無しさん mailto:sage [2023/03/18(土) 15:27:28.06 ID:utkGGsyod.net]
>>751
apは構造体の実体だぞ
多分ポインタはその中にあってマクロva_argでインクリメントされてる

762 名前:デフォルトの名無しさん [2023/03/18(土) 15:46:47.90 ID:fSPMk7mFa.net]
>>753
>>748 観ての感想を描いただけ
>printf("[0x%08X] " , *(int*)ap); でapの中身が va_argで指定した型のサイズ分だけ移動しているのが分かると思う

763 名前:デフォルトの名無しさん mailto:sage [2023/03/18(土) 16:47:24.17 ID:F6WTPPiM0.net]
スタックに積まれたfmtのアドレスをベースになぞっていってるだけじゃないの?

764 名前:デフォルトの名無しさん mailto:sage [2023/03/18(土) 18:29:38.46 ID:a5YJoFt5d.net]
>>754
じゃあどうやって進むのかもうわかってるんじゃん
構造体やマクロ使ってるのはその中身は考えなくてもよくするため
別の言い方すればライブラリのほうが実装を変えてもソースは変更なしでコンパイルするだけで済ますため
もう実装変えることもないだろうけど…

765 名前:デフォルトの名無しさん [2023/03/18(土) 19:31:55.62 ID:YIU3ErvV0.net]
>>741
cmd.exe の場合は MS-DOS の頃の command.com との互換性を持たせたかったためか、何故か引数のファイル名展開はやらない。
command.com がやらなかった理由は CP/M の CPP (コンソールコマンドプロセッサ) を拡張した仕様で作ったからだと思う。
それと当時はメモリ少なかったしディスクも遅いしあまり複雑な事をさせたくなかったんだろうと思う。

766 名前:デフォルトの名無しさん mailto:sage [2023/03/18(土) 22:34:01.09 ID:mRvYwteE0.net]
C言語の話題に戻していくと、
VCの場合は、setargv.objをリンクしないと、
コマンドラインで指定されたワイルドカードを
ファイルに展開できなかったと思う

767 名前:デフォルトの名無しさん [2023/03/18(土) 23:08:40.43 ID:VxZ5Gdt+0.net]
ワイルドカード展開の話をするにはC言語だけじゃ済まないでしょ

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

プログラムに渡された文字列自体はタスクマネージャーからコマンドラインの項目から確認できる

768 名前:デフォルトの名無しさん [2023/03/19(日) 10:06:46.77 ID:fPDrKYk/a.net]
>>757
PHP (言語じゃない方の) 0x80 から始まるやつか

769 名前:はちみつ餃子 mailto:sage [2023/03/19(日) 10:39:51.37 ID:6gmOWdI+0.net]
>>760
ワイが持っとる資料やと PSP (Program Segment Prefix) と書いてあるんやが PHP という用語もあるんか?
実際のところ用語の混乱はかなりあるのでどれが公式なんかようわからん……。



770 名前:デフォルトの名無しさん [2023/03/19(日) 14:19:25.25 ID:j+ABECd6d.net]
>>481
https://youtu.be/a999bvLqcik

771 名前:デフォルトの名無しさん [2023/03/20(月) 14:09:31.85 ID:uf3XtkTY0.net]
やがて「ハノイの塔解いて」と一声AIに言えばAI自身が自分でハノイの塔をやって解いてしまうようになり一々プログラミング言語で出力する必要がなくなる。そして何でもやっといてとAIに頼むとAIがやってしまうようになり、ロボットのコントロールもできるので人間の代わりは何でもできるようになり全ての人間は不要になる。1万年後、AIによって飼育されていた最後の人間が死亡して人類は絶滅。その時銀河系全体を支配しているのはAI。



772 名前:デフォルトの名無しさん mailto:sage [2023/03/20(月) 14:37:20.82 ID:ZfW6Hudb0.net]
ハノイの塔解くと、その瞬間に世界は消滅する
1万年も待つ必要は無い

773 名前:デフォルトの名無しさん mailto:sage [2023/03/20(月) 14:42:36.37 ID:2uty+vYkM.net]
量子コンピュータが実用化されるまでは脅威にはならないだろ

774 名前:デフォルトの名無しさん mailto:sage [2023/03/20(月) 18:27:48.49 ID:GQGgQXaMa.net]
PHP
PSP
PNP
PIP
P2P
PAP^-1

775 名前:デフォルトの名無しさん mailto:sage [2023/03/20(月) 21:42:59.73 ID:E+Gjka8id.net]
>>764
時空が不安定になると塔が4本に増えたりするからその時どんどん進むんだよ

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

たった64枚のハノイの塔で世界の寿命が決まる。長いのか、短いのか、微妙。

777 名前:デフォルトの名無しさん mailto:sage [2023/03/20(月) 22:09:26.36 ID:jcm8mWW1M.net]
アルゴリズム自体は既に確立しているので解決できることは証明されてる
問題は非現実的な

778 名前:r方もない回数を繰返す時間が障害となること
少なくとも現在のコンピュータでは現実的な時間で解くことは出来ない
件の64枚の円盤でも反復回数は2の64乗回で約1844京を超える
[]
[ここ壊れてます]

779 名前:デフォルトの名無しさん mailto:sage [2023/03/21(火) 12:00:15.67 ID:IwTPG7510.net]
関係ないけど

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

桁数多い計算はアラビア数字じゃなく、漢字で表示する電卓があってもいいんじゃないかって思えた。



780 名前:デフォルトの名無しさん mailto:sage [2023/03/21(火) 12:25:10.48 ID:UyD8IPHr0.net]
8888無量大数8888不可思8888議那由他8888阿僧祇8888恒河沙8888極8888載8888正8888澗8888溝8888穣8888??8888垓8888京8888兆8888億8888万8888

こういう7セグ液晶があればってこと?

781 名前:デフォルトの名無しさん mailto:sage [2023/03/21(火) 12:37:14.08 ID:AYNSF4vg0.net]
位取りのゼロを省けるってことが言いたいんだろう
1,000,000,000,004と一兆四みたいな

782 名前:デフォルトの名無しさん mailto:sage [2023/03/21(火) 13:02:27.49 ID:1LNxuhQm0.net]
KとかMとかでもいいんじゃね

783 名前:デフォルトの名無しさん [2023/03/21(火) 15:14:15.74 ID:icU0z8mba.net]
議那由他

784 名前:デフォルトの名無しさん [2023/03/21(火) 18:19:21.45 ID:5/U/DT+Ta.net]
そもそも3桁毎にカンマを入れるから分かりづらくなる。4桁にしなさい。

785 名前:デフォルトの名無しさん mailto:sage [2023/03/21(火) 19:53:44.07 ID:rSG8VZ2l0.net]
電卓で一兆四みたいな表示だとキー入力と表示が一致しないのが問題
1 0000 0000 0004と併記ならよいかな

786 名前:デフォルトの名無しさん mailto:sage [2023/03/21(火) 20:37:03.57 ID:AlGpjgGZ0.net]
電卓でそんな計算するな
パソコンでやれ

787 名前:デフォルトの名無しさん mailto:sage [2023/03/21(火) 20:47:39.08 ID:UyD8IPHr0.net]
excelにはsi接頭辞サポートすらないという呆れ果てた状況

788 名前:デフォルトの名無しさん mailto:sage [2023/03/21(火) 20:55:06.42 ID:P4ncG2CK0.net]
C言語でプログラム組んでみてください

結果が1844京... になることを示してください

789 名前:デフォルトの名無しさん mailto:sage [2023/03/21(火) 21:08:27.55 ID:SAsicGRC0.net]
1TBとか兆が出てくるから
電卓でやりたいという気持ちはわかる



790 名前:デフォルトの名無しさん mailto:sage [2023/03/21(火) 21:11:11.69 ID:dGZfvl2z0.net]
>771
ttps://i.imgur.com/WG6470C.jpeg
こんなかんじでゆるしたるわ。

791 名前:蟻人間 mailto:sage [2023/03/21(火) 23:01:15.49 ID:J5OkhG96d.net]
https://katahiromz.fc2.page/calc-h/
ひらがな電卓

792 名前:デフォルトの名無しさん mailto:sage [2023/03/21(火) 23:52:32.18 ID:VH9D4S5b0.net]
チャットGPTに書かせてみた
https://ideone.com/n5FOpB

793 名前:デフォルトの名無しさん mailto:sage [2023/03/23(木) 12:13:56.39 ID:AQHpwrnPa.net]
PじゃなくてEだけで良くね?への回答
https://www.youtube.com/watch?v=G9sQJKWtIyY
https://pc.watch.impress.co.jp/docs/news/1467839.html

794 名前:デフォルトの名無しさん mailto:sage [2023/03/23(木) 17:44:43.43 ID:jkM8aKTm0.net]
チャットGPTに聞けばこのスレイランな

795 名前:デフォルトの名無しさん mailto:sage [2023/03/23(木) 17:59:55.15 ID:iGp/2pYiM.net]
C言語でハノイの塔を解く方法をAIに尋ねると単純な再帰を利用したコードが回答で示された
64枚だと2^64回関数呼出しされるのでスタックが溢れてエラーになると思うけど…

796 名前:デフォルトの名無しさん mailto:sage [2023/03/23(木) 18:52:56.54 ID:idQN1Zf4a.net]
>>786
再帰を使うなと指示すると?

797 名前:デフォルトの名無しさん mailto:sage [2023/03/23(木) 20:11:19.63 ID:SbTLzylyd.net]
>>785
使い方わからないのバレバレだぞ

798 名前:デフォルトの名無しさん mailto:sage [2023/03/23(木) 20:15:11.71 ID:zF57gPzV0.net]
>>723を聞いたらこうなった

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

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

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

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

test:
echo $(TEST)

これで、make testコマンドを実行すると、$(SRC_DIRS)ディレクトリ以下のすべての.cファイルが出力されるはずです。

799 名前:デフォルトの名無しさん [2023/03/23(木) 23:34:17.83 ID:bSG3NjS70.net]
>>789
「*.c」を勝手に「.c」と解釈してはいけない。
testターゲットのくだりは何を言いたいのかわからない。



800 名前:デフォルトの名無しさん mailto:sage [2023/03/24(金) 01:40:52.79 ID:fdUS3d7o0.net]
どうせコピペミスでタブが消えたりしてるんだろう。

801 名前:デフォルトの名無しさん mailto:sage [2023/03/24(金) 01:47:36.96 ID:+5hIDmAP0.net]
ChatGPTに聞いたことそのままを得意げにレスする無能はこの世から退場してほしいよマジで

802 名前:デフォルトの名無しさん (アウアウウー Sa95-preR) [2023/03/24(金) 02:25:05.15 ID:OLNVz4ZMa.net]
という事らしいけどこのコマンドだとワイルドカードの展開後にスペースが入るとダメになるのか?
https://i.imgur.com/q27hlri.jpg

803 名前:デフォルトの名無しさん (ワッチョイ d12d-a1qf) mailto:sage [2023/03/24(金) 07:44:01.08 ID:3nCdLXbn0.net]
>>764
奥村先生のアルゴリズム事典読んでないのか

(前略)
完成したときには塔は崩れ、世界の終わりが来る。
以上はEdouard Lucasによる作り話である。
Recreations mathematiques, four volumes,

804 名前:デフォルトの名無しさん mailto:sage [2023/03/24(金) 08:07:45.16 ID:H5Ma0rS5M.net]
単純計算で5000億年以上未来の話
ちなみに宇宙の歴史は現在約137億年

805 名前:デフォルトの名無しさん [2023/03/24(金) 08:12:52.05 ID:5/LG9PJA0.net]
Windowsでのfindといえば「指定ディレクトリ以下のファイルを列挙する」じゃなくて「標準入力から検索パターンにマッチした行を出力する(grepみたいな感じ)」だぞ

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

gnu-makeを1つ持ってきただけでlinuxと同じように使えると思うなよ

806 名前:デフォルトの名無しさん mailto:sage [2023/03/24(金) 08:58:21.29 ID:BXtHk51Qd.net]
だからmakeの組み込み関数使えって
unix系とDOS系で外部コマンドの仕様も挙動も違うので呼び出しに失敗する可能性が高いから

もっともmakeの関数も微妙に違うけどなw

807 名前:デフォルトの名無しさん mailto:sage [2023/03/24(金) 12:34:44.06 ID:Z+lkBBvAd.net]
>>794
なんだ嘘だったのかー
俺の時間を返せよー

808 名前:デフォルトの名無しさん mailto:sage [2023/03/24(金) 16:39:40.70 ID:jOUoDADO0.net]
君の人生は三枚分くらいだ

809 名前:デフォルトの名無しさん (スッップ Sd62-gKT6) mailto:sage [2023/03/25(土) 13:09:54.16 ID:LtI+pZf0d.net]
DOS用にリメイクしたのがNMAKE



810 名前:デフォルトの名無しさん (アウアウウー Saa5-tUaT) [2023/03/28(火) 17:18:26.98 ID:hvNFNzxEa.net]
NMAKEとnmakeは別物
CMAKEとcmakeも別物

811 名前:デフォルトの名無しさん mailto:sage [2023/03/28(火) 21:32:09.46 ID:b9xJHTM00.net]
NMAKEとnmakeって区別つくのか?

812 名前:デフォルトの名無しさん mailto:sage [2023/03/29(水) 01:50:54.12 ID:SUmt67gz0.net]
言われてみればひつまぶしとひまつぶしとか区別難しいよね。

813 名前:デフォルトの名無しさん mailto:sage [2023/03/29(水) 06:33:27.98 ID:/YP4UcCE0.net]
なおざりとおざなりとか

814 名前:デフォルトの名無しさん [2023/03/29(水) 07:35:43.16 ID:aVGT5NH20.net]
K&RとK&K缶つまは区別が難しい。

815 名前:デフォルトの名無しさん mailto:sage [2023/03/29(水) 08:00:28.55 ID:KlLOEDO70.net]
ビットAND

816 名前:デフォルトの名無しさん mailto:sage [2023/03/29(水) 10:38:44.75 ID:i2Cmbqbld.net]
>>802
UNIXのファイル名は大文字小文字を区別する

817 名前:デフォルトの名無しさん mailto:sage [2023/03/29(水) 10:52:21.31 ID:G1cQpJHKd.net]
UNIX版のNMAKEってあるの?

818 名前:デフォルトの名無しさん mailto:sage [2023/03/29(水) 19:37:12.44 ID:UTBm5KT2d.net]
コンパイルすること
ウニツクスにできないことは「出来ましえーん」と言う言葉

819 名前:デフォルトの名無しさん mailto:sage [2023/03/29(水) 19:37:56.22 ID:A5Sld2vWd.net]
ユニクズ



820 名前:デフォルトの名無しさん mailto:sage [2023/03/29(水) 21:42:59.38 ID:lgv9dsNdd.net]
UNIXがクズというならC言語使うなよw

821 名前:デフォルトの名無しさん mailto:sage [2023/03/29(水) 21:45:20.51 ID:KlLOEDO70.net]
Multics -> Unics -> UNIX

822 名前:デフォルトの名無しさん mailto:sage [2023/03/29(水) 21:53:54.36 ID:IqGKKWkZ0.net]
昔リモートでろ具インする際に、迂闊にもユーザー名を大文字で入力してしまったことがあったが
そのまま通してくれたが、その端末の入力文字が全て大文字で扱われてしまったw

823 名前:デフォルトの名無しさん (ワッチョイ 5902-hP/J) mailto:sage [2023/03/31(金) 05:41:00.80 ID:oqvq/yKq0.net]
そんな仕様ってあったっけ?

824 名前:デフォルトの名無しさん (ワッチョイ e510-uluY) mailto:sage [2023/03/31(金) 07:47:26.16 ID:qPx00nGL0.net]
もしかしたらULTRIXの独自仕様かな?

825 名前:デフォルトの名無しさん (ワッチョイ 4910-3uzD) mailto:sage [2023/03/31(金) 07:53:00.14 ID:FWT7xs5+0.net]
昔FreeBSDかなんかで入力ミスでファイル名が空白入りだか通常ファイル名に使用できないはずの文字が使われて消すのに難儀した記憶があるなぁ。
"で囲って解決できたけど、UNIX歴1年(+大学のFortran 講義4年)の若造にはすぐに思いつかんかった。

826 名前:デフォルトの名無しさん (ワッチョイ 4d63-QuRV) mailto:sage [2023/03/31(金) 09:44:55.95 ID:RwPszGx50.net]
remove()を使うって発想もなかったん?

827 名前:デフォルトの名無しさん (ワッチョイ 2e63-3uzD) mailto:sage [2023/03/31(金) 10:06:11.78 ID:ZGSDW47D0.net]
以前の職場、頭に”-”付いたファイルがよく放置されてたな

828 名前:デフォルトの名無しさん (アウアウウー Saa5-3uzD) mailto:sage [2023/03/31(金) 12:22:34.54 ID:EpaLX3NUa.net]
getopt()の仕様がわかってないと削除できないやつね

829 名前:デフォルトの名無しさん (スップ Sdc2-BuZC) [2023/03/31(金) 16:04:12.84 ID:VmvJgfTvd.net]
-rfという名前のファイル置いときますね



830 名前:デフォルトの名無しさん (スッププ Sdd6-wCIk) mailto:sage [2023/03/31(金) 16:20:13.87 ID:N/uv7Ri4d.net]
*で全部消える

831 名前:デフォルトの名無しさん (ワッチョイ ff9a-Pd8U) mailto:sage [2023/04/01(土) 04:36:47.77 ID:TiOY9/eM0.net]
>>813
ttyに「大文字だけの端末」みたいのをサポートするモードがあったはず
今でもsttyにolcucとかオプションがある

832 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 08:01:57.89 ID:JdkGmPlI0.net]
>>786
手順が2⁶⁴-1回なだけで2⁶⁴段スタックがたまるわけじゃないぞ?

833 名前:デフォルトの名無しさん mailto:sage [2023/04/01(土) 08:28:02.36 ID:RFr3BRPJ0.net]
その手順ごとに自身が呼ばれるから64回の再帰ってことじゃないの?

834 名前:デフォルトの名無しさん (ワッチョイ ffda-no2l) mailto:sage [2023/04/02(日) 05:17:00.30 ID:raeheLh20.net]
>>823
実際にスタックに積まれる段数の最大値は最後の1枚分を除いた直前のすべての移動枚数分
要するに一番下の円盤の移動の直前にそれまでの移動分がすべてスタックに積まれる

835 名前:デフォルトの名無しさん (ワッチョイ 7ffb-Z8D1) [2023/04/02(日) 05:25:52.58 ID:t6gv1L3z0.net]
この手のスタックに積まれるのが最大になるタイミングって実装依存になるような気がするが

俺の場合だと1番上に置いてある最初の1枚を動かすタイミングでスタックに64段積まれる

836 名前:デフォルトの名無しさん (スッププ Sd8f-Yz/h) mailto:sage [2023/04/02(日) 09:45:46.28 ID:NRuCP2qfd.net]
>>786
2^64回ではなくて64!回じゃないのか?

837 名前:デフォルトの名無しさん (ラクッペペ MM4f-+zBY) mailto:sage [2023/04/02(日) 10:09:18.45 ID:tfS01X/KM.net]
>>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
となる

838 名前:デフォルトの名無しさん (スッププ Sd8f-Yz/h) mailto:sage [2023/04/02(日) 10:39:38.37 ID:NRuCP2qfd.net]
いや一枚動かすごとに再帰呼び出す必要ない
n枚動かすならパラメータをn-1枚にして自分自身を再帰呼び出し
そうしてn=1になればもう呼び出す必要はない
結果的にスタックはn段で足りる
再帰呼び出しの利点はまさにそれだから

839 名前:デフォルトの名無しさん (ワッチョイ ff63-kVuH) mailto:sage [2023/04/02(日) 10:39:44.95 ID:vuecyBii0.net]
俺の頭は3枚のスタックで溢れる



840 名前:デフォルトの名無しさん (スッップ Sd9f-V10A) mailto:sage [2023/04/03(月) 07:29:00.64 ID:LcmFFSdCd.net]
難しいニダ

841 名前:デフォルトの名無しさん (ササクッテロロ Sp33-W4em) mailto:sage [2023/04/03(月) 10:36:24.87 ID:rxZSmkg/p.net]
リカーシブル禁止な

842 名前:デフォルトの名無しさん (ワッチョイ dfc9-Cn9/) mailto:sage [2023/04/03(月) 10:54:13.61 ID:amgtJnTb0.net]
https://ideone.com/BGn4Ew
ChatGPT が示したコード
最初は n 段積まれるけど 途中で積足しがおきてるね
前の再起と後ろの再起

843 名前:デフォルトの名無しさん (ワッチョイ dfc9-Cn9/) mailto:sage [2023/04/03(月) 11:17:01.50 ID:amgtJnTb0.net]
すまね n == 1 でデクリメントしてないがな

844 名前:デフォルトの名無しさん (ワッチョイ dfc9-Cn9/) mailto:sage [2023/04/03(月) 11:20:49.83 ID:amgtJnTb0.net]
https://ideone.com/FKX7i6
なおしたし
nやし

845 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 19:50:55.17 ID:FTaZkaBO0.net]
(いつまでこの話題続けるんだろう・・・)

846 名前:デフォルトの名無しさん mailto:sage [2023/04/03(月) 20:00:28.42 ID:GTpIFgvQ0.net]
ただいま32個目のスタックに到達

847 名前:デフォルトの名無しさん (ワッチョイ a9b3-udcE) mailto:sage [2023/04/08(土) 20:36:00.74 ID:SFpZqjEH0.net]
なんか、
for(size_t i=0...
と書く人いません?
for(int i=0ではなくsize_tを使う意味はなんでしょうか?

848 名前:デフォルトの名無しさん (ワッチョイ a169-/aea) mailto:sage [2023/04/08(土) 20:53:31.67 ID:wgIhukY00.net]
strlen()やsizeofはsize_tなんだわこれが

849 名前:蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd22-6PIS) mailto:sage [2023/04/08(土) 20:55:09.41 ID:3OtdrBzyd.net]
size_tはintよりサイズが大きいかも知れないし、符号なし整数なんだよね。



850 名前:デフォルトの名無しさん (ワッチョイ bd02-oFYy) mailto:sage [2023/04/08(土) 21:16:04.49 ID:rjC7aYJI0.net]
そのiを主にsize_tとして使う用があるから
もし質問がsize_tとして使う用がないのにiをsize_tにするのか?ということなら、そう書いて

851 名前:デフォルトの名無しさん (ワッチョイ 6ecf-Rzwh) mailto:sage [2023/04/08(土) 21:21:03.16 ID:tM+hyW0O0.net]
>>838
Cにおいて自然数で表されるべきものには全てsize_tを使うべきだと信じてる人達が一定数いる
大きさ、長さ、個数、順番、回数なんかが該当し、そこにはループカウンタも含まれる
意味の問題ではなく教義や主義の問題なんで、自分の考えと違うコードを見かけてもそういうもんだで済ますのがいい

852 名前:デフォルトの名無しさん (ワッチョイ 495f-MO2j) mailto:sage [2023/04/08(土) 21:22:33.45 ID:9tIz9OW00.net]
ほとんどの場合はどっちでもいいかと

853 名前:デフォルトの名無しさん (アウアウウー Sa05-Ay2p) mailto:sage [2023/04/08(土) 21:37:43.61 ID:vkc2i7uPa.net]
size_t と off_t

854 名前:ョらいは使えよ []
[ここ壊れてます]

855 名前:デフォルトの名無しさん (ワッチョイ 0279-90pI) mailto:sage [2023/04/08(土) 21:42:59.63 ID:ymsLMaB30.net]
終端ヌル文字列の長さが符号ビット分まであったらそれは異常ではなかろうか
オンメモリで処理できるデータじゃないから見直すべき

856 名前:デフォルトの名無しさん (テテンテンテン MM66-xOzU) mailto:sage [2023/04/08(土) 22:47:03.50 ID:iv8dl0Z8M.net]
>>845
んなこたーない
巨大なファイルを扱う時にはそういうこともあり得る

857 名前:デフォルトの名無しさん (ワッチョイ 424b-jq58) mailto:sage [2023/04/09(日) 01:33:51.48 ID:hSdkmotY0.net]
2.2GBのテキストファイル

858 名前:デフォルトの名無しさん (スッププ Sd22-QGEt) mailto:sage [2023/04/09(日) 09:21:07.72 ID:J2NWn1GHd.net]
>>846
そんなもんstrlenで処理するなw
いちいち数えてるのアホらしい
長さを別に持つべき

859 名前:デフォルトの名無しさん (テテンテンテン MM66-xOzU) mailto:sage [2023/04/09(日) 10:02:17.83 ID:mGUCWnYwM.net]
>>848
100Bだろうが4GBだろうが、テキストファイルをロードする時にはゼロ終端文字列にするだろ
それをstrlenするかどうかは俺の知ったことではない
4GBのゼロ終端文字列が異常ではないというだけだ



860 名前:デフォルトの名無しさん (アウアウウー Sa05-l3hZ) mailto:sage [2023/04/09(日) 10:03:11.35 ID:Lsx68Nkda.net]
ファイルから読むこんで文字列処理する場合とかINT_MAXサイズ以上になる可能性もあるけどINT_MAXの範囲までしか処理しちゃいけないの?

861 名前:デフォルトの名無しさん (ワッチョイ 495f-MO2j) mailto:sage [2023/04/09(日) 10:23:33.31 ID:S22RS/pW0.net]
シークしなよ

862 名前:デフォルトの名無しさん (アウアウウー Sa05-l3hZ) mailto:sage [2023/04/09(日) 10:29:43.09 ID:Mq6Pc04Ma.net]
一方向のみに進むだけならシークでいいけど、対応する値を探したりするには場所情報もいるから

863 名前:デフォルトの名無しさん (スッププ Sd22-QGEt) mailto:sage [2023/04/09(日) 10:55:25.78 ID:SXWU02gid.net]
>>849
なんで?
サイズわかってるのに終端つける意味がないわ

>>852
場所を自分で保持してればいいだけだろ

864 名前:デフォルトの名無しさん (アウアウウー Sa05-l3hZ) mailto:sage [2023/04/09(日) 11:20:12.19 ID:JaCyVsO8a.net]
その場所情報を残すためにintじゃ足りないから大きな型を使ったりするけど
シークじゃ戻って対象の文字列の間の処理を再起やってまた進んでってのが面倒くさい

865 名前:デフォルトの名無しさん (ワッチョイ 6e63-Ay2p) mailto:sage [2023/04/09(日) 11:36:10.69 ID:aX3VhQL60.net]
面倒くさがる人はプログラムに向いていません

866 名前:デフォルトの名無しさん (アウアウウー Sa05-l3hZ) mailto:sage [2023/04/09(日) 11:49:17.45 ID:K99TBVjYa.net]
やりやすい方法があるのに複雑にして分かりにくくするのがプログラマーならプログラマーじゃなくていいや

867 名前:デフォルトの名無しさん (ワッチョイ 6e63-Ay2p) mailto:sage [2023/04/09(日) 12:08:18.91 ID:aX3VhQL60.net]
あるならそれを使えば良いだろ
相談するまでもない

868 名前:デフォルトの名無しさん (テテンテンテン MM66-xOzU) mailto:sage [2023/04/09(日) 12:24:20.87 ID:mGUCWnYwM.net]
>>853
LoadTextFile()っていう関数を作ったら戻り値は何だ?
const char*だろ
ゼロ終端文字列が返ると思うだろ
もちろん追加でサイズも引数経由で返しても良い
悔しいからって屁理屈をこねるな

869 名前:デフォルトの名無しさん (ワッチョイ 2d63-r2C4) mailto:sage [2023/04/09(日) 12:31:45.31 ID:kBYq2/2r0.net]
>>853
mainは第1引数がサイズで、第2引数の指す先はNULL終端されてるね



870 名前:デフォルトの名無しさん (スッププ Sd22-QGEt) mailto:sage [2023/04/09(日) 13:05:09.35 ID:bTpPccPGd.net]
>>858
例えば
終端に移動するとき
サイズと比較して超えていたらエラーか終端に切り詰める
データを追加する場合
終端まで移動
こういった普通の作業するのにいちいちstrlenを呼び出すとかありえないからサイズはどこかに保持する必要がある
よって終端記号はムダだよ

871 名前:デフォルトの名無しさん (スッップ Sd22-VdbI) mailto:sage [2023/04/09(日) 13:39:50.90 ID:8g05NYDAd.net]
>>858
すげー、なんでそんなの決められるの?
サイズ最適なロードしたデバイス名とか途中で割り込まれた回数とかカウントしないんだ、、、

872 名前:デフォルトの名無しさん (テテンテンテン MM66-xOzU) mailto:sage [2023/04/09(日) 14:32:05.77 ID:FxGMQKOnM.net]
>>860
strlenを使うかどうかは関知しないと言ってるだろ
それでもゼロ終端文字列を返すんだよ
それがC言語のプロトコルだ
1byteケチって何がしたいんだよw
だから屁理屈をこねるなと言ってる

873 名前:デフォルトの名無しさん (エムゾネ FF22-QGEt) mailto:sage [2023/04/09(日) 14:42:47.16 ID:LpKuKnylF.net]
>>862
そんなプロトコルはないよ
例えばread() は読み込んだバイト数を返す
妄想プログラムは程々にな

874 名前:デフォルトの名無しさん (エムゾネ FF22-QGEt) mailto:sage [2023/04/09(日) 14:44:30.71 ID:LpKuKnylF.net]
>>859
mainの第一引数はargvの個数であってサイズじゃないよ

875 名前:デフォルトの名無しさん mailto:sage [2023/04/09(日) 15:09:35.01 ID:zFNH8tsS0.net]
>こういった普通の作業するのにいちいちstrlenを呼び出すとかありえないからサイズはどこかに保持する必要がある
“こういった普通の作業”をしない場合はstrlenで良いってことだろ?

なんでもかんでもstrlenを使うって話じゃないし
なんでもかんでもサイズはどこかに保持する必要があるわけじゃなくて
用途に合わせて使い分けるのがプログラマーじゃないの?

876 名前:デフォルトの名無しさん (ワッチョイ 495f-MO2j) mailto:sage [2023/04/09(日) 15:13:43.40 ID:S22RS/pW0.net]
小生はゴミを分別できるプログラマーになりたい

877 名前:デフォルトの名無しさん mailto:sage [2023/04/09(日) 15:20:34.92 ID:zFNH8tsS0.net]
いちいちstrlenを呼び出す、と言っているけど
ゼロ終端文字列を返す関数はあるしゼロ終端文字列からサイズを得るためstrlenは呼び出すよね?
その後は処理を高速にするためにそのサイズを維持しつつというのはあると思うよ
けどその後呼び出す文字列処理関数があるとして、その関数が削除した文字数や追加した文字数を返してくれるとは限らないわけで
その場合、その都度strlenを呼び出さなきゃいけない場合もあり得るよね?

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

878 名前:デフォルトの名無しさん mailto:sage [2023/04/09(日) 15:21:53.57 ID:zFNH8tsS0.net]
最後変だわ

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

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

879 名前:デフォルトの名無しさん (ワッチョイ 495f-MO2j) mailto:sage [2023/04/09(日) 16:50:03.25 ID:S22RS/pW0.net]
小生だって燃えないゴミを燃えるゴミと言いたいわけじゃないさ



880 名前:デフォルトの名無しさん (ワッチョイ 0279-90pI) mailto:sage [2023/04/09(日) 18:08:42.61 ID:I9Qf3W7D0.net]
環境商法は嘘でも乗っからないと文句言われるからつれーよな

881 名前:デフォルトの名無しさん (ワッチョイ 6e63-Ay2p) mailto:sage [2023/04/09(日) 18:17:37.00 ID:aX3VhQL60.net]
同じプラスティックを、燃えるゴミ、燃えないゴミ、分別込み、どれで出してもOKらしい
あれはやってますアピールなんだとか

882 名前:デフォルトの名無しさん (ワッチョイ 6e63-Ay2p) mailto:sage [2023/04/09(日) 18:24:47.66 ID:aX3VhQL60.net]
分別よりも、粗大ゴミ、家電ゴミなどの有料ゴミは厳格に扱われる
迂闊に持ち帰ると大目玉食らうらしい

883 名前:デフォルトの名無しさん mailto:sage [2023/04/09(日) 18:45:27.28 ID:zFNH8tsS0.net]
問題があるからそうしているわけじゃなくて限りある資源をリサイクルだからそうしている
「どれで出してもOKらしい」と言うのは論点が間違ってる

あと指定された場所にあるゴミは所有権の放棄じゃなくて自治体への譲渡みたいなモノだから持ち帰りは窃盗になる

884 名前:デフォルトの名無しさん (ラクッペペ MM66-DefY) mailto:sage [2023/04/09(日) 18:45:49.74 ID:qh8VxmjLM.net]
条例と法令の違い

885 名前:デフォルトの名無しさん (ワッチョイ 6e63-Ay2p) mailto:sage [2023/04/09(日) 18:49:28.88 ID:aX3VhQL60.net]
いや実際そうだぞ
汚れているプラスティックを分別ゴミに混ぜられると迷惑なんだそうだ
洗剤でゴシゴシ洗って綺麗にしてから出せだとさ

886 名前:デフォルトの名無しさん (ワッチョイ 6e63-Ay2p) mailto:sage [2023/04/09(日) 18:51:41.97 ID:aX3VhQL60.net]
実際PETボトルは回収しても資源として再利用するのに手間が掛かる
だから、飲料メーカーもPETからアルミ容器に切り替えている
アルミはリサイクルが簡単なんだそうだ

887 名前:デフォルトの名無しさん (ワッチョイ 6e63-Ay2p) mailto:sage [2023/04/09(日) 19:02:34.53 ID:aX3VhQL60.net]
迂闊に持ち帰ると大目玉、はゴミ収集業者の話な

888 名前:デフォルトの名無しさん (ワッチョイ 0279-90pI) mailto:sage [2023/04/09(日) 19:07:33.05 ID:I9Qf3W7D0.net]
基本リサイクルはコスト的にデメリットしかない
一部ではやってますよアピールをしつつ、大半は分別したのをわざわざまとめて燃やしたり他所に押し付けるのが現実
環境商法は理想アピールとかけ離れた現実が弱みになって反社が入り込みやすいジャンルになってるから関わると危険だよ

889 名前:デフォルトの名無しさん (テテンテンテン MM66-xOzU) mailto:sage [2023/04/09(日) 19:12:09.18 ID:ONc2duBhM.net]
>>863
お前の大好きなstrlenがそれだろw
支離滅裂過ぎてもはや自分が何言ってるか分かってなさそうw
お大事に…



890 名前:デフォルトの名無しさん (テテンテンテン MM66-xOzU) mailto:sage [2023/04/09(日) 19:15:10.49 ID:ONc2duBhM.net]
文字列とストリームの区別が付いてないアホに付き合わないといけないとはな…
そういう奴のコードはバグだらけだろうなw

891 名前:デフォルトの名無しさん (テテンテンテン MM66-xOzU) mailto:sage [2023/04/09(日) 19:22:58.30 ID:ONc2duBhM.net]
ま、Cの文字列はバグり易いのは間違いないがな
特にmmapを使うと悲劇が起こりやすい
なのでテキストファイルの読み込みには、LoadTextFileの様な明確な名前を付けて専用に用意するのが常套手段
もちろんゼロ終端文字列を返す

892 名前:デフォルトの名無しさん (スッップ Sd22-VdbI) mailto:sage [2023/04/09(日) 19:27:24.15 ID:8g05NYDAd.net]
strlenとか使う馬鹿がいるのか
ラベル低すぎ

893 名前:デフォルトの名無しさん (テテンテンテン MM66-xOzU) mailto:sage [2023/04/09(日) 20:52:59.04 ID:ONc2duBhM.net]
Linux Kernelでも使われてるけど、ラベル低すぎとは知らなかったw

894 名前:デフォルトの名無しさん mailto:sage [2023/04/09(日) 23:27:25.54 ID:rzCgDpP30.net]
strlen strcpy strcatのストラ三兄弟は使うな
普通はマクロ定義でスピードアップ

895 名前:デフォルトの名無しさん mailto:sage [2023/04/10(月) 00:09:17.40 ID:IbkX37li0.net]
どんなマクロなんだい

896 名前:デフォルトの名無しさん mailto:sage [2023/04/10(月) 05:24:42.66 ID:hibmPNuj0.net]
>>864
データサイズの話じゃなかったのかよ?
なんで配列のサイズかどうかになるんだ

897 名前:デフォルトの名無しさん (スッププ Sd22-QGEt) mailto:sage [2023/04/11(火) 00:17:24.82 ID:KrSp3HQhd.net]
>>883
なんかこの人おかしくないか?ラベル…?
>>884も変だけど…ストラ3兄弟って…ギャグか?w
最終的に関数名をちゃんとすればどうにかなるみたいだし
そんな話誰が信じるんだよw


>>886
859に言ってくれ
明らかな誤りが含まれていたので訂正した

898 名前:デフォルトの名無しさん (テテンテンテン MM66-xOzU) mailto:sage [2023/04/11(火) 02:28:47.80 ID:MidqBNVpM.net]
>>887
>>882に言えよ

899 名前:デフォルトの名無しさん (ワッチョイ 2d63-r2C4) mailto:sage [2023/04/11(火) 06:49:02.21 ID:dFL5vcfn0.net]
>>887
訂正ってどこ? 具体的なレス番plz



900 名前:デフォルトの名無しさん (ワッチョイ a910-Ay2p) mailto:sage [2023/04/11(火) 07:47:26.88 ID:lpXrKUt40.net]
Cを捨ててCStringを使うC++へ行けってことだろ。

901 名前:デフォルトの名無しさん (ワッチョイ 2d63-r2C4) mailto:sage [2023/04/11(火) 08:08:42.83 ID:dFL5vcfn0.net]
std::stringではなくCStringな変人きたな

902 名前:デフォルトの名無しさん (スッップ Sd22-QGEt) mailto:sage [2023/04/11(火) 08:55:39.31 ID:ozkx3imqd.net]
>>889
訂正は>>864だが>>859を読んですぐおかしいと思わなかったなら理解できないと思う

903 名前:デフォルトの名無しさん (ワッチョイ 495f-/aea) mailto:sage [2023/04/11(火) 09:23:43.71 ID:Q4R/j+cb0.net]
>>859 の言ってるのは argv[argc] == NULL となる規定のことでしょ。
それ自体は正しいので訂正することも無い。

904 名前:デフォルトの名無しさん (ワッチョイ 495f-MO2j) mailto:sage [2023/04/11(火) 09:41:53.28 ID:7OwUdYTT0.net]
MFCに帰ろう

905 名前:デフォルトの名無しさん (スッップ Sd22-QGEt) mailto:sage [2023/04/11(火) 09:52:04.87 ID:ozkx3imqd.net]
>>893
文字列サイズの話をしているのに文字列配列の要素数の話で「サイズ」と言うのは不自然
859はargvについて誤解してると思う

906 名前:デフォルトの名無しさん (ワッチョイ 2d63-r2C4) mailto:sage [2023/04/11(火) 15:56:45.30 ID:dFL5vcfn0.net]
>>895
残念ながら俺は文字列サイズとかいう造語の話はしてない
853曰く
> サイズわかってるのに終端つける意味がないわ
に対してあえて冗長な設計にする場合があると指摘したまで

>>864もそうだがどうもおまえさんサイズという語の意味を都合良く変動させているようだな

907 名前:デフォルトの名無しさん mailto:sage [2023/04/11(火) 19:04:39.28 ID:7OwUdYTT0.net]
小生は文字列の長さを表すとき、strlenに習ってlengthという語を用いますん

908 名前:デフォルトの名無しさん mailto:sage [2023/04/11(火) 19:20:48.37 ID:1aMyTP0X0.net]
文字列サイズなんて聞くと、配列要素数かと受け取ってしまう

909 名前:デフォルトの名無しさん mailto:sage [2023/04/11(火) 19:50:55.63 ID:ozkx3imqd.net]
>>896
くだらない言い訳だ
文字列をロードしたサイズの話をしているのにコマンドラインの引数の個数の話にするのは不自然だと感じた

どうでもいいが文字列の終端までの長さをなんと呼ぶのかね



910 名前:デフォルトの名無しさん mailto:sage [2023/04/11(火) 20:01:03.76 ID:eL0kPSHK0.net]
文字列長
文字の長さ
文字列の長さ
長さ

911 名前:デフォルトの名無しさん mailto:sage [2023/04/11(火) 20:41:17.09 ID:1aMyTP0X0.net]
あと、文字数というのも入れてあげて

912 名前:デフォルトの名無しさん [2023/04/12(水) 02:49:44.30 ID:1sJZVfCp0.net]
文字の長さ 3m
重さ 5kg

913 名前:デフォルトの名無しさん [2023/04/12(水) 02:52:08.54 ID:1sJZVfCp0.net]
https://www.shinjuku-i-land.jp/assets/img/art/img_art-list_3.jpg

914 名前:デフォルトの名無しさん [2023/04/12(水) 02:53:14.30 ID:1sJZVfCp0.net]
とても長くて太くて大きくて重そう

915 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 06:48:43.44 ID:NgkNjGWQ0.net]
>>899
それってあなたの感想ですよね

916 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 08:59:58.23 ID:HQz+hF5G0.net]
もうそれ秋田

917 名前:デフォルトの名無しさん [2023/04/12(水) 11:42:14.25 ID:+8HledSTa.net]
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; みたいな実装もたまに観るからあなどれない

918 名前:デフォルトの名無しさん [2023/04/12(水) 11:51:49.32 ID:+8HledSTa.net]
>>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)
にするアホな例はよく観るってどっかのサイトに描いてあった

919 名前:デフォルトの名無しさん (テテンテンテン MM66-xOzU) mailto:sage [2023/04/12(水) 12:32:16.29 ID:81IdaWl4M.net]
C++ならイテレーター使えよ…



920 名前:デフォルトの名無しさん (ワッチョイ 495f-cPl8) mailto:sage [2023/04/12(水) 12:42:43.03 ID:Q+QfGKpq0.net]
vectorはランダムアクセスがウリだからイテレータ使わないこともよくあるね

921 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 13:01:34.03 ID:N6w93SJGd.net]
>>899
「文字列の終端までの長さ」ですが何か?

922 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 13:23:26.32 ID:3jp3M04i0.net]
(文字列の)文字数

923 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 13:42:24.69 ID:dS1BcMQZ0.net]
>>909
コードによってはインデックスでアクセスしたいこともあるから...

924 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 13:57:15.96 ID:gJHWYvs7a.net]
「アホな例」と書く意味が分からん
ちゃん型を使うべきだろ

925 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 13:57:40.50 ID:gJHWYvs7a.net]
ちゃんと型を使うべきだろ

926 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 13:59:47.55 ID:gJHWYvs7a.net]
そもそも「アホな例」じゃないとLP64でおかしなことになるよね

927 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 14:05:32.31 ID:NgkNjGWQ0.net]
struct X;
void func(struct X[]); //error

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

不完全型の場合、仮引数の[]はポインタにならない??
ちな、gccではエラー、clでは通る

928 名前:デフォルトの名無しさん [2023/04/12(水) 14:17:34.62 ID:mayblUPzd.net]
C++だと通ったね
gcc/clangのCだとX[]は許されないけどX*は許される

関数宣言より前にX型の定義がないとコンパイルが通らなかった

929 名前:デフォルトの名無しさん (ワッチョイ 2d63-r2C4) mailto:sage [2023/04/12(水) 14:55:48.73 ID:NgkNjGWQ0.net]
どっちが正しいのかね



930 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 15:04:32.82 ID:219MxBT/0.net]
>>907
馬鹿な私に少しだけアドバイスを

それってsize_tのビット幅 < システム(OS)のビット幅と言う条件下での話なんでしょうか?
size_tがシステム(OS)のビット幅と同じならメモリで管理できるものは必然的にsize_tでも表現できると思うのですが
メモリ上で管理できているゼロ終端文字列をsize_tで表現できない場合ってあるんですか?
まあ一部の組み込みとかならあるかも知れませんが……
けどそういう環境の場合strlenなどのsize_tで返す場合でも表現できなくなるわけで、結局size_tに依存することになってどっちでも同じじゃないかと思うんですがどうなんでしょうか?

931 名前:デフォルトの名無しさん (ワッチョイ 6ecf-Rzwh) mailto:sage [2023/04/12(水) 15:07:46.44 ID:gccG0Jwg0.net]
>>919
規格は知らんけど配列とポインタは違うんだからエラーで弾くのは正論だと思うけどね
通す処理系はその後の整合性をユーザーが担保する前提の思想なんでしょ

932 名前:デフォルトの名無しさん (ワッチョイ 2d63-r2C4) mailto:sage [2023/04/12(水) 15:09:16.06 ID:NgkNjGWQ0.net]
>>921
仮引数に限っては*と[]は同じはず
不完全型だけ例外というのは気持ち悪い

933 名前:デフォルトの名無しさん mailto:sage [2023/04/12(水) 15:15:29.08 ID:219MxBT/0.net]
>>908
もう一つ無知なる私にアドバイスをお願いします

size_t len までは文字を格納出来ると>>907から読み取りましたが
sizeof(size_t)==sizeof(int) の場合
vector v のサイズがINT_MAX以上だった場合、 i < (int)v.size() ではプログラマーが予期しない動作になりませんか?

934 名前:デフォルトの名無しさん (ワッチョイ 412d-dXWb) mailto:sage [2023/04/12(水) 15:27:40.89 ID:7SV2gFKB0.net]
size_t が符号なし整数型
int が符号付き整数型

935 名前:デフォルトの名無しさん (ワッチョイ 6ecf-Rzwh) mailto:sage [2023/04/12(水) 15:34:06.47 ID:gccG0Jwg0.net]
>>922
はずだかなんだか知らねーけど、そんなことはどうでも良くてサイズの分からないオブジェクトの配列は作れんって言ってんだよ
操作上の違いはともかく配列として宣言したんなら関数内では配列として扱うってことを示唆してるわけだろ
仮にそのfuncだかって名前の関数の中にX[3]とかX+5って書かれたらどうやってアドレス出すんだってことよ
動作に違いがあるってことは規格がそれを許してる箇所なんだろうけど弾いてる処理系はそういう考えなんだろう

936 名前:デフォルトの名無しさん (ワッチョイ 2d63-r2C4) mailto:sage [2023/04/12(水) 15:53:08.00 ID:NgkNjGWQ0.net]
>>925
仮引数はその場に配列を作り出したりはしないという基本が合意できない以上
これ以上おまえさんと話すのは無駄だな

937 名前:デフォルトの名無しさん (ワッチョイ 2d63-r2C4) mailto:sage [2023/04/12(水) 15:53:49.38 ID:NgkNjGWQ0.net]
> 規格は知らんけど

この時点で気付くべきだった

938 名前:デフォルトの名無しさん (ワッチョイ a910-Ay2p) mailto:sage [2023/04/12(水) 15:55:21.15 ID:1mphmeyq0.net]
Cはアセンブラの代用言語。

939 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/aea) mailto:sage [2023/04/12(水) 16:36:09.61 ID:bThMVtxz0.net]
>>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];



940 名前:デフォルトの名無しさん (ワッチョイ 2d63-r2C4) mailto:sage [2023/04/12(水) 16:59:41.80 ID:NgkNjGWQ0.net]
>>929
㌧X

安心した

941 名前:デフォルトの名無しさん (ワッチョイ 495f-/aea) mailto:sage [2023/04/12(水) 23:57:31.43 ID:ysjFLZAD0.net]
>>917
Cではエラーになるのが規格準拠の動作。
ただし宣言の形式を変えるだけで通る理不尽な制約でありC++では許されるように改められている。
https://stackoverflow.com/questions/50503501/an-error-about-c-struct-array-in-formal-parameter

942 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/aea) mailto:sage [2023/04/13(木) 00:37:34.59 ID:y5cvZaYN0.net]
>>931
そこでも言及されてるけど
型調整 (配列がポインタに読み替えられる) が優先されるか配列宣言子としての解釈が優先されるかって曖昧じゃない?
読み替えより先に配列宣言子として解釈すべきと確信できるような記述ってある?
常識的には曖昧なら厳しい側の制約で解釈すべきだわなーとは思うけど陽には書かれてないように思う。

943 名前:デフォルトの名無しさん (ワッチョイ 02ad-Ay2p) [2023/04/13(木) 02:04:44.32 ID:o3x890Fi0.net]
>>907
昔々の PASCAL はそんな感じだったな。先頭1バイトに文字列のバイト数が入っていてその後に文字列がある。
当然それだと255バイトまでしか入らないのでもっと長い文字列を扱いたい時に苦しむことになる。
まあでも 8 bit とか 16 bit CPU のマイコンやパソコンにそういう高い要求は最初の頃はあまりなかったのでなんとかなっていた。

944 名前:デフォルトの名無しさん (ワッチョイ 495f-/aea) mailto:sage [2023/04/13(木) 02:23:46.11 ID:jklAk1E50.net]
>>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, ...

「通る」が警告も出ずプログラム実行までできる状態と解釈してたけど、
エラーにはならないものの警告が出ているならそれも規格準拠とは言えそう。

945 名前:デフォルトの名無しさん (ワッチョイ 2d63-r2C4) mailto:sage [2023/04/13(木) 08:28:10.40 ID:zEEI4t8g0.net]
https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_047.html

仮引数の[]は、一旦は配列として受理し、その後でポインタに調整されるってことか

946 名前:デフォルトの名無しさん (ワッチョイ 2d63-r2C4) mailto:sage [2023/04/13(木) 08:28:50.25 ID:zEEI4t8g0.net]
VCで通るのは、VLAがないからってこと?

947 名前:デフォルトの名無しさん (スップ Sd82-VdbI) mailto:sage [2023/04/13(木) 23:35:55.91 ID:DvwX4ZoKd.net]
間違ってる

948 名前:デフォルトの名無しさん (ワッチョイ 6e63-Ay2p) mailto:sage [2023/04/13(木) 23:48:57.98 ID:wWKtbXV/0.net]
マスク無死でラーメン食いたい奴は、まず住所を書いて見てよ
その場所にノーマスクで食えるラーメン屋作らないといけないんだろ?
政府が作るのかな?

949 名前:デフォルトの名無しさん (ワッチョイ 6e63-Ay2p) mailto:sage [2023/04/13(木) 23:55:11.99 ID:wWKtbXV/0.net]
ごめん、誤爆



950 名前:デフォルトの名無しさん (ワッチョイ 02ad-Ay2p) [2023/04/13(木) 23:55:19.80 ID:o3x890Fi0.net]
はあ

951 名前:デフォルトの名無しさん (ワッチョイ 424b-jq58) mailto:sage [2023/04/14(金) 01:01:11.22 ID:E99e4anP0.net]
そのキモいレスをどこで発表するつもりだったのか

952 名前: mailto:sage [2023/04/15(土) 19:42:43.70 ID:JbgATxBi0.net]
最近のLANカードで他力給電のものばかりのようですね、クロスケーブルでピアツーピアできるPCIe のカードって存在しないものですかね…
結局 hub を使っちまった、もったいないなあ

953 名前:◆QZaw55cn4c (ワッチョイ bfba-DPrL) mailto:sage [2023/04/16(日) 20:11:08.29 ID:4UlFU6Wr0.net]
chatGPTって面白いね…もうgoogle はいらないや

954 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-S3w6) mailto:sage [2023/04/16(日) 21:13:37.76 ID:Ot5nnykg0.net]
C スレで言うことか?

955 名前:デフォルトの名無しさん (ワッチョイ 2763-2Cuq) mailto:sage [2023/04/16(日) 21:23:02.75 ID:H2kHWHvu0.net]
人工知能とはなんたるや、これがわかってないやつ多いのは仕方ないけど
ム板でこれは由々しきことだな

956 名前:デフォルトの名無しさん (ワッチョイ 7f63-sFbk) mailto:sage [2023/04/16(日) 21:48:52.61 ID:zHRI9OsR0.net]
煽ってるだけやろ

957 名前:◆QZaw55cn4c (ワッチョイ bfba-sFbk) mailto:sage [2023/04/16(日) 22:57:10.75 ID:4UlFU6Wr0.net]
スレ終盤恒例のウダウダ話ですよ、たまにはいいじゃあ、ありませんか!

958 名前:デフォルトの名無しさん (ワッチョイ 7f63-sFbk) mailto:sage [2023/04/16(日) 23:00:41.18 ID:zHRI9OsR0.net]
chatGPT関連のスレは6本も立ってるので、好きな場所でやってください

(盛り上がったら誘導してくれてもいいです)

959 名前:デフォルトの名無しさん (ワッチョイ c7b3-5oiz) mailto:sage [2023/04/17(月) 02:44:28.44 ID:PilU+QdE0.net]
数値の各桁を足す関数を考えました
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;
}



960 名前:デフォルトの名無しさん (ワッチョイ 5f79-uE6i) mailto:sage [2023/04/17(月) 02:47:29.33 ID:dBG5z/eM0.net]
数値計算なのにmemsetを使ってる時点で0点

961 名前:デフォルトの名無しさん mailto:sage [2023/04/17(月) 03:00:26.88 ID:2drVnpNQ0.net]
int chg(int n)
{
int a;
for(a=0;0<n;n/=10) a+=n%10;
return a;
}

962 名前:デフォルトの名無しさん (ワッチョイ 5fad-sFbk) [2023/04/17(月) 03:01:25.01 ID:g2jYQi3l0.net]
>>949
それわざわざ文字列にしてからやる必要ないよね。
10で割った余りを足して10で割るのを繰り返せば良いだけだし。
仮に(宿題や問題の都合で)どうしても文字列に直してやらなければならないのだとしても文字列として使う char 配列の
初期化で全部0で埋めるのは処理の無駄だしそんな事をするのはC言語における文字列の扱いについてよく分かって
いないことの現れだと思う。

963 名前:デフォルトの名無しさん (ワッチョイ a702-em59) mailto:sage [2023/04/17(月) 03:41:54.19 ID:fyienZF80.net]
30点
みんなもっと優しくしてあげなよ。ゴキブリだって生きてるんだぞ

964 名前:デフォルトの名無しさん (ワッチョイ 4702-1OZE) mailto:sage [2023/04/17(月) 06:01:50.96 ID:WvGymo4J0.net]
あかん!
マイナスの場合はどうするねん

965 名前:デフォルトの名無しさん (ワッチョイ a702-em59) mailto:sage [2023/04/17(月) 06:38:08.16 ID:fyienZF80.net]
>>951
nが負の場合は?

966 名前:デフォルトの名無しさん (ワッチョイ 67c9-ieXZ) mailto:sage [2023/04/17(月) 08:14:09.28 ID:TjOyN7pL0.net]
if (n < 0) n = -n;

967 名前:デフォルトの名無しさん (ササクッテロロ Spfb-tEYI) [2023/04/17(月) 09:53:06.18 ID:MNSyV7UUp.net]
文字列で与えなきゃデカい数字が扱えないやん

968 名前:デフォルトの名無しさん (ワッチョイ c75f-nEk4) mailto:sage [2023/04/17(月) 10:26:43.64 ID:jOIYUxZw0.net]
int chg(int n)
{
int a=0,b;
while(n) {
b=n/10;
a+=n-b*10;
n=b;
}

969 名前:デフォルトの名無しさん (ワッチョイ 67c9-ieXZ) mailto:sage [2023/04/17(月) 10:57:06.60 ID:TjOyN7pL0.net]
>>957
int で受けて 文字列化してるからちょっと
最初から文字列で受けてるなら一考の余地はあるかもね



970 名前:デフォルトの名無しさん (ワッチョイ 2763-2Cuq) mailto:sage [2023/04/17(月) 10:57:27.95 ID:I3IibvEZ0.net]
957涙目だなw

971 名前:デフォルトの名無しさん (テテンテンテン MM8f-/v6j) mailto:sage [2023/04/17(月) 12:21:07.80 ID:sfjAbensM.net]
プログラミングには最低限の数学的な素養が必要な事が証明された…
科学技術計算を扱わないとしても、計算論とか数学とは切っても切れない関係にある

972 名前:デフォルトの名無しさん (ワッチョイ 5f97-3fkD) mailto:sage [2023/04/17(月) 12:50:21.20 ID:9nZn/y+b0.net]
銀行の勘定系でも四則演算の知識は必要だし

973 名前:デフォルトの名無しさん (ワッチョイ 67c9-ieXZ) mailto:sage [2023/04/17(月) 12:56:30.89 ID:TjOyN7pL0.net]
文字列を受ける場合
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'; に
置き換えることもできるかもしれない

974 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-S3w6) mailto:sage [2023/04/17(月) 13:07:40.29 ID:FYaudfJt0.net]
>>963
> 環境依存で

数字に対応する文字コードが連続で昇順に並んでいることは
言語仕様で保証されている。

975 名前:デフォルトの名無しさん (ワッチョイ 67c9-ieXZ) mailto:sage [2023/04/17(月) 13:15:24.09 ID:TjOyN7pL0.net]
>>964
さんきゅう 数字は保障されてたか

976 名前:デフォルトの名無しさん (ワッチョイ 67c9-ieXZ) mailto:sage [2023/04/17(月) 13:21:38.21 ID:TjOyN7pL0.net]
次の while (*s && isdigit(*s)) と意図の一部は重なるし if (*s) はいらんかったね

977 名前:デフォルトの名無しさん (スプッッ Sdff-wBI8) mailto:sage [2023/04/17(月) 15:25:15.58 ID:DnqfCfHpd.net]
今のモダンな言語からしたら一見して下らないやり取りだけど
これがC言語なんよね・・・

978 名前:デフォルトの名無しさん (ワッチョイ c75f-nEk4) mailto:sage [2023/04/17(月) 15:50:16.10 ID:jOIYUxZw0.net]
ハードとアプリのあいだに多くの計算を必要とするソフトの層があるからね
OSやらで全部カバーするのは無理だからCは死なない

979 名前:デフォルトの名無しさん (アウアウウー Sacb-/q5i) mailto:sage [2023/04/17(月) 15:51:50.57 ID:kmcXsww3a.net]
>>964
漢数字も並んでたら嬉しかったと思いませんか



980 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-S3w6) mailto:sage [2023/04/17(月) 16:54:39.89 ID:FYaudfJt0.net]
>>969
現実には JIS は読みの順序で Unicode は部首の画数の順序が原則。
漢数字を例外にしたらそれはそれで不格好だし嬉しくない人もいるだろう。

まあ Unicode は後から追加した分だのなんだのでそんなに綺麗に並んでいるわけでもないので
どうせぐちゃぐちゃなら数字くらいは並べても良かったんちゃうかなというのは気持ちはわかる。

981 名前:デフォルトの名無しさん (テテンテンテン MM8f-/v6j) mailto:sage [2023/04/17(月) 17:19:21.10 ID:tJ5lxHq2M.net]
一二三四…Why Japanese people!

982 名前: []
[ここ壊れてます]

983 名前:デフォルトの名無しさん (スッププ Sd7f-1OZE) mailto:sage [2023/04/17(月) 19:13:46.43 ID:92m0URlPd.net]
>>967
くくく、、愚かな、、

984 名前:デフォルトの名無しさん (スッププ Sd7f-1OZE) mailto:sage [2023/04/17(月) 19:21:15.62 ID:92m0URlPd.net]
>>954
アンサインドイントで受けたれや!

985 名前:デフォルトの名無しさん (アウアウウー Sacb-/q5i) mailto:sage [2023/04/17(月) 20:38:59.46 ID:RKcegE7fa.net]
壱<弐<参<死<伍<碌<質<八<苦<拾<

986 名前:百<銭<萬
ですね判ります
[]
[ここ壊れてます]

987 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-S3w6) mailto:sage [2023/04/18(火) 08:26:27.42 ID:aNj1uNjV0.net]
>>971
英語の綴りの不規則さも大概やないけ! と突っ込んで完成するネタだと個人的には思ってる。

988 名前:デフォルトの名無しさん (スフッ Sd7f-fSvC) mailto:sage [2023/04/18(火) 14:58:32.85 ID:aePy3OZ8d.net]
未初期化の自動変数には「不定値」が割り当てられる、と調べるたり自分が学んでいる本でも書いていますが、自分のコンパイラは常に「0」になっているようです 
なぜでしょうか? 
ちなみにgcc-10です gcc-11だと「不定値」になります

989 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f32-iKPJ) [2023/04/18(火) 15:29:21.41 ID:rjFDtS/R0.net]
不定の値とは「未規定の値又はトラップ表現」と規定されてる。
常に 0 であってもこの規定に反しないよ。



990 名前:デフォルトの名無しさん (スフッ Sd7f-7nfa) [2023/04/18(火) 16:27:26.25 ID:U9oAz8h1d.net]
>>977 ありがとうございます
ちなみに「トラップ表現」とはなんでしょうか?

991 名前:デフォルトの名無しさん (スフッ Sd7f-foDO) [2023/04/18(火) 16:57:48.54 ID:U9oAz8h1d.net]
976です chatgptで調べました
C言語の仕様では、自動変数を初期化しない場合、その値は不定とされています。これは、コンパイラがメモリ上で変数を割り当てる際に、その領域が以前に使用されていたデータを含んでいる可能性があるためです。

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

ただし、コンパイラが自動変数を0で初期化することが保証されているわけではありません。したがって、プログラマは自動変数を使用する前に必ず初期化するように注意する必要があります。

992 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f32-iKPJ) [2023/04/18(火) 17:04:00.61 ID:rjFDtS/R0.net]
>>978
トラップ表現は「オブジェクト型の値を表現しないオブジェクト表現」ということになってる。
その型としてあり得ないビットパターンってこと。
オブジェクトとして格納されたトラップ表現を文字型ではない左辺値式として読みだした場合の結果は未定義となる。
副作用としてそのような表現が生成される場合も未定義。

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

とはいえ整数型でトラップ表現があるアーキテクチャを私は見たことが無いけどな。

993 名前:デフォルトの名無しさん (スプッッ Sdff-ZLJR) [2023/04/18(火) 18:20:39.02 ID:Qric2C4Yd.net]
トラップ表現を調べてみたけどほぼほぼ処理系定義絡みなのね

signed int16の0x8000は-32768かもしれないし、トラップ表現かもしれない
1の補数系でsigned int16の0xffffは0かもしれないし、トラップ表現かもしれない
int32* の4バイト境界に合ってないポインタ(int* p=0x0001)は、強制的に4バイト境界に直されるかもしれないし、トラップ表現かもしれない

994 名前:デフォルトの名無しさん (スフッ Sd7f-foDO) [2023/04/18(火) 19:26:15.76 ID:U9oAz8h1d.net]
>>980 ありがとうございます 勉強になりました

995 名前:デフォルトの名無しさん (テテンテンテン MM8f-/v6j) mailto:sage [2023/04/19(水) 02:26:26.48 ID:Nl7uhZkpM.net]
自分のコンパイラってのを明らかにしてくれ
どうしても言えないってならしょうがないが…

996 名前:デフォルトの名無しさん (ワッチョイ 6746-KCd8) [2023/04/19(水) 02:43:50.96 ID:MHEst9B30.net]
>>983
> ちなみにgcc-10です
と書かれている。

997 名前:デフォルトの名無しさん mailto:sage [2023/04/19(水) 06:44:34.46 ID:Dcht9s5K0.net]
>>983
バーカ(笑)

998 名前:デフォルトの名無しさん [2023/04/19(水) 06:59:06.58 ID:twYHK80b0.net]
983息してるか?www

999 名前:デフォルトの名無しさん mailto:sage [2023/04/19(水) 07:47:07.07 ID:BpfZGgoRd.net]
かてなおったかな



1000 名前:デフォルトの名無しさん mailto:sage [2023/04/19(水) 10:03:53.18 ID:rE0e6VM+0.net]
自作コンパイラの話する?

1001 名前:デフォルトの名無しさん mailto:sage [2023/04/19(水) 10:43:43.68 ID:m2bdQTksd.net]
いいぜ?お前からな?

1002 名前:デフォルトの名無しさん mailto:sage [2023/04/19(水) 11:58:53.24 ID:rE0e6VM+0.net]
ぼくはLex&YACCでPL/0を作って満

1003 名前:足しました。おわり []
[ここ壊れてます]

1004 名前:デフォルトの名無しさん mailto:sage [2023/04/19(水) 13:12:38.94 ID:IP5wt1Fbd.net]
夜中に路地から飛び出て来たら俺もびびる
でも >>991 では語れんわ!

1005 名前:デフォルトの名無しさん mailto:sage [2023/04/19(水) 20:04:36.21 ID:3t8AIZsr0.net]
C言語のソースコードを検査して処理系依存や未定義動作等の環境によって
結果が変わりうる可能性のある部分を見つけてくれるツールってどんなのがありますか?
コードエディタはvscodeなのでこれと連携できるとなおよいです

1006 名前:デフォルトの名無しさん mailto:sage [2023/04/20(木) 08:07:01.48 ID:B156zYN00.net]
lintでググれ

1007 名前:デフォルトの名無しさん mailto:sage [2023/04/20(木) 08:23:22.20 ID:3as2C0030.net]
BingAIに聞け

1008 名前:デフォルトの名無しさん [2023/04/20(木) 09:13:39.09 ID:EuuMXrfTa.net]
とにかくggr

1009 名前:デフォルトの名無しさん mailto:sage [2023/04/20(木) 16:00:12.38 ID:ZTK8T1RQd.net]
チャットジーピーテー



1010 名前:デフォルトの名無しさん (ラクッペペ MM8f-bKDU) mailto:sage [2023/04/20(木) 23:37:04.36 ID:BN6x5ZIFM.net]
さすがに検査対象としてソースコードそのものをchatGPTに丸投げするのはマズイ
個人情報や機密情報をそのまま入力するのは止めるように開発元のopenAIが忠告してたはず

1011 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 06:41:53.06 ID:NmcLOv2EM.net]
>>993
よさそう。サンキュー

1012 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 13:41:26.17 ID:cgpIrgwq0.net]
次スレどこ?

1013 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 14:06:43.23 ID:rqj2HSDF0.net]
次スレ

https://mevius.5ch.net/test/read.cgi/tech/1682053520/

1014 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 114日 3時間 26分 13秒

1015 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<234KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef