C++에서 바뀐 입출력 스타일 헤더, cout, cin, namespace와 std::의 의미, using

헤더
C언어
#include <stdio.h>
C++의 옛날 스타일
#include <iostream.h> //오류발생
C++ 현재 스타일
#include <iostream>

C++에서 추가된 namespace 40p

여러 사람이 동시에 한 프로젝트를 만들 때 중복된 함수명, 변수명을 쓰게 된다면..?
컴파일 오류가 발생한다.
그럼 일일이 중복되는 것들을 다 고쳐줘야된다.
namespace는 이런 상황을 방지하기 위해 나온 것

namespace AAA
{
  void function()
 {
 }
}
namespace BBB
{
 void function()
 {
 }
}

int main(void)
{
 AAA::function() //A함수 호출
 BBB::function() //B함수 호출
}

cout와 cin, endl은 std라는 namespace에 정의된 함수이기 때문에
std::cout, std::cin, std::endl로 사용됨
int k, l;
std::cin>>k>>l;
std::cout<<"하이"<<k<<"명"<<std::endl;
이런식으로 사용..

std::라고 쓰는게 귀찮으니까... 이걸 계속 쓰겠다는 명령을 내려줄 수 있음

using std::cout;
using std::endl;
using std::cin;
이 세 가지는 std::를 안 붙이고 그냥 계속 쓰겠다는 선언

using namespace std;
std의 모든 명령어를 std::안 붙이고 쓰겠다는 선언...
이 경우 중복되는 함수가 있으면 오류가 날 수도 있다.

프로그래밍의 모듈화 - 소스코드 파일의 분할 작성

모듈화의 장점
소스파일이 여러개일 때 파일 수정 시 전체 파일을 재컴파일하지 않고 수정된 파일만을 재컴파일하면 된다.

extern
----------------
외부 변수를 가져오는 키워드
file1.c----------
int i=0;
--------------
file2.c-------------
#include
<stdio.h>
extern int i;

int main()
{
    i++;
   
printf("%d \n", i);
    return 0;
}
---------------------

static
int val1;  //static으로 선언된 것은 extern으로 접근불가
int val2;

헤더를
포함시키는 두 가지 방법 ---------------------
#include <stdio.h>
#include
"plus.h"  //현재 소스코드 디렉토리에 있는 plus.h를 삽입하라
#include
"c:\header\lib\plus.h"  //지정 위치에 있는 plus.h를 삽입하라

--------------header
파일의 유용성
자주 사용하는 외부 함수를 여러개 포함시켜야 할 경우
한두개라면 따로 선언을 하거나
extern
add(double a, double b);
와 같은 형태로 선언을 하면 된다.
그러나... 갯수가 많다면 성가시다.

런 경우
#include "calculator.h"와 같은 형태로 포함을 시키면 편하게 사용할 수 있다.

조건부
컴파일--------------------------
#if, #elif, #else, #endif

#if
CONDITION==1
    #include "hello.h"
#elif CONDITION==2
   
#include "hello2.h"
#else
    #include "hello3.h"
#endif

#ifndef
~ #endif -------------------632p
// ifndef = if not define

#ifndef
_COUNT_H_  //_COUNT_H_ 를 정의하지 않았다면
   #define _COUNT_H_ 20 
//_COUNT_H_ 를 정의하고
  int count=0; //int형 변수 count도 정의하고
#endif 
//끝낸다.

_COUNT_H_ 의 값은 의미가 없다. 사용되지 않는다.
단지 count.h가 중복되서 선언되지
않도록 하기 위한 장치다.
 count.h파일이니까 _COUNT_H_ 중복되지 말라고 이상한 이름을 사용한다.
여기저기
서 count.h가 중복 선언되면 에러가 발생한다.

모든 헤더파일은 이런 중복되지 않는 형태로 감싸는게 좋다.

복 호출로 인한 중복선언의 문제를 미연에 방지하기 위해서...

------------------------헤더파일의
형태-----------
#ifdef _COUNT_H_
#define _COUNT_H_

실질적인 헤더파일
내용

#endif
--------------------------------------------