'Language'에 해당되는 글 2건

  1. 2010.11.01 :: 소스 코드는 매직아이^^ 1
  2. 2010.06.16 :: C 전처리기의 명령어 몇가지
Language 2010. 11. 1. 00:48
요즘 소스코드를 분석하고 있습니다.

처음에는 만만치 않더니 저번주가 되니까 뭔가 보이기 시작합니다.

마치 매직아이처럼요...ㅋㅋㅋ

위 그림은 달 두개만 있는 것 처럼보이지만...

매직아이를 이용하면 입체적으로 튀어나온 그림과 함께 숨겨진 메세지를 찾을 수 있습니다.

처음에 보기위해선 노력이 필요하지만, 그 뒤에는 손 쉽게 볼 수 있지요...

소스코드도 마찬가지 입니다.

<본 소스코드는 웹상을 뒤져서 가져온 것입니다. 혹시 저작권 문제가 있다면 덧글 달아주신다십시요. 바로 삭제하도록 하겠습니다.>

이건 영어도 아닌것이, 한국어도 아니고... 당췌 무슨 소린지 못알아 듣게 보이지만...

한 달동안 열심히 보다보니 매직아이처럼 중요한 부분이 툭툭 튀어나오네요^^

아직 깔끔하게 보이진 않지만 그래도 꽤나 잘 보입니다.

빨리 끝내야죠... 그리고 다음으로 넘어가야죠...

'Language' 카테고리의 다른 글

C 전처리기의 명령어 몇가지  (0) 2010.06.16
posted by 동글동글82
:
Language 2010. 6. 16. 09:35

문자열 조작

 

#define SAY(x) printf(#x)

 

SAY(Hello, world!);

 

와 같이 식별자 앞에 # 를 붙이게 되면 자동으로 “x” 와 같이 “”로 둘러 싸 준다.

결과적으로

 

printf(“Hello, world!”);

 

로 대치될 것이다.

 

문자열 결합

 

## 는 두 개의 문자열을 결합해 준다.

 

#define Print(x) Print ## x

 

와 같이 된 경우

 

Print(One) 을 사용하면 PrintOne 이라는 문자열로 대치되고 Print(Two)  PrintTwo 라는 문자열로 대치된다.

잘 사용하면 아주 유용한 기능이 된다.

 

ASSERT()

 

대부분의 컴파일러는 ASSERT() 매크로를 가지고 있다여기서는 직접 하나 만들어 보자.

 

#ifndef DEBUG

#define ASSERT(x)

#else

#define ASSERT(x) \

       if ( ! (x) ) \

       { \

             printf(#x); \

             printf(“ is NULL on line %d in file %s”, __LINE__, __FILE__); \

       }

#endif

 

이 코드의 위에

 

#define DEBUG

 

한 줄 포함하면

 

#define ASSERT(x)

 

로 아무 일도 하지 않고 DEBUG가 정의되지 않으면 그 아래 함수가 정의된다.

디버그때만 코드가 생성되고 릴리즈시에는 코드가 생성되지 않게 할 수 있는 것이다.

 

여러 줄이 필요할 때는 \ 가 사용되었다는 것에 유의하자또한 내장 매크로인 __LINE__ 이나 __FILE__ 

다음에 설명한다.

 

내장 매크로

 

컴파일 시에 컴파일러가 미리 정의하고 있는 매크로들이 있다.

각각 오른 쪽에 있는 내용으로 대치된다.

 

__DATE__ : 컴파일하는 날짜

__TIME__ : 컴파일하는 시간

__LINE__ : 현재 컴파일하고 있는 줄 번호

__FILE__ : 현재 컴파일하고 있는 파일의 이름

 

#error

 

컴파일러는 이 명령을 만나게 되면 해당 메지시를 출력하고 컴파일을 중지한다.

C++ 컴파일러에서만 동작하게 하는 다음 코드를 참조하자.

 

#if !defined(__cplusplus)

#error C++ compiler required.

#endif

 

__cplusplus  C++ 컴파일러일 경우에 정의되는 내장 매크로이다.

 

#pragma

 

#pragma 는 컴파일러마다 고유하게 사용할 수 있는 명령어이다따라서 그 문법은 컴파일러마다

다르고 그 종류도 많다.

 

예를 들어

 

#pragma once

 

같은 경우 위의 포함감시 기능을 컴파일러가 알아서 해 준다한 번 include 된 헤더 파일은 중복해서

포함되지 않도록 컴파일러가 처리해 준다.

 

'Language' 카테고리의 다른 글

소스 코드는 매직아이^^  (1) 2010.11.01
posted by 동글동글82
: