ホームページ  >  記事  >  バックエンド開発  >  C言語でtypedefは何を意味しますか

C言語でtypedefは何を意味しますか

hzc
hzcオリジナル
2020-07-01 15:32:5722853ブラウズ

Typedef は C 言語のキーワードです。その機能は、データ型の新しい名前を定義することです。ここでのデータ型には、内部データ型 [int、char など] とカスタム データ型 [stuct、等】。

C言語でtypedefは何を意味しますか

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。