私は複雑なC構造のDATABSECONTEXTを持っています。 開発者は、この構造に異なるフィールドを追加し続けます。私たちは見直しして受け入れます。しかし時には同期の欠如があります。 複雑なルーチンfunction1()があり、異なるフィールドにアクセスして処理する必要があります。したがって、もしfunction1()で気にかけられていなければ、構造体に新たに追加されたフィールドがあれば、それはNULLのままになります。これは一貫性のない状態であり、後でクラッシュを引き起こします。Cの構造体にフィールドを追加する際に開発者に警告する方法、関連する関数を見直したりレビューする方法はありますか?
このDATABSECONTEXT構造体にいくつかのフィールドが追加されると、関連する関数function1()を再訪問するために、開発者に強制アラート/メッセージのメカニズムが必要です。
私はfunction1()で触れる各フィールドのマクロを持つヘッダーファイルを維持することを考えました。私は
headerfile1.h
#define dbCurrency_funciton1
field definition macro inside the structure can be modified as:
headerfile2.h
#define funname restruc
#define PASTER(x,y) x ## _ ## y
#define NAME(fun) PASTER(fun, funname)
#define MY_ELEMENT(dtype, mname) dtype mname;\
#ifndef (NAME(mname)) \
#error "please visit funciton1() and add macro @NAME(mname) in headerfile.h"
#endif
struct DATABSECONTEXT
{
MY_ELEMENT(char, newlyAddedElement);
};
を行うことができます)(FUNCTION 1で使用されるフィールドdbCurrencyのために言うが、プリプロセッサディレクティブのような使用は、マクロでは許可されません。
以下のリンクをたどっていますが(それ以上)、私のために何かを見つけることができませんでした。 Link1Link2
これをどのようにエレガントに達成するための提案ですか?
の下、みんなで記載される特定の例カバレッジを保証するものではありません。 – lilezek
古いコンパイラを使用している場合は、ネイティブまたはロールのいずれかの構造体のサイズに対して[静的アサート](https://stackoverflow.com/questions/3385515/static-assert-in-c)を使用できます。 – unwind
マクロを使用するのではなく(不器用な、あるいは決定した開発者が適切に使用しないかもしれない)、 'function1()'のソースコードとヘッダーファイルを入力し、データ構造のすべてのメンバーの値をヘッダーに指定されています。設定されていないメンバーがある場合は、適切なメッセージを出力し、エラー状態で終了します。次に、ヘッダーファイルが変更されるたびにそのプログラムを実行するようにビルドスクリプトを設定します。 [必要であれば、そのプログラムチェック前処理されたソース]。 – Peter