[解決済み] ssize_t と int の使い分け
2022-03-06 22:46:48
質問
コード
で書ける関数は 一つ の4つの方法が考えられます。
int do_or_die(int retval);
int do_or_die(ssize_t retval);
ssize_t do_or_die(int retval);
ssize_t do_or_die(ssize_t retval);
で呼び出されます。 ともに これらの方法は、ライブラリ関数の場合です。
written = do_or_die(write(...)); // POSIX write returns ssize_t
printed = do_or_die(printf(...)); // printf returns int
質問事項
- どのプロトタイプを使用すればよいですか?
-
にはどのような型を与えるべきでしょうか?
written
とprinted
?
最も堅牢で標準的なコードでありながら、たった1つの
do_or_die
関数を使用します。
今回はC99を使用していますが、C11では回答が異なるようでしたら、今後のためにそちらも教えていただきたいです。
どのように解決するのですか?
POSIX規格には、以下のような保証はありません。
sizeof(int) >= sizeof(ssize_t)
また、その逆も同様です。一般的に
ssize_t
よりも大きい。
int
しかし、C99 の安全で移植性の高いオプションは
intmax_t
の代わりに、引数と戻り値を指定します。
の関係で唯一保証されるのは
int
と
ssize_t
があります。
-
int
は、ISO C に基づいて少なくとも範囲 [-2^15 ... 2^15-1] の値を格納することができます。 -
ssize_t
は POSIX に基づいて少なくとも [-1 ... 2^15-1] の範囲の値を格納することができます (_POSIX_SSIZE_MAX
).
(興味深いことに、以下のような保証もありません。
ssize_t
は、その正の範囲の負の対偶を格納することができます。これは符号化された
size_t
しかし、エラー値を持つ "サイズタイプ"です)。
関連
-
[解決済み】strcmpが機能しない
-
[解決済み] C++とCの融合 - #ifdef __cplusplus はどのように機能するのか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] C++でintをstringに変換する最も簡単な方法
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C++の識別子でアンダースコアを使用する場合のルールについて教えてください。
-
[解決済み] intからStringへの変換方法を教えてください。
-
[解決済み】size_tとuintptr_tの比較
-
[解決済み】StringをIntに変換する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み】strcmpが機能しない
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】C言語で浮動小数点例外(コアダンプ)発生
-
[解決済み】MB/sとMiB/sを計算する方法は?
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み】コンパイラの警告 - 真理値として使用される代入の周囲に括弧を付けることを推奨する
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開