Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Algospot
- php
- dfs
- JavaScript
- sorting
- BASIC
- Math
- String
- udemy
- server
- BOJ
- 따배씨
- 백준
- Cleancode
- graph
- 생활코딩
- 종만북
- C언어
- web
- Algorithm
- BFS
- Python
- 따라하며 배우는 C언어
- 따라하면서 배우는 C언어
- C
- DP
- 정수론
- 인프런
- programmers
- greedy
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 16.4 함수 같은 매크로 본문
따배씨 - 따라하며 배우는 C언어
16강 전처리기와 라이브러리
16.4 함수 같은 메크로
#include <stdio.h>
/*
Function-like macros
#define ADD(X,Y) ((X) + (Y))
X and Y : macro arguments
*/
#define ADD1(X,Y) X+Y
#define ADD2(X,Y) ((X)+(Y))
#define SQUARE(X) X*X // ((X)*(X))
int main()
{
int sqr = SQUARE(3);
int a = 1;
printf("%d\n", 2 * ADD1(1, 3)); // 2 * X + Y = 2 * 1 + 3 = 5 //WRONG!!
printf("%d\n", 2 * ADD2(1, 3)); // 2 * (1 + 3) = 8
printf("%d\n", SQUARE(1 + 2)); // 1+2*1+2 = 1 + 2 + 2 = 5 //WRONG!!
printf("%d\n", 100 / SQUARE(3 + 1)); // 100 / 3 + 1 * 3 + 1 = 33 + 3 + 1 = 37 // WRONG!!
printf("%d\n", SQUARE(++a)); // ++a * ++a = 2 * 3 = 6 //DANGEROUS!
return 0;
}
- Function-like Macros 는 연산의 순서가 예상과 다를 경우가 발생할 수 있으므로 주의
#include <stdio.h>
/*
Stringizing operator #
- converts macro parameters to string literals
*/
#define SQUARE(X) (X)*(X)
#define PRINT_SQR1(x) printf("The square of %d is %d\n", x, SQUARE(x))
#define PRINT_SQR2(x) printf("The square of " #x " is %d\n", SQUARE(x))
/*
## operator combines two tokens into a single token
*/
#define XNAME(n) x ## n
#define PRT_XN(n) printf("x" #n " = %d\n", x ## n);
int main()
{
PRINT_SQR1(10);
// The square of 10 is 100
PRINT_SQR2(10);
// The square of 10 is 100
printf("\n");
int XNAME(1) = 1; // int x1 = 1;
int XNAME(2) = 2; // int x2 = 2;
PRT_XN(1); // printf("x1 " = %d\n", x1);
// x1 = 1
PRT_XN(2); // printf("x2 " = %d\n", x2);
// x2 = 2
return 0;
}
#define PRINT_SQR2(x) printf("The square of " #x " is %d\n", SQUARE(x))
PRINT_SQR2(10);
// The square of 10 is 100
- 입력받은 x 를 프로그래머가 타이핑 한 것처럼 문자열 처리
#define XNAME(n) x ## n
int XNAME(1) = 1;
// int x1 = 1
// XNAME(1) == x1
- x 는 유저가 타이핑 한 것, n 은 입력받은 것으로 처리
/*
Macro or Function ?
- no space in the macro name
- Use parentheses
- Use captital letters for macro function names
- Speed up?
*/
#define MAX(X, Y) ((X) > Y ? (X) : (Y))
#define MIN(X, Y) ((X) < Y ? (X) : (Y))
#define ABS(X) ((X) < 0 ? -(X) : (X))
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
http://www.inflearn.com/course/following-c
'Language > C' 카테고리의 다른 글
[따배씨] 16.6 #include 와 헤더파일 (0) | 2021.08.22 |
---|---|
[따배씨] 16.5 가변 인수 매크로 (0) | 2021.08.12 |
[따배씨] 16.3 #define 매크로 (0) | 2021.08.05 |
[따배씨] 16.2 전처리기를 준비하는 번역 단계 (0) | 2021.08.04 |
[따배씨] 16.1 전처리기가 해주는 일들 (0) | 2021.08.03 |
Comments