C와 C++의 문법 차이점

대부분의 책에서 C와 C++문법을 혼합사용하고 있으므로 제가 알고있는 한도내에서

차이점을 명시하도록 하겠습니다.

 

1. 변수선언의 위치

C : { }(중괄호)의 시작뒤에 변수선언이 모두 와야함.

ex)

void main()

{

   int a;//OK

   a = 0;

   int b; //Error

   if( a> 10)

  {

      int c = 10;//OK

   }

}

C++ : 상관없이 변수선언 가능

ex)

void main()

{

   int a;//OK

   a = 0;

   int b; //OK

   if( a> 10)

  {

      int c = 10;//OK

   }

}

 

결론 : 이로인해 for( int nF1 = 0; ....; ...)이 가능하고 변수에 따른 작업을 묶어서 볼수

있게 되었음.


* 추가 : C컴파일러에서도 컴파일러에 따라 처리가 가능하다는 지적이 있었습니다.
C컴파일러는 C++처럼 2번 검사가 아니라서 당연하다고 생각했는데 컴파일러에 따라
아는경우도 있는것 같습니다. 참고하시기 바랍니다.
 

2. Struct선언

C : Sturct자료형은 struct라는 이름을 명시하고 struct이름을 같이 써야함.

ex)

sturct _ASDF

{

};

void main()

{

  struct _ASDF asdf;

}

 

C++ : 그냥 쓰면 됨.

ex)

sturct _ASDF

{

};

void main()

{

  _ASDF asdf;

}

 

결론 : C에서 typedef를 이용해서 C++처럼 사용하는 방식도 있으나 C++에서는 그냥 됨

 

3. struct의 확장

C : struct는 this도 권한설정도 함수도 가질수 없음.(함수포인터를 이용한 방법이 사용되기도

하나 C++에서 확장된 모습과 같다고 보기 어려움)

ex)

struct _ASDF{

  private://Error

  int a;

  public://Error

  void AAA() { ; }//Error

};

 

C++ : sturct가 클래스와 동일한 구조로 사용될수 있도록 확장됨(기본권한이 public:이라는것의

차이가 있음)

ex)

struct _ASDF{

  private://OK

  int a;

  public://OK

  void AAA() { ; }//OK

};

 

결론 : struct를 class처럼 사용할수 있으나, struct는 자료형의 개념으로 자주사용하며, struct도 생성자 소멸자를 가질수 있게 되면서 편리하게 변함.

 

4. 함수파라메터기본인자 및 오버로드

C : 함수파라메터기본값를 주는것과 오버로드가 안됨.

ex)

void AAA(int a);//OK

void BBB(int a, int b= 0);//Error

void BBB(int a, int b, int c);//Error

 

C++ : 함수파라메터 기본값, 오버로드 가능

ex)

void AAA(int a);//OK

void BBB(int a, int b= 0);//OK

void BBB(int a, int b, int c);//OK

 

결론 : C에서 인자에 따라 함수이름을 바꾸는 것을 안해도 되며, 좀더 편리한 사용을 할수

있게 되었으나, 함수를 이해하고 있지 않은 경우에는 잘못사용할수 있음.

 

기억나는게 이게 전부네요. 더 있었던것 같은데...하다가 기억나면 추가해서 계속 늘려서

글을 적겠습니다.

by JetLi | 2008/07/29 01:13 | C++ | 트랙백 | 덧글(4)

트랙백 주소 : http://cevin.egloos.com/tb/637289
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 슈와 at 2008/07/29 11:27
1번은 문법이라기보다.. 컴파일러가 어떤 표준을 지원하냐의 차이죠.
Commented by JetLi at 2008/07/29 12:01
아 그렇군요. 전 gcc하고 vc로밖에 테스트를 못해봤는데 컴파일러의 차이인줄은 몰랐네요. 전 C표준은 저런문법을 기준으로 하고 C++표준에서 확장된줄 알았는데, 수정토록 하겠습니다. 지적 감사합니다.^^
Commented by 지나가다 at 2008/12/18 18:27
1번 얘기인데요.. gcc와 vc의 문제는 아니라고 봅니다. gcc와 vc도 버젼에 따라 다를 수 있겠죠. wikipedia에 보면 C99설명에 variable declaration no longer restricted to file scope or the start of a compound statement 라는 말이 있습니다. C90 설명에는 없던 말이죠. C99의 이부분을 지원하는 컴팔러면 되겠죠. gcc가 보통 지원이 빠른 편입니다.
Commented by JetLi at 2009/01/02 00:10
아 설명 감사합니다. 지금까지 컴파일러에 따라 다르다고만 알고 있었네요.^^
P.S : 답글이 너무 늦었네요. 좀더 열심히 관리하겠습니다.(_ _)

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶