본문 바로가기

컴퓨터/C

C Macro 매크로

I. 전처리기 지시자

#define

II. 매크로 상수 선언

#define PI 3.14

PI를 3.14로 치환한다.

※ 매크로 선언에는 ';'를 붙이지 않는다.

III. 매크로 함수 선언

#define SQUARE(x) x*x

매크로 함수는 자료형에 독립적이다. 함수의 호출 때문에 발생하는성능의 저하가 일어나지 않으니 실행 속도를 향상시킨다. 단, 함수 호출 문장이 전부 매크로 함수 몸체 부분으로 완전히 치환되어 버리기 때문에 코드의 크기는 커진다. 그래서 함수의 크기가 한 두줄 정도로 작으면 매크로 함수로 정의하면 좋다.

IV. 매크로 특징

  1 #include <stdio.h>
  2
  3 #define string "C++ Compatible C"
  4 #define cal (3*4)+(12/4)
  5
  6 #define ONE 1
  7 #define TWO ONE+ONE
  8 #define THREE TWO + ONE
  9
 10 int main() {
 11   printf("string: %s\n", string);
 12   printf("cal: %d\n", cal);
 13   printf("ONE=%d, TWO=%D, THREE=%D\n", ONE, TWO, THREE);
 14
 15   return 0;
 16 }

6,7,8: 이미 선언된 매크로를 다른 매크로 선언에서 사용할 수 있다.

8: 대체 리스트 영역에는 공백도 존재할 수 있다.

13: 문자열 내에서는 매크로에 의한 치환이 이뤄지지 않는다.

V. 문자열을 매크로 함수의 전달인자로 사용하기

#define ADD(x, y) printf("x+y=%d\n", x+y) //에러
#define ADD(x, y) printf(#x"+"#y"=%d\n", x+y) //가능. 전달인자 앞에 #을 붙이면 문자열화

VI. 토큰 결합

#define CONCAT(a, b) a ## b
...
printf("%d\n", CONCAT(2, 4));
...

VII. 표준 매크로

표준 매크로 의미
__FILE__ 현재 소스 코드의 파일명을 나타내는 문자열
__TIME__ 컴파일 시각을 "시: 분: 초"의 형태로 나타내는 문자열
__DATE__ 컴파일 날짜를 "년 월 일"의 형태로 나타내는 문자열
__LINE__ 현재 처리중인 소스파일의 행 번호를 나타내는 문자열

'컴퓨터 > C' 카테고리의 다른 글

C soket 소켓 생성 과정  (0) 2022.11.03
C module 모듈화  (0) 2022.11.02
C 실행 파일의 생성 순서  (0) 2022.11.01
C dynamic Allocation 메모리 동적 할당  (0) 2022.11.01
C 메모리  (0) 2022.11.01