c의 inline함수,매크로
분홍이
질문 제목 :
c의 inline함수,매크로
c99 표준에 따르면 c에서도 inline함수를 구현할 수 있다고 하여서 공부중인데요.
inline함수와 매크로 질문드릴게요.
질문 내용 :
#include stdio.h
#define MAX(x,y)((x)(y)?(x):(y))
inline int max(x,y)
{
return (xy?x:y);
}
int main(void)
{
int a = 3, b = 5, c = 3, d = 5;
printf(%d\n, MAX(a++,b++));
printf(%d\n, max(c++,d++));
return 0;
}
질문1. 매크로는 (c++) (d++)? (c++) : (d++) 이렇게 치환되는데 증감되는 부분이 조건식인지 아니면 반환하는 곳인지.. ㅠㅠ
질문2. inline함수를 사용하면 나오는 결과가 과정좀 설명해주세요.ㅠ.ㅠ
-
채꽃
둘 다, printf 함수를 실행한 후에, 변수들을 증가시킵니다.
-
황소숨
메크로는 해당 문장을 그냥 복사해서 붙여넣어 줍니다. 위의 MAX의 경우는 프리컴파일러가 해당 문장을 ((x)(y)?(x):(y)) 꼴로 그냥 무조껀 바꿔줍니다(물론 x와 y는 a++, d++이 되겟지요). 궁금하면 프리컴파일만 한 결과를 뽑아 보시면 아실겁니다.
단지 문제는 무조껀 바꿔주기 때문에 실제 소스파일과 치환된 이후의 내용이 달라지고, 메크로라 심볼테이블에 올라가지 않으며, 논리적인 오류가 있어도 발견하기 쉽지 않단 겁니다.
위의 예제로 들고