ホームページ >バックエンド開発 >C++ >ポインターメンバーに指定された初期化子を使用して C 構造体を初期化できますか?

ポインターメンバーに指定された初期化子を使用して C 構造体を初期化できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-02 02:20:30935ブラウズ

Can C   Structures Be Initialized Using Designated Initializers for Pointer Members?

C 構造体の初期化

次の構文を使用して C で構造体を初期化できるかどうかが疑問視されています。

struct address {
    int street_no;
    char *street_name;
    char *city;
    char *prov;
    char *postal_code;
};

address temp_address = { .city = "Hamilton", .prov = "Ontario" };

一部の情報源では、このスタイルは C でのみサポートされていると示唆されていますが、これは完全に正確ではありません。

技術的な制限

C は、指定された形式を使用した構造体の初期化をサポートしていますが、初期化子には技術的な制限があります。指定された初期化は、ポインターまたは参照であるメンバーに対してはサポートされません。提供されている例では、street_name、city、prov、および postal_code はすべてポインターであるため、指定された初期化構文を使用してこれらのメンバーを初期化することはできません。

ベスト プラクティスと読みやすさ

指定された初期化構文は明確な読みやすさを提供しますが、一般に、デフォルトのコンストラクターと明示的なメンバー初期化の組み合わせを使用して構造体を初期化することがベスト プラクティスと考えられています。これにより、どのメンバーを明示的に初期化し、どのメンバーを初期化しないままにするかを指定できます。

たとえば、次のように temp_addres 構造体を初期化できます。

address temp_addres = {
  0,  // street_no
  nullptr,  // street_name
  "Hamilton",  // city
  "Ontario",  // prov
  nullptr,  // postal_code
};

このアプローチでは、次のようにして明確に読みやすくします。コメントを使用して各メンバーとその値を識別します。さらに、明示的に初期化されていないポインタは安全のために nullptr に設定されます。

以上がポインターメンバーに指定された初期化子を使用して C 構造体を初期化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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