5

プリプロセッサで大文字と小文字を区別しない #define ステートメントを発行することはできますか?

たとえば、foobar のケーシングを Spameggs に変換したい、つまり:

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

この背後にある理由は、いくつかの fortran サブルーチンを別の名前に #define したいからです。もちろん、それらは大文字と小文字を区別しません。大文字化スキームを維持することはあまり気にしていないことに注意してください(最後の例ではナンセンスに思えます)。

4

2 に答える 2

4

悲しいかな、ご存じのとおり、C の識別子は大文字と小文字を区別します。したがって、プリプロセッサ シンボルも同様です (一方が大文字と小文字を区別し、もう一方がそうでない場合、プリプロセッサでシンボルの 1 つだけを変更しようとすると、非常に奇妙な動作が発生する可能性があります)。この動作のオーバーライド フラグも、代替define構造もありません (少なくとも、C/++ の GCC コンパイラ フロントエンドで認識している)。

最も明白な解決策は、大文字と小文字を区別しないgrepコードです。foobar結果を使用して、考えられるすべてのフーバー ケーシングのテーブルを作成し、

  1. それらすべてを 1 つの一貫したケーシングに修正します
  2. すべてのケースの再定義を行う単一のプリプロセッサ ファイルを作成します。

後者のソリューションでは、人間が読めるコードをこれで汚染する必要はありませんFixFooBar.h。これらの再マッピングでいっぱいのファイルを機械で生成し、必要な場所に含めるだけです。

于 2011-08-28T12:12:06.053 に答える
-1

エントリコマンドを使用してみましたか:

  subroutine name1 (args)
  entry      name2 (args)
  entry      name3 (args)
  ....
  return
  end
于 2011-11-07T12:52:34.010 に答える