restrict-Keyword不起作用?

时间:2015-04-28 05:00:08

标签: c gcc restrict restrict-qualifier

我使用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;
}

1 个答案:

答案 0 :(得分:1)

About the usage of restrict

来自wikipedia.org:

  

如果未遵循意图声明且对象是   通过独立指针访问,这将导致未定义   行为。

此行update_restrict(&a, &b, &a);会导致未定义的行为

结果可能相同,也可能不一样。