X 매크로

X macro

X 매크로는 데이터 또는 코드의 목록과 같은 구조를 생성하기 위한 프로그래밍 언어 매크로의 관용적인 사용입니다. 컴파일 시간과 같이 색인화를 통해 목록 중 적어도 일부를 구성할 수 없을 때 가장 유용합니다. 해당 항목을 동일한 순서로 선언하거나 실행해야 하는 병렬 목록을 안정적으로 유지 관리할 수 있습니다.

이러한 목록의 예로는 열거 상수 및 함수 프로토타입의 선언과 함께 배열의 초기화, 문 시퀀스 및 스위치 암의 생성 등이 있습니다.

X 매크로의 사용은 1960년대로 거슬러 올라갑니다.[1] 현대 C 및 C++ 프로그래밍 언어에서 유용하게 사용되지만 상대적으로 알려지지 않은 상태입니다.[2]

실행

X 매크로 애플리케이션은 두 부분으로 구성됩니다.

  1. 목록 요소의 정의입니다.
  2. 선언 또는 문 조각을 생성하기 위한 목록 확장입니다.

목록은 매크로 또는 헤더 파일(이름, 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 매크로 사용의 가독성을 향상시키기 위한 것입니다.

  1. 목록을 정의하는 매크로의 이름 앞에 "FOR_"를 붙입니다.
  2. 작업자 매크로의 이름을 목록 매크로에 입력합니다. 이 둘 다 잘 알려지지 않은 이름의 매크로(X)를 정의하는 것을 피하고 정의를 해제할 필요성을 완화합니다.
  3. 작업자 매크로에서 변수 매크로 인수 "..."에 대한 구문을 사용하여 필요 이상의 인수를 수용할 수 있습니다. 이를 통해 코드의 유지관리자는 모든 매크로 정의를 업데이트할 필요 없이 열을 목록에 추가할 수 있습니다.
  4. "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 ) } 

더보기

참고문헌

  1. ^ 마이어스, 랜디. 더 뉴 C: X 매크로. Dr.Dobb's 2001.
  2. ^ 밝게, 월터. X 매크로. 디지털 화성 2010
  3. ^ 루카스, 앤드류. X 매크로로 C 언어 코딩 오류를 줄입니다. Embedded.com 2013