如何将 __builtin_prefetch()
保留在我的代码中,但使没有它的编译器成功编译? (只是在发现它的地方什么也不做)。
最佳答案
__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 及更高版本) - 如果您在不同的地方使用不同数量的参数在您的代码中。
关于c - 如何 #ifdef __builtin_prefetch 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42747687/