相关疑难解决方法(0)

具有自动存储持续时间的两个不同对象在地址比较下是否相等?

特别是,允许​​不同函数中两个自动变量的地址比较如下:

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 equalf1f2是不同的对象.使用gcc我得到了not equal,但是使用我的本地版本的clang 3.8 1,它在打印equal时编译为clang -O1 sink.c main.c2.

拆卸makemain …

c x86 clang

8
推荐指数
1
解决办法
148
查看次数

标签 统计

c ×1

clang ×1

x86 ×1