相关疑难解决方法(0)

为什么C代码中的1.0f在生成的程序集中表示为1065353216?

在CI中有这个代码块:

if(x==1){
    a[j][i]=1;
}
else{
    a[j][i]=0;
}
Run Code Online (Sandbox Code Playgroud)

a 是一个浮点值矩阵,如果我试图在nasm语法中看到此代码的编译程序集

a[j][i]=0;分配,以这种方式编码

dword [rsi+rdi], 0
Run Code Online (Sandbox Code Playgroud)

但行a[j][i]=1;分配是以这种方式编码的

dword [rsi+rdi], 1065353216
Run Code Online (Sandbox Code Playgroud)

1065353216如何代表1.0f

c floating-point assembly nasm

7
推荐指数
2
解决办法
2938
查看次数

为什么此代码没有生成严格别名警告?

我有以下代码:

struct A
{
    short b;
};

struct B
{
    double a;
};


void foo (struct B* src)
{
    struct B* b = src;
    struct A* a = (struct A*)src;

    b->a = sin(rand());

    if(a->b == rand())
    {
        printf("Where are you strict aliasing warnings?\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令行编译代码:

gcc -c -std=c99 -Wstrict-aliasing=2 -Wall -fstrict-aliasing -O3 foo.c
Run Code Online (Sandbox Code Playgroud)

我正在使用海湾合作委员会4.5.0。我希望编译器打印出警告:

 warning: dereferencing type-punned pointer will break strict-aliasing rules
Run Code Online (Sandbox Code Playgroud)

但事实并非如此。对于其他情况,我可以打印出警告,但我想知道为什么在这种情况下却没有打印出来。这不是违反严格别名规则的明显例子吗?

c gcc c99 strict-aliasing gcc-warning

5
推荐指数
1
解决办法
1392
查看次数

标签 统计

c ×2

assembly ×1

c99 ×1

floating-point ×1

gcc ×1

gcc-warning ×1

nasm ×1

strict-aliasing ×1