format_macros.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2009 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef BASE_FORMAT_MACROS_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define BASE_FORMAT_MACROS_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file defines the format macros for some integer types.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// To print a 64-bit value in a portable way:
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   int64_t value;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   printf("xyz:%" PRId64, value);
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The "d" in the macro corresponds to %d; you can also use PRIu64 etc.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For wide strings, prepend "Wide" to the macro:
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   int64_t value;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   StringPrintf(L"xyz: %" WidePRId64, value);
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// To print a size_t value in a portable way:
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   size_t size;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//   printf("xyz: %" PRIuS, size);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The "u" in the macro corresponds to %u, and S is for "size".
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if (defined(_INTTYPES_H) || defined(_INTTYPES_H_)) && !defined(PRId64)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error "inttypes.h has already been included before this header file, but "
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error "without __STDC_FORMAT_MACROS defined."
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(__STDC_FORMAT_MACROS)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define __STDC_FORMAT_MACROS
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <inttypes.h>
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GCC will concatenate wide and narrow strings correctly, so nothing needs to
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// be done here.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRId64 PRId64
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRIu64 PRIu64
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRIx64 PRIx64
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(PRIuS)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PRIuS "zu"
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else  // OS_WIN
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(PRId64)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PRId64 "I64d"
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(PRIu64)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PRIu64 "I64u"
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(PRIx64)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PRIx64 "I64x"
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRId64 L"I64d"
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRIu64 L"I64u"
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define WidePRIx64 L"I64x"
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(PRIuS)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PRIuS "Iu"
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // BASE_FORMAT_MACROS_H_
74