Kim Seon Deok

[C++] 기초적인 사용법 본문

CC++

[C++] 기초적인 사용법

seondeok 2022. 11. 22. 16:46

 

 

 

 

프로그램 완성과정

프로그램의 작성 > 작성한 프로그램 컴파일 > 컴파일 결과물 링크 의 과정을 거쳐야 한다. 

 

debug mode 

디버깅을 할 수 있도록 도와주는 모드

 

release mode

개발한 소프트웨어를 유저에게 배포하는 모드. debug모드보다 빠르다

 

 

기본 구조

# include <iostream>  // 헤더파일 선언문

int main(void) // 출력에 대한 정보, 함수 이름, 입력에 대한 정보
{
	return 0;
}

프로그램의 기본단위는 함수이다. 

제일 먼저 호출되는 함수는 main함수이다. 

 

return

  • 함수를 호출한 영역으로 값을 반환
  • 현재 실행중인 함수의 종료

 

 

 

변수

#include <iostream>

int main()
{
    int x = 5 ; // initialization
    x = 123; // assignment
    std::cout << x << std::endl; //변수 출력
    std::cout << &x << std::endl; // 변수의 주소값 출력
    
    return 0;
}

변수를 선언하는 것은 메모리 공간을 할당하는 것이다.

initializaion : 선언된 변수에 처음 값을 저장

변수는 항상 초기화를 해주는 게 좋기 때문에 assignment를 통해 메모리에 공간을 할당해준다.

변수를 선언만 하고 초기화 하지 않으면 쓰레기 값이 저장된다.

 

 

 

 

입출력 스트림

 

    int x = 1024;
    double pi = 3.141592;
    
    std::cout << "I love this lecture!\n" << std::endl; // \n은 줄바꿈
    std::cout << "x is " << x << " pi is " << pi << std::endl;
    
    std::cout << "abc" << "\t" << "def" << std::endl; // \t는 tab, 줄을 맞춰줌
    std::cout << "ab" << "\t" << "cdef" << std::endl;

cout, cin, endl은 iostream 안에 정의되어 있다.

std는 namespace이다. cout, cin, endl는 namesapce 안에 정의되어 있고 이들을 사용하기 위해서는 iostream 필요하다.

 

std::>> 은 데이터의 출력에 사용

<< 은 output operator이다. 출력하고자 하는 stream이 cout으로 들어감

 

 

using nameapce std;

using namespace std;

int x = 1024;
double pi = 3.141592;

cout << "I love this lecture!\n" << endl; // \n은 줄바꿈
cout << "x is " << x << " pi is " << pi << endl;

cout << "abc" << "\t" << "def" << endl; // \t는 tab, 줄을 맞춰줌
cout << "ab" << "\t" << "cdef" << endl;

cout << "\a"; // 소리 출력
return 0;

using nameapce std;를 추가해주면 cout, endl 앞에 붙어있는 std::생략할 수 있다.

 

using namespace std;

int x ;
cin >> x ; // x 입력받음
cout << "Your input is " << x << endl; // x 출력

std::>>cin 은 데이터 입력에 사용된다.

>>은 input operator이다.

 

 

 

 

 

함수

#include <iostream>
using namespace std;

int addTwoNumbers(int num_a, int num_b)
{
    int sum = num_a + num_b;
    
    return sum ; // sum은 int형태로 반환
}

int main()
{
    cout << addTwoNumbers(1,2) << endl;
    cout << addTwoNumbers(3,4) << endl;
    cout << addTwoNumbers(8,21) << endl;
    
    return 0;
}

함수의 return값의 형태와 함수 선언 할 때의 앞에 있는 출력형태와 같아야 한다.

#include <iostream>
using namespace std;

void PrintHelloWorld(void) // return 할 게 없다면
{
    cout << "Hello World" << endl;
    return ; // main문으로 돌아감
}

int main()
{
    PrintHelloWorld();
    
    return 0;
}

함수 내에서 함수를 정의할 수 없다.

 

 

 

 

지역범위(Local scope)

int main()
{
    int x=5;
    {
        int x = 1; // 다른 영역에 대한 식별자
        cout << x << endl;
        cout << &x << endl;
    }
    
    {
        int x = 3; // 다른 영역에 대한 식별자
        cout << x << endl;
        cout << &x << endl;
    }
    cout << x << endl;
    cout << &x << endl;
    
    return 0;
}

{ }안에 선언된 지역변수는 { }를 벗어나면 사라진다. 지역변수가 차지하고 있던 메모리는 그 지역변수가 영역을 벗어날 때 stack 메모리로 반납된다. 반납된 메모리는 다음 지역변수가 사용할 수 있도록 대기한다.

 

 

 

 

연산자

 

int main()
{
    int x = -2; // x is a variable, 2 is a literal. assignment, 단향연산
    cout << x + 2 << endl;  // 이항연산
    int y = (x>0) ? 1 : 2 ; //  (조건식) 참이면 1, 거짓이면 2  삼항연산
    cout << y << endl;
    return 0;
}

 

변수 : 메모리 주소를 가지고 있는 것

리터럴 : 소스코드에 고정된 값

단항연산자 : -2

이항연산자 : 1+3

삼항연산자 : conditional operator는 유일한 삼항연산자이다.

 

하드코딩은 프로그래머가 코드에서 변수값을 리터럴 처럼고정된 값으로 직접 대입해주는 방식이다.

소프트코딩은 프로그램 실행 중에 사용자의 입력이나 외부파일, 인터넷 통신 등으로 데이터를 가져오는 방식이다.

 

 

 

선언과 정의의 분리

#include <iostream>
using namespace std;

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

int main()
{
    cout << add(1,2) << endl;
    cout << sub(1,2) << endl;
    cout << multiply(1,2) << endl;
    return 0;
}

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

main함수 뒤에 add함수가 definition 되어 있을 때, 맨 위에 add함수를 미리 선언해주는 것을 forward declaration이라 한다.

 

 

 

 

 

 

헤더파일 생성

#include <iostream> // processor directive 
#include "add.h"  // 헤더파일 가져옴

using namespace std;

int main(void)
{
	cout << add(1, 2) << endl;
	return 0;
}

소스파일

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

헤더파일

헤더파일의 폴더가 바뀐 경우

# include "(폴더이름) / (헤더파일 명)"

 

네임스페이스

#include <iostream>
using namespace std;
namespace MySpace1
{
    int doSomething(int a, int b)
    {
        return a+b;
    }

}

int doSomething(int a, int b)
{   
    return a * b;
}

int main()
{
    cout << MySpace1::doSomething(3,4)<<endl;
    cout << doSomething(3,4) << endl;
    return 0;
}
#include <iostream>
using namespace std;

namespace MySpace1
{
    int doSomething(int a, int b)
    {
        return a+b;
    }

}

namespace MySpace2
{
    int doSomething(int a, int b)
    {   
        return a * b;
    }
}

int main()
{
    using namespace MySpace1;
    doSomething(3,4); // MySpace1의 doSomething 실행
    cout << doSomething(3,4) << endl;
    return 0;
}

namespace 안에 namespace를 넣을 수도 있다.

 

 

 

 

전처리기

 

#include <iostream>

using namespace std;
#define MY_NUMBER "Hello World"  // 매크로

int main()
{
    cout << MY_NUMBER << endl;
    
    return 0;
}

매크로는 MY_NUMBER을 만나면 그 다음의 것으로 교체해주는 역할을 한다.

#include <iostream>
#include <algorithm>
using namespace std;

#define MAX(a,b) (((a) > (b)) ? (a) : (b))  // 매크로

int main()
{
    cout << std::max(1+3,2) << endl;
    
    return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;

#define LIKE_APPLE  // 매크로

int main()
{
#ifdef LIKE_APPLE  // 조건에 맞춰서 컴파일 >> O
    cout << "Apple" << endl;
#endif

#ifndef LIKE_APPLE   // X
    cout << "Orange" << endl;
#endif

    return 0;
}

전처리기는 빌드하기 전 main안에 있는 내용들을 결정해버리는 역할을 한다. → 선택적 컴파일 가능

#define은 정의되어있는 cpp파일 내에서만 유효하다.

'CC++' 카테고리의 다른 글

배열 & 포인터  (0) 2022.11.25
Comments