인프런 커뮤니티 질문&답변

나그네님의 프로필 이미지

작성한 질문수

홍정모의 따라하며 배우는 C++

1.14 전처리기와의 첫 만남

1.14 #define

해결된 질문

작성

·

295

2

10:20 정도에

#define LIKE_APPLE

int main()

{

#ifdef LIKE_APPLE

cout << "Apple" << endl;

}

이 상황일 때

define은 뒤의 macro를 그 뒤의 걸로 교체해준다고 했는데

#define LIKE_APPLE 뒤에는 아무것도 없으니 #ifdef 뒤의 LIKE_APPLE을 빈칸으로 교체해주는 건가?

NO!

#ifdef LIKE_APPLE 같이 preprocessor 라인 안에서는 교체 안 한다.

라고 하셨습니다.

그럼 만약, preprocessor 라인이 아니라 cout << LIKE_APPLE; 같이 평범한 라인일 경우 빈칸이 출력되나요?

답변 1

1

안녕하세요, 답변 도우미 Soobak 입니다.

#define 을 사용하여 매크로를 정의하면, 매크로는 그 뒤의 내용으로 코드를 교체합니다.
하지만, 학습하신 내용처럼 #ifdef 와 같은 전처리기 지시문에서는 매크로의 존재 여부만을 검사하며, 교체가 이루어지지는 않습니다.

궁금하신 코드 cout << LIKE_APPLE; 의 라인의 경우, LIKE_APPLE 이 빈칸으로 교체됩니다.
따라서, cout << ; 과 같으며, 컴파일 에러가 발생합니다.
직접 컴파일을 해보니, error: expected primary-expression before ';' token 에러가 발생하네요.

개인적인 의견으로, 직접 이것 저것 실험해보신다는 느낌으로 궁금한 코드에 대하여 스스로 빌드 및 실행을 진행하며 테스트를 해보시는 것도 학습에 도움이 많이 되는 것 같습니다.