use do { .. } while(0) around content of logging macros (#681)
Signed-off-by: Dirk Thomas <dirk-thomas@users.noreply.github.com>
This commit is contained in:
parent
1f2904f980
commit
8783cdcf96
1 changed files with 14 additions and 9 deletions
|
@ -71,6 +71,9 @@ def is_supported_feature_combination(feature_combination):
|
||||||
#else
|
#else
|
||||||
@[ for feature_combination in [fc for fc in feature_combinations if is_supported_feature_combination(fc)]]@
|
@[ for feature_combination in [fc for fc in feature_combinations if is_supported_feature_combination(fc)]]@
|
||||||
@{suffix = get_suffix_from_features(feature_combination)}@
|
@{suffix = get_suffix_from_features(feature_combination)}@
|
||||||
|
// The RCLCPP_@(severity)@(suffix) macro is surrounded by do { .. } while (0)
|
||||||
|
// to implement the standard C macro idiom to make the macro safe in all
|
||||||
|
// contexts; see http://c-faq.com/cpp/multistmt.html for more information.
|
||||||
/**
|
/**
|
||||||
* \def RCLCPP_@(severity)@(suffix)
|
* \def RCLCPP_@(severity)@(suffix)
|
||||||
* Log a message with severity @(severity)@
|
* Log a message with severity @(severity)@
|
||||||
|
@ -90,18 +93,20 @@ def is_supported_feature_combination(feature_combination):
|
||||||
* It also accepts a single argument of type std::string.
|
* It also accepts a single argument of type std::string.
|
||||||
*/
|
*/
|
||||||
#define RCLCPP_@(severity)@(suffix)(logger, @(''.join([p + ', ' for p in get_macro_parameters(feature_combination).keys()]))...) \
|
#define RCLCPP_@(severity)@(suffix)(logger, @(''.join([p + ', ' for p in get_macro_parameters(feature_combination).keys()]))...) \
|
||||||
static_assert( \
|
do { \
|
||||||
::std::is_same<typename std::remove_reference<decltype(logger)>::type, \
|
static_assert( \
|
||||||
typename ::rclcpp::Logger>::value, \
|
::std::is_same<typename std::remove_reference<decltype(logger)>::type, \
|
||||||
"First argument to logging macros must be an rclcpp::Logger"); \
|
typename ::rclcpp::Logger>::value, \
|
||||||
RCUTILS_LOG_@(severity)@(suffix)_NAMED( \
|
"First argument to logging macros must be an rclcpp::Logger"); \
|
||||||
|
RCUTILS_LOG_@(severity)@(suffix)_NAMED( \
|
||||||
@{params = get_macro_parameters(feature_combination).keys()}@
|
@{params = get_macro_parameters(feature_combination).keys()}@
|
||||||
@[ if params]@
|
@[ if params]@
|
||||||
@(''.join([' ' + p + ', \\\n' for p in params]))@
|
@(''.join([' ' + p + ', \\\n' for p in params]))@
|
||||||
@[ end if]@
|
@[ end if]@
|
||||||
logger.get_name(), \
|
logger.get_name(), \
|
||||||
rclcpp::get_c_string(RCLCPP_FIRST_ARG(__VA_ARGS__, "")), \
|
rclcpp::get_c_string(RCLCPP_FIRST_ARG(__VA_ARGS__, "")), \
|
||||||
RCLCPP_ALL_BUT_FIRST_ARGS(__VA_ARGS__,""))
|
RCLCPP_ALL_BUT_FIRST_ARGS(__VA_ARGS__,"")); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
@[ end for]@
|
@[ end for]@
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue