#define을 이용해 printf 출력하기
printf를 이용해 Hello, World!를 출력하는 코드를
#include <stdio.h>
int main()
{
printf("Hello, World!");
}
다음과 같이 #define을 이용해서 위 코드와 동일한 코드를 작성할 수 있다.
#include <stdio.h>
#define PRINT printf("Hello, World!");
int main()
{
PRINT;
}
#define을 이용해 함수 선언하기
1) square 함수
아래 코드는 parameter인 a를 제곱하여 반환해주는 square 함수에 대한 선언 및 호출 코드이다.
#include<stdio.h>
int square(int a)
{
return a * a;
}
int main()
{
int a;
scanf_s("%d", &a);
printf("%d\n", square(a));
}
다음과 같이 #define을 이용해서 위 코드와 동일한 코드를 작성할 수 있다.
#include<stdio.h>
#define SQUARE(X) X*X
int main()
{
int a;
scanf_s("%d", &a);
printf("%d\n", SQUARE(a));
}
하지만 다음과 같이 printf에 대한 코드를 수정했을 때 출력 값에 대한 오류가 발생하게 되는데
printf("%d\n", 100/SQUARE(a));
입력값
5
출력값
100
이는 단순히 100/SQUARE(a)의 연산이 100/X*X로 인식되어 100/5*5가 출력됐기 때문이다.
이 문제를 해결하기 위해 #define을 통해 정의한 SQUARE함수의 연산식에 괄호를 입력한다.
#define SQUARE(X) (X*X)
이후 다음과 같이 printf 코드를 수정했을 때, 또 값에 대한 오류가 발생한다.
어떠한 값을 입력하든 간에 -1가 출력된다.
printf("%d\n", SQUARE(a-1));
이 또한 SQUARE(a-1)식이 (a-1+a-1)로 인식되어 계산 결과인 -1이 출력됐기 때문이다.
이 문제를 해결하기 위해 다음과 같이 모든 매개변수에 대해 괄호를 입력하면 된다.
#define SQUARE(X) ((X)*(X))
최종적으로 다음과 같이 입력한 변수를 제곱해주는 SQUARE를 오류 없이 작성할 수 있다.
#include<stdio.h>
#define SQUARE(X) ((X)*(X))
int main()
{
int a;
scanf_s("%d", &a);
printf("%d\n", SQUARE(a));
}
2) max 함수
다음은 입력된 두 값에 대해 더 큰 값을 반환하는 MAX함수를 #define을 이용해 정의한 코드이다.
#include <stdio.h>
#define MAX(A,B) (((A)>(B))? (A):(B))
int main()
{
int a = 5, b = 10;
printf("%d\n", MAX(a, b));
}
다음과 같이 모든 매개변수에 ()를 입력해주어야 오류가 줄어듦에 유의하자!
#define MAX(A,B) (((A)>(B))? (A):(B))
3) for문
다음과 같이 for문에도 #define을 이용할 수 있다.
#include <stdio.h>
#define FOR(I,S,E) for(int I=S; I<=E; I++)
int main()
{
FOR(i, 1, 10)
{
printf("%d ", i);
}
}
하지만 좋은 코드는 아니므로 사용할 수 있다는 것에만 의미를 두도록 하자.
4) while문
#define LOOP while(true)
'C언어' 카테고리의 다른 글
파일 입출력 (0) | 2021.01.16 |
---|---|
비트 연산자(논리 연산자, Shift 연산) (0) | 2021.01.15 |