エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1500329247/
探検
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2017/11/04(土) 16:33:35.07ID:NYxCuvMY2デフォルトの名無しさん
2017/11/05(日) 17:44:45.44ID:rSDVGL6P >>1
乙
乙
2017/11/05(日) 20:58:13.61ID:80sy7ZoV
unsigned long strtoulxn( char const* psz, size_t n )
{
unsigned long v;
for ( v = 0; *psz && n--; psz++ ) {
if ( ! isdigit( *psz ) ) {
continue;
}
v = 10 * v + ( *psz - '0' );
}
return v;
}
{
unsigned long v;
for ( v = 0; *psz && n--; psz++ ) {
if ( ! isdigit( *psz ) ) {
continue;
}
v = 10 * v + ( *psz - '0' );
}
return v;
}
2017/11/05(日) 21:07:57.69ID:i5zx7IeJ
これは酷いクソコード
2017/11/05(日) 22:25:14.64ID:NxjjuMpf
実行速度
見やすさ
汎用性
コードサイズ
どれかひとつ位は満たさないと
見やすさ
汎用性
コードサイズ
どれかひとつ位は満たさないと
2017/11/05(日) 22:42:14.76ID:3uuR82Hq
>>5
まあそう言うごたくを言うのは一つぐらいは満たしたコードを書いてからでないとね
まあそう言うごたくを言うのは一つぐらいは満たしたコードを書いてからでないとね
2017/11/06(月) 08:01:53.31ID:uTTN+kxR
>>3 の関数は前のスレッドの終わりに出た
"12 34 56"(NUL終端なし8byte) を数値の 123456 に変換、
てお題の答案かな。
…と思ったけど、NUL終端文字列が仮定されてるね。
どういう流れで投稿されたんだろう?
"12 34 56"(NUL終端なし8byte) を数値の 123456 に変換、
てお題の答案かな。
…と思ったけど、NUL終端文字列が仮定されてるね。
どういう流れで投稿されたんだろう?
2017/11/06(月) 08:45:24.00ID:H37qYFYx
size_t n で文字数を受けとるからNUL終端である必要は無いのでは
2017/11/06(月) 09:40:14.23ID:L15YU14L
if (strncmp(psz, "12 34 56", 8) == 0) return 123456;
2017/11/06(月) 23:29:19.85ID:OMQOLu1z
相変わらず片山はクソコードしか書かないな
""だと不定値返る数値変換なんてゴミ
""だと不定値返る数値変換なんてゴミ
2017/11/06(月) 23:59:53.41ID:/gW4r5bt
>>10
確かにクソコードだが不定値は返らんぞ
確かにクソコードだが不定値は返らんぞ
2017/11/07(火) 04:37:45.33ID:T7zw8VZw
>>9 は質問者に対する皮肉のつもりだったんだけど
2017/11/07(火) 04:47:47.90ID:T7zw8VZw
意図的に糞コードを書いた事もわからないクソがいるとは
こんな簡単なコードの動作も理解できてないようだし
こんな簡単なコードの動作も理解できてないようだし
2017/11/07(火) 06:16:53.55ID:pkgJL5Ib
初心者歓迎をうたうスレッドで「意図的に『糞コード』を書いた」などと
しかも後付けで言われてもあんまり支持できないなぁ。
せめて最初から「お前らこれ改善してみろよ」とかで出してくれ。
「糞コード」とけなすだけで、具体的な問題点の指摘がないってのも寂しいわ。
>>3 のソース、引数のpszが""でも、nが0でも妥当な返り値 0 が返るけど、
実は最初に見たとき n==0 で呼ばれた場合に即時終了しないと騙されたわ。
後置デクリメント評価値、ね。
しかも後付けで言われてもあんまり支持できないなぁ。
せめて最初から「お前らこれ改善してみろよ」とかで出してくれ。
「糞コード」とけなすだけで、具体的な問題点の指摘がないってのも寂しいわ。
>>3 のソース、引数のpszが""でも、nが0でも妥当な返り値 0 が返るけど、
実は最初に見たとき n==0 で呼ばれた場合に即時終了しないと騙されたわ。
後置デクリメント評価値、ね。
2017/11/07(火) 06:53:54.21ID:+N0q+RZO
誰も騙してないのにクソみたいなプライドが高いな
2017/11/07(火) 07:08:01.90ID:aXJpgdu1
出だしから勢いのいいうんこだな
何のスレか忘れてしまいそう
何のスレか忘れてしまいそう
2017/11/07(火) 08:24:36.39ID:FXbSqjpU
psz = "", n = 0 はいいけど
char a[8] で psz = a, n = 8 を渡すと不定値どころか鼻から悪魔の糞コード
仕様も理解せずに余計なことしてバグを作り込む知ったかの典型
char a[8] で psz = a, n = 8 を渡すと不定値どころか鼻から悪魔の糞コード
仕様も理解せずに余計なことしてバグを作り込む知ったかの典型
2017/11/07(火) 08:32:51.44ID:T7zw8VZw
>>3
●パフォーマンス
*pszが3回も出てくる
代入して持っておいた方が
チープなコンパイラでは速度が変わる
isdigit
どうせ数字が連続してる前提のコードなんだから
関数を呼ばずに'0' '9'と比較しちゃおう
そうのが速い
関数コールは一般的に遅い
●見やすさ
forループにいくつも入れない
while (n--) か for (size_t i= 0; i < n ; i++)
null文字はbreakで
●仕様
null文字とサイズ、両方で停止は仕様としては問題ない
パフォーマンス最優先であればそれぞれの特別版を作ればいい
文字数もスペースの位置も固定で
パフォーマンス最優先なら
ループアンロールするのが一番
●パフォーマンス
*pszが3回も出てくる
代入して持っておいた方が
チープなコンパイラでは速度が変わる
isdigit
どうせ数字が連続してる前提のコードなんだから
関数を呼ばずに'0' '9'と比較しちゃおう
そうのが速い
関数コールは一般的に遅い
●見やすさ
forループにいくつも入れない
while (n--) か for (size_t i= 0; i < n ; i++)
null文字はbreakで
●仕様
null文字とサイズ、両方で停止は仕様としては問題ない
パフォーマンス最優先であればそれぞれの特別版を作ればいい
文字数もスペースの位置も固定で
パフォーマンス最優先なら
ループアンロールするのが一番
2017/11/07(火) 12:47:26.90ID:FXbSqjpU
2017/11/07(火) 13:22:08.68ID:oMcRDniv
仕様として「両方で停止は問題ない」よな?
判別の順番は問題だ
順番が逆
そもそも相談者の仕様がおかしい
判別の順番は問題だ
順番が逆
そもそも相談者の仕様がおかしい
2017/11/07(火) 16:16:20.01ID:3ER4WXnW
先に大きさでチェックしてから 内容の nul チェックする
for ( v = 0; n-- && *psz; psz++ ) {
これなら、存在しない指し先のデリファレンスしないし
ただ、
ショートサーキット前提の記述をよしとするかどうかはわからん
for ( v = 0; n-- && *psz; psz++ ) {
これなら、存在しない指し先のデリファレンスしないし
ただ、
ショートサーキット前提の記述をよしとするかどうかはわからん
2017/11/07(火) 17:07:50.15ID:Zpoup5pM
int str2i( const char *s, size_t n )
{
int v = 0;
while ( n-- ) {
char c = *s++;
if ( c == '??0' ) break;
if ( '0' <= c && c <= '9' ) v = v * 10 + ( c - '0' );
}
return v;
}
{
int v = 0;
while ( n-- ) {
char c = *s++;
if ( c == '??0' ) break;
if ( '0' <= c && c <= '9' ) v = v * 10 + ( c - '0' );
}
return v;
}
2017/11/07(火) 17:17:37.91ID:jEe4bM6y
片山以外に文字化けするブラウザ使ってる奴いるのか
あとnull文字って初心者が背伸びしてる感じがして微笑ましいな
あとnull文字って初心者が背伸びしてる感じがして微笑ましいな
2017/11/07(火) 17:31:27.26ID:Zpoup5pM
ソフト歴35年ですが
2017/11/07(火) 17:50:48.44ID:6NdbJPOz
PC(プロセスコントローラー)のプログラマーですが何か?
ってのは居たが
ってのは居たが
2017/11/08(水) 01:37:38.03ID:MEe7IGP8
isdigitが関数コールな処理系ってあるのか?
ここって車輪の再発明好きな人多いのかね
ここって車輪の再発明好きな人多いのかね
28片山博文MZ ◆T6xkBnTXz7B0
2017/11/08(水) 02:06:05.60ID:TZ5JAUzS isdigitは、ロケールの関係で遅くなる可能性があるはず。256バイトの配列を使うのが最速だ。
29はちみつ餃子 ◆8X2XSCHEME
2017/11/08(水) 03:38:56.63ID:xvDlz0If ちょっとした演算よりメモリアクセスの方が遅いこともあるよ。
本当に配列が最速?
(試したわけではないので配列が最速かもしれない……)
本当に配列が最速?
(試したわけではないので配列が最速かもしれない……)
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- クリスマスの「予定なし」54% [少考さん★]
- 最新版Z級クソ映画ランキングが決定! [牛丼★]
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 ★2 [蚤の市★]
- 日銀0.75%に利上げへ、30年ぶりの水準に 19日金融政策決定会合 [蚤の市★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 ★2 [蚤の市★]
- 公用車カーナビのNHK受信料「全額免除を」 千葉市議会、国に制度創設求める意見書可決 [少考さん★]
- 【実況】博衣こよりのえちえち機動戦士ガンダム逆襲のシャア🧪★4
- 👊😅👊三☁😶‍🌫三⛅🏡
- 【動画】愛国者「山本太郎!お前に答えられない渾身の質問をする!三権分立は何と何と何だ!!!」 [369521721]
- コーヒー、来年3月から30パーセント値上げへ [709039863]
- 愛国者「釘を使わない日本独自の伝統工法スゴイ!」X民「それ中国起源ですよ」→批判殺到 [834922174]
- 茶ぁしばこうや··· ( ¨̮ )︎︎𖠚ᐝ2
