【发布时间】:2013-10-15 10:16:20
【问题描述】:
我在 Linux 上使用 GCC 编译器。
我想使用 64 位编译器并使用 -m32 选项(32 位兼容性)构建我的一些文件。我发现编译器的奇怪(对我而言)行为。
我的代码很简单:
int main () {
int test =(((0) & 0x00000000) << (32));
return 0;
}
对于这段代码,我收到了 32、64 和 64 以及 -m32 编译器的警告:
warning: left shift count >= width of type [enabled by default]
但是当我试图从assebmly code 编译它时:
.quad (((0) & (0x00000000)) << (32))
我收到了仅针对 32 bit 编译器的警告:
Warning: shift count out of range (32 is not between 0 and 31)
为什么从c 和asm 文件编译的相同代码对于不同编译器(32 位和 64 位)的警告不同?
编辑:
我在哪里可以找到.quad 的定义,我的意思是在代码中?
【问题讨论】:
-
嗯,一个来自 C 编译器,另一个来自汇编器,似乎没有必要让错误完全相同,只要它们包含相同的信息。顺便提一句。为什么这被标记为 C++?
-
@PlasmaHH 呃,抱歉我不想在标签中添加
c++...
标签: c gcc assembly compilation