src.dualinventive.com/fw/dncm/libdi/include/di/pp.h

57 lines
1.3 KiB
C

/**
* @file di/pp.h
* Auxiliary preprocessor helper macros
*/
#ifndef INCLUDE_DI_PP_H_
#define INCLUDE_DI_PP_H_
#define DI_PP_CONCAT(A, B) A B
/* Generate "__FILE__:__LINE__" string at compile time */
#define DI_PP_FILE_LINE \
DI_PP_CONCAT( \
DI_PP_CONCAT( \
__FILE__, \
":"), \
DI_PP_STRINGIZE(__LINE__))
/* Generate <component>:<file>:<line> string at compile time */
#define DI_PP_COMPONENT_FILE_LINE(component) \
DI_PP_CONCAT( \
DI_PP_CONCAT( \
DI_PP_STRINGIZE(component), \
":"), \
DI_PP_FILE_LINE)
/* Generate <component>:<file>:<line>:<msg> string at compile time */
#define DI_PP_COMPONENT_FILE_LINE_MSG(component, msg) \
DI_PP_CONCAT( \
DI_PP_CONCAT( \
DI_PP_COMPONENT_FILE_LINE(component), \
":"), \
msg)
/*
* Concatenate preprocessor tokens A and B without expanding macro definitions
* (however, if invoked from a macro, macro arguments are expanded).
*/
#define DI_PP_CAT_NX(A, B) A ## B
/*
* Concatenate preprocessor tokens A and B after macro-expanding them.
*/
#define DI_PP_CAT(A, B) DI_PP_CAT_NX(A, B)
/*
* Turn A into a string literal without expanding macro definitions
* (however, if invoked from a macro, macro arguments are expanded).
*/
#define DI_PP_STRINGIZE_NX(A) #A
/*
* Turn A into a string literal after macro-expanding it.
*/
#define DI_PP_STRINGIZE(A) DI_PP_STRINGIZE_NX(A)
#endif /* INCLUDE_DI_PP_H_ */