特别是,允许不同函数中两个自动变量的地址比较如下:
sink.c
#include <stdio.h>
#include <stdlib.h>
void sink(void *l, void *r) {
puts(l == r ? "equal" : "not equal");
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
main.c中
typedef struct { char x[32]; } Foo;
void sink(void *l, void *r);
Foo make(void *p) {
Foo f2;
sink(&f2, p);
return f2;
}
int main() {
Foo f1 = make(&f1);
}
Run Code Online (Sandbox Code Playgroud)
我希望它可以打印not equal的f1和f2是不同的对象.使用gcc我得到了not equal,但是使用我的本地版本的clang 3.8 1,它在打印equal时编译为clang -O1 sink.c main.c2.
拆卸make和main …