如何将__builtin_prefetch()
保留在我的代码中,但是使编译器没有成功编译? (在找到它的地方什么都不做。)
答案 0 :(得分:1)
__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及更高版本) - 如果您在代码中的不同位置使用不同数量的参数。 / p>
答案 1 :(得分:0)
这不是最佳解决方案,但它会禁用除GCC之外的所有其他编译器上的__builtin_prefetch()
。
#ifndef __GNUC__
# define __builtin_prefetch(x)
#endif