해결된 질문
작성
·
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
에러가 발생하네요.
개인적인 의견으로, 직접 이것 저것 실험해보신다는 느낌으로 궁금한 코드에 대하여 스스로 빌드 및 실행을 진행하며 테스트를 해보시는 것도 학습에 도움이 많이 되는 것 같습니다.