본문 바로가기
C

220810(CH26~27)

by 덤더리덤떰 2022. 8. 10.

CH26

1.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

#define MUL(A,B,C) ((A)*(B)*(C))
#define ADD(A,B,C) ((A)+(B)+(C))

int main() {
	int a, b, c;
	printf("숫자 3개 입력:");
	scanf("%d %d %d", &a, &b, &c);
	printf("세 정수의 합:%d\n", ADD(a, b, c));
	printf("세 정수의 곱:%d\n", MUL(a, b, c));
	return 0;
}

2.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

#define PI 3.14
#define AREA(R) ((R)*(R)*(PI))

int main() {
	double rad;
	printf("반지름의 길이 입력:");
	scanf("%lf", &rad);
	printf("반지름의 길이가 %lf인 원의 넓이: %g\n", rad, AREA(rad));
	return 0;
}

%g는 실수형 자동출력


3.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

#define MAX(X,Y) (X>Y)? X:Y 

int main() {
	int a, b;
	printf("두개의 숫자 입력:\n");
	scanf("%d %d", &a, &b);
	printf("더 큰 숫자는 %d이다.", MAX(a, b));

	return 0;
}

cf>const(값 변환 x)와 static(값 변환 o)의 차이점

1)const상수(심볼릭 상수)

:변수 선언시 const선언 추가하는 대신 선언 동시에 초기화 해야함
ex) const int MAX=100; (MAX는 상수, 따라서 값의 변경 불가!)
+)const int MAX;
MAX=100; 처럼 선언과 초기화 분리시킬 수 없음.

2)static 변수

: 지역변수에 static을 추가해 전역변수로 만드는 변수

이때, 지역변수란?

  • 선언된 함수 내에서만 접근 가능
  • 함수 내에 선언된 지역변수는 해당 함수가 반환하면 소멸

이때, 지역변수에 static이 붙게 된다면?

  • 선언된 함수 내에서만 접근 가능(지역변수 특성)
  • 딱 1회 초기화되고 프로그램 종료 시까지 메모리 공간에 존재한다(전역변수 특성)
  • 접근할 수 있는 범위를 하나의 함수로 제한(전역변수보다 안정적)

2-1)static 전역변수 !

"이 변수는 외부 파일에서의 접근을 허용하지 않는다"
<=> " 이 변수의 접근범위는 파일 내부로 제한"
cf>이때 함수에 static 선언을 하면?
extern 선언을 하더라도 다른 파일에서는 접근 불가
ex)static void Add(void){
...}

CH27

1.매크로의 정의는 파일단위로 유효+선행처리기도 파일 단위로 선행처리
2.구조체의 정의도 파일 단위로만 그 선언이 유효
->이때 구조체는 여러 곳에서 쓰일 확률이 높기에 헤더파일에 삽입
->구조체를 포함한 헤더파일의 중복삽입일 경우 같은 구조체가 두 번 정의되기에 문제 생김
-> 헤더파일 중복 삽입은 문제가 되지 않으나 구조체 값의 변경시 생기는 오류가 문제
(ex.만약 main.c에서 구조체 값 변경했는데 intdiv3.c에 있는 구조체 변경 안하면 문제생김)

=> 조건부 컴파일을 활용하자!

1  #ifndef __STDIV2_H__
2  #define __STDIV2_H__
3  typedef struct div
4  {
5    int quotient;
6    int remainder;
7  }Div;
8
9  #endif
  • first.c라는 실행파일에서 #include "__STDIV2_H__"
  • 1행에서 아직 __STDIV2_H__는 정의 안되어있기에 2행부터 9행까지 포함하여 실행
  • first.c에선 __STDIV2_H__정의하게됨
  • 다음 second.c에서 #include "__STDIV2_H__"하고자 함
  • 하지만 1행에서 이젠 __STDIV2_H__정의 되어있기에 2행에서 9행 실행되지 않고 정의할 수 없음

'C' 카테고리의 다른 글

220809(CH25)  (0) 2022.08.09
220802(CH23)  (0) 2022.08.02
220728(CH21)  (0) 2022.07.28
220726(CH13,18)  (0) 2022.07.26
220721(CH16)  (0) 2022.07.26