問題タブ [size-t]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
7 に答える
61473 参照

c - size_t と uintptr_t

size_tC 標準では、 が任意の配列インデックスを保持できる型であることを保証しています。これは、論理的には、size_t任意のポインター型を保持できる必要があることを意味します。Google で見つけたいくつかのサイトで、これは合法であり、常に機能するはずであると読みました。

そのため、C99 では、標準でintptr_tanduintptr_t型が導入されました。これは、ポインターを保持できることが保証されている符号付きおよび符号なしの型です。

size_tでは、との使用の違いは何uintptr_tですか? どちらも符号なしで、どちらも任意のポインター型を保持できる必要があるため、機能的には同じように見えます。明快さ以外に、 a ではなくuintptr_t(またはさらに良いことに、 a )を使用する本当の説得力のある理由はありますか? フィールドが内部関数によってのみ処理される不透明な構造では、これを行わない理由はありますか?void *size_t

同様に、ptrdiff_tはポインターの違いを保持できる符号付きの型であり、したがってほとんどすべてのポインターを保持できるので、どのように と区別されintptr_tますか?

これらのタイプはすべて、基本的に同じ関数のわずかに異なるバージョンを提供しているのではないでしょうか? そうでない場合、なぜですか?そのうちの 1 つではできなくて、別の 1 つではできないことは何ですか? もしそうなら、なぜ C99 は 2 つの本質的に余分な型を言語に追加したのでしょうか?

関数ポインターは現在の問題には当てはまらないため、無視しても構いませんが、「正しい」答えの中心になるとこっそり疑っているので、気軽に言及してください。

0 投票する
9 に答える
76455 参照

c++ - C++ で printf size_t にクリーン コード (または: C++ での C99 の %z に最も近いもの)

を出力する C++ コードがいくつかありますsize_t

これを 32 ビット アーキテクチャと 64 ビット アーキテクチャの両方で警告なしでコンパイルしたいと思います。

これが C99 なら、 を使用できますprintf("%z", a);。しかし、AFAICT%zは標準の C++ 方言には存在しません。だから代わりに、私はしなければならない

これは本当に醜いです。

sを印刷する機能が言語に組み込まれていない場合、適切なコンパイラ警告を維持しながら偽のコンパイラ警告を排除するためsize_tに、適切なキャストを s に挿入する printf ラッパーまたはそのようなものを作成できるかどうか疑問に思います。size_t

何か案は?


編集printfを使用している理由を明確にするために:クリーンアップしている比較的大きなコードベースがあります。printfラッパーを使用して、「警告を書き込み、ファイルに記録し、エラーでコードを終了する可能性があります」などのことを行います。cout ラッパーでこれを行うのに十分な C++-foo を集めることができるかもしれませんが、コンパイラーの警告を取り除くためだけに、プログラム内のすべての warn() 呼び出しを変更したくはありません。

0 投票する
3 に答える
2225 参照

c - C で size_t のサイズを変更できますか?

size_tCのサイズを変更できますか?

0 投票する
7 に答える
5524 参照

c - size_t は移植可能ですか?

GCC 4.4.1、C99

を使用しsize_tsize_tおり、unsigned int. ただし、32 ビットまたは 64 ビットのどちらを実行しているかによって異なります。

size_tバッファのサイズを格納するために使用します。

したがって、アーキテクチャ間で使用する場合、これはあまり移植性がないと思います。

size_t32ビットまたは64ビットで使用する場合の質問です。最も深刻な問題を引き起こすのはどのような状況ですか?

0 投票する
14 に答える
126206 参照

c++ - std :: size_tをいつ使用するか?

std::size_t代わりにforループなどを使用する必要があるのではないかと思っていますint。例えば:

一般的に、いつ使用するかに関するベストプラクティスは何std::size_tですか?

0 投票する
3 に答える
55611 参照

c - プラットフォームに依存しない size_t c の書式指定子?

size_tCで型の変数を出力したいのですがsize_t、異なるアーキテクチャの異なる変数型にエイリアスされているようです。たとえば、あるマシン (64 ビット) では、次のコードは警告をスローしません。

しかし、私の他のマシン (32 ビット) では、上記のコードは次の警告メッセージを生成します。

警告: フォーマット '%ld' はタイプ 'long int *' を想定していますが、引数 3 のタイプは 'size_t *' です

これはポインター サイズの違いによるものと思われます。そのため、64 ビット マシンsize_tではlong int( "%ld") にエイリアスされますが、32 ビット マシンsize_tでは別の型にエイリアスされます。

専用のフォーマット指定子はありますsize_tか?

0 投票する
4 に答える
397 参照

c++ - Pimplイディオム:実装が不明な場合に使用するsize_typeは何ですか?

GetSize要素の配列を保持するクラスがあり、それにメンバー関数を与えたいと思います。しかし、その関数にどのような戻り型を与える必要がありますか?

私はpimplイディオムを使用しているので、ヘッダーファイルでは、実装が要素を格納するために何を使用するかはわかりません。だから私はただ言うことはできませんstd::vector<T>::size_type、例えば:

0 投票する
6 に答える
1727 参照

c++ - size_tはC++標準またはC標準のみですか?

size_tはC++標準またはC標準のみですか?

size_tを定義する「/usr/include」ツリーにCヘッダーが見つかりません。

それがCstdにない場合、GCCは物事を機能させるために魔法をかけているだけですか?

ありがとう、チェンツ

0 投票する
15 に答える
877302 参照

c - Cのsize_tとは何ですか?

私はsize_tCで混乱しています.私はそれがsizeof演算子によって返されることを知っています. しかし、それは正確には何ですか?データ型ですか?

forループがあるとしましょう:

またはを使用する必要がありますint i;size_t i;

0 投票する
1 に答える
6350 参照

c++ - size_tからunsignedintに変換すると警告が表示されるのはなぜですか?

私はコードを持っています:

私は4の警告レベルでコンパイルしていますが、aがaの場合、「からsize_tへの変換unsigned int、データの損失の可能性」を示しています。size_ttypedefunsigned int

なぜ!?

編集:

私は自分の問題を解決しました。私はXPユーザーであり、コンパイラは64ビットの互換性をチェックしていました。size_tはプラットフォームに依存するため、64ビットの場合は、になりますが、これは。unsigned long longと同じではありませんunsigned int