1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 // 5 // This file defines preprocessor macros for stringizing preprocessor 6 // symbols (or their output) and manipulating preprocessor symbols 7 // that define strings. 8 9 #ifndef BASE_STRINGIZE_MACROS_H_ 10 #define BASE_STRINGIZE_MACROS_H_ 11 #pragma once 12 13 #include "build/build_config.h" 14 15 // This is not very useful as it does not expand defined symbols if 16 // called directly. Use its counterpart without the _NO_EXPANSION 17 // suffix, below. 18 #define STRINGIZE_NO_EXPANSION(x) #x 19 20 // Use this to quote the provided parameter, first expanding it if it 21 // is a preprocessor symbol. 22 // 23 // For example, if: 24 // #define A FOO 25 // #define B(x) myobj->FunctionCall(x) 26 // 27 // Then: 28 // STRINGIZE(A) produces "FOO" 29 // STRINGIZE(B(y)) produces "myobj->FunctionCall(y)" 30 #define STRINGIZE(x) STRINGIZE_NO_EXPANSION(x) 31 32 // The following are defined only on Windows (for use when interacting 33 // with Windows APIs) as wide strings are otherwise deprecated. 34 #if defined(OS_WIN) 35 36 // Second-level utility macros to let us expand symbols. 37 #define LSTRINGIZE_NO_EXPANSION(x) L ## #x 38 #define TO_L_STRING_NO_EXPANSION(x) L ## x 39 40 // L version of STRINGIZE(). For examples above, 41 // LSTRINGIZE(A) produces L"FOO" 42 // LSTRINGIZE(B(y)) produces L"myobj->FunctionCall(y)" 43 #define LSTRINGIZE(x) LSTRINGIZE_NO_EXPANSION(x) 44 45 // Adds an L in front of an existing ASCII string constant (after 46 // expanding symbols). Does not do any quoting. 47 // 48 // For example, if: 49 // #define C "foo" 50 // 51 // Then: 52 // TO_L_STRING(C) produces L"foo" 53 #define TO_L_STRING(x) TO_L_STRING_NO_EXPANSION(x) 54 55 #endif // defined(OS_WIN) 56 57 #endif // BASE_STRINGIZE_MACROS_H_ 58