ホームページ >バックエンド開発 >C#.Net チュートリアル >C言語でtypedefは何を意味しますか
Typedef は C 言語のキーワードです。その機能は、データ型の新しい名前を定義することです。ここでのデータ型には、内部データ型 [int、char など] とカスタム データ型 [stuct、等】。
Typedef は C/C の一般的な構文です。typedef の機能は次の 4 つのタイプに要約できます:
1. type Name
従来のアプリケーションで 2 つの文字ポインターを定義する場合は、次のコードを記述します: char *a, b
(1) char* a,b;
(2) char c='m';
(3) a=&c;
(4) b=&c;
上記のコードは間違っています。 a は文字ポインタであり、b は依然として文字変数です。マクロ定義は文字置換だけなので、#define によるマクロ定義はまだ無効です。
次のことが可能です:
(1)typedef char* PCHAR;
(2)PCHAR pa, pb;
2. クロスプラットフォーム移植
プログラムを作成する際、プラットフォームの移植要素を考慮する場合は、変数が占めるスペースや終了モードなど、ハードウェア層の違いをコードから抽象化する必要があります。
浮動小数点変数について考えてみましょう。ハードウェア プラットフォームが異なると、変数が占有するスペースが異なる場合があります。この場合、typedef を使用して別のヘッダー ファイルで定義できます。このヘッダー ファイルは純粋に抽象です。ハードウェア関連コンテンツ:
(1) typedef float REAL;
(2) typedef short int INT16;
(3) typedef int INT32
( 4)...
この場合、将来的にプログラムの移植を検討する場合は、ヘッダファイルの変更だけで済みます。
3. 複雑な宣言にエイリアスを与える
複雑な宣言は次の形式になります: void (*b[10]) (void (*)());
意味: まず、*b[10] はポインター配列であり、その中の 10 個の要素はすべてポインターです。これはどのような種類のポインタですか? それは、戻り値の型が null で仮パラメータが null の関数ポインタです。
この種の複雑な宣言は、typedef を使用して簡素化できます:
最初: 関数ポインタを後ろで宣言します:
(1) typedef void (pFunParam *)();
次に、前のポインター配列を宣言します:
(1) typedef void (*pFunx)(pFunParam);
元の宣言の簡略化されたバージョン:
pFunx b[10];
このドキュメントの作成プロセス中に、複雑なステートメントについて言及したオンライン ブログ typedef use
を参照しました:
(1) doube (*)() (*e)[9];
しかし、このステートメントは gcc でコンパイルすると通らないので、作者の本来の意図によれば、次のように宣言する必要があるようです。
##(1 )double (*(*e)[9])();e は 9 次元配列へのポインタです。配列は関数ポインタです。の仮パラメータです。関数ポインタは空で、戻り値の型は double です。 この場合、宣言を簡略化するためにそのような typedef を使用する必要があります: typedef (*(*ptr)[9])();推奨チュートリアル: "C言語チュートリアル>>
以上がC言語でtypedefは何を意味しますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。