2011-08-28 30 views
5

プリプロセッサで大文字と小文字を区別しない#define文を発行できますか?大文字と小文字を区別しない#define

例えば、私はすなわち、spameggsにfoobarにのいずれかのケースを変換したい:この背後にある理由は、私は別の名前を持っているいくつかのFORTRANサブルーチンを#defineしたいということです

FooBar -> spameggs 
foobar -> spameggs 
fooBar -> spameggs 
Foobar -> spameggs 
FOOBAR -> spameggs 
FOOBAr -> spameggs (an odd possibility I know) 
etc 

、そして彼らのコースのは、大文字小文字を区別しません。私は実際に大文字のスキーム(最後の例ではちょっとナンセンスに見える)を維持することにはまったく関心がないことに注意してください。

+0

削除タグ - この質問は[FORTRAN]言語とは何の関係もありません。 – Rook

答えて

4

ご存じのように、Cの識別子は大文字と小文字が区別されます。したがって、プリプロセッサのシンボルもそうです(もし大文字と小文字が区別されていなければ、プリプロセッサでシンボルの1つだけを変更しようとすると非常に奇妙な動作が起こります)。この振る舞いのためのオーバーライドフラグも、代わりのdefineコンストラクタもありません(少なくとも私がGCCコンパイラのC/++のフロントエンドで認識していることです)。

grepのコードは、foobarの大文字と小文字が区別されません。すべての可能なfoobarのケーシングのテーブルを構築するために、結果を使用して

  1. のいずれかが、すべてのケースのための再定義を行い、単一のプリプロセッサフ​​ァイルを作成します
  2. 1つの一貫性のある筐体にそれらをすべて修正してください。

後者の解決方法では、人間が読めるコードをこのコードで汚染する必要はありません。FixFooBar.hのファイルを生成し、必要な場所にインクルードしてください。

+0

かなり怒っていましたが、私が期待していたもののようなものでした。私はソリューション1と2の両方を考えていましたが、彼らがハッキリと感じるように使う必要はないと思っていました。 – VolatileStorm

-1

を使用すると、エントリコマンドを使用してみましたが:

subroutine name1 (args) 
    entry  name2 (args) 
    entry  name3 (args) 
    .... 
    return 
    end 
+1

これはC++の質問です。 –

関連する問題