복잡한 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);
};
하지만 처리기 지시문의 이러한 사용은 MACROS에서 허용되지 않습니다를 할 수있는 기능 1에 사용되는 필드 dbCurrency에 대한 말.
다음 링크 (및 그 이상)를 통과했지만 나에게 맞는 것을 찾지 못했습니다. Link1, Link2
우아한 방법으로이를 달성하는 방법에 대한 제안이 있으십니까?
아래 사람에 의해 설명 어떤 경우의 적용 범위를 보장하지 않습니다. – lilezek
구조체의 크기에 대해 [정적 어설트] (https://stackoverflow.com/questions/3385515/static-assert-in-c)를 사용할 수 있습니다. 예전 컴파일러를 사용하는 경우 네이티브 또는 롤백 할 수 있습니다 . – unwind
매크로를 사용하기보다는 (어색하거나 결정한 개발자가 제대로 사용하지 않을 수도 있음)'function1()'의 소스 코드와 헤더 파일을 입력하고 데이터 구조의 모든 멤버 값을 다음과 같이 설정하는지 확인하십시오. 헤더에 지정됩니다. 설정되지 않은 구성원이 있으면 적절한 메시지를 인쇄하고 오류 조건으로 종료하십시오. 그런 다음 헤더 파일이 변경 될 때마다 해당 프로그램을 실행하도록 빌드 스크립트를 설정하십시오. [필요한 경우 해당 프로그램 검사 전처리 원본]. – Peter