2009-07-14 13 views
10

あなたがThisIsAHeaderFile.hという名前のヘッダファイルを持っている場合は、次のことがまだVisual Studioでファイルを探します:#includesを使用してVisual Studioのプリプロセッサの大文字と小文字を区別する方法

#include <ThisIsAheaderFile.h> 

#includeはエラーになりますように、大文字と小文字の区別を強制する方法はありますか?

+0

同じファイル名の2つのバージョンを使用する可能性がありますが、大文字と小文字が異なるUnixコードベースで作業する場合、これが問題になることがありました。 –

答えて

14

Windowsファイルシステム自体が大文字と小文字を区別しないため、できません。

RICHIE.hとrichie.hの両方が存在する状況になる可能性がある場合は、大文字と小文字の区別を制御することは理にかなっていますが、そうではありません。

+0

各ファイルに対してこれを行うためにiF .. includes ... boiler plateを書くことができます。 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アプリケーションから一度これらの1以上にアクセスすることは不可能です。

+3

それをしない本当の良い理由のように聞こえます。 –

1

Visual Studio内でこれを強制することはできないかもしれませんが、C/C++ソースでプリプロセッサだけを実行してクイックチェックを実装できます。これは、バージョン管理システムでのコミット後のフックとしても実用可能なほど迅速に実行され、ファイル名の大文字小文字が一致していない場合にはエラーとなります。だから、:

  • は、プリプロセッサのみ(gcc/g++-E)を実行をサポートするために、Linuxでのビルドシステムを設定

  • プリプロセッサのみの実装ポストcommitフックとして実行に早期に通知をトリガ責任ある人および/またはこれらのエラーを日常的に修正しようとする人へ

もちろん、これはコードの中央記憶域としてVCSを想定しています。

+0

これはすばらしい解決策です。もう1つは、コミッターマシンで事前コミットする単純なスクリプトまたは実行前処理プログラムであり、ユーザーが自分自身をクリーンアップできるようにします。 – daramarak

+0

@daramarak:コミッターが大文字と小文字を区別しないファイルシステムを実行する場合、どのように役立ちますか? – krlmlr

+0

スクリプトは大文字小文字を検出でき、mingwプリプロセッサは大文字と小文字を区別しません(これをオンにするオプションはないようです)。cygwinのgccは大文字と小文字を区別します。 – daramarak

1

これは、ではないことを指摘したいと思います。 OPに指摘しようとすると多くの問題が解決します。大文字と小文字を区別しないのはポイントの横にある。ポイントはLorenz03Txがコメントで説明しているように、たとえファイルシステムが大文字小文字を区別しない場合でも、大文字小文字は保持されているため、制御することができます。

このような対策は、クロスプラットフォーム開発を行う際には本当に素晴らしいことですが、他のプラットフォーム用にコードをコンパイルすると作業後に多くのことを防ぐことができます。ビルドプロセスをより冗長にすると、開発者にとってより良い習慣がもたらされることを忘れてはいけません。

TL; DRは

一つの解決策は、単に文を含むソースファイルをスキャンして含む経路に沿って、それらを一致させようとスクリプトを使用することです。このようなスクリプトは、ビジュアルスタジオのポストビルドイベントに追加することができ、したがってすべてのビルドで実行することができます(またはkrlmlrからインスパイアされます)。大文字と小文字を区別するコンパイラのプリプロセッサを使用します。

関連する問題