導入
デニス・リッチーが C を作成したとき、彼は int (符号付き整数型) をデフォルトの型にしました。 int の サイズ (ビット数) は意図的に指定されていません。 C が標準化されたときでさえ、保証されているのは 最小 サイズだけでした。 その理論的根拠は、int のサイズは、特定の CPU における整数の「自然な」ワード サイズでなければならないということでした。
より小さい符号付き整数のみが必要で、少しスペースを節約したい場合は、Ritchie が短いものを教えてくれました。または、より大きな整数が必要な場合は、彼は long を提供してくれました。 (C99 では、long long を使用してさらに大きな整数が提供されました。) 符号なし整数のみが必要な場合は、宣言に unsigned を含めることができます。 C99 では、特定のサイズの符号付き整数型エイリアス (例: int32_t) と符号なし型エイリアス (例: uint32_t) も提供されました。
ただし、プログラミングでは、負の整数 (したがって符号付き整数型が必要) はほとんどの場合必要ありません。 文字列の長さ、オブジェクトの数、オブジェクトのサイズ、ファイルのサイズなどはすべて符号なしの整数です。 特定のサイズの型エイリアスは、符号付き整数よりもさらに少なくて済みます。
それでも、整数型を不適切に使用するコードを たくさん見てきました。 このようなコードは、読者 (数か月後のあなた自身を含む) に、不明確な情報や誤解を招く情報を伝える可能性があります。 適切な目的に応じて適切な整数型を選択することが最善です。
ガイドライン
整数型を選択するためのガイドラインは次のとおりです。
- メモリ内ののバイト数を表す場合は、size_t 標準型エイリアスを使用します。
これは、memcpy()、strlen()、std::string::size() など、C と C の標準ライブラリの両方で使用される型なので、前例がたくさんあります。
- ディスク上のファイルのサイズまたは位置を表す場合は、off_t POSIX タイプのエイリアスを使用します。
非常に大きなファイルを扱う場合、一部のプラットフォームでは、-D_FILE_OFFSET_BITS=64 を指定してコンパイルして off_t の 64 ビット バージョンを取得する必要がある場合があります。
- メモリ
- 内のオブジェクトの数を表すときは、size_t も使用します。 これは、C と C の標準ライブラリ (fread() や fwrite() など) の両方で使用される型でもあります。
- 特定のビット数内に含まれる値を表す必要がある場合、または特定の API に準拠する必要がある場合のみ
- 、符号付き型には int8_t、int16_t、int32_t、または int64_t 型のエイリアスのいずれかを使用します。または、符号なし型の uint8_t、uint16_t、uint32_t、または uint64_t 型エイリアスのいずれか。 通常、固定サイズの整数が
となるのは、値を「外部化」するとき、たとえばディスクに書き込むときやソケット経由で送信するときだけです。 実際には特定のビット数が必要ない場合に固定サイズの整数を使用すると、リーダーに誤った情報が伝達されます。
さらに:
- ポインターの
- 正確な
サイズである必要がある必要がある整数値を表す場合は、標準の intptr_t または uintptr_t 型エイリアスを使用します。
-
負の値が必要な場合にのみ、short、int、long、long long のいずれかを使用します。これより小さい値または大きい値が必要な場合を除き、int が優先されます。
最後に:
それ以外の場合は、同様に unsigned short、unsigned、unsigned long、または unsigned long long のいずれかを使用します。より小さい値またはより大きい値が必要な場合を除き、unsigned が優先されます。
- つまり、上記に挙げたケースのいずれかを扱っている場合を除き、デフォルトで符号なし型を使用します。
結論
適切な整数型を選択すると、リーダーに正しい情報が伝達され、実行時のチェックが不要になります。
エピローグ
元々、そして C99 までは、int は
暗黙的 型でした。つまり、型をまったく指定しなかった場合、それは int であると理解されていました。 例:
power( x, n ) /* x and n are int; returns int */ { int p; for ( p = 1; n > 0; --n ) p *= x; return p; }
関数プロトタイプは C から C89 にバックポートされましたが、オリジナルの「K&R スタイル」関数定義は C23 まで引き続き許可されていました。 ANSI C 委員会は保守的な集団です。
さらに奇妙なことに、C99 以前では、次のような宣言で int を暗黙的に指定することもできました。
i; // int i *p; // int *p *a[4]; // int *a[4] *f(); // int *f()
以上がC および C での適切な整数型の選択の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、c関数のリターンタイプ、基本(int、float、charなど)、派生(配列、ポインター、構造体)、およびvoid型を含む詳細を示します。 コンパイラは、関数宣言とreturnステートメントを介して返品タイプを決定し、強制します

GULCは、最小限のオーバーヘッド、積極的なインライン、およびコンパイラの最適化を優先する高性能Cライブラリです。 高周波取引や組み込みシステムなどのパフォーマンスクリティカルなアプリケーションに最適な設計では、シンプルさ、モジュールが強調されています

この記事では、C関数宣言と定義、引数の合格(価値とポインターによる)、返品値、およびメモリリークやタイプの不一致などの一般的な落とし穴について説明します。 モジュール性とProviの宣言の重要性を強調しています

この記事では、文字列ケース変換のC関数について詳しく説明しています。 ctype.hのtoupper()とtolower()を使用し、文字列を介して繰り返し、ヌルターミネーターを処理することを説明しています。 ctype.hを忘れたり、文字列リテラルを変更するなどの一般的な落とし穴は

この記事では、C関数の戻り値ストレージを調べます。 通常、リターン値は通常、速度のためにレジスタに保存されます。値が大きいと、ポインターをメモリ(スタックまたはヒープ)に使用し、寿命に影響を与え、手動のメモリ管理が必要になります。直接acc

この記事では、形容詞の「個別」の多面的な使用法を分析し、その文法機能、一般的なフレーズ(例:「はっきりと異なる」とは異なる」、およびフォーマルと非公式の微妙なアプリケーションを調査します。

この記事では、cの効率的なSTLアルゴリズムの使用について詳しく説明しています。 データ構造の選択(ベクトル対リスト)、アルゴリズムの複雑さ分析(STD :: STD :: STD :: PARTIAL_SORTなど)、イテレーターの使用、および並列実行を強調しています。 のような一般的な落とし穴

この記事では、C標準テンプレートライブラリ(STL)について説明し、そのコアコンポーネント(コンテナ、イテレーター、アルゴリズム、およびファンクター)に焦点を当てています。 これらが一般的なプログラミングを有効にし、コード効率を向上させ、読みやすさを改善する方法を詳述しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

メモ帳++7.3.1
使いやすく無料のコードエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール
