1 /* Copyright (c) 2012 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. */
5 #ifndef LIBRARIES_SDK_UTIL_MACROS_H_
6 #define LIBRARIES_SDK_UTIL_MACROS_H_
9 * A macro to disallow the evil copy constructor and operator= functions
10 * This should be used in the private: declarations for a class.
12 #define DISALLOW_COPY_AND_ASSIGN(TypeName) \
13 TypeName(const TypeName&); \
14 void operator=(const TypeName&)
16 /** returns the size of a member of a struct. */
17 #define MEMBER_SIZE(struct_name, member) sizeof(((struct_name*)0)->member)
20 * Macros to prevent name mangling of definitions, allowing them to be
24 # define EXTERN_C_BEGIN extern "C" {
25 # define EXTERN_C_END }
27 # define EXTERN_C_BEGIN
29 #endif /* __cplusplus */
32 * Macros to help force linkage of symbols that otherwise would not be
35 * // In a source file that you want to force linkage (file scope):
36 * FORCE_LINK_THIS(myfilename);
38 * // In a source file that you are sure will be linked (file scope):
39 * FORCE_LINK_THAT(myfilename)
42 #define FORCE_LINK_THIS(x) int force_link_##x = 0;
43 #define FORCE_LINK_THAT(x) \
44 void force_link_function_##x() { \
45 extern int force_link_##x; \
50 * Macro to error out when a printf-like function is passed incorrect arguments.
53 * void foo(const char* fmt, ...) PRINTF_LIKE(1, 2);
55 * The first argument is the location of the fmt string (1-based).
56 * The second argument is the location of the first argument to validate (also
57 * 1-based, but can be zero if the function uses a va_list, like vprintf.)
60 #define PRINTF_LIKE(a, b) __attribute__ ((format(printf, a, b)))
62 #define PRINTF_LIKE(a, b)
65 #endif /* LIBRARIES_SDK_UTIL_MACROS_H_ */