문자열 리터럴을 사용하기 위해서 char 형태의 변수를 선언했을 때 E0144 에러가 발생한다.
에러의 내용은 "홀수"라는 문자열은 const(상수)값인데 변수에 그 값을 집어넣으려고 하니 에러가 발생한다는 것이다.
위 에러의 발생 원인을 MSDN에서는 다음과 같이 설명한다.
"C에서는 문자열 리터럴이 char의 배열이지만, C++에서는 const char의 배열이다."
즉, char(혹은 char *)에 문자열 리터럴을 담는 방식은 C 방식이며,
C++ 에서는 잘못된 코딩방법이기 때문에 위와 같은 오류가 발생하는 것이다.
해결방법
1. pointer가 아닌 array 형식으로 선언
1 | char s1[] = "aa"; | cs |
2. (char *) 형식으로 형변환(casting)
1 | char *s1 = (char*)"aa"; | cs |
3. 자료형을 const char* 형태로 사용
1 | const char *s1 = "aa"; | cs |
4. const_cast<char*> 사용
1 | char *s1 = const_cast<char*>("aa"); | cs |
※ Dev C++의 경우 5.11버전 기준으로 warning을 생성하지만 에러로 취급하지 않아 컴파일이 가능하다.
개인적으로 C와 C++ 차이를 정확히 이해하지 못하고 C언어의 범주 안에 C++이 포함되어 있다는
두루뭉술한 전제로만 인식한 채로 접근하고 있었던 와중에 이러한 에러를 만나서
C와 C++의 차이를 조금이나마 스스로 이해할 수 있었다.