디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

C와 cpp의 차이점?

연화갤로그로 이동합니다. 2009.07.28 01:04:32
조회 48 추천 0 댓글 0

C는 C++가 구축된 기반입니다.

이것은 일반적으로 어떤 C프로그램도 자동적으로 C++프로그램(객체 지향이 아닌)이 된다는 것을 의미합니다.

그러나 C++가 객체 지향 프로그래밍을 지원하고 이러한 지원에 내재된 의미 때문에, C와 C++사이에는

약간의 차이점이 존재합니다.



C와 C++간의 가장 중요하고 미묘한 차이점들 중 하나는 C에서 다음과 같이 선언된 함수가 그 함수의

매개변수에 대해 어떤 것도 언급하지 않는다는 사실입니다.

int f();

즉, 함수 이름 다음에 있는 괄호 안에 아무것도 명시되어 있지 않을 때, C에서 이것은 그 함수의

매개변수에 대해서는 아무것도 말할 수 없다는 것을 의미합니다. 이 함수는 매개변수를 가지고

있을 수도 있고 매개변수를 가지고 있지 않을 수도 있습니다. 그러나 C++에서 이와 같은 함수 선언은

함수가 매개변수를 갖지 않다는 것을 의미합니다. 즉 C++에서 다음의 두 선언은 같죠.

int f();
int f(void);

C++에서 void는 선택사항입니다.


C++에서 모든 함수는 원형으로 정의되어야만 합니다. C에서 이것은 선택사항이나 C프로그램에서도

원형을 정의하는 것이 좋은 습관이죠.


C와 C++사이의 작지만 잠재적으로 중요한 차이점은 C에서는 문자 상수가 자동적으로 정수로 바뀌지만

C++에서는 그렇지 않다는 것입니다.


C에서는 전역 변수를 여러번 선언하여도 에러가 아니지만, C++에서는 에러입니다.


C에서는 처음 31문자만이 식별자로 유효합니다. C++에서는 적어도 처음 1,024문자가 유효하죠.

그러나 실용적인 관점에서 볼 때 긴 식별자는 다루기도 어렵고 필요치도 않습니다.


C에서는 사용자의 프로그램에서 main()함수를 호출할 수 있습니다. 그러나 C++에서는 허용되지 않죠.


C에서 register변수의 주소를 가질 수 없습니다. C++에서는 이것이 허용됩니다.

그러나 이것은 이식성에 따르는 제약 때문에 이용하고 싶은 특성이라고 할 수 없습니다.











Pointer

* Pointer : 메모리의 주소를 가리키는 변수
   - 32비트 환경에서는 4바이트의 크기를 가짐

* Pointer 규정요소
   - 주소와 타입
   - 주소만 있는 포인터 : void pointer

* Pointer 연산
   - *(dereference operator), &(address of operator)
   - Pointer + integer, Pointer - integer
   - Pointer - Pointer
     (※ Pointer + Pointer 는 없음)

* Pointer 특징
   - Low-Level 프로그래맹을 가능하게 한다.
   - 하지만 잘못 사용하면 매우 위험한 코드가 됨



int nValue = 10;

int *pValue = &nValue;
- pValue에 nValue의 주소값을 할당함

int nValue2 = *pValue;
- nValue2에 *pValue의 값(즉, nValue의 주소)를 할당
   nValue2는 nValue의 주소에 있는 값을 할당받음(즉, 10을 할당)




int arrayValues[4] = { 10, 20, 30, 40 };

int *pValue = arrayValues;
- *pValue에 arrayValues의 시작주소를 할당

int nValue;

nValue = *pValue;     // = arrayValues[0] (즉, 10)
pValue = pValue + 2; // = pValue++; pValue++;
- pValue+2는 int타입 (4바이트)의 주소를 8바이트만큼 이동시켜라.
nValue = *pValue;    // = arrayValues[2]

int nIndex = pValue - arrayValues; // 2
- pValue의 주소값에서 arrayValues의 주소값을 뺀다.
  8이 나오지만 데이터타입(int)의 크기로 나누어주면 2가나옴





Reference


* Reference = Alias & 쉬운 포인터
   - 생성과 동시에 초기화되어야 함
   - Pointer 사용할 때 많이 실수하는 점 극복
     - Address of 연산자 빼먹기
     - 초기화되지 않은 포인터 사용하기

int nValue = 10;

int &rValue = nValue;
- 같은 메모리의 주소에 두개의 이름을 할당

rValue = 11  //then nValue = 11
nValue = 12 //then rValue = 12

printf("%x %x", &nValue, &rValue);
- 같은 값 출력




Pointer vs Reference


void SwapPtr(int *x, int *y)
{
     int temp = *x;
     *x = *y;
     *y = temp;
}

void SwapRef(int &x, int &y)
{
     int temp = x;
     x = y;
     y = temp;
}

int first = 0, second = 1;
SwapPtr(&first, &second); // &를 빼먹으면 crash!
SwapRef(first, second);



Template


* Template이란?
   - 파라미터화된 타입으로 함수나 클래스를 정의
   - Function Template, Class Template
   - 타입에 관계없는 일반적(generic)인 코드 제작


template <class T> void SwapGeneric(T &a, T &b)
{
     T temp = a;
     a = b;
     b = temp;
}

int i = 10, j = 20;
SwapGeneric(i, j);

double di = 1.5, dj = 2.5;
SwapGeneric(1.5, 2.5);



기타 확장들

* Inline function
   - Macro function에 type-safe 가능하게

* 블럭의 중간에 변수정의가 가능함

* 새로운 표준 입출력 방식
   - 스트림 모델 : cout, cin

* Operator overloading
   - 연산자의 의미를 재정의 할 수 잇음

* Exception Handling
   - 에러처리를 간명하게







대충 보라능 ㅡㅡ

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 시세차익 부러워 부동산 보는 눈 배우고 싶은 스타는? 운영자 24/05/27 - -
149446 뇌자알 볼만한가요?? [15] 김탱9갤로그로 이동합니다. 09.09.27 198 0
149445 횽들 오랜만임. [7] Rei@디씨갤로그로 이동합니다. 09.09.27 101 0
149443 간단한것 같은데... 30분째 해메고 있어요 횽님들 괴물독사(59.18) 09.09.26 61 0
149442 우울하다 [6] 유리한갤로그로 이동합니다. 09.09.26 92 0
149440 C언어 피라미드.. 질문좀 해도 될까요. [16] -.-(119.204) 09.09.26 204 0
149439 책없이 할려니깐 환장 [12] 순공(122.128) 09.09.26 124 0
149438 대학교 이상해요; [5] 순공(122.128) 09.09.26 96 0
149437 비베책 사보는데 너무 성의 없는 책들이 대부분 [9] 장은성(61.80) 09.09.26 109 0
149436 C언어 배우려고 하는데 Visual C++에서 C 코드를 작성해도 되는지 [3] C(122.202) 09.09.26 78 0
149435 윈도우apm unlink 퍼미션 문제 잘 아시는 형들 없음? ㅁㅈㄷㄱ(123.214) 09.09.26 36 0
149434 형들 나 신입인데 미칠거같음..돌아뿌겠음 [3] 신입플머(58.65) 09.09.26 144 0
149433 컴파일이 안돼요.(액세스가 거부되었습니다) 자바자바자바(124.53) 09.09.26 423 0
149432 복잡한 관게 식에 대해서좀.. [6] aaa(58.238) 09.09.26 56 0
149431 ㅋㅋ 코딩스타일 읽다가 의문점.. [21] 김주현갤로그로 이동합니다. 09.09.26 182 0
149430 언제부터일까 [6] 헝헝(112.149) 09.09.26 64 0
149428 !=이것은 뭔가요? [6] aaa(58.238) 09.09.26 90 0
149427 윈도에서 돌아가는 gcc는 유니코드를 지원 안 한다? [2] 피로토스갤로그로 이동합니다. 09.09.26 113 0
149426 리얼.. [11] 김주현갤로그로 이동합니다. 09.09.26 157 0
149425 랭턴루프 비베로 작성(50만원) [18] 장은성(61.80) 09.09.26 188 0
149424 C++ Sort 함수 구현 질문 <- 이거 쓴 학생횽 바바 [4] 김주현갤로그로 이동합니다. 09.09.26 109 0
149423 여긴 질문겔입니까? [9] 눈팅족갤로그로 이동합니다. 09.09.26 78 0
149422 C#으로 그래프를 그리고 싶은데.... [10] DMW(220.68) 09.09.26 198 0
149421 실시간 게임은 쓰레드 여러개 돌리니깐 머리 터지겠네... [14] 신발라마갤로그로 이동합니다. 09.09.26 174 0
149420 파폭 좋네여 [3] LeeSang갤로그로 이동합니다. 09.09.26 97 0
149419 C++ Sort 함수 구현 질문 [4] 학생(112.151) 09.09.26 110 0
149418 씨샵으로 버스위치정보 프로그램 시뮬레이터를 만들려고 하는데요... [6] 샵시샵(211.39) 09.09.26 91 0
149417 님들 나 기능대회 좆망 맑탉앉앍꿇헒갤로그로 이동합니다. 09.09.26 80 0
149416 포트란 하는데 애러가 계속 뜨네 이거좁 잡아줘 ㅠㅠ [3] 도와줘형들(124.153) 09.09.26 77 0
149415 그옜날 이지디씨는 멀로만든거야? ㅇㅇ(112.144) 09.09.26 69 0
149414 읭읭 잘한다 DMW(220.68) 09.09.26 61 0
149413 다들 우리 결혼했어요? 보남? [3] 물속의다이아갤로그로 이동합니다. 09.09.26 87 0
149409 피자를 시켰다. [3] Vita500갤로그로 이동합니다. 09.09.26 89 0
149408 중소도시 프갤 [2] 케케켁켁갤로그로 이동합니다. 09.09.26 127 0
149407 훃들... ㅠㅠ [13] 김주현갤로그로 이동합니다. 09.09.26 122 0
149406 혹시 win ce 프로그램 어디서 구할수 있는지 알어? [1] ㅇㄹㄹ(121.64) 09.09.26 76 0
149405 나 전공 트리를 어떻게 짜야 좋아 [3] ㅋㅋㅋ(114.108) 09.09.26 133 0
149404 프겔 형들 내가 한글코드(code sets)의 역사에 대해 과제가 있는 [2] ㅇㅇ(114.108) 09.09.26 101 0
149403 double로 선언했을 때 printf("%lf", a) 가 맞냐 [4] Triple3갤로그로 이동합니다. 09.09.26 165 0
149402 int a[10][10] ㅠㅠ [14] 맥콜(125.188) 09.09.26 107 0
149401 ll횽에게 묻습니다. [3] Vita500갤로그로 이동합니다. 09.09.26 63 0
149400 100만원으로 부자되는법 [4] ㅇㅇ(112.149) 09.09.26 120 0
149399 언어 질문 [4] 케케켁켁갤로그로 이동합니다. 09.09.26 67 0
149394 C언어 질문좀 해도 될까요?ㅠㅠ [7] ㅠㅜ(119.204) 09.09.26 105 0
149393 컴공과학생vs수학과학생vs체대생vs의대생 [5] 승리의궭궭궭갤로그로 이동합니다. 09.09.26 210 0
149392 clique횽 감사함니다 [4] 아주아슬갤로그로 이동합니다. 09.09.26 62 0
149391 이거 나만 웃긴가 [1] ㅇㅇ(112.149) 09.09.26 86 0
149390 Q Lazzarus 님 감사합니다 ㅋ; [2] 순공(122.128) 09.09.26 77 0
149389 한숨 나오겠지만 도와주세요; [3] 순공(122.128) 09.09.26 80 0
149388 고수님들 putchar형이 4바이트 였나요? [4] 386(58.238) 09.09.26 90 0
149387 fflush(stdout) 로 printf 어떤 의미일까요? [5] 386(58.238) 09.09.26 162 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2