問題タブ [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.
c - sizeof と size_t を使用する場合、常に stddef.h を含める必要がありますか?
sizeof
演算子を使用size_t
してコードで使用している場合、必ず を含める必要がありますかstddef.h
? を含めていませんがstddef.h
、コードは MVS2008 と Borland C++ BuilderX の両方で警告なしにコンパイルされます。
どうもありがとう...
c++ - size_t を int にキャストして、char 配列のサイズを宣言する
char 配列のサイズを宣言しようとしていますが、size_t として宣言されている変数の値を使用してそのサイズを宣言する必要があります。とにかく、 size_t 変数を int にキャストして、それを行うことができますか?
c - size_t の最大値を見つけるためのポータブルな方法は何ですか?
プログラムが実行されているシステムでの size_t の最大値を知りたいです。私の最初の本能は、次のようにマイナス 1 を使用することでした。
しかし、もっと良い方法、またはどこかで定数が定義されていると思います。
c++ - 64 ビット C++ ビルドで size_t および int 型の問題を回避するにはどうすればよいですか?
今日、初めてプロジェクトの 64 ビット ビルドを作成しました。基本的に、新しい 64 ビット size_t 型と単純な int 型の間の非互換性に関する警告を除いて、正常にコンパイル、リンク、および実行されました。これは主に、私のコードで次のような状況で発生します。
これは非常に簡単に修正できます。ループ インデックスとして size_t または ptrdif_t を使用する必要があるという記事を読みました。しかし、このような状況で何ができるでしょうか?
int 型の引数を期待する外部ライブラリの関数宣言を変更できず、ベクトル要素の数を渡す必要があります。コンパイラの警告を無効にする以外に何ができますか?
c++ - size_t と wchar_t を移植可能にしますか?
私の理解では、 size_t と wchar_t の表現は完全にプラットフォーム/コンパイラ固有です。たとえば、Linux の wchar_t は現在通常 32 ビットですが、Windows では 16 ビットであると読みました。両方のプラットフォームで既存の標準 C ライブラリおよび関数との下位互換性を維持しながら、独自のコードでこれらを設定サイズ (int、long など) に標準化する方法はありますか?
私の目標は、本質的に、それらが設定されたサイズになるように typedef のようなことをすることです。これは何かを壊すことなく可能ですか?これを行う必要がありますか?より良い方法はありますか?
更新:これを行いたい理由は、文字列のエンコードが Windows と Linux の両方で一貫しているためです。
ありがとう!
c++ - size_t を使用して最大の配列を宣言する
非常に大きな配列を宣言したかったのです。配列の最大サイズは size_t であり、UINT_MAX として定義されていることがわかりました
だから私はこのようなコードを書いた
これをコンパイルすると、配列次元のオーバーフローと表示されます
しかし、私がこのように書くとき
正しくコンパイルされます。違いは何ですか
gcc - size_t の printf
最初にキャストしたり、コンパイラの警告を生成したりせずにprintf
aを与える方法はありますか? size_t
(私は常に でコンパイルし-Wall
ます。)
c - for ループと size_t の奇妙な動作
上記のコード (gcc を使用) の出力
4
0 1 2 3
このコード (i は -1 に初期化されます) は 4 のみを出力し、ループには何も出力しません。
キャストを追加すると、コードが再び正常に実行されます。出力は
4
-1 0 1 2 3
2 番目のコードで何が問題になっていますか? printf がどこにも問題を起こさないのはなぜですか?
visual-studio-2008-sp1 - 「警告:符号付き整数式と符号なし整数式の比較」と同様のGCC警告をVS2008に発行させる
'int'から'size_t'への変換で説明されたものと同じ行に沿って、結果の符号が変わる可能性があります-GCC、C 、代わりに、GCC4.2.1で受信する警告にもフラグが付けられるようにします32ビットと64ビットの両方のコンパイルでのVS2008SP1では、VS2008に合わせてGCCでの警告を無効にします。
たとえば、64ビット条件下のGCC 4.2.1では、-Wall条件下での警告として次のように表示されます。
GCCの警告は次のとおりです。
ただし、VS2008 SP1 64ビットコンパイラでは、どのタイプのプラグマを試しても、/W3または/W4、または/ w3some_warning_numberまたは/ w4some_warning_numberなどを使用して何を有効にしてもフラグは立てられません。
さて、GCCの警告レベルを下げたり、警告を無効にしたりしたくありません。なぜなら、GCCには非常に正当な理由で警告があったからです。したがって、/ WXが有効になっている場合、VSビルドが同様の方法で失敗するようにしたいと思います。これは私が一緒に暮らさなければならないものですか、それともVS2008でトリックを行う警告がありますか?
編集:警告は、32ビットビルドでは表示されますが、64ビットビルドでは表示されません。以下に示すように、同じコンパイラオプションのセットを使用します。
編集#1:これはVisual Studioの特異性である可能性があるため、Visual C ++ Developer Centerに投稿しました-警告C4018:'<':32ビットでは符号付き/符号なしの不一致が発生しますが、64のVS2008SP1では64ビットのコンパイルでは発生しません-ビットWindows。
編集#2: Visual C++開発者センターの投稿内からMicrosoftConnectに投稿するように指示され、今日(2011-01-11)Microsoftは私の質問に回答し、コンパイラの問題として検証しました:問題が追加されると述べました将来のリリースで修正されるバックログへ:Microsoft Connect-警告C4018:'<':署名付き/署名なしの不一致は同じサイズのタイプ間でのみ発生します。
c++ - size_tと比較して、intを返しますか?
「C++でコンピュータサイエンティストのように考える方法」のコード例をいくつか書いています。これは、トランプタイプのオブジェクトとデッキの処理に関するものです。私はこの状況に直面しています:
Visual Studio2010のC++のベクターでテキストのように「.length()」を使用することはできませんでした。代わりに、std :: size_typeを返す.size()を使用する必要がありました。私が読んでいるように、さまざまなアーキテクチャでの問題を回避するためにsize_tを使用してそれを回避できると思いましたが、返すかどうか疑問に思っていますがi
、整数よりも大きいので、プログラムをクラッシュさせますか?
[私の質問でより具体的に編集:]カードよりも大きなものにベクトルを使用し始めたら、コンパイラの不一致の警告のためにunsigned intの使用を検討しましたが、unsigned intまたはintを返すにはいくつかの問題があると感じます:1) intは十分に大きなベクトルインデックスを取りません。2)unsigned intを返すと、-1は返されません。3)unsigned intは、すべてのアーキテクチャでsize_tと同じではありません(ARM Cortex-M3でマイクロコントローラープログラミングも行っています)。
十分な大きさのベクトルがある場合はどうすればよいですか?