카테고리 없음

03 - 28 C++ 보충 6챕터

pp4037 2026. 3. 28. 17:33
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//챕터 6-1 : 함수 개론
//반환자료형 함수명(매개변수자료형 매개변수형) == int(반환자료형) use(함수명) (int(매개변수자료형) used(매개변수형))
//{
//함수 코드
// return 반환값;
//}
//함수명(인자값); -> 해당하는 함수의 매개변수에 인자값을 대입시킨 뒤 함수를 호출한다.  
//예시 : use(15); == int use(int used); ↓
// 1. use라는 함수를 호출하고 함수의 매개변수에 인자값으로 15를 대입시킨다.
// 2. use라는 함수 내에 있는 코드를 내려받은 인자값이 대입된 매개변수를 바탕으로 진행시킨다.
// 3. 진행이 완료되었으면 반환된 값을 use라는 함수를 호출한 곳에 돌려준다.
// 예시 : 철물점에 철을 맡기고 철물점에서 설계도대로 진행되어 자전거를 제작하면 자전거를 돌려주는 방식.


int Add(int A, int B)
{
	int Num = A + B;

	printf("%d\n", Num);
	return Num;
}

 void PrintStar(int C)
{
	 for (int i = 1; i <= C; ++i)
	 {
		 printf("%s", "*");
	 }

	 return;
}




int main(void)
{
	int A, B, C;

	printf("Please enter a number : ");
	scanf("%d %d ", &A, &B);
	
	Add(A, B);

	printf("Please enter a number2 : ");
	scanf("%d ", &C);

	PrintStar(C);


	return 0;
}
// Main.c
// 챕터 6-3 : 스코프
// 스코프 : 변수나 함수 이름을 사용할 수 있는 범위, 스코프 내에서 접근할 수 있고 함수 바깥에서는 접근할 수 없다.
// 스코프의 종류 : 블럭 스코프, 파일 스코프

//블럭 스코프 : 중괄호 내부에 선언된 변수는 해당 중괄호 내부에서만 사용할 수 있다. for(int i = 0;)의 i 변수와 같은 개념.
// 바깥쪽에선 블럭 스코프 내부의 변수에 접근이 불가능하지만 안쪽에서는 가능하다. 집 바깥 쪽 사람은 집 안의 물건을 건드릴 수 없지만 집 안 쪽 사람은 집 안의 물건을 건드릴 수 없는 것과 같음. 

#include <stdio.h>

int C(int D) // 변수의 경우에도 블럭 스코프가 적용되어 별도의 과정(인자값 대입)을 거쳐야지만 외부에서 변수의 값을 가져오거나 반환할 수 있다.
{
	int E = D;
	printf("E: %d\n", E);
	// 여기서 int E = A; 를 칠 경우 main 함수에서 변수 A를 가져올 수 없기에 오류가 발생한다.
	//마찬가지의 이유로 메인 함수의 C(D); 의 경우 어디까지나 D의 값을 C함수의 매개변수 D에 대입한 것이기에 main 함수의 D 변수와 C 함수의 D 변수는 별개의 존재다.

	return E; 
}

int main(void)
{
	int A = 25;

	printf("A: %d\n", A);

	{
		int B = 10;
		int Result = A + B; // int B와 int Result는 안쪽 블럭 스코프 내부에 있기에 int A가 정의되어 있는 바깥쪽에선 접근이 불가능하다. 하지만 이 식은 int A의 안쪽 블럭 스코프에 있기에 int A의 값을 가져올 수 있다. 

		printf("Result: %d\n", Result);
		printf("A: %d\n", A);
	}// 블럭 스코프를 없애고 싶다면 이 중괄호를 없애면 된다.

	int D = 15;
	C(D);


	return 0;
}
// Main.c
// 파일 스코프
// 파일 스코프 : 파일 전체에 적용되는 변수나 함수.
// 블럭 스코프의 경우 중괄호로 울타리를 쳐놓았다면 파일 스코프는 울타리가 없기에 파일 전체에 사용 가능하다.
// 전역 변수, 전역 함수 또한 파일 스코프 내에 들어가 있다.
// 전역 변수의 경우 변수명 앞에 G를 붙이는 암묵적인 룰이 있다.
#include <stdio.h>

int FileScopeVariable = 8; // 파일 스코프에 선언된 변수. -> 전역변수, 어떤 중괄호에도 감싸여있지 않는 변수가 파일 스코프.
int GB = 0; // 파일 스코프에 선언된 변수. -> 전역변수, 어떤 중괄호에도 감싸여있지 않는 변수가 파일 스코프. 이 때 값은 0으로 되어 있음.

int A(int a)
{
	int b = FileScopeVariable + a; // FileScopeVariable의 값을 가져왔기에 10 이라는 값이 나옴.
	printf("b: %d\n", b);

	return a;
}

void C()
{
	++GB;
	printf("B: %d\n", GB);
}


int ReturnZero(void)       // 파일 스코프에 선언 및 정의된 함수. -> 전역함수
{
	return 0;
}

int main(void)
{
	A(2);
	C(); // 전역변수 B의 값이 함수 내에서 +1 되었기에 전역변수(파일 스코프)인 B는 함수가 종료되어도 사라지지 않고 존재하기에 1
	C(); // 2
	C(); // 3
	C(); // 4
	C(); // 이하로 함수가 계속 호출 될 때마다 함수 내에 존재하는 계산식이 전역변수 B에 적용되어서 값이 추가됨.

	return 0;
}
// Main.c
// 6-5 : 변수의 종류
// 지역 변수 : 블럭 스코프 내에서 선언된 변수. 스택 메모리에 저장되며 함수가 종료되면 스택 프레임이 반환되면서 더이상 접근 불가능해짐.
//
//
//

#include <stdio.h>

int add(int A, int B);

int add(int A, int B)//main에 있는 A, B 변수와 add 함수에 있는 A, B 변수는 별개의 변수다. add(A) != main(A), add(B) != main(B)
{
	// int A와 int B는 지역 변수일까요?
	A += 5;
	B += 2;
	int Result = A + B;
	return Result; // 이 시점에서 add 함수의 A 변수와 B 변수는 사라지고 Result의 값만 반환되어 main 함수의 add(A, B)에 대입된 상태다.
}

int main(void)
{
	int A = 2, B = 5;
	int Result;
	Result = add(A, B); //여기서는 어디까지나 메인 함수에서 A와 B의 인자값을 받아서 add 함수의 매개변수에 대입시킨 뒤 int Result = A + B;를 통해 합쳐진 Result의 값을 가져온 것.
	printf("add(A, B) == %d", Result);// Result의 값은 main 에 있는 A와 B 변수가 아닌 add 함수의 A와 B 변수의 영향을 받기에 7이 아닌 add 함수 내에서 변경된 14가 출력됨.

	return 0;
}
// Main.c
// 정적 지역 변수 : 지역 변수 앞에 static 키워드가 붙으면 데이터 섹션에 저장되기에 함수가 종료되어도 값이 유지된다.
// 원본은 다른 곳에 저장되어 있으며 함수 내에 있는 건 그 값을 호출한 더미 라고 봐도 됨.
// 49 : 19

#include <stdio.h>

int Num(int A, int B)
{
	static int C = 0; // 변수 C에 static을 붙여서 정적 지역 변수로 전환시켰다. 이 줄부터 int C의 본체는 다른 곳에 저장되어있고 여기에 나와있는 건 int C의 값이 대입된 복제품이다.
	// 때문에 다른 곳에 존재하는 C를 불러오는 것이기에 변수 선언 및 초기화는 적용되지 않는다(그렇다면 static을 붙인 것과 아닌 것의 차이가 없기에) ''첫번째에 static int C = 0; 으로 변수 C가 선언되었된 이후로 이 코드는 기능을 하지 않는다.''
	int D = A + B + C;
	++C; // 다른 곳에 저장된 변수 C의 값을 변동시키는 것이기에 매 함수가 실행 될 때마다 시행된다. 그렇게 시행된 변동사항은 변수 C의 본체에 저장된다.
	return D;
}

int main(void)
{

	int A = 5;
	int B = 3;

	printf("%d\n", Num(A, B)); // 함수가 1회 호출 되었기에 C의 값은 여전히 0으로 A + B + 0 = 8
	printf("%d\n", Num(A, B)); // 함수가 2회 호출 되었기에 C의 값은 1로 A + B + 1 = 9
	printf("%d\n", Num(A, B)); // 함수가 3회 호출 되었기에 C의 값은 2로 A + B + 2 = 10

	return 0;
}
// Main.c
// const 변수
// const 키워드가 붙은 변수. 초기화 이후에 값을 변경할 수 없고 초기화가 강제됨. 구조 : const 변수타입 변수명

#include <stdio.h>

// const int GConstVar = 7; // 이 코드에서 전역변수 GconstVar가 7로 초기화되고 값이 고정되었다. const(초기화고정 키워드)
int GConstVar = 7;

// const static int SConstVar = 14; // 이 코드에서 정적지역변수 SConstVar가 14로 초기화되고 값이 고정되었다. const(초기화고정 키워드) static(정적지역변수 키워드)
static int SConstVar = 14;

int main(void)
{
	// const int LocalConstVar = 10; // 이 코드에서 LocalConstVar 변수가 10으로 초기화되고 값이 고정되었다. const(초기화고정 키워드)
	int LocalConstVar = 10;

	LocalConstVar = GConstVar * 2; // 해당 코드에서 값이 고정되어 있는 LocalConstVar의 값을 새로운 값으로 대입시키려 했기에 오류가 발생한다.
	GConstVar = LocalConstVar * 2; // 마찬가지의 이유
	SConstVar = GConstVar * 3; // 마찬가지의 이유

	printf("%d %d %d\n", GConstVar, SConstVar, LocalConstVar);

	// int A = 5;
	// const int A = 10; -> 이와 같이 이미 선언된 변수에 const 키워드를 붙일 수는 없다.


	// 예제

	printf("%s\n", "Samur Maykr : What is wrong, Doom Slayer ?");
	printf("%s\n", "Doom Slayer : I'm dissatisfied because I can't kill as many demons as I want.");
	printf("%s\n", "Samur Maykr : In that case, why don't you receive my blessing?");
	printf("%s\n", "Samur Maykr : You can become as strong as you want.");
	printf("%s\n", "Doom Slayer : good.");
	const int DSAttack = 99999;
	const int DSDefense = 99999;
	const int DSHp = 99999;
	printf("%s\n", "Samur Maykr : It is all done.");
	printf("%s\n", "Doom Slayer : Wait a minute, what if those demons steal my power?");
	printf("%s\n", "Samur Maykr : Don't worry. This blessing is of an unchangeable value.");
	printf("%s\n", "Doom Slayer : good.");
	printf("%s\n", "demon1 : Oh God");
	printf("%s\n", "demon2 : Run away right now!!!");

	return 0;
}
// Main.c
// 챕터 6-4 : 전방 선언 : 이 뒤에 함수가 있을 걸 알리면서 컴파일 에러가 나오지 않게끔 막는 선언

#include <stdio.h>

//int add(int a, int b); /* forward declaration. */ // 이 부분이 add 함수의 전방선언. 함수 내용 없이 머리 부분만 존재한 채 이 뒤에 add 함수가 있을거라는 걸 알려줌.


//int main(void)
//{
//	printf("add(2, 5) == %d", add(2, 5));
//
//	return 0;
//}
//
//int add(int a, int b) /* function definition. */ //만약 이 함수 없이 전방선언만 존재할 경우 컴파일 에러가 뜨면서 빌드 실행이 안됨.
//{
//	return a + b;
//}

void Jang(void)
{
	printf("Agwi: Hey! Smash off this fucking bastard's hand!\n");


}

void Sakura(void);

int main(void)
{

	printf("Goni : It is chilling. A dagger flies and pierces my heart.\n");
	printf("Goni : But do not worry. The hand is faster than the eye.\n");
	printf("Goni : One card from the bottom for Agwi.One card from the bottom for Madam Jeong.\n");
	printf("Goni : One for me.Another card from the bottom for Agwi.Now, to Madam Jeong, \n");
	printf("Goni : the last card.\n");
	printf("Agwi : Stop right there. Are you cheating?\n");
	printf("Goni : what?\n");
	printf("Agwi : You took my hand and Madam Jeong's hand from the bottom, right?\n");
	printf("Agwi : Do I look like a complete idiot to you, you bastard?\n");
	printf("Goni : Do you have evidence?\n");
	printf("Agwi : Evidence? I have evidence.\n");
	printf("Agwi : You must have given me a 9-pair. And this thing you're trying to give to Madam Jeong—this, this, isn't this a 10-pair?\n");
	printf("Agwi : Now, everyone, look. Isn't it that he's going to give Madam Jeong the jackpot to end this game?\n");
	printf("Hogu : Yerim, look at that hand. Is it a Jang?\n");
	printf("Agwi : Don't touch the cards! Your hand will be chopped off. Bring the hammer!\n");
	printf("Goni : Fine. I'll bet all my money and my hand that this hand isn't a maple leaf.\n");
	printf("Agwi : Are you ready? Shall we open it? Alright~ I'm going to check it out right now~\n");
	Sakura();
	printf("Agwi : I saw it. I'm telling you, I clearly saw that son of a bitch sleight of hand!\n");
	printf("Goni : Don't bet if you're not sure. Didn't you learn that? What are you doing? Not taking your big brother's hand.\n");
	return 0;
}

void Sakura(void)
{
	printf("Hogu : Is it Sakura?\n");


}