X 매크로
X macroX 매크로는 데이터 또는 코드의 목록과 같은 구조를 생성하기 위한 프로그래밍 언어 매크로의 관용적인 사용입니다. 컴파일 시간과 같이 색인화를 통해 목록 중 적어도 일부를 구성할 수 없을 때 가장 유용합니다. 해당 항목을 동일한 순서로 선언하거나 실행해야 하는 병렬 목록을 안정적으로 유지 관리할 수 있습니다.
이러한 목록의 예로는 열거 상수 및 함수 프로토타입의 선언과 함께 배열의 초기화, 문 시퀀스 및 스위치 암의 생성 등이 있습니다.
X 매크로의 사용은 1960년대로 거슬러 올라갑니다.[1] 현대 C 및 C++ 프로그래밍 언어에서 유용하게 사용되지만 상대적으로 알려지지 않은 상태입니다.[2]
실행
X 매크로 애플리케이션은 두 부분으로 구성됩니다.
- 목록 요소의 정의입니다.
- 선언 또는 문 조각을 생성하기 위한 목록 확장입니다.
목록은 매크로 또는 헤더 파일(이름, LIST)는 자체적으로 코드를 생성하지 않고 매크로(클래식 이름)의 호출 시퀀스로 구성됩니다.X") 원소들의 데이터와 함께. 각 확장 LIST 에 대한 정의가 선행됩니다. X 목록 요소의 구문을 사용합니다. 의 호출. LIST 확장되는 X 목록의 각 요소에 대해.
예1
이 예제에서는 변수 목록을 정의하고 자동으로 선언문과 출력 기능을 생성합니다.
먼저 목록 정의입니다. 목록 항목에는 여러 인수가 포함될 수 있지만 여기서는 변수 이름만 사용됩니다.
#LIST_OF_Variables 정의 \ X(value1) \ X(value2) \ X(값3) 그런 다음 이 목록을 확장하여 변수 선언을 생성합니다.
#이름에 X(이름)을 정의합니다. LIST_OF_변수 #undef X 비슷한 방법으로 변수와 변수 값을 출력하는 함수를 생성할 수 있습니다.
공허한 프린트_(공허한) { #define X(name) printf(#name" = %d\n, name); LIST_OF_변수 #undef X } C 전처리기를 거치면 다음과 같은 코드가 생성됩니다. 선 끊어짐 및 들여쓰기가 전처리기에서 실제로 생성되지는 않더라도 읽기 쉽도록 추가되었습니다.
인트의 value1; 인트의 value2; 인트의 value3; 공허한 프린트_(공허한) { 활자로 인쇄한("value1" " = %d\n", value1); 활자로 인쇄한("value2" " = %d\n", value2); 활자로 인쇄한("value3" " = %d\n", value3); } X 매크로를 인수로 사용한 예제 2
이 예는 X 매크로 사용의 가독성을 향상시키기 위한 것입니다.
- 목록을 정의하는 매크로의 이름 앞에 "FOR_"를 붙입니다.
- 작업자 매크로의 이름을 목록 매크로에 입력합니다. 이 둘 다 잘 알려지지 않은 이름의 매크로(X)를 정의하는 것을 피하고 정의를 해제할 필요성을 완화합니다.
- 작업자 매크로에서 변수 매크로 인수 "..."에 대한 구문을 사용하여 필요 이상의 인수를 수용할 수 있습니다. 이를 통해 코드의 유지관리자는 모든 매크로 정의를 업데이트할 필요 없이 열을 목록에 추가할 수 있습니다.
- "DO"라는 이름을 매크로 이름으로, 목록 매크로의 인수로 사용합니다.
#FOR_LIST_OF_Variables(DO) 정의 \ DO(id1, name1) \ DO(id2, name2) \ DO(id3, name3) \ 위와 같이 이 목록을 실행하여 변수 선언을 생성합니다.
#define_DEFINE_NAME_VAR(id, name, ...) intname; FOR_LIST_OF_변수( DEFINE_NAME_VAR ) 열거를 선언합니다.
#define DEFAIN_ENUMERATION(id, name, ...) name = id, 열거한 my_id_list_type { FOR_LIST_OF_변수( DEFINE_ENUMIERATION ) } 비슷한 방법으로 변수와 변수 이름을 인쇄하는 함수를 생성할 수 있습니다.
공허한 프린트_(공허한) { #define PRINT_NAME_AND_VALUE(id, name, ...) printf(#name" = %d\n, name); FOR_LIST_OF_변수( 인쇄_NAME_AND_VALUE ) }