問題タブ [stdint]
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 - C コードの型をリファクタリングするためのツール
C コードの型 (!) をリファクタリングできるツールを探しています。
複雑で比較的大きなコードベースがあり、組み込みの整数型から明示的な幅を持つ型に切り替えることにしました。「 unsigned int 」のすべてのインスタンスを「uint32_t」に変更するなど。
たとえば、名前をリファクタリングするためのツールがたくさんあることは知っていますが、タイプを完全にリファクタリングできるツールはありません。たとえば、Visual Assist は "long" を単一のトークンとしてリファクタリングできる場合がありますが、"unsigned long" はリファクタリングできません。
c++ - uintptr_t が stdint.h で定義されているかどうかを知る移植可能な方法はありますか?
プリアンブル: ポインターを整数型に変換したい (アライメントをチェックするなど)。uintptr_t
正しい型のようですが、C++ (または C++11) ではなく、C でのみ保証されています。
次のコードの場合:
2 つの質問:
- 置いたところに使える魔法と約束の言葉はあり
I_WONDER_IF_UINTPR_T_IS_DEFINED
ますか? - 私はそれを使用
unsigned long
して忘れるべきですか?
生成されたアセンブリ (uintptr_t が利用可能な場合): http://goo.gl/4feUNK
注 1: C++11alignof
の代わりに使用する必要があるsizeof
ことを認識しています 注 2: この議論を認識しています: <cstdint> vs <stdint.h>
c - stdint.h の int32_t 、 uint16_t .... とは
int32_t と uint16_t は何を参照していますか?
そしてそれらは何ですか:マクロ、データ型...
そして、どこでそれらを使用できますか?
c - ヘッダー ファイルに stdint.h をインクルードすると、clock_gettime() でコンパイルが中断する
私のCファイルはclock_gettime()
. これが機能するためには、man ページに従って、 が
含まれて<time.h>
おり、 に定義_POSIX_C_SOURCE
されています。(200112L)
次のオプションを使用してコンパイルおよびリンクします。
、およびPROJ_SETTINGS_INC
設定を含む h ファイルに設定されます。
これまでのところ、問題ありません。
ここで、設定ファイルを変更して を使用するuint16_t
ので<stdint.h>
、設定 h ファイルに含めます。
clock_gettime()
コンパイラは、それが暗黙の宣言であると不平を言うようになりました。
設定ファイルをint
の代わりに使用するように戻し、uint16_t
インクルードを に削除すると<stdint.h>
、コンパイルが再び機能します。
<stdint.h>
設定に h ファイルを含めると、なぜでのコンパイルが中断されるのclock_gettime()
ですか?
私の最善の推測は、stdint
定義を再定義することですが、ソースの最初の行でインクルードが行われたかのようにディレクティブが機能POSIX
するため、意味がありません。-include
ここに例があります(ジョン・ボリンジャーの答えに照らして、何がうまくいかないのか理解し始めましたが、とにかくこれを書くと思いました)。
bar.h:
foo.c
ビルド:
奇妙なことに、これは有用な警告を与えます。私の元のアプリケーションでは、暗黙の宣言エラーのみが発生しました。
c - ユーザー入力に応じて特定の幅変数を宣言する最良の方法
以下に示すようなコードがあります。ここのコードは、word_size = 64
. 同様に、32 と 16 も必要です。encrypt
すべてのサイズで同じ関数を再利用する方法が見つかりません。さらに、word_size に従って変数も宣言する必要があります。uint_16
またはuint_32
またはのどちらを使用するかuint_64
は、word_size によって異なります。この場合、再利用可能なコードを書くのを手伝ってもらえますか?
必要に応じて、さらに情報を提供できます。
c - int32_t からバイトのブロックを抽出し、c を使用して int16_t または int8_t に格納するにはどうすればよいですか?
たとえば、次のようにします。
最上位2バイトを次のように格納したいint8_t
:
または、次の 4 つの最上位バイトint16_t
:
これどうやってするの?
c++ - GCC が __INT8_MIN__ ではなく __INT8_MAX__ のみを定義するのはなぜですか?
GCC の定義済みマクロには が含まれていますが、含まれて__INT8_MAX__
いません__INT8_MIN__
。
INT8_MIN
で定義されstdint.h
てい(-__INT8_MAX - 1)
ます。
GCC は、システムが 2 の補数であると想定していますか? は、1 の補数システムと 2 の補数システムの両方で機能するため(INT8_MAX +1)
、より良い定義方法だと思います。最適なのはコンパイラ提供のです。INT8_MIN
__INT8_MIN__
gcc が提供しないのはなぜ__INT8_MIN__
ですか?
私は実際に 2 の補数を使用しないシステムを持っていないので、使用に問題はありませんが、ただ興味があります。
c++ - SIZE_MAX を定義する C++ 標準ヘッダーはどれですか?
私は、たまたまSIZE_MAX
いくつかの場所で使用されている既存の C++ コードベースに取り組んでいます。いくつかのリファクタリングを行いSIZE_MAX
ましたが、モジュールの 1 つで定義されていません。この問題は、Travis-CIが Linux でプロジェクトをビルドしようとしたときに発生しました。リファクタリングする前は問題なく動作していましたが、どのヘッダー ファイルが含まれていたかを正確に追跡することは困難です。
問題をローカルで再現しようとして、デフォルトの gcc を使用して Ubuntu VM をインストールし、再現することができました。関連するソースは次のとおりです。
コマンド ラインは次のとおりです。
エラーは次のとおりです。
システム情報:
cstdint
、stdint.h
、limits.h
、inttypes.h
、stdio.h
、stdlib.h
およびおそらく他のいくつかを含めようとしましたが、 に必要な特定のヘッダー ファイルがわかりませんSIZE_MAX
。
私が取り組んでいるプログラムは、SIZE_MAX
いくつかの変更を加える前に、さまざまな場所で使用され、正常にコンパイルされたことに注意することが重要です。私が行った変更により、それが使用された1 つの ソース ファイルで未定義になりました.cpp
(他のファイルは引き続き問題ありません)。したがって、私のシステムには、正しく定義されているヘッダー ファイルがいくつか存在します。