반응형
C++에서는 다음과 같이 매크로를 사용할 수 있다.
#include<bits/stdc++.h>
#define FOR(i, N) for(int i = 0; i < N; ++i)
using namespace std;
int main() {
FOR(i, 10)
cout << i;
// it is same as...
// for (int i = 0; i < 10; ++i)
return 0;
}
// output:
// 0123456789
여기서 N에 해당하는 위치에 함수를 넣으면 어떻게 될까?
1. 매크로에서 N의 값을 초기화하는 과정에서 함수가 처음 1회 실행된다.
2. 매 조건을 확인할 때마다 함수가 실행된다.
정답은 2번이다. 매크로에서는 N에 데이터가 아니라 코드를 대입한다.
#include <bits/stdc++.h>
#define FOR(i, N) for (int i = 0; i < N; ++i)
using namespace std;
int func() {
cout << "called" << endl;
return 3;
}
int main() {
FOR(i, func())
cout << 0;
return 0;
}
// output:
// called0
// called0
// called0
따라서 N의 위치에 적은 코드가 그대로 매크로 정의에서 N의 위치에 대입된다고 생각하면 된다.
따라서 매크로를 사용할 때, 반복문 조건 부분에 vector<T>::size()와 같이 (벡터의 크기가 일정할 때)매 번 같은 값을 반환하는 함수는 따로 상수를 선언하여 사용하는 것이 바람직하다.
반응형
'프로그래밍 > C++' 카테고리의 다른 글
Visual Studio에 OpenGL 설치하기 (1) | 2020.11.14 |
---|---|
[C++] 새로 알게 된 사실 몇 가지 (계속추가예정) (0) | 2020.10.22 |
[C] 백준 풀 때 Tip. 답안 검토 시 파일로 입력 넣기 (0) | 2020.09.26 |
[C++] 비주얼스튜디오(VS)에서 발생하는 scanf 오류 해결하기 (0) | 2020.09.22 |
[C++] 삼항연산자를 중첩해서 쓸 때 주의할 점 (0) | 2020.09.06 |