【发布时间】:2013-12-18 09:16:02
【问题描述】:
如果dot_product 被声明为
float dot_product(const float* restrict a, const float* restrict b, unsigned n);
会调用它
dot_product(x, x, x_len)
根据 C99 标准是“未定义”吗?
编辑
x是指针,当然是指向sizeof(float) * x_len字节的内存,x_len就是unsigned。这个问题是关于别名的。
【问题讨论】:
-
我没有引用的标准,但我不得不想象它是未定义的行为。您明确告诉编译器没有其他指针引用相同的内存位置,然后违反了该提示。我认为
constness 不会对此产生影响。 -
自相矛盾:如果
dot_product是点积的常用定义,那么我认为它重要。也就是说,如果您只对指针执行读取操作,那么违反restrict应该无关紧要。只有当你写的时候,我才会预料到问题会发生。 -
我应该删除“编辑”吗?似乎是多余的。 两个人误解了我的问题,我感到很震惊。
-
@ChrisHayes 我的问题是关于 C99 标准而不是“你友好的本地编译器”,但我同意。
-
要清楚,因为
dot_product似乎是一个非常具体的示例函数,这个问题是关于别名restrict指针的只读使用吗?我认为是这样,因为读写用法显然是未定义的。
标签: c pointers c99 pointer-aliasing restrict-qualifier