C言語なら俺に聞け 164at TECH
C言語なら俺に聞け 164 - 暇つぶし2ch334:デフォルトの名無しさん
26/03/21 10:45:44.25 CPZyPnYr0.net
マ抜いてみたが1字しか変わらん。
$ diff 326.txt <(sed 's/ま//g' 326.txt)
7c7
< 算術的に扱わない場合の文字に符号があることにも違和感があるし、wchar_tもunsigned shortだったので、unsigned charでいくことにします
---
> 算術的に扱わない場合の文字に符号があることにも違和感があるし、wchar_tもunsigned shortだったので、unsigned charでいくことにしす

335:デフォルトの名無しさん
26/03/21 21:54:40.15 J3vuIWx/0.net
文字種で集計するときに、算術的な処理できて便利です。

336:デフォルトの名無しさん
26/03/21 23:11:33.45 tYP/a5awa.net
>>90
そりゃ、算術的に扱う場合も、ロジカルに扱う場合もあるでしょう

337:デフォルトの名無しさん
26/03/21 23:13:50.06 tYP/a5awa.net
壮大にアンカミスったけど、直前のレスに対してでした

338:デフォルトの名無しさん
26/03/21 23:15:05.79 tYP/a5awa.net
>>335 も僕に対する煽りではないかもね
失礼しました、ごめんなさい

339:デフォルトの名無しさん
26/03/22 17:59:49.49 2hKizJjM0.net
基本的に文字列を扱うならcharを使え

340:デフォルトの名無しさん
26/03/22 18:26:26.84 3tG0rWHEa.net
tell me why

341:デフォルトの名無しさん
26/03/22 19:08:06.37 M3MXuE5D0.net
輝美 (てるみ) にテルミー

342:デフォルトの名無しさん
26/03/22 19:32:45.81 3tG0rWHEa.net
そこは照美

343:デフォルトの名無しさん
26/03/22 21:43:43.51 2hKizJjM0.net
標準ライブラリが引数をchar *で受けるのも規格のcharの扱いに曖昧さがあるのも同じ理由に因ってる
特に規格の方はこうすることでコンパイラの作者とユーザーの双方に利が出るよう意図的にこうしてる
わざとはっきりさせないようにするのはCの規格によくある「味を残してる部分」なんだから、お前は何も考えずcharを使え

344:はちみつ餃子
26/03/22 22:46:32.72 VeLWozt10.net
char が符号付きかどうかが処理系定義なのはアーキテクチャの都合に合わせられるようにするためだ。
(規格制定時にすでにどちらの処理系も存在したので追認したという消極的な理由もある。)
この場合はアーキテクチャに都合が悪いからといってやるべきことが変わるわけではないのだから曖昧なほうが良いなどという論に説得力は感じないな。

C11 で u8 プレフィクスを付けたとき (文字列を UTF-8 とするとき) に char で扱うルールにしたのは失敗だったと認めて C23 から char8_t 型を導入することになった経緯もある。
互換性を大事にする C で非互換な変更をするくらいには文字が負数になるのはろくでもないミスの元だとはっきりしてる。

345:デフォルトの名無しさん
26/03/23 13:08:14.92 wdN2pFMo0.net
strcmpの実装をみると、引数はconst char *で比較はconst char *でとするのが大概ですね

346:デフォルトの名無しさん
26/03/23 13:08:59.68 Y2m4p/F8a.net
大概というか、いくつかみた中では漏れなく

347:デフォルトの名無しさん
26/03/23 13:25:26.49 0ed5u03ca.net
>>345
比較はconst unsigned char *で、の間違いでした^_^;

348:デフォルトの名無しさん
26/03/23 13:32:20.67 DGwKTx8fp.net
Cで文字列操作なんかバグの温床になるだけだから開発言語変えるか仕様変えろw

349:デフォルトの名無しさん
26/03/23 14:45:03.99 5CbFmxEa0.net
おすすめの言語は何ですか?

350:はちみつ餃子
26/03/23 14:59:14.86 kZjJats90.net
Rust

351:はちみつ餃子
26/03/23 17:13:12.62 kZjJats90.net
>>347
それはそう。
比較関数では各文字は unsigned char として比較すると規格上明記されている。

352:デフォルトの名無しさん
26/03/23 18:00:32.09 FDDLemSHa.net
規格書まで紐解かないとではなぁ…
MSのページだと、strcmpとマルチバイト用の_mbscmpが併記してあって、後者の引数は const unsigned char * なのも紛らわしい
後者はMS拡張だからそうできるのだろうけど

353:デフォルトの名無しさん
26/03/23 18:07:37.20 FDDLemSHa.net
_mbscmpのシグニチャは最初の問いの答えだな…

354:はちみつ餃子
26/03/23 21:13:53.55 nKsWqljT0.net
文字列リテラルを char の配列であることにした以上は標準の関数の型をそれと合わせるという判断は自然なものだと思うよ。
全体として見ると変な感じだけど個々に見ると妥当な (少なくとも仕方ない) ように見える。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch