タグ付けされた質問 「size-t」

13
Cのsize_tとは何ですか?
size_tCで混乱していsizeofます。オペレーターから返されることはわかっています。しかし、それは正確には何ですか?データ型ですか? forループがあるとしましょう: for(i = 0; i < some_size; i++) int i;または使用する必要がありますかsize_t i;?
626 c  int  size-t 

8
符号なし整数とsize_t
最近のCおよびC ++コードは、C文字列関数のパラメーターからSTLまで、ほとんどどこでも/のsize_t代わりに使用しているようです。この理由とそれがもたらす利点について知りたいです。intunsigned int
492 c++  c  size-t 

7
size_tとuintptr_tの比較
C標準でsize_tは、任意の配列インデックスを保持できる型であることを保証しています。つまり、論理的には、size_t任意のポインタ型を保持できる必要があります。これは合法であり、常に機能するはずであるとGoogleで見つけたいくつかのサイトで読んだことがあります。 void *v = malloc(10); size_t s = (size_t) v; そのため、C99では、標準によりintptr_tおよびuintptr_t型が導入されました。これらは、ポインタを保持できることが保証されている符号付きおよび符号なしの型です。 uintptr_t p = (size_t) v; だから、使用しての違いは何であるsize_tとはuintptr_t?どちらも符号なしであり、どちらも任意のポインタ型を保持できるはずなので、機能的には同じように見えます。明快さ以外に、aよりもuintptr_t(またはもっと良いのはa void *)を使用する本当に説得力のある理由はありますsize_tか?フィールドが内部関数によってのみ処理される不透明な構造で、これを行わない理由はありますか? 同様に、ptrdiff_tポインタの違いを保持できる符号付きの型であり、したがってほとんどのポインタを保持できるので、それはどのように区別されintptr_tますか? これらのタイプはすべて、基本的に同じ機能のわずかに異なるバージョンを提供しているのではないですか?そうでない場合、なぜですか?それらの1つを使用して、他のユーザーを使用してできないことは何ですか?もしそうなら、なぜC99は2つの本質的に不必要な型を言語に追加したのですか? 関数ポインターは現在の問題には当てはまらないため、無視してもかまいませんが、「正しい」答えの中心となるのではないかという疑惑があるので、遠慮なく触れてください。
246 c  pointers  size-t 

13
std :: size_tを使用する場合
std::size_t代わりにforループなどを使用する必要があるのintでしょうか?例えば: #include <cstdint> int main() { for (std::size_t i = 0; i < 10; ++i) { // std::size_t OK here? Or should I use, say, unsigned int instead? } } 一般的に、いつ使用するstd::size_tかに関するベストプラクティスは何ですか?

3
size_tとstd :: size_tの違い
違いは何ですかsize_tとstd::size_t、彼らが使用しなければならないとき、宣言し、他の差別化機能している場所の面では?
139 c++  size-t 

9
C ++のprintf size_tへのクリーンなコード(または:C ++のC99の%zに最も近いもの)
を出力するいくつかのC ++コードがありますsize_t。 size_t a; printf("%lu", a); これを32ビットと64ビットの両方のアーキテクチャで警告なしにコンパイルしたいのですが。 これがC99の場合、を使用できますprintf("%z", a);。しかし、AFAICT %zは標準のC ++方言には存在しません。代わりに、私はしなければなりません printf("%lu", (unsigned long) a); これは本当に醜いです。 size_t言語に組み込まれたs を印刷する機能がない場合、適切なキャストをsize_tsに挿入して、適切なキャストを維持しながら、誤ったコンパイラ警告を排除できるprintfラッパーなどを作成できるかどうか疑問に思います。 何か案は? 編集私がprintfを使用している理由を明確にするために、私は整理している比較的大きなコードベースを持っています。printfラッパーを使用して、「警告を書き込み、それをファイルに記録し、場合によってはエラーでコードを終了する」などの処理を行います。coutラッパーを使用してこれを行うのに十分なC ++-fooを集めることはできるかもしれませんが、コンパイラの警告を取り除くためだけに、プログラムのすべてのwarn()呼び出しを変更したくありません。
96 c++  printf  size-t 

3
プラットフォームに依存しないsize_tcのフォーマット指定子?
size_tCで型の変数を出力したいのですが、size_tアーキテクチャーごとに異なる変数型にエイリアスされているようです。たとえば、あるマシン(64ビット)では、次のコードは警告をスローしません。 size_t size = 1; printf("the size is %ld", size); しかし、他のマシン(32ビット)では、上記のコードは次の警告メッセージを生成します。 警告:フォーマット '%ld'はタイプ 'long int *'を予期していますが、引数3のタイプは 'size_t *'です。 これはポインタサイズの違いによるものと思われるため、64ビットマシンでsize_tはlong int("%ld")にエイリアスされますが、32ビットマシンでsize_tは別のタイプにエイリアスされます。 専用のフォーマット指定子はありsize_tますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.