bestsource

두 문자열 리터럴의 연결은 어떻게 작동합니까?

bestsource 2023. 9. 26. 22:27
반응형

두 문자열 리터럴의 연결은 어떻게 작동합니까?

char* a="dsa" "qwe";
printf("%s", a);

출력:dsaqwe

제 질문은 이 물건이 왜 작동하는지 입니다.두 문자열 리터럴 사이에 공백이나 아무것도 주지 않으면 문자열 리터럴이 연결됩니다.

이게 어떻게 작동하는 겁니까?

ISO C 표준에 의해 정의되며, 인접한 문자열 리터럴이 하나로 결합됩니다.

언어는 조금 건조하지만(결국 표준입니다) 섹션6.4.5 String literalsC11상태:

번역 단계 6에서, 인접한 문자의 임의의 시퀀스 및 동일하게 프리픽스된 넓은 문자열 리터럴 토큰에 의해 지정된 멀티바이트 문자 시퀀스는 단일 멀티바이트 문자 시퀀스로 연결됩니다.

이는 에도 언급되어 있습니다.5.1.1.2 Translation phases, point 6같은 기준이지만, 조금 더 간결하게:

인접 문자열 리터럴 토큰이 연결됩니다.

이것은 기본적으로 다음과 같은 뜻입니다."abc" "def"와 다르지 않습니다"abcdef".

이것은 종종 다음과 같은 좋은 포맷을 유지하면서 긴 문자열을 만들 때 유용합니다.

const char *myString = "This is a really long "
                       "string and I don't want "
                       "to make my lines in the "
                       "editor too long, because "
                       "I'm basically anal retentive :-)";

그리고 묻지도 않은 질문에 대답하기 위해 "이게 무슨 소용이 있습니까?"

우선, 문자열 리터럴에 상수를 넣을 수 있습니다.쓸 수 있습니다.

#define FIRST "John"
#define LAST "Doe"

const char* name = FIRST " " LAST;
const char* salutation = "Dear " FIRST ",";

그리고 나중에 이름을 바꿔야 할 경우 한 곳에서만 변경하면 됩니다.
이와 같은 것들입니다.

당신은 당신 자신의 질문에 답했습니다.

두 문자열 리터럴 사이에 공백이나 아무것도 주지 않으면 문자열 리터럴이 연결됩니다.

그것이 C 구문의 특징 중 하나입니다.

ISO C 표준§5.1.1.2다음과 같이 말합니다:-

  1. 인접 문자열 리터럴 토큰이 연결됩니다.
  2. 토큰을 구분하는 공백 문자는 더 이상 중요하지 않습니다.

언급URL : https://stackoverflow.com/questions/12120944/how-does-concatenation-of-two-string-literals-work

반응형