Lyn
조회 수 15726 추천 수 0 댓글 3
Atachment
첨부 '3'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

이 코드는 Visual C++ 2013 RC에서 테스트 되었습니다.


C#을 자주 쓰시는 분들이라면 아시겠지만... C# 에는 @ 로 시작하는 문자열 리터럴이 있습니다.
저 안에서는 줄바꿈도 자유롭게 허용되고 Escape Sequence 할 필요도 없이 다양한 문자열을 쓸 수 있지요.
저같은 경우는 특히 쿼리를 날릴때 매우 유용하게 쓰고 있습니다.


csharpa.png


이런식으로요.


이게 C++ 할때도 참 부러웠는데... VC++ 2013 에서 드디어 사용 가능하게 되었습니다.
바로 R 접두사를 이용해서요..... 정확히는 괄호도 필요하지만


간단한 예제 만들어 보겠습니다.

#include <iostream>
#include <string>

using namespace std;

void wmain()
{
	string s = R"(Hello World
동해물과 백두산이 마르고 닳도록
\r\n\t
\가 안먹어!!
"따옴표도 그냥 써져!")";

	cout << s << endl;
}


의 실행 결과는 다음과 같습니다.


11.png


오! 멋지게 출력 되네요. (" 와 ") 가 문자열의 범위를 지정하는 태그로 쓰이는겁니다
하지만 여기 함정이 있습니다...

바로 )" 를 출력할 수 없단겁니다 (.....)

왜냐면 종료 태그로 쓰기 때문이죠.


즉 

#include <iostream>
#include <string>

using namespace std;

void wmain()
{
	string s = R"("(Test)")";

	cout << s << endl;
}


이런 코드는 오류라는 겁니다....

하지만 근성의 C++ 위원회 (...) 이번에도 그냥 넘어가지 않습니다. 
C++ 에서는 이것을 "시작 토큰 커스터마이징" 기능을 넣음으로서 해결했습니다...

이게 뭐냐면,  Raw String Literal 의 첫 ( 를 만날때 까지의 문자열을 "태그" 취급 합니다.

즉 아래와 같은 코드가 가능해집니다.


#include <iostream>
#include <string>

using namespace std;

void wmain()
{
	string s = R"Lyn("(Test)")Lyn";

	cout << s << endl;
}


RSL 의 첫 (를 만날때 까지 Lyn 이라는 문자열을 추가로 만났습니다.
그럼 위 리터럴의 시작을 나타내는 문자는 Lyn(, 종료를 나타내는 문자는 )Lyn 이 되는겁니다.
실행해보면 아래와 같습니다.


22.png


이로서 알아보긴 더럽게 힘들지만 (...) 맘껏 문자열을 만들수 있게 되었습니다.
아직 실제로 활용해보진 못햇지만, R"SQL(INSERT INTO TABLE VALUES(1, 2, 3))SQL" 처럼 이 문자열은 SQL 이다! 라는 것 처럼 표시하는식으로 사용해 볼 수 있을 것 같네요.


마지막으로 한가지... 유니코드 리터럴은 어떻게 하냐면... LR로 시작하면 끝입니다 (...) 간단하죠

TAG •
?
  • profile
    Lyn 2013.10.07 17:31
    아직 거의 쓰이지 않는 문법이라 그런지 syntax highlighter 가 제대로 컬러링을 못해주네요 =_= 젠장
  • ?
    사무엘 2013.10.08 03:27
    아아 이건 좀 내가 아는 C++과는 다른 사기적인 기능 같습니다... ㅎㅎ
    인텔리센스용 컴파일러, 코드 생성용 컴파일러, 신택스 하이라이팅용 파서 만드는 사람들.. 다 바빠지겠네요.
  • profile
    Lyn 2013.10.12 17:40
    간단하게 쓸수있는 문법이니 쓸모가 많을거 같습니다 ㅎㅎ.

List of Articles
번호 제목 글쓴이 날짜 조회 수
57 Visual Studio 2013 새로 추가된 기능 둘러보기 file Lyn 2013.10.28 19816
56 Microsoft C++ MVP 리워드를 개봉 해 보았습니다. 3 file Lyn 2013.10.11 51038
55 MS SQL Server 2012 언인스톨시 Rsfx Driver 의존성으로 인해 언인스톨이 되지 않는 경우 Lyn 2013.10.09 19905
» Visual C++ 2013 RC 추가기능 1. Raw String Literal 3 file Lyn 2013.10.07 15726
53 Microsoft VC++ MVP를 받았습니다.... file Lyn 2013.10.02 15121
52 서버를 Windows 2012 R2로 교체 하였습니다. 1 Lyn 2013.09.29 22081
51 VS2013 RC 설치해봄 file Lyn 2013.09.28 14018
50 현재 MSDN Download Page file Lyn 2013.09.23 19525
49 boost::icl::interval_map 원하는대로 변경해서 사용해보기 file Lyn 2013.09.23 22193
48 MSDN 에 릴리즈된 MS 제품들입니다. 1 file Lyn 2013.09.10 20525
47 C Runtime Library Exception Dump 남기기 두번째 방법 Lyn 2013.06.25 25796
46 C Runtime Library Exception Dump 남기기 첫번째방법 Lyn 2013.06.11 33020
45 Visual Studio 2012 Update2 Offline 설치 1 Lyn 2013.04.11 23447
44 C++11 표준 라이브러리 확장 (cbegin, cend) Lyn 2012.10.04 34443
43 C++11 표준 라이브러리 확장 (string) 3 file Lyn 2012.09.10 28156
42 대기하는 쓰래드 모두 깨우기 (Java의 notifyAll) Lyn 2012.09.04 37884
41 C++ 템플릿 상속에서 베이스 클래스의 멤버에 접근하는 경우의 문제 1 file Lyn 2012.08.29 30170
40 [윈도8] 윈도8 구경1 1 file Lyn 2012.08.17 26509
39 C++ string&형 인자에 기본값 주기 Lyn 2012.07.24 25859
38 [작성중] 윈도우 32bit, 64bit 프로그래밍시 주의할점 2 Lyn 2012.07.16 27593
Board Pagination Prev 1 ... 2 3 4 5 6 7 ... 8 Next
/ 8