2016-11-16 1 views
2

私はいつもcharunsigned charwchar_tとしてwint_tとしています。それで、glibcを再コンパイルしてもしなくても、それらの型を使うように関数インタフェースを変更する解決策はありますか? How to change wchar.h to make wchar_t the same type as wint_t?'unsigned char'と 'wchar_t'を自動的に使用するglibcライブラリ関数をラップする方法は?

+0

しないでください。 :)あなたは問題を求めています。良い質問。 – Qix

+0

私が 'ラップ'と言ったとき、私は 'toupper()'のような新しいラッパー関数を書いて、 'toupper()'を呼び出し、コードを変更してラッパーを呼び出すことを意図しました。次に、ラッパーの中に独自のコードを追加して、何かを修正することができます。それは良い一般的な方針です。 –

答えて

3

コンパイラにコマンドラインオプションを渡して、charをデフォルトで符号なしにすることができます。 charをマクロとtypedefで再定義してインターフェイスを標準ライブラリ関数に変更することは、目標を達成する正しい方法ではありません。

gccとclangの場合は、-funsigned-charを使用してください。

Visual C++では、-Jまたは/Jを使用してください。

ワイド文字タイプはシステム固有で、通常はLinuxシステムでは32ビット幅、glibcが使用されている場合は32ビット幅ですが、歴史上の理由からMicrosoftツールでは16ビット幅です。このタイプを変更すると、コンパイラとライブラリの間に互換性の問題が生じます。それについても考えません。

+0

'-funsigned-char' gccオプションを使わずにcharをデフォルトでunsignedにするには?私は毎回入力したり、エイリアスやものを作りたくありません。私は 'gcc'コマンドを使い、デフォルトでこの動作をしたいだけです。おそらく、プログラムに直接置かれる設定ファイルやプラグマがありますか? –

+0

'putput()'、 'fputc()'、 'putc()'の引数の型は 'char'ではなく、' putwchar() '、' fputwc() '、' putwc 'wchar_t'?また、なぜ人間の 'mbstowcs'から' wchar_t'型の変数が 'iswlower()'に渡されるのでしょうか?これは 'iswlower()'が 'wint_t'を取るという事実と矛盾します。その例は間違っていますか? –

+0

@IgorLiferenko:それは別の質問の価値があります。 –

関連する問題