3

私は、テキストが両方を生成できるように、大文字と小文字が混在する単語の任意のコレクションでDRY方法論を使用しようとしています。MixedCase

  • コンパイル時の文字列"MixedCase"
  • コンパイル時変数const int MIXEDCASE_ID

私はgccを使用していますが、gcc拡張機能は許容されます。

C ++がコード内のテストを大文字に変換することは可能ですか?例:

  CONVERT(abc)

シンボルを生成しますABCか? そうでない場合は、コードにすべてのサンプルを2回入力する以外の解決策はありますか?

編集: 入力形式に制限がないことを考慮してください。 Mixedまたは"Mixed"または'M', 'i', 'x', 'e', 'd'または0x4d 0x69 0x78 0x65 0x64(うん?)..。

4

4 に答える 4

4

これを行うには、この変換を行うためにソースファイルを前処理(実際には前処理)するビルドツールを作成する必要があります。gccには、コンパイル時にこれを実行できる組み込み機能はありません。

于 2012-10-02T15:49:30.813 に答える
1

m4プリプロセッサを見てください。これとはるかに多くのことができます。

于 2012-10-02T16:06:43.010 に答える
1

chaos ppライブラリ(C89およびC99プリプロセッサで動作します)をうまく使用すると、次のことができます。

CHAOS_PP_CONCAT
(
    (CHAOS_PP_STRING) CHAOS_PP_STRING_TO_UPPER(M i x e d C a s e)
) 
// Expands to MIXEDCASE

文字の有効な値は、数字(0から9)、基本ソース文字セットのアルファベット文字(aからzおよびAからZ)、およびアンダースコア(_)です。他の文字の使用例を次に示します。

CHAOS_PP_CONCAT
(
    (CHAOS_PP_STRING) CHAOS_PP_STRING_TO_UPPER(a b C _ 1 0)
)
// Expands to ABC_10

また、トークンを文字列化するためのマクロもあります。

于 2012-10-05T01:31:28.660 に答える
0

マニュアルはご自身でご確認いただけます。必要なことを実行するものがそこに見つからない場合は、いつでも独自のプリプロセッサを作成できます(たとえば、MakefileのPerlワンライナーに相当する場合があります)。

于 2012-10-02T15:50:44.200 に答える