2011-02-08 5 views

답변

2

사용량이이고 매크로에 c이 사용되지 않았으므로 매크로에 오타가있는 것 같습니다. 대신 int를 사용, 그것은 c 말을해야 : 사실

#define swap(a,b,c)(c t;t=a;a=b;b=t;); 

을,이 "수정"당신에게 매크로의 일반적인 아이디어를 줄 것이다, 그것은 컴파일되지 않습니다있다. 올바르게 작성하는 방법을 알려주는 Peyman's answer을 참조하십시오.

기본적으로 두 개의 변수 a, bc으로 바꿔주는 것처럼 보입니다. 귀하의 경우에는

출력은 다음과 같습니다이 교환 알고리즘이 작동

20 10 

방법은 간단합니다. 기본적으로 ab으로 복사하고 ba으로 복사하려고합니다. 그러나 ba에 복사하면 a을 잃게되고 b의 사본 2 개가 붙어 있습니다. 대신 단지 ab을 복사

, 당신은 먼저 다음 b로 (a의 원래 값을 유지하는) t 복사, ab 복사, t라는 임시 변수a의 사본을 저장합니다. 작업이 완료되면 t을 잊어 버릴 수 있습니다. 더 나은

+0

괄호 안에 명령문을 넣거나 표현식에 변수를 선언 할 수 없습니다. 매크로는 좀 더 많은 작업이 필요합니다. –

+0

@Chris : 물론, 당신은 절대적으로 옳습니다. 나는 내 대답을 참고할 것입니다. 대답을 컴파일하는 방법에 대해 설명하는 동안, 제 방식은 어떻게 작동하는지 조금 더 자세히 보여줍니다. –

+0

@Chris : 분명히, 나는 당신이 질문에 대답하지 않았기 때문에 당신의 것이 아니라, Peyman 's를 의미합니다. –

6

과 같이 매크로를 다시 쓰기 :

#define swap(a, b, type) \ 
     do { \ 
       type t = a; \ 
       a = b; \ 
       b = t; \ 
     } while (0) 
+0

"더 나은"것은 아닙니다 _ _ 필요한 _. OP 매크로는 컴파일되지 않아야합니다. –