언어 자료구조 알고리즘/Escort C++

[C++] 1. 2 클래스를 제외한 C언어와 다른 문법 사항 (열거형)

언제나휴일 2016. 4. 15. 11:49
반응형

  1. 2 클래스를 제외한 C언어와 다른 문법 사항


 

 C++언어는 C언어와 클래스를 제외한 문법 사항이 상당히 유사합니다. 여기에서는 클래스를 제외한 문법 사항 중에 C언어와 다른 부분들을 소개하려고 합니다. C++언어에서는 사용자의 논리적 오류에 대해 C언어보다 엄격하게 검사하여 신뢰성을 높였습니다. 이는 개발 단계에서 잘못된 부분을 고칠 기회를 주므로 전체 개발 비용을 줄일 수 있게 됩니다. 그리고 신뢰성에 문제가 없는 범위에서 더욱 효과적으로 표현할 수 있게 다양한 편의성을 제공하고 있습니다. 여기에서는 신뢰성을 강화시키는 문법 사항과 편의성을 제공하는 문법 사항으로 나누어 설명하겠습니다.

 

참고이 책에서 사용자는 C++ 언어 사용자를 말하며 프로그램 사용자는 최종 사용자라고 명시하겠습니다.

 

1.2.1 신뢰성 강화

 

- 열거형

 

  C언어에서 열거형은 정수형과 묵시적 형 변환이 됩니다. 이러한 특징때문에 C언어에서 열거형은 별도의 형식을 정의한다기보다 매크로 상수를 그룹화하는 목적으로 사용이 되었습니다. 하지만 C++언어에서 열거형은 정수형과 다른 형식으로 인식됩니다.

 

 C언어에서는 정수형이 오기를 기대하는 곳에 열거형이 오거나 열거형이 오기를 기대하는 곳에 정수형이 온다고 하더라도 아무런 오류가 발생하지 않습니다.

 

 C++ 언어에서는 정수형이 오기를 기대하는 곳에 열거형이 와도 오류가 발생하지 않습니다. 하지만 열거형이 오기를 기대하는 곳에 정수형이 오면 컴파일 오류를 발생합니다.


정수형에 열거형을 대입할 때 오류 화면

[그림 1.1]

 

[그림 1.1] FEMALE, MALE을 값으로 가질 수 있는 열거형 Gender를 정의하여 사용하는 예입니다. 보시는 것처럼 줄 11에서는 열거형 변수 g에 정수형 변수 i를 대입하는 구문이고 오류 목록을 보면 "int에서 Gender 형식으로 변환할 수 없다"는 오류를 확인할 수 있습니다.

 

 

 

 그렇다면 왜 C++언어에서는 이 같은 경우에 오류를 발생할까요?

 

  C++에서는 C언어보다 높은 신뢰성을 요구한다고 얘기를 했었습니다. C++ 사용자가 열거형을 정의할 때 열거되는 상수 명에 대응되는 상수 값이 정수 값만을 지정할 수 있습니다. 이 얘기는 정수형이 와야 하는 곳에 열거형이 온다고 해서 잘못된 값이 될 개연성이 없다는 것을 의미합니다. 이러한 이유로 C++ 언어에서는 정수형이 오기를 기대하는 곳에 열거형이 와도 오류를 발생하지 않습니다. 하지만 열거형이 오기를 기대하는 곳에 정수형이 왔을 떄 해당 정수가 열거형 범위에 속하지 않을 개연성이 있기 때문에 오류를 발생합니다. 설령 해당 값이 열거형에 열거된 값에 속한다 하더라도 C++ 컴파일러는 값을 비교하여 문법을 검사하는 것이 아니라 형식을 비교하여 문법을 검사하기 때문에 오류를 발생합니다.

 

실제 프로그래밍에서는 개발자가 이에 대한 문법 사항을 정확히 알고 있지 않더라도 컴파일 오류를 없애야 하므로 자연스럽게 신뢰성 있는 코드를 작성하게 됩니다. 오히려 C언어에서는 이러한 부분에 컴파일 에러가 발생하지 않기 때문에 개발자가 이에 대해 점검을 해야 한다는 것으로 생각할 수 있습니다.


관련 게시글

[C++] 1. C++에 들어가면서

[C++] 1. 2 클래스를 제외한 C언어와 다른 문법 사항 (열거형)

[C++] 1. 2 클래스를 제외한 C언어와 다른 문법 사항 (const 포인터, void 포인터)

[C++] 1. 2 클래스를 제외한 C언어와 다른 문법 사항(bool 형식의 제공)

[C++] 1. 2 클래스를 제외한 C언어와 다른 문법 사항(태그명, 변수 선언 위치)

[C++] 1. 2 클래스를 제외한 C언어와 다른 문법 사항 (레퍼런스 변수)

[C++] 함수 중복 정의(function overloading)

[C++] 디폴트 매개 변수

[C++] 매개 변수명이 없는 입력 매개 변수

[C++] namespace

 

동영상 강의

[C++ 동영상 강의] 1. C++에 들어가면서

반응형