캐스팅은 크게 2가지 방법이 있다. 아래는 C 에서 형변환을 하는 방식이다.
1. int a = 42;
2. double b = a; // implicit conversion cast
3. double c = (double)a; // explicit conversion cast
4. double d = a; // implicit promotion cast -> OK;
5. int e = d; // implicit demotion cast -> 위험!;
6. int f = (int)d; // explicit demotion cast -> OK;
다음과 같이 ()
안에 따로 casting
할 자료형 타입을 적지 않았다. 이런 방식을 묵시적 캐스트라고 한다.
int a = 42;
double b = a; // explicit conversion cast
...
double d = a; // implicit promotion cast -> OK;
int e = d; // implicit demotion cast -> 위험!;
묵시적 캐스트는 가독성을 해칠 수 있기 때문에 안하는게 좋다고 생각한다.
다음과 같이 ( 자료형 )
과 함께 casting
하는 것을 의미한다.
int a = 42;
double c = (double)a; // explicit conversion cast
...
double d = a; // implicit promotion cast -> OK;
int f = (int)d; // explicit demotion cast -> OK;
int
형을 double
형으로 변환하는 경우 더욱 정밀한 자료형으로 변환하는 promotion casting
이기 때문에 자료형을 명시하지 않아도 문제가 발생하지 않는다.
하지만 double
을 int
로 변환하는 5 ~ 6
번째 줄의 경우 정밀도가 낮아지는 자료형으로 변환하는 demotion casting
이기 때문에 위험할 수 있다.
C 는 컴파일러에 따라 에러를 출력하기도 하고 안하기도 하지만, 내가 사용하고 있는 mac 에서는 컴파일 해준다.