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