如何#ifdef __builtin_prefetch 函数

How to #ifdef the __builtin_prefetch function

如何在我的代码中保留 __builtin_prefetch(),但让没有它的编译器编译成功? (只是在找到它的地方什么也不做)。

这不是最好的解决方案,但它会在 GCC 以外的所有其他编译器上禁用 __builtin_prefetch()

#ifndef __GNUC__
#   define __builtin_prefetch(x)
#endif 

__builtin_prefetch() 被编译器 (gcc) 而非预处理器识别,因此您将无法使用 C 预处理器检测到它。

由于保留了带有两个前导下划线的标识符供实现使用(因此您使用的任何定义此类标识符的代码都具有未定义的行为)我会反过来做。

#ifdef __GNUC__
#define do_prefetch(x) __builtin_prefetch(x)
#else
#define do_prefetch(x)
#endif

然后使用

do_prefetch(whatever);

需要的地方。

除非实际需要,否则不会发出代码。

由于 __builtin_prefetch() 接受可变数量的参数,您可能需要调整以上内容以使用可变参数宏(C99 及更高版本)- 如果您在代码的不同位置使用不同数量的参数.