gpt4 book ai didi

c - 在 gcc 中如何计算逻辑表达式 2 > -3

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:59 25 4
gpt4 key购买 nike

假设我有这个文件:

[xiaobai@xiaobai done_read]$ cat my_bool.c 
#include <stdio.h>
int
main() {
if (2 > -3) {
printf("true\n" );
}
else {
printf("false\n" );
}
}

[xiaobai@xiaobai done_read]$

用gdb编译调试:

[xiaobai@xiaobai done_read]$ gcc -g3 my_bool.c     
[xiaobai@xiaobai done_read]$ gdb ./a.out
GNU gdb (GDB) Fedora 7.8.2-39.fc21
...
Reading symbols from ./a.out...done.
(gdb) b *main+1
+b *main+1
Breakpoint 1 at 0x400537: file my_bool.c, line 3.
(gdb) r
+r
Starting program: .../a.out

Breakpoint 1, 0x0000000000400537 in main () at my_bool.c:3
3 main() {
(gdb) s
+s
5 printf("true\n" );
(gdb) s
+s
_IO_puts (str=0x4005e0 "true") at ioputs.c:34
34 {
(gdb)

它总是跳过 if (2 > -3) 构造并进入 printf("true\n");

我想了解如果 2 > -3 在二进制级别时 c 的行为,它如何知道 0x2 大于 0xfffffffffffffffd 而 0xffffffffffffffffd 显然大于 0x2。可能是它存储有符号位或其他东西,但它需要检查我系统中的 long long 最大大小 (0x7fffffffffffffff) 才能知道 0xffffffffffffffffd 有一个有符号位?

似乎 gdb 无法做到这一点,那么我如何在汇编/二进制级别调试这种逻辑表达式 (if 2 > -3)?

[更新] 下面是我的 gcc 配置选项,安装在 Fedora 21 中。

[xiaobai@xiaobai note]$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.9.2/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.9.2-20150212/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.9.2-20150212/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.9.2 20150212 (Red Hat 4.9.2-6) (GCC)
[xiaobai@xiaobai note]$

[UPDATE2] 我更改了标题,因为 gdb gcc 是我能想到的调试它的唯一方法。但是,了解 2 > -3 在 gcc 的 fold-constants.c 或其他一些源文件中的执行情况并没有多大帮助。在这种特殊情况下,逻辑操作如何执行/涉及? gcc 如何在执行逻辑运算之前检测符号位?

最佳答案

我认为实际的问题是“我想了解如果 2 > -3 在二进制级别时 c 的行为方式”。要找出这一点,您可以观察编译器创建的机器代码。

根据 http://www.delorie.com/djgpp/v2faq/faq8_20.html,以下命令应以人类可读的形式创建汇编代码:

gcc -S foo.c

要了解 CPU 如何在二进制级别处理每个汇编命令,您应该阅读 CPU 的手册。

关于c - 在 gcc 中如何计算逻辑表达式 2 > -3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33367070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com