X 매크로

X Macro

X 매크로는 코드 및/또는 데이터의 병렬 목록을 안정적으로 유지하기 위한 기술로, 해당 항목을 동일한 순서로 선언하거나 실행해야 합니다.이러한 목록은 컴파일 시간과 같이 인덱싱으로 적어도 일부 목록을 구성할 수 없는 경우에 가장 유용합니다.

이러한 리스트의 예로는 특히 열거 상수 및 함수 프로토타입의 선언, 스테이트먼트 시퀀스 및 스위치 암의 생성 등을 들 수 있다.

X 매크로의 사용은 1960년대까지 [1]거슬러 올라갑니다.는 현대의 C C++ 프로그래밍 언어에서도 여전히 유용하지만,[2] 상대적으로 알려지지 않은 상태로 남아 있습니다.[3]

실행

X 매크로 애플리케이션은, 다음의 2개의 부분으로 구성됩니다.

  1. 목록 요소의 정의입니다.
  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매크로 사용의 가독성을 향상시키는 것을 목적으로 하고 있습니다.

  1. 목록을 정의하는 매크로 이름 앞에 "FOR_"를 붙입니다.
  2. 워커 매크로의 이름을 목록 매크로에 전달합니다.이것에 의해, 불명확한 이름의 매크로(X)를 정의할 필요가 없어져, 정의를 해제할 필요가 없어집니다.정의 해제의 필요성이 경감됩니다.
  3. 작업자 매크로에서 변수 매크로 "..." 구문을 사용하여 필요 이상의 인수를 수락할 수 있습니다.이를 통해 코드 유지관리자는 모든 매크로 정의를 업데이트하지 않고도 목록에 열을 추가할 수 있습니다.
  4. 매크로 이름으로서 「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 ) } 

추가 정보

레퍼런스

  1. ^ 마이어스, 랜디새로운 C: X 매크로돕 박사의 2001년.
  2. ^ 똑똑해요, 월터X 매크로디지털 Mars 2010
  3. ^ 루카스, 앤드류X 매크로를 사용하여 C 언어 코딩 오류를 줄입니다.Embedded.com 2013