ref*_*fox 1 c const compiler-optimization
是否允许在标准C中使用别名来修改int给定的函数?换句话说,以下代码是否保证在标准C中始终返回42和1?const int *int *
#include <stdio.h>
void foo(const int *a, int *b)
{
printf("%d\n", *a);
*b = 1;
printf("%d\n", *a);
}
int main(void)
{
int a = 42;
foo(&a, &a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在您的示例代码中,您有一个整数.你接受一个const指针,以及一个指向它的非const指针.当然,通过非const指针修改整数是合法且明确的.
由于两个指针都是指向整数的指针,并且const指针不需要指向const对象,因此编译器应该期望从const指针读取的值可能已更改,并且需要重新加载该值.
请注意,如果您使用了restrict关键字,则不会出现这种情况,因为它指定指针参数不会对任何其他指针参数进行别名,因此编译器可以优化重新加载.
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |