이제 다 끝났습니다. 해독기가 제대로 설치되었는지 확인하는 의미에서 에러를 일으켜봐야겠습니다.^^
가) VC++를 실행시키고, 아래와 같이 프로그램을 써 봅시다.
~cpp
#include<string>
using namespace std;
int main()
{
string s(10); // 컴파일 에러를 일으키는 문장, 하나의 매개 변수를 받는 string 생성자는 할당자만을 받습니다.
return 0;
}
나) Build나 Complie 명령을 내려서 이 소스를 컴파일해 봅시다.
-> STL 필터링이 활성화되어 있지 않았을 때의 컴파일 결과(VC++.NET의 경우)는 다음과 같습니다. 절망적인 암호가 널브러져 있음을 알 수 있습니다.
~cpp
컴파일하고 있습니다.
****** {BD Software Proxy CL v2.26} STL Message Decryption is Off ******
Test.cpp
h:\MyProgrammingLab\JunkRoom\Weired_C++\Test.cpp(6) :
error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax>::_Alloc &) with [_Elem=char,_Traits=std::char_traits<char>,_Ax=std::allocator<char>]' : 매개 변수 1을(를) 'int'에서 'const std::basic_string<_Elem,_Traits,_Ax>::_Alloc & with [_Elem=char,_Traits=std::char_traits<char>,_Ax=std::allocator<char>]'(으)로 변환할 수 없습니다.; 원인: 'int'에서 'const std::basic_string<_Elem,_Traits,_Ax>::_Alloc with [_Elem=char,_Traits=std::char_traits<char>,_Ax=std::allocator<char>]'(으)로 변환할 수 없습니다.; 소스 형식을 가져올 수 있는 생성자가 없거나 생성자 오버로드 확인이 모호합니다.
-> STL 필터링이 활성화되어 있을 때의 컴파일 결과(VC++.NET의 경우)는 다음과 같습니다. 참으로 많은 부분이 알기 쉽게 되어 있음을 알 수 있습니다.
~cpp
컴파일하고 있습니다.
****** {BD Software Proxy CL v2.26} STL Message Decryption is ON! ******
Test.cpp
h:\MyProgrammingLab\JunkRoom\Weired_C++\Test.cpp(6):
error C2664: 'string::basic_string(alloc &)': 매개 변수 1을(를) 'int'에서 'alloc &'(으)로 변환할 수 없습니다.;원인: 'int'에서 'alloc'(으)로 변환할 수 없습니다.; 소스 형식을 가져올 수 있는 생성자가 없거나 생성자 오버로드 확인이 모호합니다.
참고) VC++.NET을 사용하시는 분의 경우엔 컴파일 전에 반드시 /WL 옵션을 주어야 합니다. /WL 옵션은 모든 에러 및 경고 메시지를 한 줄로 표시해 주는 옵션입니다. VC++.NET은 소스 코드 한 줄에 대한 에러 메시지를 여러 줄에 걸쳐(\n문자를 끼워넣어서) 표시하는데, 에러 필터링 스크립트는 에러 메시지가 한 줄로 되어 있을 때 재대로 동작하기 때문입니다. 아래와 같이 프로젝트 속성 페이지에서 C/C++의 명령줄 항목을 선택한 후 /WL 옵션을 추가합시다.