백슬래쉬 -> 슬래쉬로 대체..ㅋ 백슬레쉬 어떻게 써요 ?ㅠ
#define max(a, b) (a > b ? a : b)
ㅁ 여러줄일경우
case1.
#define max_print(a, b) /
if(a > b) /
printf("%d is largerthan %dn", a, b); /
else /
printf("%d is largerthan %dn", b, a);
case2.
#define max_print(a, b) do { /
if(a > b) /
printf("%d is largerthan %dn", a, b); /
else /
printf("%d is largerthan %dn", b, a); /
} while(0)
ㅁ 매크로함수가 리턴값있으려면 "ㅁ기본" 의 경우를 써서 대체하든가, 여러줄 쓰되 포인터 변수 넘겨서 해주어야함..
ㅁ 매크로 함수 내부에 반복문 있을수 없음 -> 즉 inline 함수에서도 반복문 있을경우 걍 함수처럼 호출됨
#define max(a, b) (a > b ? a : b) -> 요렇게 하믄 포인터 안쓰고도 결과 리턴받을수 있음.
근데 매크로가 좀 커지면 삼항연산만으로 끝내기 난감할때가 있음
그래서 포인터변수로 리턴값주기(implicit return value) 좋은건 아님 ㅋ
max를 길게 써보자면
#define max(a, b, pRet) do { /
if(a > b) (*pRet) = a; /
else (*pRet) = b; /
} while(0)
int main(void) {
int max_i = 0;
max(1, 2, &max_i);
printf("max : %d\n", max_i);
return 0;
}
헤헼ㅋ 이게 끝이내 괜히 말꺼냈당 ㅋㅋ
포인터 변수 넘겨서 넣어주는 예제도 있으면 좋겠네...저거 c++할때 자주 썼었는데...c#에선 못쓴다는게 문제 ㄱ
쉽게 생각하면 텍스트 치환임