2012-11-16 51 views
0

比方说,我有个字符的缓冲,我想避免使用的memcpy,并通过一个int *变量访问它:__restrict是否允许忽略严格的别名规则?

char buffer[100]; 
strcpy(buffer,"Hello"); 
int* __restrict ptr=(int*)buffer; 
*ptr= 97; 
printf("%s",buffer); 

当然打印“一个”现在这个。
我可以做到这一点,而不会遇到未定义的行为?

+2

我想你会走错方向。如果有的话,'restrict'将会使编译器*更有可能“破坏”某些东西,因为它假定没有别名。 – Mysticial

+4

确实。 'restrict'使混叠规则更严格;除了使用“基于”的指针(基于“基于”的概念的聪明定义)之外,你不允许别名指针**。甚至没有指向相同类型或“char”类型指针的指针。当然,其他类型的指针也不允许别名。 –

+0

那么我还需要使用工会吗? –

回答

1

现在这当然打印“a”。

那么,只有在小端机器上。

及严格别名就什么都没有做你的榜样的类型之一,是charchar可引用任何东西如果restrict的目的不是为了增加箱子数编译器在哪里可以假设有没有别名,即使输入信息不会阻止它。

很明显,如果您想要关于实现域中的__restrict的信息,您应该指定实现。