즉 concatenation 과정 중, 기존 literal들 끝 \0는 전부 제거되고, concatenation 후 나온 literal 끝에만 \0가 추가됩니다.
ps)
실제 C compile 과정 중, 임시로 결합 전 literal들이 존재할 수는 있으나, 어차피 compile 과정 중 결합이 이루어지므로, 결합 후 literal에만 신경쓰면 됩니다.
"연속된 string literal들은 단일 literal로 간주한다."는 규칙만 지키면 되므로, compiler에 따라 임시 literal이 필요없게 만들 수도 있겠죠.(예를 들어 "abc"whitespace문자"def"라는 부분에서 중간에 있는 "whitespace문자"를 무시해버리기)
참고로 여기서 연속이라는 의미는 각 literal 사이에 공백문자들(whitepace문자 - space 외에 tab, 개행 문자등도 포함)만 허용됩니다.
따라서 간혹 source 가독성을 위해 문자열을 쪼개 기술할 때도 사용하기도 합니다.(보통 이 용도)
C에서 연속된 문자열 literal들은 단일 문자열 literal로 취급합니다.
ps)
단, wide(wchar_t 문자) 문자열 literal(앞에 L prefix)과 wide 문자열이 아닌(narrow - char 문자) literal이 연속으로 오는 경우는 정의되어 있지 않습니다.
답변감사합니다.
안그래도 gdb로 하나하나 다 찍어보고 있었는데, 답변 감사해요 :)
null character는요? c
null character는요? c string은 원래 마지막에 \0 이 들어갈텐데
결합(concatation) 후, 결과 literal 끝에만 \0가 존재
즉 concatenation 과정 중, 기존 literal들 끝 \0는 전부 제거되고, concatenation 후 나온 literal 끝에만 \0가 추가됩니다.
ps)
실제 C compile 과정 중, 임시로 결합 전 literal들이 존재할 수는 있으나, 어차피 compile 과정 중 결합이 이루어지므로, 결합 후 literal에만 신경쓰면 됩니다.
"연속된 string literal들은 단일 literal로 간주한다."는 규칙만 지키면 되므로, compiler에 따라 임시 literal이 필요없게 만들 수도 있겠죠.(예를 들어 "abc"whitespace문자"def"라는 부분에서 중간에 있는 "whitespace문자"를 무시해버리기)
참고로 여기서 연속이라는 의미는 각 literal 사이에 공백문자들(whitepace문자 - space 외에 tab, 개행 문자등도 포함)만 허용됩니다.
따라서 간혹 source 가독성을 위해 문자열을 쪼개 기술할 때도 사용하기도 합니다.(보통 이 용도)
를 아래처럼 쓸 수도 있죠.
댓글 달기