2

Visual Studio C++ を使用しています。ダブルとロングロングを切り替えられるようにしたいです。次のプログラムで #ifdef を使用するにはどうすればよいですか? 複数のprintfの場合を処理するために、より単純なソリューションを使用したいと思います。

//#define TYPE_SWITCH
#ifdef TYPE_SWITCH
      typedef double myType;
#else
      typedef long long myType;
#end

.
.
.
int main()
{
     myType a;
     #ifdef TYPE_SWITCH
        printf ("my value is %lf",a);      // I have many printf or scanf and I want to use a simple macro here
     #else
        printf ("your value is %l",a/10);      // I have many printf or scanf and I want to use a simple macro here
     #endif

}
4

1 に答える 1

6

次のようなものを使用できます。

//#define TYPE_SWITCH
#ifdef TYPE_SWITCH
      typedef double myType;
      #def PATTERN_MY_TYPE "%lf"
      #def MODIFICATOR(a) (a)
#else
      typedef long long myType;
      #def PATTERN_MY_TYPE "%l"
      #def MODIFICATOR(a) (a/10)
#end
#def PATTERN_INT "%d"

//...

int main() {
     myType a;
     printf(PATTERN_MY_TYPE ", " PATTERN_INT, MODIFICATOR(a), 42);
}

コンパイラはコンパイル中に文字列を連結できるため、定義と同じ"foo" "bar"ように文字列を作成するために使用できます。"foobar"("foo" PATTERN_INT "bar"生成し"foo%dbar"ます。

于 2013-02-04T12:27:04.160 に答える