#define swap(a,b,c)(int t;t=a;a=b;b=t;);
void main()
{
int x=10,y=20;
swap (x,y,int);
printf("%d %d\n",x,y);
}
출력은 무엇이며 그 이유는 무엇입니까?이 경우 전 처리기 지시문을 이해하고 있습니까?
#define swap(a,b,c)(int t;t=a;a=b;b=t;);
void main()
{
int x=10,y=20;
swap (x,y,int);
printf("%d %d\n",x,y);
}
출력은 무엇이며 그 이유는 무엇입니까?이 경우 전 처리기 지시문을 이해하고 있습니까?
사용량이이고 매크로에 c
이 사용되지 않았으므로 매크로에 오타가있는 것 같습니다. 대신 int
를 사용, 그것은 c
말을해야 : 사실
#define swap(a,b,c)(c t;t=a;a=b;b=t;);
을,이 "수정"당신에게 매크로의 일반적인 아이디어를 줄 것이다, 그것은 컴파일되지 않습니다있다. 올바르게 작성하는 방법을 알려주는 Peyman's answer을 참조하십시오.
기본적으로 두 개의 변수 a
, b
을 c
으로 바꿔주는 것처럼 보입니다. 귀하의 경우에는
출력은 다음과 같습니다이 교환 알고리즘이 작동
20 10
방법은 간단합니다. 기본적으로 a
을 b
으로 복사하고 b
을 a
으로 복사하려고합니다. 그러나 b
을 a
에 복사하면 a
을 잃게되고 b
의 사본 2 개가 붙어 있습니다. 대신 단지 a
에 b
을 복사
, 당신은 먼저 다음 b
로 (a
의 원래 값을 유지하는) t
복사, a
에 b
복사, t
라는 임시 변수에 a
의 사본을 저장합니다. 작업이 완료되면 t
을 잊어 버릴 수 있습니다. 더 나은
괄호 안에 명령문을 넣거나 표현식에 변수를 선언 할 수 없습니다. 매크로는 좀 더 많은 작업이 필요합니다. –
@Chris : 물론, 당신은 절대적으로 옳습니다. 나는 내 대답을 참고할 것입니다. 대답을 컴파일하는 방법에 대해 설명하는 동안, 제 방식은 어떻게 작동하는지 조금 더 자세히 보여줍니다. –
@Chris : 분명히, 나는 당신이 질문에 대답하지 않았기 때문에 당신의 것이 아니라, Peyman 's를 의미합니다. –
과 같이 매크로를 다시 쓰기 :
#define swap(a, b, type) \
do { \
type t = a; \
a = b; \
b = t; \
} while (0)
"더 나은"것은 아닙니다 _ _ 필요한 _. OP 매크로는 컴파일되지 않아야합니다. –
는 어디 매크로에서'c'를 사용합니까? – Peyman
코드가 컴파일되지 않고 질문이 명확하지 않습니다. –