我正在浏览一些文档和问题/答案,并看到它提到.我读了一个简短的描述,声明它基本上是程序员的承诺,指针不会用于指向其他地方.
任何人都可以提供一些现实案例,其值得实际使用吗?
考虑以下:
extern void bar(int *restrict);
void foo(int *restrict p) {
int tmp;
bar(&tmp);
*p = tmp;
}
Run Code Online (Sandbox Code Playgroud)
C99规范是否允许优化foo以下?
extern void bar(int *restrict);
void foo(int *restrict p) {
bar(p);
}
Run Code Online (Sandbox Code Playgroud)
我在-O3模式下尝试了gcc,Clang和Intel Compiler,并且都没有生成反映上述优化的代码.这让我怀疑这种优化打破了规范.如果不允许,那么它在规范中的含义是什么?
注意:我的问题受到这个SO问题的启发