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
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を超えています。これ以上書き込みはできません。

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