2009-07-14 3 views
10

당신이 ThisIsAHeaderFile.h라는 이름의 헤더 파일이있는 경우, 다음은 여전히 ​​Visual Studio에서 파일을 찾습니다 :#includes를 사용하여 Visual Studio 전처리 기 대소 문자를 구분하는 방법

#include <ThisIsAheaderFile.h> 

#include이 오류가 발생합니다 있도록 대소 문자 구분을 적용 할 수있는 방법이 있나요를?

+0

동일한 파일 이름의 두 버전을 사용하지만 다른 대소 문자를 사용할 수있는 유닉스 코드베이스로 작업 할 때 이것이 문제가되는 것을 보았습니다. –

답변

14

Windows 파일 시스템 자체가 대/소문자를 구분하지 않기 때문에이 작업을 수행 할 수 없습니다.

RICHIE.h와 richie.h가 둘 다있는 경우에는 대소 문자 구분을 제어하는 ​​것이 좋겠지 만 그렇게 할 수는 없습니다.

+0

각 파일에 대해 iF .. include ... 보일러 플레이트를 쓸 수 있습니다. WolfmanDragon

+5

사실, 그건 옳지 않습니다. NTFS는 POSIX 호환의 일부로 파일 이름의 대소 문자를 유지하지만 파일 조작을 수행 할 때 모든 것을 대문자로 매핑합니다. http://blogs.msdn.com/michkap/archive/2005/01/16/353873.aspx –

+0

C++는 Windows 상자 이상에서 실행됩니다. – WolfmanDragon

0

FAT와 NTFS 모두 대소 문자를 구분하지 않는 파일 시스템입니다. Foo와 fOO는 그들이 관련되어있는 한 동일한 파일입니다. Windows OS는 파일에 사용하는 대/소문자를 유지하지만 파일 이름을 ThisIsAheaderFile.h로 지정하면 파일 시스템에 그런 식으로 표시됩니다. 해당 파일을 여는 모든 시스템 함수 호출이 원하는 모든 대소 문자를 사용할 수 있지만.

+4

아니요, NTFS는 대소 문자를 구분합니다 (또는 레지스트리 설정이 가능하도록 만들 수 있음). 그러나 Win32는 대소 문자를 구분하지 않습니다. 대답은 틀렸고 모든 것이 있기 때문에 단지 FYI입니다 ... – jcolebrand

1

NTFS에서 이름은 같지만 대소 문자가 다른 파일을 만들 수 있습니까? 어쩌면 cygwin을 가진 사람이 이것을 확인할 수 있습니다.

MSDN

은 그렇다하더라도, 그러나, 일반적인 Windows 응용 프로그램에서 한 번에 다음 중 하나 이상에 액세스하는 것은 불가능하다.

+3

그렇게하지 않는 것이 진짜 좋은 이유 같습니다. –

1

Visual Studio 내에서이를 적용 할 수는 없지만 C/C++ 소스에서 전처리기만 실행하여 빠른 확인을 구현할 수 있습니다. 이것은 버전 제어 시스템에서 포스트 커밋 훅 (post-commit hook)처럼 실용적 일 정도로 충분히 빠르게 실행될 것이고, 파일 이름의 대소 문자가 일치하지 않으면 오류가 발생할 것이다. 그래서 :

  • 구성 리눅스에서 빌드 시스템이 구현

  • (gcc/g++-E)를 전처리 전용 실행을 지원하는 프리 프로세서를 전용으로 실행 후 커밋에 조기 통지를 트리거, 후크를 책임자 및/또는 정기적으로 이러한 오류 물론

를 해결하고자하는 사람에게,이 코드에 대한 중앙 저장소로 VCS를 가정합니다.

+0

이것은 위대한 솔루션입니다. 또 다른 하나는 커미터 컴퓨터에서 미리 커밋 (commit) 한 간단한 스크립트 또는 실행 전처리 기일 수 있으며 사용자는 스스로 정리할 수 있습니다. – daramarak

+0

@daramarak : 커미터가 대소 문자를 구분하지 않는 파일 시스템을 실행하는 경우 어떻게 도움이 될까요? – krlmlr

+0

스크립트가 대소 문자를 탐지 할 수 있고 mingw 전처리 기가 대소 문자를 구별하지 않지만 (이 옵션을 켜기위한 옵션이없는 것 같습니다) cygwin의 gcc는 대소 문자를 구분합니다. – daramarak

1

나는 이것이 이 아니라고 지적하고 싶습니다.은 많은 사람들이 OP를 지적하려고 시도하기 때문에 해결할 수없는 문제입니다. 대소 문자를 구분하지 않는 것이 포인트 옆에 있습니다. 요점은 Lorenz03Tx이 설명에서 설명하는 것처럼 파일 시스템이 대소 문자를 구별하지 않는 경우에도 대소 문자가 유지되므로 제어 할 수 있습니다.

이러한 카운터 조치는 크로스 플랫폼 개발을 수행 할 때 정말 좋습니다. 다른 플랫폼 용으로 코드를 컴파일 할 때 많은 작업을 막을 수 있습니다. 빌드 프로세스를 까다롭게 만드는 것은 개발자가 더 나은 습관을 갖도록한다는 것을 잊지 말아야합니다. 개발자가 점진적으로 파일을 포함하고 이름을 지정하는 방식이 점차 일관 될 것이기 때문입니다.

TL; DR은

하나의 해결책은 단순히 문장을 포함에 대한 소스 파일을 검색하고 포함 경로를 따라 그들을 일치 시키려고 스크립트를 사용하는 것입니다.이러한 스크립트는 Visual Studio 포스트 빌드 이벤트에 추가 될 수 있으므로 모든 빌드에서 실행되거나 (krlmlr에서 영감을 얻어) 대/소문자 구분을 적용하는 컴파일러의 전 처리기를 사용합니다.

관련 문제