[따배씨++]Chapter1. C++의 기초적인 사용법
카테고리: Cpp
태그: Programming
인프런에 있는 홍정모님의 홍정모의 따라하며 배우는 C++ 강의를 듣고 정리한 내용입니다.
🚆 변수 & 함수와의 첫 만남
변수
객체
: 메모리 공간을 차지하고 있는 것변수
: 객체를 담는 메모리 공간 (변수이름 = 주소)Literal
: 고정된 값 ( x = 2 일 때 x: variable, 2: literal)L-value
: 주소를 갖고 있는 공간R-value
: 공간에 들어갈 값
주의) 변수는 항상 초기화 하는게 좋다. release 모드에서 초기화 안하면 컴파일러가 알아서 초기화 하는데 대참사 일어날 수 있음.
함수
int add(int a, int b)
{
retrun a+b;
}
- return 만나면 끝 (return 밑에 있는 statements 실행 안됨)
- 함수 안에 함수 정의 못함 (nested class는 가능)
변수 & 함수 이름 짓기
- 숫자 시작 X
- 특수문자 시작 X ( 단, under bar_ 는 가능)
- 예약어 X (ex. for, if, true, …)
- 빈칸 포함 X
입출력 스트림
#include <iostram>
std::cout << "Hello World";
- cout, cin, endl, …
- «, » 오버로딩되어있어서 객체 타입에 맞게 입출력
#include <cstido>
- c언어에서 쓰던 라이브러리
- printf, fprintf, fopen, …
- iostream 쓸 수 있으면 iostream (블로그 카더라..)
Declaration (선언) & Definition (정의)
#include <iostream>
int doSomething(int a, int b); // forward declaration
int main()
{
std::cout << doSomething(1,2) << std::endl;
return 0;
}
// definition
int doSomething(int a, int b)
{
return a + b;
}
- main 안에서 쓰는 함수를 main 뒤에다 정의하면 compile error남
- 컴퓨터는 doSomething이 뭔지 모름
- 함수의 프로토타입(body 없음)을 main 앞에 선언해야 함
🚆 헤더 파일
프로그램이 커지면 함수의 declaration, definition 파일을 나눠 관리한다. (중간중간에 수정할 일이 많아서 현실적으로 완벽하게 나누기는 힘들다고 함)
- main.cpp : main 함수
- ~~_header.h : 프로토타입 모아서 선언만 하는 헤더 파일
- ~~.cpp : 헤더에서 선언한 함수들 정의 모아놓은 파일
헤더 파일 불러오기
#include "{file_name}.h"
- <iostream> 같이 <>쓰는 헤더 파일은 특별한 놈들 (컴파일러 라이브러리 폴더에 있음)
- main 들어있는 프로젝트와 위치가 다르다면 경로 써줘야 함 “path/{file_name}.h”
- 정의 모아놓은 cpp파일도 같은 위치에 있어야 함
헤더 가드
파일이 커서 여러 개의 헤더 파일을 include하다 보면 함수가 중복 정의될 가능성이 아주 크다(헤더 파일들 자기들끼리 include하고 난리 남). 이럴 경우 링킹 에러(컴파일 에러) 라는 무시무시한 놈을 만나게 된다. 따라서 이런 상황을 막기 위한 특별한 전처리기 헤더 가드 가 존재한다.
#pragma once
한 줄 작성하면 끝!
🚆 Name Space
namespace Myspace
{
int doSomething(int a, int b)
{
return a + b;
}
}
int doSomething(int a, int b)
{
return a * b;
}
using namespace std;
int main()
{
cout << Myspace::doSomething(1, 3) << endl;
}
- 같은 이름의 함수나 변수를 구분할 수 있음
- 네임 스페이스가 다르면 다른 함수
- nested namespace 가능
- using namespace std; 선언으로 std:: 생략 가능(지역 범위 적용)
🚆 전처리기
전처리기는 컴파일 실행 이전에 미리 처리되는 문장이다. 헤더파일 불러오기, 치환 등 간단한 역할을 하기도 하지만 경우에 따라 컴파일 결과를 완전히 바꾸는 중요한 역할을 하기도 한다.
#define NUMBER 9
- 해당 파일 내에서 NUMBER는 9로 바꿈 (단순 매크로)
- 대문자로 정의
전처리기 응용
#define LIKE_APPLE
int main()
{
#ifdef LIKE_APPLE
cout << "Apple" << endl;
#endif
#ifndef LIKE_APPLE
cout << "Orange" << endl;
#endif
return 0;
}
- 상황에 맞게 재활용하기 좋음
댓글 남기기