Lyn
조회 수 15869 추천 수 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
번호 제목 글쓴이 날짜 조회 수
78 What is the calling convention of the C++ lambda file Lyn 2016.04.11 5630
77 Web 솔루션의 빌드속드와 리로딩속도에 관한 비교 4 Lyn 2014.08.29 175995
76 VS2015 가 7월 20일 출시됩니다. Lyn 2015.06.30 2263
75 VS2015 Preview가 출시 되었습니다. Lyn 2014.11.13 64748
74 VS2013 RC 설치해봄 file Lyn 2013.09.28 14139
73 VS 2013 커뮤니티 에디션이 출시되었습니다. Lyn 2014.11.13 13347
72 VMWare 의 메모리 오류 해결 버전이 나왔습니다 file Lyn 2014.11.06 18719
71 VMWare 12 + Windows 10 Bug file Lyn 2016.01.03 3442
70 Visual Studio 2013 새로 추가된 기능 둘러보기 file Lyn 2013.10.28 19974
69 Visual Studio 2013 Update 1 릴리즈 Lyn 2014.01.25 10638
68 Visual Studio 2012 Update2 Offline 설치 1 Lyn 2013.04.11 23650
67 Visual C++ C4503 Warning Fix Lyn 2016.06.21 5012
» Visual C++ 2013 RC 추가기능 1. Raw String Literal 3 file Lyn 2013.10.07 15869
65 Visual C++ 2013 추가기능 2. Variadic Tamplate - 1 file Lyn 2013.12.03 30753
64 Visaul Studio Exception 발생시 해결방법 1 file Lyn 2011.11.10 28406
63 VC++ 2013 을 사용 할 경우 실행환경을 정확히 확인해야할 경우가 있습니다. file Lyn 2014.10.08 190581
62 VC++ 2013 에서 빌드해서 XP에서 돌리기 file Lyn 2014.07.30 25402
61 Unity VS가 무료로 풀렷습니다. file Lyn 2014.07.30 18429
60 Ubuntu Let's Encrypt renew error "requested nginx plugin does not appear to be installed" Lyn 2018.10.07 539
59 ubuntu 14.04 에서 apache rotatelogs 설치하기 Lyn 2014.08.22 30389
Board Pagination Prev 1 ... 2 3 4 5 6 7 ... 8 Next
/ 8