有些时候我们在编写代码或者阅读开源项目时经常会遇到一些陌生的宏定义,在找遍所有源代码都没发现其在哪里被定义过,这时这些宏定义很可能是系统编译器自己定义的,例如
#ifdef RW_SPINLOCK_USE_X86_INTRINSIC_
// A more balanced Read-Write spin lock implemented based on GCC intrinsics.
namespace detail {
template <size_t kBitWidth> struct RWTicketIntTrait {
static_assert(kBitWidth == 32 || kBitWidth == 64,
"bit width has to be either 32 or 64 ");
};
template <>
struct RWTicketIntTrait<64> {
typedef uint64_t FullInt;
typedef uint32_t HalfInt;
typedef uint16_t QuarterInt;
#ifdef __SSE2__
static __m128i make128(const uint16_t v[4]) {
return _mm_set_epi16(0, 0, 0, 0, v[3], v[2], v[1], v[0]);
}
static inline __m128i fromInteger(uint64_t from) {
return _mm_cvtsi64_si128(from);
}
static inline uint64_t toInteger(__m128i in) {
return _mm_cvtsi128_si64(in);
}
static inline uint64_t addParallel(__m128i in, __m128i kDelta) {
return toInteger(_mm_add_epi16(in, kDelta));
}
#endif
};
... ...
#endif // RW_SPINLOCK_USE_X86_INTRINSIC_
其中的 RW_SPINLOCK_USE_X86_INTRINSIC_和 __SSE2__都是由gcc自己定义的,那么我们如何查看系统定义了哪些宏呢?具体方法如下: