.. _program_listing_file_include_rcutils_macros.h: Program Listing for File macros.h ================================= |exhale_lsh| :ref:`Return to documentation for file ` (``include/rcutils/macros.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp ^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^ ARG 1 ARG 2 ARG 3 ARG 4 format string first optional argument // Copyright 2017 Open Source Robotics Foundation, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef RCUTILS__MACROS_H_ #define RCUTILS__MACROS_H_ #ifdef __cplusplus extern "C" { #endif #ifndef _WIN32 #define RCUTILS_WARN_UNUSED __attribute__((warn_unused_result)) #else #define RCUTILS_WARN_UNUSED _Check_return_ #endif // This block either sets RCUTILS_THREAD_LOCAL or RCUTILS_THREAD_LOCAL_PTHREAD. #if defined _WIN32 || defined __CYGWIN__ // Windows or Cygwin #define RCUTILS_THREAD_LOCAL __declspec(thread) #elif defined __APPLE__ // Apple OS's #include #if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE // iOS Simulator or iOS device #include #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 // iOS >= 10, thread local storage was added in iOS 10 #define RCUTILS_THREAD_LOCAL _Thread_local #else // iOS < 10, no thread local storage, so use pthread instead #define RCUTILS_THREAD_LOCAL_PTHREAD 1 #undef RCUTILS_THREAD_LOCAL #endif #else #error "Unknown iOS version" #endif #elif TARGET_OS_MAC // macOS #define RCUTILS_THREAD_LOCAL _Thread_local #else #error "Unknown Apple platform" #endif #else // Some other non-Windows, non-cygwin, non-apple OS #define RCUTILS_THREAD_LOCAL _Thread_local #endif #define RCUTILS_STRINGIFY_IMPL(x) #x #define RCUTILS_STRINGIFY(x) RCUTILS_STRINGIFY_IMPL(x) #define RCUTILS_UNUSED(x) (void)(x) #define RCUTILS_JOIN_IMPL(arg1, arg2) arg1 ## arg2 #define RCUTILS_JOIN(arg1, arg2) RCUTILS_JOIN_IMPL(arg1, arg2) #if defined _WIN32 || defined __CYGWIN__ #define RCUTILS_ATTRIBUTE_PRINTF_FORMAT(format_string_index, first_to_check_index) #else #define RCUTILS_ATTRIBUTE_PRINTF_FORMAT(format_string_index, first_to_check_index) \ __attribute__ ((format(printf, format_string_index, first_to_check_index))) #endif // !defined _WIN32 || defined __CYGWIN__ #ifndef _WIN32 # define RCUTILS_DEPRECATED __attribute__((deprecated)) #else # define RCUTILS_DEPRECATED __declspec(deprecated) #endif #ifndef _WIN32 # define RCUTILS_DEPRECATED_WITH_MSG(msg) __attribute__((deprecated(msg))) #else # define RCUTILS_DEPRECATED_WITH_MSG(msg) __declspec(deprecated(msg)) #endif // Provide the compiler with branch prediction information #ifndef _WIN32 # define RCUTILS_LIKELY(x) __builtin_expect((x), 1) # define RCUTILS_UNLIKELY(x) __builtin_expect((x), 0) #else # define RCUTILS_LIKELY(x) (x) # define RCUTILS_UNLIKELY(x) (x) #endif // _WIN32 #if defined RCUTILS_ENABLE_FAULT_INJECTION #include "rcutils/testing/fault_injection.h" # define RCUTILS_CAN_RETURN_WITH_ERROR_OF(error_return_value) \ RCUTILS_FAULT_INJECTION_MAYBE_RETURN_ERROR(error_return_value); # define RCUTILS_CAN_FAIL_WITH(failure_code) \ RCUTILS_FAULT_INJECTION_MAYBE_FAIL(failure_code); #else # define RCUTILS_CAN_RETURN_WITH_ERROR_OF(error_return_value) # define RCUTILS_CAN_FAIL_WITH(failure_code) #endif // defined RCUTILS_ENABLE_FAULT_INJECTION #ifdef __cplusplus } #endif #endif // RCUTILS__MACROS_H_