2008년 07월 29일
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 | 2008/07/29 01:13 | C++ | 트랙백 | 덧글(4)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
P.S : 답글이 너무 늦었네요. 좀더 열심히 관리하겠습니다.(_ _)