위의명령어는 조건이있는 컴파일입니다..
여기에서 elif와 else가 필요가없다면 생략해도 무방합니다..
그냥 if - else if - else를 생각하시면 이해가 빠릅니다..
.
.
.
#if defined 명칭
.
.
#if !defined 명칭
.
.
#endif
.
.
이것은 명칭이 정의되었는지 확인하는 매크로입니다..어떤명칭이 참일시
조건을 판정하지만 아니라면 !define이 실행되게됩니다..둘중 아무거나 써도 상관없습니다..
아래명령어 역시 정의된여부판정에 쓰이는 매크로명입니다.
.
.
.
#ifdef 명칭
.
.
#ifndef 명칭
.
.
#endif
.
.
.
다음은 행번호와 파일명재부여에 대해 알아보겠습니다..
#line 행번호 "파일명"
이것은 정의 삽입 매크로로써 _LINE_과 _FILE_의 내용을 변경합니다..
음.. 컴파일 실행중 행번호와 파일명을 지정한 번호로 변경되구 여기에서 파일명은 생략이 가능합니다..
저것은 컴파일시 파일명과 행번호가 오류메시지 출력에 나타나게 됩니다..
오류가 발생하는곳에 행번호를 삽입하면 디버깅이 편리하겠죠??
#pragma 지시자
이것은 컴파일러에게 옵션을 지시합니다..
쉽게말해 특수한기능을 사용하겠다는 정보를 컴파일러에게 알려주는 명령입니다.
여기에서 지시자는 특별하게 규정된것은 없구 각 언어개발자에 의해 규정되기때문에 메뉴얼을 참고해야 합니다..
마이크로소프트c로 예를들면 아래와같습니다..
#pragma optimize ... 최적화 옵션의 금지/허가를 한다.
#pragma title ... 원시리스트에 title를 부여한다.
#pragma wdm ... 경고메시지 출력여부를 지시한다..
다음은 마지막 매크로입니다..
#error 오류메시지
저매크로는 #if문과 같이 많이 사용되며, 컴파일시 독자적으로 오류메시지를 출력합니다..
또한 컴파일처리를 중단하기도 합니다.
매크로에는 치명적인 부작용이 있습니다..
즉 #define사용시 주의해야할점이있는데요..예를들어
#define add(a,b) a+b
위와같이 정의했다고 칩시다.. 근데 사용할때는 아래와같이 사용했습니다..
a=add(x+10,y+20);
이것은 프로그램의도와 다른결과를 갖게됩니다..
때문에 a와b에괄호를 쳐야합니다..
#define mult(a,b) ((a)*(b))
이런식으로요 근데 여기에서 좀 의아해할부분이있습니다.
왜 이중괄호를 치는거지?? 그냥 (a)*(b)하면 안되나??
만약 이중괄호를 하지않는다면 아래식에서 의도하지 않는 결과를 맛보게 될것입니다..
a=mult(a,y)*30;
저것은 a=(x)+(y)*30; 과 같은결과를 가져옵니다.
근데 저런 이중괄호조차 안먹히는 경우가있습니다..
#define sqr(a) ((a)*(a))
a=sqr(++x);
저것은 a=((++x)*(++x))와 같은 결과입니다..
정확히 정의되지 않는 경우가 발생하므로 함수에 비해 신뢰성이 떨어집니다.
더군다나 c++에서 #define은 완전히 찬밥신세지요.. (인라인함수로인해)
물론 아주 필요없는것은아닙니다..
그냥 잘판단해서 사용하시길..