'2015/03/07'에 해당되는 글 1건

  1. 2015.03.07 매크로 함수

매크로 함수

 

#1. 매크로 함수

 

학습목표 - 매크로 함수의 정의와 사용문법을 이해한다.

 

#ifndef ~ #endif //만약 정의 되지 않았다면

 

#ifdef의 부정형임으로 설명 없이 넘어간다!

 

#if#ifdef의 차이

 

#if는 참/거짓을 따져 경우에 따라 입력한 명령어를 수행하게 만드는 명령어이다.

 

#ifdef는 다음 항으로 넣어주는 변수가 정의 되었는지 안되어 있는지 확인 후 경우에 따라 입력한 명령어를 수행하게 만드는 명령어이다.

 

헤더 파일을 만들 때 #if#endif1:1로 대응되는지 확인하기 위해서 주석으로 표시해 주어야 한다.

 

 

! 전처리 문의 중복처리를 막기 위한 코드이다. 원래 전처리 언어의 중복 사용을 권장하지 않지만 위의 코드는 동일 전처리 언어가 두 번 이상 선언 되었을 시 한번만 처리해 주는 코드임으로 유용하다.

 

가장 먼저 선언 되었을 시 #define으로 인하여 header파일이 실행된다.(#define으로 헤더파일이 실행되는 것에 관해서는 더 자세히 알아봐야 하지만 해당 코드로 인해 실행은 되기 때문에 그렇다고 유추할 수 밖에...) 다시 한번 헤더파일이 실행 됐을 경우 #ifndef으로 인해(이미 헤더파일이 실행 되었음으로) 아래의 명령어들은 실행되지 않음으로 억번을 넣더라도 한번만 실행된다는 사실! //실행되지 않는 경우라도 문법에 맞게 입력해주지 않으면 에러가 날 수 있다는 사실!

 

 

 

 

 

 

 

 

#2. 매크로 함수 실습

 

학습목표 - 수업시간의 배운 매크로함수의 정의를 실습에 적용하여 사용할 수 있다.

 

// 사용자가 코딩한 코드를 세미콜론(;)으로만 명령을 나눈다. 때문에 사용자의 가독성을 위해 엔터를 임의적으로 삽입하여도 무관하다.

 

매크로 함수 //함수처럼 생긴 매크로

 

전처리 언어의 일부이다.

 

#define SQUARE(X) X*X -> X가 들어간 곳을 X*X로 바꿔준다.



 

! 매크로 사용 시 원하는 값이 나오지 않을 경우 전처리 언어를 생성 후(cl /P *.c) 안에 내용을 살펴보면 된다. //*는 코딩파일 이름

 

p/561 - 563 까지의 잘못된 매크로의 예를 읽어 보고 이해하자!

 

// 연산의 순서에 대해 자신이 없을 때는 괄호를 사용하여 먼저 연산처리를 해주면 된다.

 

 

#3. 매크로 함수의 사용

 

학습목표 - 수업시간의 배운 매크로함수의 정의를 실습에 적용하여 사용할 수 있다.

 



 

좋은 코드는 치환을 활용하여 전처리 언어와 문자 사용을 늘려 사용자가 알아보기 편한 코드라고 할 수 있다.

p/536 마크로 함수의 사용

 

 

 

#4. 매크로 함수의 장단점

 

학습목표 - 매크로 함수의 장단점을 이해한다.

 

p/564 매크로 함수의 장단점

 

<장점>

 

1. 일반 함수에 비해 실행속도가 빠르다.

 

선행처리기에 의해서 매크로 함수의 몸체부분이 매크로 함수의 호출 문장을 대체하기 때문에 일반 함수를 불러올 때의 메모리할당 -> 실행 위치의 이동과 매개변수로의 인자 전달 -> return문에 의한 값의 반환의 과정을 거치지 않기 때문이다.

 

쉽게 말해 call - return 과정이 필요 없다.

 

2. 자료형에 따라서 별도의 함수를 정의하지 않아도 된다.

 

인자검사(형검사)를 하지 않기 때문에 속도가 빠르다.

 

<단점>

 

1. 정의하기가 까다롭다.

 

만드는 과정이 복잡하다.

 

2. 디버깅하기가 쉽다.

 

3. 실행파일이 커진다.

 

Library에 들어 있는 함수의 경우 호출을 통해 명령을 수행하고 끝나지만 macro 함수의 경우는 지속적으로 해당 코드를 불러와 사용하기 때문에 코드량이 늘어나 실행 파일이 커진다.

 

매크로와 선행처리기 단원은 마무리!

 

함수로 다시 돌아와서.

 

유형 4의 함수를 만들어 보자!

 

반환형이 없을 때 return은 생략 가능하다. 하지만 우리는 쓰자. (우리가 넣지 않으면 컴파일러가 return을 넣어주기 때문에.

 

실습 - 입력한 코드를 활용하여 다이오드에 불을 넣어보자!!(지난 번 중복임으로 설명생략)

반응형
Posted by newind2000