1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef BASE_FORMAT_MACROS_H_ 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define BASE_FORMAT_MACROS_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This file defines the format macros for some integer types. 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// To print a 64-bit value in a portable way: 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// int64_t value; 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// printf("xyz:%" PRId64, value); 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The "d" in the macro corresponds to %d; you can also use PRIu64 etc. 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// For wide strings, prepend "Wide" to the macro: 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// int64_t value; 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// StringPrintf(L"xyz: %" WidePRId64, value); 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// To print a size_t value in a portable way: 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// size_t size; 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// printf("xyz: %" PRIuS, size); 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The "u" in the macro corresponds to %u, and S is for "size". 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "build/build_config.h" 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if defined(OS_POSIX) 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if (defined(_INTTYPES_H) || defined(_INTTYPES_H_)) && !defined(PRId64) 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#error "inttypes.h has already been included before this header file, but " 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#error "without __STDC_FORMAT_MACROS defined." 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !defined(__STDC_FORMAT_MACROS) 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define __STDC_FORMAT_MACROS 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <inttypes.h> 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// GCC will concatenate wide and narrow strings correctly, so nothing needs to 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// be done here. 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRId64 PRId64 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRIu64 PRIu64 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRIx64 PRIx64 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if !defined(PRIuS) 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define PRIuS "zu" 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#else // OS_WIN 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !defined(PRId64) 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define PRId64 "I64d" 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !defined(PRIu64) 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define PRIu64 "I64u" 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !defined(PRIx64) 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define PRIx64 "I64x" 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRId64 L"I64d" 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRIu64 L"I64u" 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRIx64 L"I64x" 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if !defined(PRIuS) 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define PRIuS "Iu" 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif // BASE_FORMAT_MACROS_H_ 75