Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ *restrict/*uu restrict_uu如何在C/C+中工作+;?_C++_C - Fatal编程技术网

C++ *restrict/*uu restrict_uu如何在C/C+中工作+;?

C++ *restrict/*uu restrict_uu如何在C/C+中工作+;?,c++,c,C++,C,下面是我编写的一些代码(使用GCC对C++的\uuuuu restrict\uuuuu扩展): #包括 使用名称空间std; 内部主(空){ int i=7; int*\uuuu restrict\uuuu a=&i; *a=5; int*b=&i,*c=&i; *b=8; *c=9; coutNo 声明 *b = 8; *c = 9; 将导致未定义的行为 从文件: 指针是内存中某个位置的地址。在程序运行过程中,可以有多个指针访问同一内存块并对其进行修改。restrict类型限定符指示编译器,

下面是我编写的一些代码(使用GCC对C++的
\uuuuu restrict\uuuuu
扩展):

#包括
使用名称空间std;
内部主(空){
int i=7;
int*\uuuu restrict\uuuu a=&i;
*a=5;
int*b=&i,*c=&i;
*b=8;
*c=9;
coutNo

声明

*b = 8;
*c = 9;
将导致未定义的行为

从文件:

指针是内存中某个位置的地址。在程序运行过程中,可以有多个指针访问同一内存块并对其进行修改。
restrict
类型限定符指示编译器,如果修改了
restrict
限定指针所寻址的内存,则其他指针将无法访问相同的内存。编译器可以选择优化包含
限制
限定指针的代码,否则可能导致错误行为。程序员有责任确保
限制
限定指针按预期使用。否则,未定义的行为可能会重新定义苏丹


C++中没有<代码>限制<代码>;任何其他的编译器扩展。可能的复制@ KrEKSB比在C中考虑这个程序,使用“限制”,我问C/C++……其中一个。@莫拉里利安:你没有抓住要点。你只标注了这个问题[C++和]。关于语言,但是
restrict
不是语言本身的一部分。因此,它必须是一个编译器扩展。为了给您一个合理的答复,我们需要知道您使用的是什么平台。请通过适当的标记来说明这一点,并将其包含在您的问题主体中。我不是也写了同样的东西吗?我我没有问程序是否正确,我自己说它是错误的,因为b和c。错误并不意味着它会出现错误,甚至不会发出警告信息,因为这是“程序员和编译器之间的合同”,编译器不会检查它。因此,我理解我问题的答案(“我得到的正确/正确吗?”)是一个简单的“否”?如果问题不清楚:我没有问程序是否正确,它是故意错误的。我问我对代码中“限制”的理解是否正确。@MoraruLilian“否”是对“否”的特别回答,或者,即使“b”先修改了“I”,之后只有“a”才能访问该内存(“我“)。我理解得对吗?”问题是,你甚至不允许用另一个指针访问这个变量。现在这一点更清楚了。这句话让我这样想:“……如果限制限定指针寻址的内存被修改,其他指针将不会访问相同的内存。”-这让我觉得,在修改值之后,其他指针都不应该访问它,但在此之前,任何人都可以访问它。实际上,我读了更多的内容,有一篇文章特别向我阐明了这一点:。谢谢。@初学者:根据标准,该文档是错误的,不要求只有一个指针可以访问它“访问同一内存块并修改它”,但所有访问都“基于”限制限定指针(即使只有通过限制限定指针执行访问时才需要);参见C99 6.7.3.1。所讨论的代码调用未定义的行为,因为它使用指针b和c访问值,而指针b和c不是“基于”a。
#include <stdio.h>

int main(void) {
    int i = 7;
    int *restrict a = &i;
    *a = 5;
    int *b = &i, *c = &i;
    *b = 8;
    *c = 9;

    printf("%d \n", **&a); // *a - which prints 9 in this case

    return 0;
}
*b = 8;
*c = 9;