②,③번은 맞는 말이니 답이 아닙니다.
④는 문자열 상수에 대한 표현이지 문자 상수에 대한 표현이 아니니 답이 됩니다(
문자형(character type) 상수와 문자 상수(character constant)를 같은 것이며 문자열 상수(string constant)와 상대적 개념이라는 전제로),문제는 ①이 왜 정답처리가 되었느냐인데 <임인건, 터보C정복, 도서출판 가남사, 1990년>에는 다음과 같이 적고 있습니다.
QR.2.3 문자 상수(character constant)
[표 QR.2.3-1] 문자 상수의 분류에 따른 데이터형
. 문자 상수는 데이터형이 모두 int형이므로 -32768~32767의 허용범위를 가진다. 32768 이상의 값을 가지는 문자 상수는 없다(단, 캐스트 연산자를 사용하면 가능하다). 예를 들어, 2문자 상수 '\xff\xde'는 음의 값을 가지며 int형으로 취급된다. (159쪽)
결론을 말하자면 ①도 정답이 된 이유는 2문자 상수 '\xff\xde'도 존재하기 때문이라고 생각합니다('\xff\xde'가 작은 따옴표로 둘러싸인 점을 주목하시기 바랍니다).
<참고>
QR.2.5 문자열 상수(string constant)
ㆍ터보C의 문법 체계에서는 문자열 상수를 상수(constant)로 분류하지 않고 토큰의 하나(string literal, ☞QR.1.1절)로 분류한다. 그러나 이 책에서는 편의상, 관례상 그냥 상수로 간주한다. C 문법 체계에서 문자열 상수를 상수로 분류하지 않는 이유는, 문자열형이란 데이터형이 없으므로 문자열 상수도 당연히 있을 수 없다고 보기 때문이다(☞2.7.3절 참고).
(【C프로그래밍】교재 "제2장 자료형과 선행처리기 30쪽 [그림 2-1] 자료형의 종류" 참조)
ㆍ터보C에서 문자열 상수는 큰따옴표(")와 텍스트를 포함하는 한 개 이상의 문자열 단위(string unit)로 구성된다.
ㆍ문자열 상수는 확장열을 포함할 수 있다.
ㆍ한 개의 문자열 상수를 몇 개의 문자열 단위로 분할하여 여러 줄에 걸쳐서 기술할 수도 있다. 예를 들어,
"test1text2text3"는 아래와 동일하다.
"text1" "text2" " text3" <- 각 문자열 단위 사이에는 공백문자(whitespace)만 삽입할 수 있다.
그 밖의 문자가 삽입될 경우에는 서로 다른 문자열 상수로 간주한다.
또는,
"text1"
"text2"
"text3"
또는 확장열인 행계속(line continuation) 문자를 써서
"text1\
text2\
text3"
↖ 반드시 행의 제1열(column)에서 시작해야 한다.
ㆍ모든 문자열 상수의 기억부류(storage class)는 정적(static)이며 문자열은 문자 배열과 같은 바이트 구조를 가진다. (160~161쪽)