서로 결과가 틀린이유를 알고 싶습니다.
글쓴이: Geniys / 작성시간: 화, 2005/12/13 - 12:33오후
#include <stdio.h> #include <stdlib.h> #define WON 1000 #define PRICE(QTY, UNIT_PRICE) (QTY * UNIT_PRICE / WON) int PRICE1(int qty, int unit) { return qty * unit / WON; } int main() { int qty1 = 10, qty2 = 5; int unit_price = 10000; int tot; tot = PRICE(qty1 + qty2, unit_price); printf("tot = %d\n", tot); return 0; }
위 코드를 #define문 함수[PRICE]를 바꿔보면 결과가 "60"이 나오고,
일반 함수[PRICE1]으로 하면 제가 생각하듯이 "150"이 나오는데 왜 이런차이가 생기는지 궁금합니다.
도대체 60이 어떻게 나오는지가 이해가 안돼서요.
그럼 좋은하루 되세요 ^^
Forums:
매크로를 전개해보면 금방 아실 텐데요.매크로를 정의할 때는 다음과 같
매크로를 전개해보면 금방 아실 텐데요.
매크로를 정의할 때는 다음과 같이 괄호를 쓰는 것이 좋습니다.
#define PRICE(QTY, UNIT_PRICE) ((QTY) * (UNIT_PRICE) / WON)
괄호를 안치면 어떻게 해석되는지도 궁금합니다.15 * 10000
괄호를 안치면 어떻게 해석되는지도 궁금합니다.
15 * 10000 / 1000
위 식이 어떻게 해석이 되서 60이 나오게 된건지 알수가 없내요..
============================
A watched pot never boils
메크로 변환[code:1]PRINCE(qty1 + qty2
메크로 변환
일반 코드
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
15가 아니죠. 원래 정의한 매크로로 PRICE(qty1 + qty2,
15가 아니죠. 원래 정의한 매크로로 PRICE(qty1 + qty2, unit_price) 를 전개하면
qty1 + qty2 * unit_price / WON
가 됩니다. 10 + 5 * 10000 / 1000 == 60 맞죠?
컴파일러는 죄 없습니다. ^^;
괄호가 없으면 10 + 5 * 10000 / 1000 이 되겠네요.계
괄호가 없으면 10 + 5 * 10000 / 1000 이 되겠네요.
계산의 결과는 당연히... =)
-----
http://monpetit.posterous.com/
http://monpetit.tistory.com/
괄호 친경우 메크로 변환[code:1]#define PRICE&#
괄호 친경우 메크로 변환
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
답변 감사합니다 ^^괄호를 꼭치도록 하겠습니다~
답변 감사합니다 ^^
괄호를 꼭치도록 하겠습니다~
============================
A watched pot never boils
저런경우 '틀린' 이라고 쓰는것은 옳지 않습니다. '다른' 이라고 쓰셔야
저런경우 '틀린' 이라고 쓰는것은 옳지 않습니다. '다른' 이라고 쓰셔야합니다.
너와 내가 다른거지... 틀린건 아니지요... ㅎㅎ
댓글 달기