[고급 C++] 매크로함수
- 컴퓨터공학과/Programming
- 2020. 11. 2.
매크로 함수 |
매크로함수
형식
#define 매크로함수(인자리스트) 대치내용
장점
- 매크로 함수는 자료형에 독립적
- 실행속도가 일반함수보다 빠름
- 함수 호출 문장이 전부 매크로 함수 몸체 부분으로 치환되어 코드 크기가 커짐
단점
- 매크로 함수는 매크로 대치이므로 의도치 않은 결과를 가져올 수 있음
- 매크로 함수에서 증감연산자 사용하면 안됨
예시
1 #include <stdio.h> |
input number?5 |
* 의도치 않은 동작
10 printf("%d, square: %d \n", num, square(num+2)); => 49
11 printf("%d, SQUARE: %d \n", num, SQUARE(num+2)); => 5+2*5+2 = 17
→ 괄호로 묶어야함
1 #include <stdio.h> |
max : 80, x : 21, y : 81 |
매크로 함수 연산자
#
변수명 그대로 사용
##
두개의 토큰을 하나의 토큰으로 결합해주는 선행처리기
- 동적 선언 가능
#include<stdio.h>
#define MACRO1(x) printf("%s 의값은 %d 이고, 제곱은 %d이다. \n", #x, x, x*x)
#define INT_vari(N) int vari##N = N
#define VARI(N) vari##N
int main()
{
int num = 5;
INT_vari(2);
INT_vari(4);
INT_vari(6);
MACRO1(num);
printf("\n2+4+6 = %d \n", VARI(2)+VARI(4)+VARI(6));
return 0;
}
num 의값은 5 이고, 제곱은 25이다. |
매크로함수 응용
swap 함수
#include <stdio.h>
#define swap(x, y) {x ^= y; y ^= x; x ^= y; }
int main()
{
int x = 5, y = 6;
printf("Before x : %d, y : %d \n", x, y);
swap(x, y);
printf("After x : %d, y : %d \n", x, y);
return 0;
}
Before x : 5, y : 6 |
특정비트 on/off
3 #define GET_BIT(x, y) (((unsigned int) (x) >> (y)) & 0x01) |
scanf() 데이터 입력구분자 변경
1 #include <stdio.h> |
input string ? one two |
1 #include <stdio.h> 2 3 int main() 4 { 5 char str[10]; 6 7 printf("input string ? "); 8 scanf("%9[^\n]s", str); // 입력종료는 엔터로, 9글자 9 printf("str : %s \n", str); 12 return 0; 13 } |
input string ? one two |
더 많은 시리즈 보기
[고급 C++]C컴파일러와 C라이브러리(공유/정적/동적라이브러리)
[고급 C++]포인터 1편(프로세스/포인터변수/포인터연산/NULL포인터)
[고급 C++]포인터 3편(배열 포인터/포인터 배열/문자열 상수 포인터)
[고급 C++]포인터 4편(다중 포인터/함수 포인터/void형 포인터)
[고급 C++] 가변인자 / CERT C (feat. 안전 코딩하기)
[고급 C++] 공용체와 구조체 비트필드 + 바이트 오더링 / 활용
궁금한 사항은 댓글로 남겨주세요💃💨💫
좋아요와 구독(로그인X)은 힘이 됩니다 🙈🙉
'컴퓨터공학과 > Programming' 카테고리의 다른 글
[C언어] 특정 문자로 문자열 자르기 - Split 구현 (1) | 2023.02.25 |
---|---|
[고급 C++] 비트연산자 (0) | 2020.11.02 |
[고급 C++] 공용체와 구조체 비트필드 + 바이트 오더링 / 활용방안 (1) | 2020.11.02 |
[고급 C++] 구조체와 구조체포인터 (0) | 2020.10.27 |
[고급 C++] 가변인자 / CERT C (feat. 안전 코딩하기) (1) | 2020.10.26 |