|
로터스 님이 쓰신 글 :
: 책은 teach yourself C++ 이구요, 17일째의 매크로를 공부하고 있는데, 아래의
: 코드가 실행이 안됩니다. 예제와 똑같이 작성했는데 안되네요.. 어디가 잘못되었는지
: 알려주시면 감사요~ ^^
:
: 컴파일러 : visual c++ 6.0
:
:
: ------------------------------
:
: #define DEBUG
: #include <iostream.h>
:
: #ifndef DEBUG
: #define ASSERT(x)
: #else
: #define ASSERT(x) \
: if(! (x)) \
: { \
: cout << "ERROR!! Assert " << #x << " failed\n"; \
: cout << " on line " << _LINE_ << "\n"; \
: cout << " in line " << _FILE_ << "\n"; \
: }
:
: #endif
:
: int main()
: {
: int x = 5;
: cout << "First assert: \n";
: ASSERT(x==5);
: cout << "\nSecond assert: \n";
: ASSERT(x != 5);
: cout << "\nDone.\n";
: return 0;
: }
: ------------------------------------------
안녕하세요 만해입다.
방금 컴파일 시켜서 결과를 확인 해 봤는데요 _LINE_ 하고 _FILE_부분에서 에러가 나네요
정의가 안된 변수이거나 컴파일러에 따라 틀리게 지원이 되는 매크로 변수인것 같네요
cout << "On Line" << _LINE_ << "\n"; \
cout << "in File" << _FILE_ << "\n"; \
이 두라인을 주석 처리하고 해보세요
아니면 _LINE_하고 _FILE_을 #define으로 정의해 주셔도 됩니다.
제가 약간 손을 본 소스를 보여 드릴께요
C++ builder X에서 컴파일해서 문제 없이 되는 소스 입니다.
#ifdef __BORLANDC__
#pragma argsused
#endif
#define DEBUG
#define _FILE_ "test.cpp" /* <-- _FILE_에 "test.cpp" 라는 값을 할당 시켯고요*/
#include <iostream.h>
#ifndef DEBUG
#define ASSERT(x,y) /*<- x는 조건값 , y 는 현재 라인 */
#else
#define ASSERT(x,y) \
if(! (x)) \
{ \
cout << "ERROR!! Assert " << #x << " failed\n"; \
cout << " on line " << y << "\n"; \
cout << " in line " << _FILE_ << "\n"; \
}
#endif
int main()
{
int x = 5;
cout << "First assert: \n";
ASSERT(x==5,25); // <- 조건값과 현 라인을 넣어서 Assert를 호출.
cout << "\nSecond assert: \n";
ASSERT(x != 5,27);
cout << "\nDone.\n";
return 0;
}
결과 :
First assert:
Second assert:
ERROR!! Assert x != 5 failed
on line 27
in line test.cpp
Done.
그럼 즐프 하세요
|