언어 매크로 C, 조건부 컴파일

마무리 노트 :

매개 변수를 사용하여 C 언어 매크로 정의

 

매크로 정의

매크로의 일반적인 형태는 다음과 같이 정의된다 :
#DEFINE 매크로 이름 문자열 또는 식
전처리 대체하는 매크로 이름은 대응하는 문자열 표현으로 대체된다.

매크로 정의 문자열 :

#DEFINE 매크로 이름 문자열

20 N ;, N은 100로 대체 + =이 예에서는 문 INT 합

#INCLUDE <STDIO.H>
 #DEFINE N 100
 INT 의 main () {
     INT의 합 = 20 + N; 
    의 printf ( " 가 % d \ n " , 합);
    반환  0 ; 
}

매크로 정의 표현 :

#DEFINE   매크로 이름 (표현)
#INCLUDE <STDIO.H>
 #DEFINE M (N * N * N + 3)
 INT 의 main () {
     INT 합계 N; 
    의 printf ( " 입력 할 번호 : " ); 
    scanf와 ( " %의 D ' , N);  = 3 * M + 4 * M + 5 * M; 
    인 printf ( " 합 % D \ n = ' , 합);
    반환  0 ; 
}

참고 : 매크로 정의는 괄호 안에 표현해야합니다

매크로 정의에 대한 일부 설명

1) 매크로 정의 매크로 이름은 시간 및 매크로 이름 문자열 치환 매크로 확장에 나타내는 문자열이이 단순한 원유 대체된다. 잘못 만 매크로 확장을 컴파일 된 소스 프로그램에서 발견되는 경우 등 계산서, 기능, 그것은 어떤 전처리 검사를하지 않는 경우 문자열은 모든 문자를 포함 할 수 있습니다, 그것은 상수 표현식이 될 수 있습니다.

2) 설명되지 않은 또는 매크로 정의 문, 라인의 끝은 심지어 세미콜론 (;)으로 대체 될 세미콜론으로 세미콜론을 필요가 없습니다.

3) 매크로 정의는 함수 외부 기록해야 그 범위가 매크로 명령의 정의는 소스 종료한다. 범위 명령 #undef를 사용을 종료합니다. 예를 들어
그것은 메인 무효 FUNC ()에 효율적으로 만 PI () 함수를 나타낸다.

#DEFINE PI 3.14159
 INT 주 () {
     // 코드 
    반환  0 ; 
} 
#undef를 PI
 무효 FUNC () {
     // 코드 
}

코드 따옴표 매크로 이름에 의해 둘러싸인 경우 4) 매크로 전처리 대신 이루어질 없다.

5) 내포 매크로 정의 매크로 이름 매크로 처리기의 층에 의해 확장 교체 매크로 정의에 정의 된 상기 문자열에 사용될 수 있습니다. 예를 들면 :

#DEFINE PI 3.1415926
 #DEFINE S * Y Y * PI / PI는 * 매크로 이름 * / 정의 
문에 대해 : 
의 printf ( " % F ' , S)을, 
매크로 교체 된 후 : 
에서 printf ( " % F " , 3.1415926 * Y * Y);

대문자 6) 관습 매크로 이름, 변수에 따라서 차이. 뿐만 아니라 소문자를 할 수 있습니다.

사용 가능한 매크로의 종류, 쉽게 쓰기를 나타내는 7) 데이터입니다. 예를 들면 :

#DEFINE UINT 부호 INT

변수 선언과 같은 프로그램에서 사용할 수 UINT :

UINT의 A, B;

또한 주목된다 타입 정의 데이터를 이용하여 매크로 정의 타입 정의 지정자를 사용 차이를 나타내는 데이터. 문자열 매크로 정의 단순히 프로세스 프리 프로세서에 의해 대체 및 형식 정의는 컴파일러에 의해 컴파일 동안 처리하고, 그 새로운 이름을 시작 일본어 단순 문자열 치환, 데이터 유형이 아닌, 그것은 새로운 데이터 유형으로.


매개 변수 매크로 정의


C 언어는 인수 매크로를 할 수 있습니다. 매크로 정의 매개 변수에서 "실제 매개 변수"라고 매크로 호출에서 "형식 매개 변수"매개 변수라고하며이 다소 유사한 기능입니다 있습니다.

뿐만 아니라 배포 중에 매크로 인수는 문자열을 대체 할뿐만 아니라 매개 변수의 인수를 대체 할 수 있습니다.

: 파라미터로서 매크로 정의의 일반적인 형태
#DEFINE 매크로 명 (변수 목록) 또는 스트링 표현식

문자열의 각 매개 변수를 포함 할 수 있습니다, 매개 변수 매개 변수 목록은 쉼표로 구분.

매크로 호출을 참조하여 일반적인 형태 :
매크로 이름 (인수리스트),
예를 들어 :

#DEFINE M (Y) + Y * Y * Y. 3 // 매크로 
// 코드 
K = M ( 5. ); // 매크로 호출

 

참고 :

#INCLUDE <STDIO.H>
 #DEFINE SQ (Y) (Y) * (Y)
 INT 의 main () {
     int로 A, 평방; 
    의 printf ( " 입력 숫자 : " ); 
    scanf와 ( " 가 % d " , & A ); 
    평방 = SQ (a + 1 ); 
    의 printf ( " 평방 % D = \ n " , 평방);
    반환  0 ; 
}
제곱 = (a + 1) * (a + 1) ;

결과 :

입력 A 번호 : 9
평방 = 100

#INCLUDE <STDIO.H>
 #DEFINE SQ (Y) Y는 Y *
 int로 (주) {
     int로 A, 평방; 
    의 printf ( " 입력 숫자 : " ); 
    scanf와 ( " 가 % d " , & A ); 
    평방 = SQ (a + 1 ); 
    의 printf ( " 평방 % D = \ n " , 평방);
    반환  0 ; 
}
제곱 = A + 1 * A + 1 ;

결과 :

입력 A 번호 : 9
평방 = 19

 

조건부 컴파일

⑴ # 경우 ... 다른 # ... 형식

 

의 #if의 판정 조건 
           코드 세그먼트. 1 개 
#else 
           코드 세그먼트 2 
#endif 다음 
또는 

# 만약 판정 조건 1 
           1 개 코드 세그먼트 
#elif 판정 조건 2 
           코드 세그먼트 2 
#else 
           코드 세그먼트. 3 
#endif 다음

기능 :와 다른 ... 표현이 동일한 경우 .... 진실과 거짓의 존재를 결정하는 적절한 장면은,이 조건은 일반적인 표현이다.


⑵ # IFDEF ... # 다른 사람 ... 또는 # ifndef가 ... # 다른 ... 형식

#ifdef와 식별 
           코드 세그먼트 1 
#else 
           코드 세그먼트 2 
#endif 다음 

또는 

#ifndef 식별자 
           코드 세그먼트 
#else 
           코드 세그먼트 2 
#endif 다음

기능 : 주요 조건 식별자 (#DEFINE 정의)에 정의되어 있는지를 판단한다.

실제로,이 프로젝트는 조건부 컴파일을 많이 사용합니다. 예를 들어, 다양한 하드웨어 플랫폼에서 조건부 컴파일을 사용, 조건부 컴파일을 통해 플랫폼과 제품 라인 관리를 달성하기 위해, 등등 조건부 컴파일에 의해 공식 버전과 디버그 버전을 구분하고, 할 수 있습니다.

 

조작법 전처리 부

지침
# 더미 명령, 효과의
소스 코드 파일 포함 사용법 #include
매크로 # 정의
정의 된 매크로 취소 #undef를
주어진 조건에 해당하는 경우의 #if는 아래의 컴파일러 코드
#ifdef와는 매크로가 정의되어 있지 않은 경우, 컴파일러 아래 코드
매크로가 정의되지 않은 경우 #ifndef, 아래의 컴파일러 코드
이전 조건이 true가 아닌 경우 주어진 #IF #elif는, 현재의 상태는 아래의 컴파일러 코드에 해당하는
A #의 #endif 다음 끝 경우 ...... # 다른 조건부 컴파일 블록

 

추천

출처www.cnblogs.com/-wenli/p/12459416.html