使用 restrict 关键字可改善性能,如上一个主题所述。但如果关键字使用不当,则会出现问题。__restrict
子指针必须在不同于父指针的块级作用域内使用,例如,指针 p
和 q
,如以下示例所示。
有效示例 1
图 1. restrict 关键字的使用
在相同作用域内使用父指针可能中断 __restrict
约定,并生成未定义的行为,如以下示例中的指针 p
和 q
所示。
图 2. 未定义的行为
有效示例 2
这也可能在 load
操作期间发生,如下图中的绿色文本所示 (return *p;
)。
图 3. 加载操作
当在相同作用域内使用 restrict 指针时,会发生未定义的行为,如以下示例中的指针 p
和 q
所示。
图 4. 相同作用域内的 restrict 指针
内联函数的有效示例
以下代码显示了有效的内联函数调用,其中,指针 p
与指针 q
在不同作用域内使用。
图 5. 内联函数调用
当在相同作用域内使用 restrict 指针时,会发生未定义的行为,如以下示例中的指针 p
和 q
所示。
图 6. 相同作用域内的内联函数调用