Expression은 '수식'이라는 뜻으로 하나 이상의 값으로 표현(reduce)될 수 있는 코드를 말하다. 일상생활에서의 수식은 숫자와 연산자만으로 이루어지는 것과 달리 컴퓨터 과학에서 수식은 함수 콜(), 변수 이름 등의 식별자, 배열등의 할당 연산자([])등 까지도 포함한 식을 의미한다. 핵심은,Expression들은 평가(evaluate)가 가능해서 하나의 '값'으로 환원된다는 것이다.
statement는 '진술', '서술'의 의미로 프로그래밍에서는 실행가능한(executable)최소의 독립족인 코드 조각을 일컫는다. 우리가 프로그래밍을 하면서 컴파일러가 이해하고 실행살 수 있는 모든 구문은 statement라고 할 수 있다. statement는 흔히 한 개 이상의 expression과 프로그래밍 키워드를 포함하는 경우가 많다.
expression은 statement의 부분집합니다.
함수는 매개변수의 값들을 받아서 리턴 값을 돌려주는 일련의 과정을 정의한 것
[리턴 자료형] [함수이름]([매개변수 1 자려형][매개변수1 이름], ....)
{
[명령문]
return [리턴 값]
}
;
프로그램 실행 중 발생하여 프로그램이 비정상적으로 종료되게 하는 오류를 일컬으며 , 문법 오류는 보통 컴파일러가 어떤 줄 에서 어떤 이유로 발생했는지 알려주는 편이다.
// 와 /**/를 사용하면 주석처리가 된다.
// 주석이다.
/*주석이다*/
보통 주석은 함수나 변수 등을 다른 프로그래머가 읽을 때 식별하기 모호한 경우 작성하여 준다.
Ctrl + k + c 단축키를 통해 주석처리를 할 수 있고,
Ctrl + k + u 단축키를 통해 주석처리를 해제할 수 있다.
: 정의가 모호하나 실세계에 존재하거나 생각할 수 있는 것, 속성과 기능을 가지는 프로그램 단위를 뜻한다고 볼 수 있다.
: 변수는 어떤 공간에 어떤 값을 저장하기 위한 이름을 가진 공간
: 심플하게 Lvlaue는 표현식 이후에도 사라지지 않는 값. 이름을 지니는 변수 Rvalue는 표현식 이후에는 사라지는 값. 임시 변수. 이다.
:initialization은 메모리 공간이 만들어진 시점에 단 한번 값을 저장합니다.
:assignment는 메모리 공간이 만들어진 시점 이후에 메모리 값을 변경시키는 연산입니다.
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;
}
(직전에 함수에 대해 간략히 요약했음으로 Tip위주로 내용을 정리할 것이다.)
1) 함수의 이름을 지을 땐 가급적 자세히 직관적으로 짓는다.
2) 같은 함수명 반복적으로 입력돼 있을 때 함수명 우클릭 > rename을 통해 전체적으로 이름을 바꿔줄 수 있다.
3) 맨 왼쪽 브레이크 포인트 찍은 후 빌드모드를 Debug로 바꾸어서 local window debuger를 눌러 stepinto(f11)를 눌러보면서 코드의 작동 순서와 원리에 대해서 한단계씩 찍어 볼 수 있다.
1) 프로그램에서 사용되는 예약어는 다 외울수는 없지만 필요할 때 찾아보며 키워드와 식별자 이름을 지을 때 중복되지 않도록 해야한다.
2) 숫자로 시작 안된다.
3) 특수문자 시작 안된다. 단, 언더바_ 는 가능
4) 빈칸 안된다.(회사마다 함수명 짓는 스타일이 다르다)
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;
}
리터럴 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;
}
1) 가독성이 좋은 코드가 좋은 서식
2) 컴파일러는 빈칸을 거의 무시하지만 프로그래머의 효율을 위해 여백을 잘 사용해야 한다.
...... 황금율이 있다는 것은 아니고 정답은 아니지만 통상 적으로 그렇다는 것
3) 변수 선언 줄 맞춤해주면 좋다
4) 주석은 길 경우 위에 짧은 경우 오른쪽
컴파일러는 위에서 아래로 일을 진행한다. 윗 공간에 정의된 클래스, 함수 등등이 많아진다면 매인 함수에서 프로그램이 무엇을 하고자하는 것을 파악하는데에 가독성이 떨어지므로 매인 함수를 위로 올리고 그 위에 정의된 것들을 선언하여(전방선언) 가독성을 늘린다.
#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;
}
1) 비슷한 기능을 하는 것들을 모어 헤드파일을 새로 만들어 모아두면 좋다.
2) 헤더 파일을 폴더에 넣을 경우
#include "상위폴더/헤더파일"
로 불러온다.
3) 클래스는 헤더파일로 쪼개고 작성하는게 통상적인 순서이다.
소스파일에 있는것과 헤더파일에 있는 것이 중복되어 include 될 경우 linking error가 일어남으로 헤더가드를 사용하여야 한다.
#pragma once는 헤더파일 생성시 visual studio에서 자동 생성해주어 헤더가드 역할을 해준다.
헤더파일의 경우 실무적인 부분이다. 나중에 사용하면서 검색을 하며 복습하는 것이 좋아보임
#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;
}
#include <iostream>
#define MY_NUMBER 9 //메크로로서 MY_NUMBER을 만나면 9로 치환해주는 것
구글에 std::[]를 입력하여 사용하고자 하는게 이미 프로그램 내에 내장되어 있는지 검색 가능
전처리기 define, ifdef endif를 활용하여 한번 정의하면 중복 불가하다.