C++, 1.C++의 기초적인 사용법

이도현·2023년 8월 9일
0

1. 프로그램의 구조

1) 표현식(Expression)과 명령문(Statement)의 차이는 뭘까?

Expression은 '수식'이라는 뜻으로 하나 이상의 값으로 표현(reduce)될 수 있는 코드를 말하다. 일상생활에서의 수식은 숫자와 연산자만으로 이루어지는 것과 달리 컴퓨터 과학에서 수식은 함수 콜(), 변수 이름 등의 식별자, 배열등의 할당 연산자([])등 까지도 포함한 식을 의미한다. 핵심은,Expression들은 평가(evaluate)가 가능해서 하나의 '값'으로 환원된다는 것이다.

statement는 '진술', '서술'의 의미로 프로그래밍에서는 실행가능한(executable)최소의 독립족인 코드 조각을 일컫는다. 우리가 프로그래밍을 하면서 컴파일러가 이해하고 실행살 수 있는 모든 구문은 statement라고 할 수 있다. statement는 흔히 한 개 이상의 expression과 프로그래밍 키워드를 포함하는 경우가 많다.

expression은 statement의 부분집합니다.

2) 함수와 라이브러리의 차이는 뭘까?

함수는 매개변수의 값들을 받아서 리턴 값을 돌려주는 일련의 과정을 정의한 것

[리턴 자료형] [함수이름]([매개변수 1 자려형][매개변수1 이름], ....)
{     
    [명령문]

     return [리턴 값]
}
  • 라이브러리는 자주 사용하는 함수들을 모아놓은 일종의 패키지라고 할 수 있다.

3) C++에서 문장을 끝내는 기호는 뭘까?

;

4) 문법 오류란 무엇인가?

프로그램 실행 중 발생하여 프로그램이 비정상적으로 종료되게 하는 오류를 일컬으며 , 문법 오류는 보통 컴파일러가 어떤 줄 에서 어떤 이유로 발생했는지 알려주는 편이다.

2. 주석 comments

// 와 /**/를 사용하면 주석처리가 된다.

// 주석이다.

/*주석이다*/
  • 보통 주석은 함수나 변수 등을 다른 프로그래머가 읽을 때 식별하기 모호한 경우 작성하여 준다.

  • Ctrl + k + c 단축키를 통해 주석처리를 할 수 있고,

  • Ctrl + k + u 단축키를 통해 주석처리를 해제할 수 있다.

3. 변수와의 첫 만남

1) 객체(Object)

: 정의가 모호하나 실세계에 존재하거나 생각할 수 있는 것, 속성과 기능을 가지는 프로그램 단위를 뜻한다고 볼 수 있다.

2) 변수(variables)

: 변수는 어떤 공간에 어떤 값을 저장하기 위한 이름을 가진 공간

3) Left-values 와 Right-values

: 심플하게 Lvlaue는 표현식 이후에도 사라지지 않는 값. 이름을 지니는 변수 Rvalue는 표현식 이후에는 사라지는 값. 임시 변수. 이다.

4)초기화initialization와 대입 assignment

:initialization은 메모리 공간이 만들어진 시점에 단 한번 값을 저장합니다.
:assignment는 메모리 공간이 만들어진 시점 이후에 메모리 값을 변경시키는 연산입니다.

  • 초기화는 단 한번만 발생 되고, 대입은 무한히 발생 할 수 있습니다.

5)초기화를 안 했을 때의 문제점

  • 초기화를 하지 않으면 메모리 안에는 쓰레기 값이 들어간다. 쓰레기 값은 runtime error를 발생 시킬 수 있고 코드가 컴파일 과정에 문제가 안생긴지를 체크할 뿐, 실행시간 안에 제대로 동작하는 지 보장받지 못한다.

4. 입출력 스트림과의 첫 만남 cin, cout

cin(consol in)

cout(consol out)

endl(end line)

#include <iostream>  // cout, cin, endl, ...
#include <cstdio>	 // printf

using namespace std; // 를 선언함을 통해 이 후std::를 사용할 필요가 없어진다.

int main()
{
	
	std::cout << "i'm interested in this lecture!\n"; // << std::endl;
	cout << "trick" << "\t" << "magic" << endl;	      // \t는 tab의 기능을 가짐.
	cout << "\a";                                     // \a는 오디오 출력

	int x;
	cin >> x;  //x를 선언함으로 cin에 입력 받을 변수공간을 줄 수 있다.
			   //너무 큰 값을 입력할 경우 int라는 자료형의 최대 값이 출력된다.
		       //궁금하면 직접 해볼 것
	return 0;
}

5. 함수와의 첫 만남

(직전에 함수에 대해 간략히 요약했음으로 Tip위주로 내용을 정리할 것이다.)

1) 함수의 이름을 지을 땐 가급적 자세히 직관적으로 짓는다.
2) 같은 함수명 반복적으로 입력돼 있을 때 함수명 우클릭 > rename을 통해 전체적으로 이름을 바꿔줄 수 있다.
3) 맨 왼쪽 브레이크 포인트 찍은 후 빌드모드를 Debug로 바꾸어서 local window debuger를 눌러 stepinto(f11)를 눌러보면서 코드의 작동 순서와 원리에 대해서 한단계씩 찍어 볼 수 있다.

6. 키워드와 식별자 이름짓기

1) 프로그램에서 사용되는 예약어는 다 외울수는 없지만 필요할 때 찾아보며 키워드와 식별자 이름을 지을 때 중복되지 않도록 해야한다.
2) 숫자로 시작 안된다.
3) 특수문자 시작 안된다. 단, 언더바_ 는 가능
4) 빈칸 안된다.(회사마다 함수명 짓는 스타일이 다르다)

7. 지역범위

1) 중괄호{}는 지역범위이다. 지역 범위에서 벗어나면 사용할 수 없어지며, 지역 변수를 벗어날 때 '스택(stack)'메모리로 반환 된다.
2) 중괄호 안의 중괄호는 영역을 나누어 주며 변수의 이름이 같아도 메모리 주소가 다르다.
3) 중괄호에 x가 중괄호 안에 중괄호에서 x가 따로 선언 될 경우 각각 cout << &x << endl;를 통해 주소가 다름을 확인 할 수 있다.

따라해보고 결과 유츄해보기

#include <iostream>  

using namespace std;

void doSomething(int x)
{
	x = 144;
    
	cout << x << endl; // #2
}

int main()
{
	int x = 0;
    
	cout << x << endl; // #1
	doSomething(x);
	cout << x << endl; // #3
    
	return 0;
}

8. 연산자와의 첫 만남

리터럴 Literal

피연선자 Operand

단항 unary, 이항 binary, 삼항 ternary

#include <iostream>  

using namespace std;


int main()
{
	int x = 2; // x is a variable, 2 is literal.
			   // = is Assignment	
	cout << x + 3 << endl; // + is operater ,x and 2 is operand
	
	
	cout << "Hello, World" << endl; //문자열 literal 출력

	//C++의 삼항연산자
	int y = (x < 0) ? 1 : 2;
	// 참이면 1 실행, 거짓이면 2 실행

	return 0;
}

9. 기본적인 서식 맞추기

1) 가독성이 좋은 코드가 좋은 서식
2) 컴파일러는 빈칸을 거의 무시하지만 프로그래머의 효율을 위해 여백을 잘 사용해야 한다.
...... 황금율이 있다는 것은 아니고 정답은 아니지만 통상 적으로 그렇다는 것
3) 변수 선언 줄 맞춤해주면 좋다
4) 주석은 길 경우 위에 짧은 경우 오른쪽

10. 선언과 정의의 분리

컴파일러는 위에서 아래로 일을 진행한다. 윗 공간에 정의된 클래스, 함수 등등이 많아진다면 매인 함수에서 프로그램이 무엇을 하고자하는 것을 파악하는데에 가독성이 떨어지므로 매인 함수를 위로 올리고 그 위에 정의된 것들을 선언하여(전방선언) 가독성을 늘린다.

#include <iostream>  

using namespace std;

int add(int a, int b); // forward declarion

int main()
{
	cout << add(4, 4) << endl;

	return 0;
}

//definition
int add(int a, int b)
{
	return a + b;
}

11. 헤더 파일 만들기

1) 비슷한 기능을 하는 것들을 모어 헤드파일을 새로 만들어 모아두면 좋다.
2) 헤더 파일을 폴더에 넣을 경우
#include "상위폴더/헤더파일"
로 불러온다.
3) 클래스는 헤더파일로 쪼개고 작성하는게 통상적인 순서이다.

12. 헤더 가드

  • 소스파일에 있는것과 헤더파일에 있는 것이 중복되어 include 될 경우 linking error가 일어남으로 헤더가드를 사용하여야 한다.

  • #pragma once는 헤더파일 생성시 visual studio에서 자동 생성해주어 헤더가드 역할을 해준다.

헤더파일의 경우 실무적인 부분이다. 나중에 사용하면서 검색을 하며 복습하는 것이 좋아보임


13. 네임스페이스(명칭공간)

#include <iostream>  

namespace MS1 // 공간을 생성
{
	int DS(int a, int b)
	{
		return a - b;
	}
}

namespace MS2 // 이름이 다른 두공간에 같은 이름의 함수를 넣을 수 있게 된다.
{
	int DS(int a, int b)
	{
		return a + b;
	}
}

using namespace std;

using namespace MS2; //using nameapce [이름] 선언을 통해 [namespace]::[def]를
					 // 할 필요 없이 [def]만 작성하여 코드 사용 가능

int main()
{
	MS1::DS;
	DS;

	return 0;
}

14. 전처리기와의 첫 만남

#include <iostream>

#define MY_NUMBER 9 //메크로로서 MY_NUMBER을 만나면 9로 치환해주는 것

구글에 std::[]를 입력하여 사용하고자 하는게 이미 프로그램 내에 내장되어 있는지 검색 가능

전처리기 define, ifdef endif를 활용하여 한번 정의하면 중복 불가하다.

profile
좋은 지식 나누어요

0개의 댓글