본문 바로가기
언어/C

[C] 매크로와 typedef (C언어정석_4)

by merona99 2018. 9. 19.
반응형

c언어 정석 4강

수업 4일차

(매크로와 typedef)



  • 4강 문제 풀이 소스코드

심화프로그래밍_4강.c

심프중간_4강.c




객체형 매크로 : 하나의 기호로 프로그램 중에 선언된 기호가 나오게 되면 그 부분에 기호를 없애고 

    선언된 값으로 대체


-일반적으로 대문자

-정해진 기호와 그 기호에 해당하는 값을 프로그램이 시작하기 전에 선언하는 것이 일반적

-수정이 쉽다는 장점

-동일한 내용이 여러 번 나타나는 경우 or 다른 팀원의 프로그램과 같은 값을 공용하기 위한 용도   에 유용



ex1) 매크로 PI 선언

PI를 3.141592라고 정의함.

즉 이후에 나오는 모든 PI에 3.141592가 대입됨.



<요즘 잘 쓰이지 않는것>


ex2) 두 문자열 결합(##) 사용

=> #define output(x) printf("%d %d\n",x ## 1,y ## 2) 이런식으로 썻을때

따른 메인함수에서 output(i)를 하면

printf("%d %d\n",i1,i2)와 같이 변함.


ex3) 문자열로 만들기(#) 사용

=> #define MKSTRING(str) # str 이런식으로 쓰고

위와 비슷하게 쓰고 원래 int value=10; 이라면

MKSTRING(value)를 하게되면 문자열이 됨.





조건부 매크로 : 매크로의 선언 여부를 판단하여 새로 지정하거나 기존에 지정된 매크로를 해제할 때 

    사용


분류 

매크로 

설명 

 조건부 컴파일

#if ~ #endif 

정의된 매크로의 값에 따라 컴파일 방식이 달라짐 

#ifdef ~ #endif 

매크로가 정의되어 있는지 아닌지에 따라 컴파일 여부가 달라짐 

#undef 

미리 정의되어 있는 매크로를 해제함 

#ifndef ~ #endif 

매크로가 정의되어 있지 않으면 정의함 

표준 매크로 (5개) 

__DATE__ 

프로그램이 실행되는 날짜를 문자열로 나타냄 

__FILE__ 

프로그램의 이름과 디렛터리를 문자열로 나타냄 

__LINE__ 

프로그램 내에서 행 번호를 정수로 나타냄 

__STDC__ 

C컴파일러가 표준인지 아닌지를 나타냄

 표준이면 1이고 그렇지 않으면 다른 값을 나타냄 

__TIME__ 

프로그램이 실행될 때의 시스템의 시간을 문자열로 나타냄 


문제) #if ~ #endif 사용

PROBLEM으로 정의된 해당 매크로가 컴파일 됨.

위의 사진에서는 PROBLEM을 6으로 정의했기 때문에 

#if PROBLEM == 6 에 해당하는 구문이 컴파일됨. 

#define EVEN_ODD(x) ((x%2==1) ? ("홀수"):("짝수"))에서 EVEN_ODD(7) 부분의 7이 x에 해당함.



================================추가===============================

#define DEBUG 1 --- 이 되므로 해당 매크로가 실행O

#define DEBUG 0 --- 거짓이 되므로 해당 매크로가 실행X



#undef

메인함수안에 적고 #define으로 정의해줌


#ifndef ~ #endif

프로그램 시작전에 정의



<표준매크로>


(vc++을 쓰는 경우 디폴트가 c++이라, __STDC__가 정의되어 있지x, 즉, 그냥 변수로 인식하는데 앞에서 선언해 주지 않으면 오류가 발생함)



typedef : 기본데이터형의 이름에 별명을 붙여서 다르게 사용하고자 할 때 사용됨.

 사용자 정의 데이터형(구조체, 공용체, 열거형)을 새로운 데이터 형으로 선언할 때도 사용


해봤다.

음...필자 생각인데 왜 있는 기능인지 모르겠다 ㅋㅋㅋ 귀여운기능...?

별명?이라고 보면 좋겠다.

//저 민트색 넘나 이쁘다><




함수형 매크로 : 함수처럼 생긴 매크로

    매개변수o, 함수와 비슷하게 동작하는 것으로 보임.


(이런식)



*주의점

함수형 매크로 이름첫 번째 매개변수까지는 반드시 붙여 써야 함.

- 매크로 선언 시 괄호를 적절히 써 주어야 함/ 문장 끝에 세미콜론x

  그렇지 않으면 컴파일이 제대로 되지 않는 경우o.

  디버깅 힘듬.


*장점

- 프로그램 작성 시 또는 디버깅 시 편리함



매크로에 변수 사용시 ()사용




//기존의 C를 공부할때 나오지 않던 생소한 부분이라 상세히 정리했다.

내가 공부하지 않았던 부분이라고 수정하겠다..

반응형

'언어 > C' 카테고리의 다른 글

[C] 반복문 (C언어정석_5)  (0) 2018.10.01
[C] 도전프밍1  (0) 2018.09.30
[C] scanf/ 수학함수 (C언어정석_2)  (0) 2018.09.17
[C] switch/ if_esle (C언어정석_3)  (0) 2018.09.17
[C] 함수  (0) 2018.09.13

댓글