如何#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 及更高版本)- 如果您在代码的不同位置使用不同数量的参数.
如何在我的代码中保留 __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 及更高版本)- 如果您在代码的不同位置使用不同数量的参数.