pyb56877   5년 전

28번째 줄과 29번째 줄에 관해서 인데요, 어째서인지 

매크로 함수와 같은 줄에 input을 더해주면 덧셈이 안되더라구요;

그래서 29번째 줄을 추가해서 덧셈을 하였습니다.

매크로 함수 다음에 산술 연산이 불가능한건가요?

djm03178   5년 전

매크로 함수는 일반적인 함수와는 달리 전처리 과정에서 적용되는 함수입니다. 매크로 함수가 아는 일은 쓰여진 내용 그대로를 코드에 복사해넣는 일입니다.

예를 들어 이 코드의 MAX 매크로를 다음과 같이 사용하면,

MAX(a, b) + 3

이는 다음과 같이 변형되어 코드에 들어가게 됩니다.

( (a) > (b) ) ? (a):(b) + 3

이를 연산자 우선순위로 묶어보면 다음과 같이 됩니다.

(a > b) ? a : (b + 3)

그래서 이것은 MAX(a, b)의 계산 결과애 3을 더하는 것이 아니고, a가 b보다 크면 a, 그렇지 않으면 b+3이 결과물이 되는 연산이 되는 것입니다.

매크로 함수는 이 때문에 사용할 때 매우 주의해야 합니다.

seico75   5년 전

#define MAX(a,b) ( (a) > (b) ) ? (a):(b)

일때

z = MAX(x,y)+3; 

z = ((x)>(y)) ? (x):(y) + 3; 이 됩니다.

x>y 이면 z = x 이고

아니면 z = y + 3이 됩니다.

#define MAX(a,b) ( ((a) > (b)) ? (a):(b) )

이렇게 하면 되지 않을까 하는데

inline int MAX( int a, int b) { return (a>b) ? a : b; } 

를 추천합니다.

pyb56877   5년 전

맙소사 다들 지식의 깊이가 다르시군요 ㅜㅜ

더 열심히해서 따라잡겠습니다!!

댓글을 작성하려면 로그인해야 합니다.