[解決済み] C 言語の構造体におけるデフォルト値
2023-02-28 17:31:27
質問
このようなデータ構造を持っています。
struct foo {
int id;
int route;
int backup_route;
int current_route;
}
と、それに対する変更を要求するために使用される update() という関数があります。
update(42, dont_care, dont_care, new_route);
これは本当に長く、もし私が構造体に何かを追加したら、update( ... )へのすべての呼び出しに 'dont_care' を追加しなければなりません。
代わりに構造体を渡すことを考えていますが、構造体に事前に 'dont_care' を記入することは、関数呼び出しでそれを綴ることよりもさらに面倒です。dont_care のデフォルト値で構造体をどこかに作成し、ローカル変数として宣言した後に、気になるフィールドを設定するだけでよいのでしょうか。
struct foo bar = { .id = 42, .current_route = new_route };
update(&bar);
表現したい情報だけをupdate関数に渡すには、どのような方法が最もエレガントでしょうか?
そして、他のすべてをデフォルトの-1(「気にしない」の秘密のコード)にしたいのです。
どのように解決するのですか?
マクロや関数 (すでに提案されているもの) は機能しますが (そして他のプラスの効果 (すなわちデバッグフック) もあるかもしれません)、それらは必要以上に複雑です。最もシンプルで、おそらく最もエレガントな解決策は、変数の初期化に使用する定数を定義することです。
const struct foo FOO_DONT_CARE = { // or maybe FOO_DEFAULT or something
dont_care, dont_care, dont_care, dont_care
};
...
struct foo bar = FOO_DONT_CARE;
bar.id = 42;
bar.current_route = new_route;
update(&bar);
このコードでは、インダイレクトを理解するための精神的なオーバーヘッドがほとんどありません。
bar
のどのフィールドを明示的に設定し、設定しないフィールドは(安全に)無視するのかが非常に明確です。
関連
-
error: '.' トークンの前にunqualified-idを指定する必要があります。
-
[C] Error [Error] 代入の左オペランドとして lvalue が必要です。
-
[解決済み] C関数から文字列を返す
-
[解決済み] HashSetの値を構造的に初期化する方法は?
-
[解決済み] C言語でのブーリアン値の使用
-
[解決済み] 構造体のsizeofは、なぜ各メンバーのsizeofの合計と等しくないのですか?
-
[解決済み] C言語標準に準拠した構造体の初期化方法
-
[解決済み] C言語でオブジェクト指向のコードを書くとしたら、どのようにすればよいのでしょうか?[クローズド]
-
[解決済み] なぜC言語では構造体を頻繁にtypedefする必要があるのですか?
-
[解決済み] C言語で "unsigned long "をprintfする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
[解決済み] C言語の構造体メンバのデフォルト値
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] ⑭と⑯は何のためにあるのですか?
-
[解決済み] CコードでEOFを表現する?
-
[解決済み] C 言語で const char* を char* に変換するには?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] 演算子 *, /, +, -, % を使わずに 3 で割る。
-
[解決済み] C 言語の配列へのポインタ/ポインタの配列の曖昧さ解消