X 매크로
X MacroX 매크로는 코드 및/또는 데이터의 병렬 목록을 안정적으로 유지하기 위한 기술로, 해당 항목을 동일한 순서로 선언하거나 실행해야 합니다.이러한 목록은 컴파일 시간과 같이 인덱싱으로 적어도 일부 목록을 구성할 수 없는 경우에 가장 유용합니다.
이러한 리스트의 예로는 특히 열거 상수 및 함수 프로토타입의 선언, 스테이트먼트 시퀀스 및 스위치 암의 생성 등을 들 수 있다.
X 매크로의 사용은 1960년대까지 [1]거슬러 올라갑니다.이는 현대의 C 및 C++ 프로그래밍 언어에서도 여전히 유용하지만,[2] 상대적으로 알려지지 않은 상태로 남아 있습니다.[3]
실행
X 매크로 애플리케이션은, 다음의 2개의 부분으로 구성됩니다.
- 목록 요소의 정의입니다.
- 선언 또는 문의 fragment를 생성하기 위한 목록 확장.
목록은 매크로 또는 헤더 파일(이름 지정,LIST
코드 자체를 생성하지 않고 매크로의 일련의 호출로 구성됩니다(고전적으로 "라는 이름).X
")의 데이터를 표시합니다.의 각 확장LIST
의 정의가 선행된다.X
구문을 지정합니다.의 기동LIST
확장X
를 참조해 주세요.
예 1
이 예에서는 변수 목록을 정의하고 해당 선언과 해당 선언을 출력하는 함수를 자동으로 생성합니다.
먼저 목록의 정의입니다.목록 엔트리에 여러 인수를 포함할 수 있지만 여기서는 변수 이름만 사용됩니다.
#정의 LIST_OF_VARIES \ X(값 1) \ X(값 2) \ X(값 3)
다음으로 다음 목록을 실행하여 변수 선언을 생성합니다.
# X(이름) int name 정의; 목록_OF_변수 #미정의 X
마찬가지로 변수와 변수 이름을 인쇄하는 함수를 생성할 수 있습니다.
무효 print_module(무효) { #125 X(이름) printf(#name " = %d\n", 이름); 목록_OF_변수 #미정의 X }
C 프리프로세서를 실행하면 다음 코드가 생성됩니다.줄 바꿈 및 들여쓰기는 실제로 프리프로세서에 의해 생성되지 않지만 읽기 쉽게 추가되어 있습니다.
인트 값 1; 인트 값 2; 인트 값 3; 무효 print_module(무효) { 인쇄물('값 1' " = %d\n", 값 1); 인쇄물('값 2' " = %d\n", 값 2); 인쇄물("값 3" " = %d\n", 값 3); }
예 2: X 매크로를 인수로 사용)
이 예에서는, 다음의 조작에 의해서, X매크로 사용의 가독성을 향상시키는 것을 목적으로 하고 있습니다.
- 목록을 정의하는 매크로 이름 앞에 "FOR_"를 붙입니다.
- 워커 매크로의 이름을 목록 매크로에 전달합니다.이것에 의해, 불명확한 이름의 매크로(X)를 정의할 필요가 없어져, 정의를 해제할 필요가 없어집니다.정의 해제의 필요성이 경감됩니다.
- 작업자 매크로에서 변수 매크로 "..." 구문을 사용하여 필요 이상의 인수를 수락할 수 있습니다.이를 통해 코드 유지관리자는 모든 매크로 정의를 업데이트하지 않고도 목록에 열을 추가할 수 있습니다.
- 매크로 이름으로서 「DO」라고 하는 이름을 사용합니다.이것은 목록 매크로에 대한 인수입니다.
# FOR_LIST_OF_VARILE(DO)의 정의 \ DO(id1, name1) \ DO(id2, name2) \ DO(id3, name3) \
위와 같이 다음 목록을 실행하여 변수 선언을 생성합니다.
#DEFINE_NAME_VAR(ID, 이름 등) int name; FOR_LIST_OF_변수( 정의_이름_VAR )
또는 열거를 선언합니다.
#define_ENUMERATION(ID, 이름, ...) 이름 = id, 열거하다 my_id_list_type { FOR_LIST_OF_변수( 정의_Enumeration ) }
마찬가지로 변수와 변수 이름을 인쇄하는 함수를 생성할 수 있습니다.
무효 print_module(무효) { #print_NAME_AND_VALUE(ID, 이름, ...) printf(#name " = %d\n", 이름); FOR_LIST_OF_변수( PRINT_NAME_AND_VALUE ) }