我使用mingw32-gcc,符合C99标准。我在代码下面粘贴了一篇关于restrict
关键字 - http://wr.informatik.uni-hamburg.de/_media/teaching/wintersemester_2013_2014/epc-1314-fasselt-c-keywords-report.pdf的文章的一些修改。根据作者的说法,"Result One"
和"Result Two"
应该是不同的,但是当我运行它时,它们是相同的。我没有得到任何编译器警告。我有什么设置缺失吗?
#include <stdio.h>
void update(int* a, int* b, int* c)
{
*a += *c;
*b += *c;
}
void update_restrict(int* a, int* b, int* restrict c)
{
printf("*c = %d\n",*c);
*a += *c;
printf("\n*c = %d - ",*c);
printf("shouldn't this have stayed the same?\n\n");
*b += *c;
}
int main()
{
int a = 1, b = 2;
update(&a, &b, &a);
printf("Result One: a, b = %d, %d\n", a, b);
a = 1; b = 2; // reset values
update_restrict(&a, &b, &a);
printf("Result Two: a, b = %d, %d\n", a, b);
getchar();
return 0;
}
答案 0 :(得分:1)
来自wikipedia.org:
如果未遵循意图声明且对象是 通过独立指针访问,这将导致未定义 行为。
此行update_restrict(&a, &b, &a);
会导致未定义的行为。
结果可能相同,也可能不一样。