C 매크로 연산자 우선순위 - sonkoni/Koni-Wiki GitHub Wiki
매크로는 치환이다. 이로 인해 C언어 우선순위로 의도하지 않은 결과가 나올 수 있다. 괄호를 팍팍 써서 사용해야 한다
#define MUL(a, b) a * b ==>> MUL(1 + 2, 3 + 4)
==>> 1 + 2 * 3 + 4 로 대치. 결과는 11
#define MUL(a, b) ((a) * (b)) ==>> MUL(1 + 2, 3 + 4)
==>> ((1 + 2) * (3 + 4)) 로 대치. 결과는 21
괄호를 써주면 영향 안 받아
#define ADD(a, b) a + b ==>> ADD(1, 2) * 3
==>> 1 + 2 * 3 으로 대치. 결과는 7
#define ADD(a, b) ((a) + (b)) ==>> ADD(1, 2) * 3
==>> ((1) + (2)) * 3 으로 대치. 결과는 9#include <stdio.h>
#define MUL(a, b) a * b
#define ADD(a, b) a + b
int main(int argc, char *argv[]) {
int r1 = MUL(1 + 2, 3 + 4);
int r2 = ADD(1, 2) * 3;
printf("=> %d, %d\n", r1, r2);
return 0;
}
// => 11, 7#include <stdio.h>
#define MUL(a, b) ((a) * (b))
#define ADD(a, b) ((a) + (b))
int main(int argc, char *argv[]) {
int r1 = MUL(1 + 2, 3 + 4);
int r2 = ADD(1, 2) * 3;
printf("=> %d, %d\n", r1, r2);
return 0;
}
// => 21, 9