【发布时间】:2015-08-19 19:04:34
【问题描述】:
gcc 5 和 clang 3.6 都不会在违反 restrict 限定符的约束时发出警告,即使使用 -Wall 调用也是如此。考虑以下代码片段:
extern void f(char *restrict p, char *restrict q);
void g(char *p)
{
f(p, p);
}
天真地,我希望可以静态确定违规行为,并且我希望 -Wall 会发出警告。我是否错过了某处的标志,或者发出我没有看到的警告有什么问题?
【问题讨论】:
-
原型中的顶级限定符没有意义(文档除外);函数体仍然可以实现为
void f(char *p, char *q);。显然没有编译器会根据restrict的存在来优化调用代码。 Related thread -
代替编译器开发人员实际发表评论 - 我的猜测只是没有人要求该功能和/或没有开发人员决定投入时间来实现它。
标签: c c99 c11 restrict restrict-qualifier