이 블로그는 방문자 통계를 위해 티스토리 기본 기능과 Woopra를 사용합니다. 원하지 않으신다면 사용하시는 웹 브라우저에 내장된 DNT 헤더를 켜고, JavaScript를 끄셔도 무방합니다.
이 블로그 방문자의 약 60%는 네이버 검색을 사용하십니다. 을 이용하시면 더 유용한 정보를 쉽게 얻게 되실 수도 있습니다. [mediatoday]
« 2018/04 »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
블로그 이미지
제가 주제인 블로그... 그냥 주제 없는 블로그입니다. 전공 분야나 예전 관심 분야 등등에 관한 글이 우선입니다만, 두어 문단을 넘길 만한 글이라면 대강 정리해 기록합니다. 학부생입니다. 트위터에서 볼 수 있습니다. http://aurynj.net/ 어­리


 

'비주얼 스튜디오'에 해당되는 글 2

  1. 2012.03.15 Visual Studio 10(2010)에서 "계속하려면 아무 키나 누르십시오..."가 안 보여요!
  2. 2009.06.07 _MSC_VER (2)
 

Visual Studio 2010에서 빈 프로젝트나 Win32 콘솔 응용 프로그램을 생성하면 이전의 Visual Studio에서와 달리 실행 파일이 마지막 표준 출력 결과를 볼 수 있도록 기다려 주지 않고 꺼진다.(단축키 Ctrl+F5) 이는 실행 파일의 출력이 지정되지 않았기 때문인데, 원래 콘솔 프로그램은 표준 출력을 콘솔로 내보내는 게 맞지만, 오늘날 콘솔 프로그램은 GUI의 프론트엔드로 쓰이는 일이 잦아지기 때문인지 Visual Studio 2010부터는 출력을 콘솔로 기본 지정하지 않고 있다.

이를 해결하려 한다면 당연히 출력을 콘솔로 지정하면 된다. 다음 둘 중 한 방법으로 프로젝트의 출력을 콘솔로 지정할 수 있다.

  1. Visual Studio 2010에서 프로젝트를 열고 메뉴 프로젝트> 속성> 구성 속성> 링커> 시스템: 하위 시스템
    필드를 찾아 값을 다음과 같이 준다.
    /SUBSYSTEM:CONSOLE
  2. XML 포맷인 .vcproj 파일을 텍스트 에디터로 열고 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">과 바로 다음의 </PropertyGroup> 사이, <Link>와 </Link> 밖에 다음을 추가한다. (Release에도 추가하는 건 자유)
    <Link>
    <SubSystem>Console</Subsystem>
    </Link>

반면에 프로젝트마다 이런 설정을 하기 귀찮다면 이 값을 기본으로 줄 수도 있다.

  • 텍스트 에디터를 관리자 권한으로 실행해 다음 ...\vcprojects 디렉터리에서
    • 64비트의 경우 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcprojects
    • 32비트의 경우 C:\Program Files\Microsoft Visual Studio 10.0\VC\vcprojects
    win32console.vsz 파일을 열고 아래 한 줄을 추가한다.
    Param="SUBSYSTEM = CONSOLE"
  • emptyproj.vsz 파일을 같은 방식으로 편집하면 빈 프로젝트에도 옵션이 적용되지만, 권장하지 않겠다.

Win32 콘솔 응용 프로그램을 생성하고 [확인], [다음]을 눌러 빈 프로젝트 체크박스를 선택하면 빈 프로젝트를 생성하는 것과 거의 같은 상태가 된다.

프리프로세서 #include <stdlib.h>를 주고 main() 끝에 system("pause");를 쓰면 프로젝트 기본 옵션을 바꾸지 않고 같은 효과를 볼 수 있다. 물론 실행 파일의 덩치가 커지기 때문에 완전히 같은 효과는 아니다. 나는 system("pause>nul");을 쓴다.

_MSC_VER

Sablog Models/플랫폼·툴킷 | 2009.06.07 01:38 | Posted by 어­리

호환성 프로그램 어쩌구 해서 알 만한 분은 다 아는 MS Visual C++의 컴파일러 자체 매크로 상수이다.

  • VC++4.0: _MSC_VER = 1000
  • VC++5.0: _MSC_VER = 1100
  • VC++6.0: _MSC_VER = 1200
  • VC++7.0: _MSC_VER = 1300
  • VC++8.0: _MSC_VER = 1400
  • VC++9.0: _MSC_VER = 1500

VC++에는 각 버전에 따라 이 값이 다르게 정의되어 있다. 이를 이용해 gcc나 g++와 호환인 코드를 짜거나 표준에 어긋나지 않는 코드를 만들 수 있다.

#include <stdio.h>

int main()
{
#if defined(_MSC_VER) && (_MSC_VER < 1500)
    __int64 i64 = 0x57bf406691032708;
    printf("%lld\n", i64);
#else
    long long int i64 = 0x57bf406691032708;
    printf("%I64d\n", i64);
#endif
    return 0;
}

여기서는 8.0 미만의 VC++이 아니라면 최신 표준안의 long long int, %lld를 지원한다고 간주한다.

또한 (_MSC_VER < 1500)은 필요한 매크로 구문은 아니다. 혹시 모르는 VC++ 10.0 이상 어딘가에서 __int64 지원이 빠질 가능성을 열어 뒀을 뿐이다. 사실 __inline, _inline의 선례가 있기 때문에...