예상대로 작동하지 않는 2 개의 변수를 추가하는 간단한 매크로가 있습니다.
#include <iostream>
using namespace std;
#define ADD(x,y) (x+y);
int main() {
int a = 10;
int b = 1;
int c = ADD(a,b)+1; //c=11 - NOT EXPECTED
int c = 1+ADD(a,b); //c=12 - EXPECTED
cout<< c;
}
위의 코드에서 매크로 시작 부분에 1을 추가하면 예상되는 출력이 제공됩니다. 그러나 끝에 1을 더하면 실제로 1을 더하는 것이 아닙니다.
왜 이런 동작이 발생합니까? 내 지식에 따라 매크로가 사용되면 컴파일러는 컴파일 중에 매크로를 토큰 문자열로 대체합니다. 그렇다면 두 경우 모두 출력이 동일해야합니다.
첫 번째 경우 : c = (a+b)+1
두 번째 경우c = 1+(a+b)
매크로 끝에서 세미콜론을 제거하고 다음과 같이 작성하십시오.
#define ADD(x,y) (( x ) + ( y ))
그렇지 않으면 예를 들어이 줄
int c = ADD(a,b)+1;
다음과 같다
int c = (a + b); +1;
즉, 변수의 선언 c
과 명령문을 포함합니다.
+1;
효과가 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다