アカウント名:
パスワード:
その結果定数メモリへの書き込みが発生するのがバグ
非修飾型へのポインタを修飾型へのポインタにキャストするのは許容されているが、逆は未定義動作だろ
すくなくともC++では未定義ではないな。それ経由で書き込むと未定義。読むのはOK。
C++は知らんが、Cではポインタの型変換について修飾付ける方向のしか規格に記載されていないから、const外しキャストは未定義動作になる。strchrとか標準関数ですらreturn値でconst外してくるあたり、規格自体が狂ってる感はあるけども。
> strchrとか標準関数ですらreturn値でconst外してくるあたり、規格自体が狂ってる感はあるけども。
それはアタナの勘違い
const char * strchr ( const char * str, int character ); char * strchr ( char * str, int character );
プロトタイプ宣言が2つあります
const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );
Cでそんなことできたっけかな?
int main(void){}
https://wandbox.org/permlink/k4ROmZcUnxTwh7Ab [wandbox.org]
prog.c:2:20: error: conflicting types for 'strchr' 2 | char * strchr ( char * str, int character ); |
X3010の草案(?) [kikakurui.com]だと
7.21.5.2 strchr関数形式 #include char *strchr(const char *s,
それC++のstd::strchrだろ、Cには関係ない。
最初に「C++は知らんが、Cでは」と書かれているのすら見えないバカがいるのか
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー
キャストでconstを外すのがバグではなく (スコア:1)
その結果定数メモリへの書き込みが発生するのがバグ
Re: (スコア:0)
非修飾型へのポインタを修飾型へのポインタにキャストするのは許容されているが、逆は未定義動作だろ
Re: (スコア:1)
すくなくともC++では未定義ではないな。
それ経由で書き込むと未定義。読むのはOK。
Re: (スコア:1)
C++は知らんが、Cではポインタの型変換について修飾付ける方向のしか規格に記載されていないから、const外しキャストは未定義動作になる。
strchrとか標準関数ですらreturn値でconst外してくるあたり、規格自体が狂ってる感はあるけども。
Re:キャストでconstを外すのがバグではなく (スコア:0)
> strchrとか標準関数ですらreturn値でconst外してくるあたり、規格自体が狂ってる感はあるけども。
それはアタナの勘違い
const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );
プロトタイプ宣言が2つあります
Re: (スコア:0)
それはアタナの勘違い
const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );
プロトタイプ宣言が2つあります
Cでそんなことできたっけかな?
const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );
int main(void)
{
}
https://wandbox.org/permlink/k4ROmZcUnxTwh7Ab [wandbox.org]
prog.c:2:20: error: conflicting types for 'strchr'
2 | char * strchr ( char * str, int character );
|
Re: (スコア:0)
それはアタナの勘違い
const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );
プロトタイプ宣言が2つあります
X3010の草案(?) [kikakurui.com]だと
7.21.5.2 strchr関数
形式
#include
char *strchr(const char *s,
Re: (スコア:0)
それC++のstd::strchrだろ、Cには関係ない。
Re: (スコア:0)
最初に「C++は知らんが、Cでは」と書かれているのすら見えないバカがいるのか