티스토리 뷰

Language/C

[C언어] 매크로

Mr.SIM 2013. 10. 2. 13:39

C언어에서 매크로는 #define지시자를 통해 만들 수 있다.

매크로는 일반함수와는 다르게 프로그램이 컴파일 되기 전에 변경하게 된다.


다음과 같은 코드가 있다.

#include<stdio.h> 
#define CAL(x) x*2-1
      
int  main(){
	
	printf("%d\n", CAL(5) ); 

	return 0;
} 


이 코드를 컴파일하게 되면, 값이 printf("%d\n", x*2-1 ); 으로 변경된다.

하지만, 이 코드에는 문제가 있다.

만약, 다음과 같다면 어떻게 될까?

#include<stdio.h> 
#define CAL(x) x*2-1
      
int  main(){
	
	printf("%d\n", CAL(5) * CAL(5)); 

	return 0;
} 



보통 5*2-1 = 9이므로, 9*9 = 81을 예상하게 된다.

하지만, 매크로는 CAL(x)를 바로 x*2-1로 변경하는 것이다. 그렇기 때문에 x*2-1*x*2-1로 변경시키고, 

-1의 결과를 가져오게 된다.


이를 원하는 방향으로 출력하기 위해서는 맨 왼쪽과 오른쪽에 괄호를 붙이면된다.

#include<stdio.h> 
#define CAL(x) (x*2-1)
      
int  main(){
	
	printf("%d\n", CAL(5) * CAL(5)); 

	return 0;
} 

 

'Language > C' 카테고리의 다른 글

[C언어] void형 포인터  (0) 2013.10.02
[C언어] scanf와 scanf_s의 차이  (1) 2013.10.02
[C언어] #include < >와 #include " "  (0) 2013.10.02
[C언어] 가변인자  (0) 2013.10.02
[C언어] 함수 포인터 배열  (0) 2013.10.02
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
Total
Today
Yesterday