c - 如何 #ifdef __builtin_prefetch 函数

标签 c conditional-compilation

如何将 __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/

相关文章:

database - 无需查询即可检索 Oracle 数据库名称

c - 为什么 FT_Load_Char 给我一个垃圾字形位图?

c - 转发 "Typedefing"一个结构体

java - 在 Eclipse 下实现 Java/Android 中的构建配置

rust - 将 Rust 属性应用于多行

c# - 根据 C# 中的框架版本进行条件编译

python - 使用 Ctypes 从 Python 传递 C 结构指针

c - C 中的类型转换,大问题

c - 无符号位域类型 : int or unsigned int

根据功能是否可用编译不同的代码