如何#ifdef __builtin_prefetch函数

时间:2017-03-12 12:57:50

标签: c conditional-compilation

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

2 个答案:

答案 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