75.4 스왑매크로
, 소 효범님이 작성이 글에는
"만약 SWAP 매크로를 do while (0) 대신 { } (중괄호)로만 정의하면 전처리기를 거쳤을 때 잘못된 코드가 나옵니다."
라고 적혀있는데
#define SWAP(a, b, type) { \
type temp;\
temp = a;\
a = b;\
b = temp;\
}
이 매크로를 GCC하고 VS2017 둘다 해봤는데 에러가 나지 않고 조건도 잘 처리하는데 표준이 바뀐건가요?
회신: 75.4 스왑매크로
, 도장_ 관리자님이 작성본문을 잘 보면
if (num1 == 10) SWAP(num1, num2, int); else printf("10이 아님\n");이러한 코드에 do while {}을 쓰지 않은 SWAP 매크로를 쓰면 에러가 발생합니다. 컴파일이 되지 않습니다.
macro.c(19): error C2181: if와 짝을 이루지 않는 잘못된 else문입니다.
그래서 본문을 보면 마지막에 다음과 같이 설명이 되어 있습니다.
Unit 75.4를 천천히 읽어보세요.
----
이 코드가 전처리기를 거치면 다음과 같이 } (닫는 중괄호) 뒤에 ; (세미콜론)이 붙어서 컴파일 에러가 발생합니다.
if (num1 == 10) { int temp; temp = num1; num1 = num2; num2 = temp; }; // 세미콜론 때문에 컴파일 에러가 발생 else printf("10이 아님\n");