디시인사이드 갤러리

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

갤러리 본문 영역

C와 cpp의 차이점?

연화갤로그로 이동합니다. 2009.07.28 01:04:32
조회 49 추천 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/06/10 - -
153094 이게 무슨말인지 이해를 못하겠어요 [7] 후자(121.131) 09.10.19 106 0
153093 lllllllll 님은 봅니다(2) [16] 숙신갤로그로 이동합니다. 09.10.19 139 0
153091 이번 윈7 런칭파티 가는사람 있음? [8] 에릭슈미트갤로그로 이동합니다. 09.10.19 116 0
153090 lllllllll 님은 봅니다. [5] 숙신갤로그로 이동합니다. 09.10.19 64 0
153086 갑자기 궁금한게 생겼음 scanf문 [17] 에릭슈미트갤로그로 이동합니다. 09.10.19 129 0
153085 초등학교 4학년때 처음 컴퓨터를 배운 학원에 전화를 했는데 [11] 숙신갤로그로 이동합니다. 09.10.19 204 0
153084 자신의 코드를 객관적으로 보는방법 [3] Vita500갤로그로 이동합니다. 09.10.19 120 0
153082 자료구조를 정ㅋ벅ㅋ [5] Triple3갤로그로 이동합니다. 09.10.19 137 0
153081 상속... 솔직하게 말하자면. [14] 아주아슬갤로그로 이동합니다. 09.10.19 175 0
153080 프로그래밍갤러리에 프로그래밍 질문해서 미안한데.. [16] 커널vDK갤로그로 이동합니다. 09.10.19 207 0
153079 오버로드가 뭐야? 하늘에 둥둥 떠다니는건 아닌거 같은데 말이지.. [21] rntjr갤로그로 이동합니다. 09.10.19 179 0
153077 학교 댕길날도 얼마 안남았구나.. [9] 학생(125.128) 09.10.19 130 0
153076 이쁜 개발자가 있긴 있었어 [8] 막장(111.91) 09.10.19 228 0
153073 형들 내 옆자리도 여자개발자야 [3] 막장(111.91) 09.10.19 199 0
153072 저번주에 여자개발자 때문에 진심으로 분노를 느꼈다. [8] 물속의다이아갤로그로 이동합니다. 09.10.19 3132 0
153071 ABAP 동지 여러분~ [3] dkqkq(203.241) 09.10.19 93 0
153070 gg 님은 봅니다. [5] 숙신갤로그로 이동합니다. 09.10.19 92 0
153069 시발 요즘 막장인덧.... [5] 햏햏했갤로그로 이동합니다. 09.10.19 135 0
153068 홀.. 여자 플머랑 소개팅 하기로했는데.. [9] 설지갤로그로 이동합니다. 09.10.19 201 0
153067 대학생 형들중에 학교에서 레고 NXT프로젝트하는 형들있어? [3] 레고(122.38) 09.10.19 190 0
153066 sizeof 함수 어떻게쓰는건가용 수정 [5] gg(220.117) 09.10.19 139 0
153064 구석 횽아를 위한 C# 책 추천... [8] 물속의다이아갤로그로 이동합니다. 09.10.19 163 0
153063 삼항연산자가 원문으로 어떻게 표현됨? [15] 개쉛기갤로그로 이동합니다. 09.10.19 134 0
153060 여자 개발자와 짝프로그래밍... [19] 물속의다이아갤로그로 이동합니다. 09.10.19 3430 0
153059 나는 원래 무덕 이었어. [5] 유리한갤로그로 이동합니다. 09.10.19 153 0
153058 여자 왔다 [19] 아주아슬갤로그로 이동합니다. 09.10.19 249 0
153057 신조협려 예기가 나와서 말인데 [5] 유리한갤로그로 이동합니다. 09.10.19 110 0
153055 찌질반을 손보고 있는데 [4] JuEUS-U갤로그로 이동합니다. 09.10.19 150 0
153054 무협소설이라는 단어를 보니 신조협려가 생각나네염.. [3] 아주아슬갤로그로 이동합니다. 09.10.19 87 0
153053 무협소설 보다보니 갑자기 군대생각이 나네염.. [5] IHF갤로그로 이동합니다. 09.10.19 112 0
153052 오늘은 이거다! [3] DMW(220.68) 09.10.19 112 0
153051 어휴... 더이상 짜서 못 먹겠네요. [6] algo갤로그로 이동합니다. 09.10.19 121 0
153050 사람들이 윈도우7 안갈아 타지 싶다.. [9] 이모군(118.222) 09.10.19 212 0
153049 형들 내가 프로그래밍도 하고싶고 디자인도 하고싶은데 [1] 맥콜(124.61) 09.10.19 75 0
153048 지금 점심으로 불새버거를 먹고있음.. [6] rntjr갤로그로 이동합니다. 09.10.19 105 0
153046 우리 사무실에도 오늘부터 여자가 온대 [18] 아주아슬갤로그로 이동합니다. 09.10.19 252 0
153045 프갤러들이 개발자 상위 20% 안에는 든다고 생각되는 이유는 [13] ltw갤로그로 이동합니다. 09.10.19 233 0
153044 좋은 프로그램을 만들려면 [3] Vita500갤로그로 이동합니다. 09.10.19 105 0
153043 자바 고수님들;; [1] 카져소제갤로그로 이동합니다. 09.10.19 60 0
153037 뉘들 공부는 얼마만큼 언제까지 해야 한다고 생각하냐. [12] yundream(211.189) 09.10.19 180 0
153036 횽들중에 수학(확률,통계) 잘하시는분 계셔요? [3] 후믹갤로그로 이동합니다. 09.10.19 100 0
153034 자바 코드 질문입니다. [3] 캐낙타갤로그로 이동합니다. 09.10.19 73 0
153033 아 맞다 책이야기가 나와서 그러는데 [4] ㅁㅁ(121.157) 09.10.19 110 0
153032 젖문가는 봅니다. [5] rntjr갤로그로 이동합니다. 09.10.19 112 0
153030 세상이 달라졌다. [8] yundream(211.189) 09.10.19 178 0
153028 횽들 나 진짜 심각해. c# 기초 책좀... [8] rntjr갤로그로 이동합니다. 09.10.19 154 0
153026 왜 공지에는 c# 관련 내용이 없나요? [4] rntjr갤로그로 이동합니다. 09.10.19 97 0
153025 횽들.. 내가 c#을 시작하려고해... [9] rntjr갤로그로 이동합니다. 09.10.19 491 0
153024 큐피트의 화살은 멀리 날라가지 못한다. [2] Vita500갤로그로 이동합니다. 09.10.19 85 0
153023 밑에 시험얘기하니까 떠오르는 아련한 SQL의 추억.. [5] 개쉛기갤로그로 이동합니다. 09.10.19 100 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2