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_STRINGS_STRINGIZE_MACROS_H_
10#define BASE_STRINGS_STRINGIZE_MACROS_H_
11
12#include "build/build_config.h"
13
14// This is not very useful as it does not expand defined symbols if
15// called directly. Use its counterpart without the _NO_EXPANSION
16// suffix, below.
17#define STRINGIZE_NO_EXPANSION(x) #x
18
19// Use this to quote the provided parameter, first expanding it if it
20// is a preprocessor symbol.
21//
22// For example, if:
23//   #define A FOO
24//   #define B(x) myobj->FunctionCall(x)
25//
26// Then:
27//   STRINGIZE(A) produces "FOO"
28//   STRINGIZE(B(y)) produces "myobj->FunctionCall(y)"
29#define STRINGIZE(x) STRINGIZE_NO_EXPANSION(x)
30
31#endif  // BASE_STRINGS_STRINGIZE_MACROS_H_
32