Как использовать #ifdef для переключения типов данных
Я использую visual studio c++. Я хочу иметь возможность переключаться между double и long long. Как я могу использовать #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
}
1 ответ:
Вы могли бы использовать что-то вроде этого:
//#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"
то же самое работает для defines. ("foo" PATTERN_INT "bar"
будет производить"foo%dbar"
.