C言語なら俺に聞け 164

183デフォルトの名無しさん (ワッチョイ 67f6-WraW)
垢版 |
2025/11/25(火) 10:15:11.74ID:F0vSFTML0
frexp() の第2引数ってそもそも性質からして整数以外有り得ないんじゃね
むしろ第1引数も整数でも良いくらい
2025/11/25(火) 12:28:06.26ID:MC0j4mydM
複素数に拡張してくれ
核開発に使える
185デフォルトの名無しさん (スフッ Sd7f-Lg42)
垢版 |
2025/11/25(火) 13:48:33.82ID:rSIO8n1ld
質問です
int hoge(wchar_t *p);
な関数があって
int a = hoge(L"fuga"); だと正常で
int b = hoge("fuga"); だと誤動作します
理由は判りますが
そもそも引数がcompile errorにもwarningにもなりません
C++みたいにcompile errorにする方法は?
2025/11/25(火) 15:48:36.00ID:evMdha/k0
>>185
規格合致プログラム (conforming program) ではないので許容するとしたら処理系の拡張。
主要な処理系ではエラーになると思うけど、なんていう処理系を使ってるの?
2025/11/26(水) 10:42:02.61ID:ZGYu6bhA0
念のために仕様をよく読んで検討したら wchar_t が char の別名として定義されることは理屈の上では認められることを発見した。
そしてその上で文字列リテラルとワイド文字リテラルが異なる符号体系を持つということも可能ではある。
もしそういう処理系なら >>185 の事例は型が合った上で誤作動 (プログラマの想定と異なる動作) を引き起こすかもしれない。

実際にそういう処理系があるのかどうか知らんけど libc のドキュメント中で組み込みシステムではそういうのも妥当かもしれないという言及がある。
https://www.gnu.org/software/libc/manual/html_node/Extended-Char-Intro.html#index-wchar_005ft
2025/11/26(水) 11:37:21.77ID:g4n+mUAPa
>>186
VCで確認したら警告は出たがエラーではないので実行出来た上で誤作動(描かれた通りには動いている)
警告レベル替えればエラーにも出来るんだろうけど
文字列リテラルポインタからワイド文字列リテラルポインタへの自動キャスト(あるいはその逆のキャスト)以外のところにも影響出てエラーだらけになるかも
文字列リテラルポインタからワイド文字列リテラルポインタへの自動キャスト(あるいはその逆のキャスト)限定でエラーにならないかな
2025/11/26(水) 15:23:02.27ID:ZGYu6bhA0
>>188
MSVC がそんな馬鹿げた仕組みとは驚きだな。
合わない型 (本来は暗黙の型変換も認められない型) は一律にエラーになるべきだけれど、とりあえず自分のコードで型が合わないケースをエラーにしたいなら
#pragma warning(error : 4133)
とするくらいが落としどころじゃないかと思う。
2025/11/27(木) 05:19:27.44ID:KfDQEfrsd
ありがとうございます
>>188
よくみたらwarning出てたのみのがしてました
>>189
良い感じにcompile errorにしてくれました
2025/11/29(土) 18:02:47.96ID:MnjgLok40
固定小数点でも誤差が出ます
とかトンチンカンなこと言い出すやついるけど
割り算しなきゃほぼ誤差ないんだよ
192デフォルトの名無しさん (ワッチョイ 79f6-v69L)
垢版 |
2025/12/01(月) 12:04:42.29ID:HDTmHOXC0
gmp使ったソースだった
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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