Здравствуйте, CRT, Вы писали:
S>>Расскажите эту байку кому-нибудь помоложе.
CRT>Конечно, ведь
CRT>std::cout << "0x" << std::hex << std::setfill('0') << std::setw(4) << 0x424 << std::endl;
Это, вообще-то говоря, необязательно. И запросто может быть преобразовано к чему-то вроде:
std::cout << format("0x04{}", 0x424) << std::endl;
CRT>гораздо удобней чем CRT>printf("0x%04x\n", 0x424);
CRT>
Во-первых, примеры не эквивалентны. Вариант с printf-ом требует еще одну строчку с вызовом fflush.
Во-вторых, давайте пройдемся по тонкому льду:
Делай раз:
#if PLATFORM_ONE
typedef int value_t;
#else
typedef unsigned long value_t;
#endif
void show(value_t v) {
printf("0x04x\n", v);
}
Делай два:
typedef double value_t;
void show(value_t v) {
printf("0x04x\n", v); // Нет, компиляторы далеко не всегда проверяли форматную строку.
}
Делай три:
void as_string(unsigned v) {
char buf[7]; // 0x1234\0
sprintf(buf, "0x04x", v);
...
}
...
as_string(UINT_MAX);