23/04/12 12:32:16.29 81IdaWl4M.net
C++ならイテレーター使えよ…
920:デフォルトの名無しさん (ワッチョイ 495f-cPl8)
23/04/12 12:42:43.03 Q+QfGKpq0.net
vectorはランダムアクセスがウリだからイテレータ使わないこともよくあるね
921:デフォルトの名無しさん
23/04/12 13:01:34.03 N6w93SJGd.net
>>899
「文字列の終端までの長さ」ですが何か?
922:デフォルトの名無しさん
23/04/12 13:23:26.32 3jp3M04i0.net
(文字列の)文字数
923:デフォルトの名無しさん
23/04/12 13:42:24.69 dS1BcMQZ0.net
>>909
コードによってはインデックスでアクセスしたいこともあるから...
924:デフォルトの名無しさん
23/04/12 13:57:15.96 gJHWYvs7a.net
「アホな例」と書く意味が分からん
ちゃん型を使うべきだろ
925:デフォルトの名無しさん
23/04/12 13:57:40.50 gJHWYvs7a.net
ちゃんと型を使うべきだろ
926:デフォルトの名無しさん
23/04/12 13:59:47.55 gJHWYvs7a.net
そもそも「アホな例」じゃないとLP64でおかしなことになるよね
927:デフォルトの名無しさん
23/04/12 14:05:32.31 NgkNjGWQ0.net
struct X;
void func(struct X[]); //error
struct Y { int a; };
void func(struct Y[]); //ok
不完全型の場合、仮引数の[]はポインタにならない??
ちな、gccではエラー、clでは通る
928:デフォルトの名無しさん
23/04/12 14:17:34.62 mayblUPzd.net
C++だと通ったね
gcc/clangのCだとX[]は許されないけどX*は許される
関数宣言より前にX型の定義がないとコンパイルが通らなかった
929:デフォルトの名無しさん (ワッチョイ 2d63-r2C4)
23/04/12 14:55:48.73 NgkNjGWQ0.net
どっちが正しいのかね
930:デフォルトの名無しさん
23/04/12 15:04:32.82 219MxBT/0.net
>>907
馬鹿な私に少しだけアドバイスを
それってsize_tのビット幅 < システム(OS)のビット幅と言う条件下での話なんでしょうか?
size_tがシステム(OS)のビット幅と同じならメモリで管理できるものは必然的にsize_tでも表現できると思うのですが
メモリ上で管理できているゼロ終端文字列をsize_tで表現できない場合ってあるんですか?
まあ一部の組み込みとかならあるかも知れませんが……
けどそういう環境の場合strlenなどのsize_tで返す場合でも表現できなくなるわけで、結局size_tに依存することになってどっちでも同じじゃないかと思うんですがどうなんでしょうか?
931:デフォルトの名無しさん (ワッチョイ 6ecf-Rzwh)
23/04/12 15:07:46.44 gccG0Jwg0.net
>>919
規格は知らんけど配列とポインタは違うんだからエラーで弾くのは正論だと思うけどね
通す処理系はその後の整合性をユーザーが担保する前提の思想なんでしょ
932:デフォルトの名無しさん (ワッチョイ 2d63-r2C4)
23/04/12 15:09:16.06 NgkNjGWQ0.net
>>921
仮引数に限っては*と[]は同じはず
不完全型だけ例外というのは気持ち悪い
933:デフォルトの名無しさん
23/04/12 15:15:29.08 219MxBT/0.net
>>908
もう一つ無知なる私にアドバイスをお願いします
size_t len までは文字を格納出来ると>>907から読み取りましたが
sizeof(size_t)==sizeof(int) の場合
vector v のサイズがINT_MAX以上だった場合、 i < (int)v.size() ではプログラマーが予期しない動作になりませんか?
934:デフォルトの名無しさん (ワッチョイ 412d-dXWb)
23/04/12 15:27:40.89 7SV2gFKB0.net
size_t が符号なし整数型
int が符号付き整数型
935:デフォルトの名無しさん (ワッチョイ 6ecf-Rzwh)
23/04/12 15:34:06.47 gccG0Jwg0.net
>>922
はずだかなんだか知らねーけど、そんなことはどうでも良くてサイズの分からないオブジェクトの配列は作れんって言ってんだよ
操作上の違いはともかく配列として宣言したんなら関数内では配列として扱うってことを示唆してるわけだろ
仮にそのfuncだかって名前の関数の中にX[3]とかX+5って書かれたらどうやってアドレス出すんだってことよ
動作に違いがあるってことは規格がそれを許してる箇所なんだろうけど弾いてる処理系はそういう考えなんだろう
936:デフォルトの名無しさん (ワッチョイ 2d63-r2C4)
23/04/12 15:53:08.00 NgkNjGWQ0.net
>>925
仮引数はその場に配列を作り出したりはしないという基本が合意できない以上
これ以上おまえさんと話すのは無駄だな
937:デフォルトの名無しさん (ワッチョイ 2d63-r2C4)
23/04/12 15:53:49.38 NgkNjGWQ0.net
> 規格は知らんけど
この時点で気付くべきだった
938:デフォルトの名無しさん (ワッチョイ a910-Ay2p)
23/04/12 15:55:21.15 1mphmeyq0.net
Cはアセンブラの代用言語。
939:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/aea)
23/04/12 16:36:09.61 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)
23/04/12 16:59:41.80 NgkNjGWQ0.net
>>929
㌧X
安心した
941:デフォルトの名無しさん (ワッチョイ 495f-/aea)
23/04/12 23:57:31.43 ysjFLZAD0.net
>>917
Cではエラーになるのが規格準拠の動作。
ただし宣言の形式を変えるだけで通る理不尽な制約でありC++では許されるように改められている。
URLリンク(stackoverflow.com)
942:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 423e-/aea)
23/04/13 00:37:34.59 y5cvZaYN0.net
>>931
そこでも言及されてるけど
型調整 (配列がポインタに読み替えられる) が優先されるか配列宣言子としての解釈が優先されるかって曖昧じゃない?
読み替えより先に配列宣言子として解釈すべきと確信できるような記述ってある?
常識的には曖昧なら厳しい側の制約で解釈すべきだわなーとは思うけど陽には書かれてないように思う。
943:デフォルトの名無しさん (ワッチョイ 02ad-Ay2p)
23/04/13 02:04:44.32 o3x890Fi0.net
>>907
昔々の PASCAL はそんな感じだったな。先頭1バイトに文字列のバイト数が入っていてその後に文字列がある。
当然それだと255バイトまでしか入らないのでもっと長い文字列を扱いたい時に苦しむことになる。
まあでも 8 bit とか 16 bit CPU のマイコンやパソコンにそういう高い要求は最初の頃はあまりなかったのでなんとかなっていた。
944:デフォルトの名無しさん (ワッチョイ 495f-/aea)
23/04/13 02:23:46.11 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)
23/04/13 08:28:10.40 zEEI4t8g0.net
URLリンク(www.open-std.org)
仮引数の[]は、一旦は配列として受理し、その後でポインタに調整されるってことか
946:デフォルトの名無しさん (ワッチョイ 2d63-r2C4)
23/04/13 08:28:50.25 zEEI4t8g0.net
VCで通るのは、VLAがないからってこと?
947:デフォルトの名無しさん (スップ Sd82-VdbI)
23/04/13 23:35:55.91 DvwX4ZoKd.net
間違ってる
948:デフォルトの名無しさん (ワッチョイ 6e63-Ay2p)
23/04/13 23:48:57.98 wWKtbXV/0.net
マスク無死でラーメン食いたい奴は、まず住所を書いて見てよ
その場所にノーマスクで食えるラーメン屋作らないといけないんだろ?
政府が作るのかな?
949:デフォルトの名無しさん (ワッチョイ 6e63-Ay2p)
23/04/13 23:55:11.99 wWKtbXV/0.net
ごめん、誤爆
950:デフォルトの名無しさん (ワッチョイ 02ad-Ay2p)
23/04/13 23:55:19.80 o3x890Fi0.net
はあ
951:デフォルトの名無しさん (ワッチョイ 424b-jq58)
23/04/14 01:01:11.22 E99e4anP0.net
そのキモいレスをどこで発表するつもりだったのか
952:
23/04/15 19:42:43.70 JbgATxBi0.net
最近のLANカードで他力給電のものばかりのようですね、クロスケーブルでピアツーピアできるPCIe のカードって存在しないものですかね…
結局 hub を使っちまった、もったいないなあ
953:◆QZaw55cn4c (ワッチョイ bfba-DPrL)
23/04/16 20:11:08.29 4UlFU6Wr0.net
chatGPTって面白いね…もうgoogle はいらないや
954:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-S3w6)
23/04/16 21:13:37.76 Ot5nnykg0.net
C スレで言うことか?
955:デフォルトの名無しさん (ワッチョイ 2763-2Cuq)
23/04/16 21:23:02.75 H2kHWHvu0.net
人工知能とはなんたるや、これがわかってないやつ多いのは仕方ないけど
ム板でこれは由々しきことだな
956:デフォルトの名無しさん (ワッチョイ 7f63-sFbk)
23/04/16 21:48:52.61 zHRI9OsR0.net
煽ってるだけやろ
957:◆QZaw55cn4c (ワッチョイ bfba-sFbk)
23/04/16 22:57:10.75 4UlFU6Wr0.net
スレ終盤恒例のウダウダ話ですよ、たまにはいいじゃあ、ありませんか!
958:デフォルトの名無しさん (ワッチョイ 7f63-sFbk)
23/04/16 23:00:41.18 zHRI9OsR0.net
chatGPT関連のスレは6本も立ってるので、好きな場所でやってください
(盛り上がったら誘導してくれてもいいです)
959:デフォルトの名無しさん (ワッチョイ c7b3-5oiz)
23/04/17 02:44:28.44 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)
23/04/17 02:47:29.33 dBG5z/eM0.net
数値計算なのにmemsetを使ってる時点で0点
961:デフォルトの名無しさん
23/04/17 03:00:26.88 2drVnpNQ0.net
int chg(int n)
{
int a;
for(a=0;0<n;n/=10) a+=n%10;
return a;
}
962:デフォルトの名無しさん (ワッチョイ 5fad-sFbk)
23/04/17 03:01:25.01 g2jYQi3l0.net
>>949
それわざわざ文字列にしてからやる必要ないよね。
10で割った余りを足して10で割るのを繰り返せば良いだけだし。
仮に(宿題や問題の都合で)どうしても文字列に直してやらなければならないのだとしても文字列として使う char 配列の
初期化で全部0で埋めるのは処理の無駄だしそんな事をするのはC言語における文字列の扱いについてよく分かって
いないことの現れだと思う。
963:デフォルトの名無しさん (ワッチョイ a702-em59)
23/04/17 03:41:54.19 fyienZF80.net
30点
みんなもっと優しくしてあげなよ。ゴキブリだって生きてるんだぞ
964:デフォルトの名無しさん (ワッチョイ 4702-1OZE)
23/04/17 06:01:50.96 WvGymo4J0.net
あかん!
マイナスの場合はどうするねん
965:デフォルトの名無しさん (ワッチョイ a702-em59)
23/04/17 06:38:08.16 fyienZF80.net
>>951
nが負の場合は?
966:デフォルトの名無しさん (ワッチョイ 67c9-ieXZ)
23/04/17 08:14:09.28 TjOyN7pL0.net
if (n < 0) n = -n;
967:デフォルトの名無しさん (ササクッテロロ Spfb-tEYI)
23/04/17 09:53:06.18 MNSyV7UUp.net
文字列で与えなきゃデカい数字が扱えないやん
968:デフォルトの名無しさん (ワッチョイ c75f-nEk4)
23/04/17 10:26:43.64 jOIYUxZw0.net
int chg(int n)
{
int a=0,b;
while(n) {
b=n/10;
a+=n-b*10;
n=b;
}
969:デフォルトの名無しさん (ワッチョイ 67c9-ieXZ)
23/04/17 10:57:06.60 TjOyN7pL0.net
>>957
int で受けて 文字列化してるからちょっと
最初から文字列で受けてるなら一考の余地はあるかもね
970:デフォルトの名無しさん (ワッチョイ 2763-2Cuq)
23/04/17 10:57:27.95 I3IibvEZ0.net
957涙目だなw
971:デフォルトの名無しさん (テテンテンテン MM8f-/v6j)
23/04/17 12:21:07.80 sfjAbensM.net
プログラミングには最低限の数学的な素養が必要な事が証明された…
科学技術計算を扱わないとしても、計算論とか数学とは切っても切れない関係にある
972:デフォルトの名無しさん (ワッチョイ 5f97-3fkD)
23/04/17 12:50:21.20 9nZn/y+b0.net
銀行の勘定系でも四則演算の知識は必要だし
973:デフォルトの名無しさん (ワッチョイ 67c9-ieXZ)
23/04/17 12:56:30.89 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)
23/04/17 13:07:40.29 FYaudfJt0.net
>>963
> 環境依存で
数字に対応する文字コードが連続で昇順に並んでいることは
言語仕様で保証されている。
975:デフォルトの名無しさん (ワッチョイ 67c9-ieXZ)
23/04/17 13:15:24.09 TjOyN7pL0.net
>>964
さんきゅう 数字は保障されてたか
976:デフォルトの名無しさん (ワッチョイ 67c9-ieXZ)
23/04/17 13:21:38.21 TjOyN7pL0.net
次の while (*s && isdigit(*s)) と意図の一部は重なるし if (*s) はいらんかったね
977:デフォルトの名無しさん (スプッッ Sdff-wBI8)
23/04/17 15:25:15.58 DnqfCfHpd.net
今のモダンな言語からしたら一見して下らないやり取りだけど
これがC言語なんよね・・・
978:デフォルトの名無しさん (ワッチョイ c75f-nEk4)
23/04/17 15:50:16.10 jOIYUxZw0.net
ハードとアプリのあいだに多くの計算を必要とするソフトの層があるからね
OSやらで全部カバーするのは無理だからCは死なない
979:デフォルトの名無しさん (アウアウウー Sacb-/q5i)
23/04/17 15:51:50.57 kmcXsww3a.net
>>964
漢数字も並んでたら嬉しかったと思いませんか
980:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-S3w6)
23/04/17 16:54:39.89 FYaudfJt0.net
>>969
現実には JIS は読みの順序で Unicode は部首の画数の順序が原則。
漢数字を例外にしたらそれはそれで不格好だし嬉しくない人もいるだろう。
まあ Unicode は後から追加した分だのなんだのでそんなに綺麗に並んでいるわけでもないので
どうせぐちゃぐちゃなら数字くらいは並べても良かったんちゃうかなというのは気持ちはわかる。
981:デフォルトの名無しさん (テテンテンテン MM8f-/v6j)
23/04/17 17:19:21.10 tJ5lxHq2M.net
一二三四…Why Japanese people!
982:
983:デフォルトの名無しさん (スッププ Sd7f-1OZE)
23/04/17 19:13:46.43 92m0URlPd.net
>>967
くくく、、愚かな、、
984:デフォルトの名無しさん (スッププ Sd7f-1OZE)
23/04/17 19:21:15.62 92m0URlPd.net
>>954
アンサインドイントで受けたれや!
985:デフォルトの名無しさん (アウアウウー Sacb-/q5i)
23/04/17 20:38:59.46 RKcegE7fa.net
壱<弐<参<死<伍<碌<質<八<苦<拾<
986:百<銭<萬 ですね判ります
987:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f3e-S3w6)
23/04/18 08:26:27.42 aNj1uNjV0.net
>>971
英語の綴りの不規則さも大概やないけ! と突っ込んで完成するネタだと個人的には思ってる。
988:デフォルトの名無しさん (スフッ Sd7f-fSvC)
23/04/18 14:58:32.85 aePy3OZ8d.net
未初期化の自動変数には「不定値」が割り当てられる、と調べるたり自分が学んでいる本でも書いていますが、自分のコンパイラは常に「0」になっているようです
なぜでしょうか?
ちなみにgcc-10です gcc-11だと「不定値」になります
989:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f32-iKPJ)
23/04/18 15:29:21.41 rjFDtS/R0.net
不定の値とは「未規定の値又はトラップ表現」と規定されてる。
常に 0 であってもこの規定に反しないよ。
990:デフォルトの名無しさん (スフッ Sd7f-7nfa)
23/04/18 16:27:26.25 U9oAz8h1d.net
>>977 ありがとうございます
ちなみに「トラップ表現」とはなんでしょうか?
991:デフォルトの名無しさん (スフッ Sd7f-foDO)
23/04/18 16:57:48.54 U9oAz8h1d.net
976です chatgptで調べました
C言語の仕様では、自動変数を初期化しない場合、その値は不定とされています。これは、コンパイラがメモリ上で変数を割り当てる際に、その領域が以前に使用されていたデータを含んでいる可能性があるためです。
しかしながら、一部のコンパイラでは、自動変数を0で初期化することがあります。これは、セキュリティ上の理由から、またはコードの可読性を向上させるために行われることがあります。
ただし、コンパイラが自動変数を0で初期化することが保証されているわけではありません。したがって、プログラマは自動変数を使用する前に必ず初期化するように注意する必要があります。
992:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5f32-iKPJ)
23/04/18 17:04:00.61 rjFDtS/R0.net
>>978
トラップ表現は「オブジェクト型の値を表現しないオブジェクト表現」ということになってる。
その型としてあり得ないビットパターンってこと。
オブジェクトとして格納されたトラップ表現を文字型ではない左辺値式として読みだした場合の結果は未定義となる。
副作用としてそのような表現が生成される場合も未定義。
C の仕様でいう未定義というのは「何が起きても (たとえば暴走しても) 良い」という意味なので実質的に禁止だと思ってもいいよ。
とはいえ整数型でトラップ表現があるアーキテクチャを私は見たことが無いけどな。
993:デフォルトの名無しさん (スプッッ Sdff-ZLJR)
23/04/18 18:20:39.02 Qric2C4Yd.net
トラップ表現を調べてみたけどほぼほぼ処理系定義絡みなのね
signed int16の0x8000は-32768かもしれないし、トラップ表現かもしれない
1の補数系でsigned int16の0xffffは0かもしれないし、トラップ表現かもしれない
int32* の4バイト境界に合ってないポインタ(int* p=0x0001)は、強制的に4バイト境界に直されるかもしれないし、トラップ表現かもしれない
994:デフォルトの名無しさん (スフッ Sd7f-foDO)
23/04/18 19:26:15.76 U9oAz8h1d.net
>>980 ありがとうございます 勉強になりました
995:デフォルトの名無しさん (テテンテンテン MM8f-/v6j)
23/04/19 02:26:26.48 Nl7uhZkpM.net
自分のコンパイラってのを明らかにしてくれ
どうしても言えないってならしょうがないが…
996:デフォルトの名無しさん (ワッチョイ 6746-KCd8)
23/04/19 02:43:50.96 MHEst9B30.net
>>983
> ちなみにgcc-10です
と書かれている。
997:デフォルトの名無しさん
23/04/19 06:44:34.46 Dcht9s5K0.net
>>983
バーカ(笑)
998:デフォルトの名無しさん
23/04/19 06:59:06.58 twYHK80b0.net
983息してるか?www
999:デフォルトの名無しさん
23/04/19 07:47:07.07 BpfZGgoRd.net
かてなおったかな
1000:デフォルトの名無しさん
23/04/19 10:03:53.18 rE0e6VM+0.net
自作コンパイラの話する?
1001:デフォルトの名無しさん
23/04/19 10:43:43.68 m2bdQTksd.net
いいぜ?お前からな?
1002:デフォルトの名無しさん
23/04/19 11:58:53.24 rE0e6VM+0.net
ぼくはLex&YACCでPL/0を作って満
1003:足しました。おわり
1004:デフォルトの名無しさん
23/04/19 13:12:38.94 IP5wt1Fbd.net
夜中に路地から飛び出て来たら俺もびびる
でも >>991 では語れんわ!
1005:デフォルトの名無しさん
23/04/19 20:04:36.21 3t8AIZsr0.net
C言語のソースコードを検査して処理系依存や未定義動作等の環境によって
結果が変わりうる可能性のある部分を見つけてくれるツールってどんなのがありますか?
コードエディタはvscodeなのでこれと連携できるとなおよいです
1006:デフォルトの名無しさん
23/04/20 08:07:01.48 B156zYN00.net
lintでググれ
1007:デフォルトの名無しさん
23/04/20 08:23:22.20 3as2C0030.net
BingAIに聞け
1008:デフォルトの名無しさん
23/04/20 09:13:39.09 EuuMXrfTa.net
とにかくggr
1009:デフォルトの名無しさん
23/04/20 16:00:12.38 ZTK8T1RQd.net
チャットジーピーテー
1010:デフォルトの名無しさん (ラクッペペ MM8f-bKDU)
23/04/20 23:37:04.36 BN6x5ZIFM.net
さすがに検査対象としてソースコードそのものをchatGPTに丸投げするのはマズイ
個人情報や機密情報をそのまま入力するのは止めるように開発元のopenAIが忠告してたはず
1011:デフォルトの名無しさん
23/04/21 06:41:53.06 NmcLOv2EM.net
>>993
よさそう。サンキュー
1012:デフォルトの名無しさん
23/04/21 13:41:26.17 cgpIrgwq0.net
次スレどこ?
1013:デフォルトの名無しさん
23/04/21 14:06:43.23 rqj2HSDF0.net
次スレ
スレリンク(tech板)
1014:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 114日 3時間 26分 13秒
1015:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています