c언어 정석 4강
수업 4일차
(매크로와 typedef)
- 4강 문제 풀이 소스코드
객체형 매크로 : 하나의 기호로 프로그램 중에 선언된 기호가 나오게 되면 그 부분에 기호를 없애고
선언된 값으로 대체
-일반적으로 대문자
-정해진 기호와 그 기호에 해당하는 값을 프로그램이 시작하기 전에 선언하는 것이 일반적
-수정이 쉽다는 장점
-동일한 내용이 여러 번 나타나는 경우 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 |
댓글