程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了格式化 C++ 代码时汇编器和十六进制转储发生变化大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_197_0@如何解决格式化 C++ 代码时汇编器和十六进制转储发生变化? 开发过程中遇到格式化 C++ 代码时汇编器和十六进制转储发生变化的问题如何解决?下面主要结合日常开发的经验,给出你关于格式化 C++ 代码时汇编器和十六进制转储发生变化的解决方法建议,希望对你解决格式化 C++ 代码时汇编器和十六进制转储发生变化有所启发或帮助;

我从事的一个 C++ 项目没有一致的缩进。首席开发人员告诉我重新格式化代码可能不安全。我认为编译代码可能无关紧要。作为测试,我尝试使用基于 Eclipse“GNU [内置]”配置文件的格式化程序重新格式化一个文件。当我重新编译文件时,md5sum 发生了变化。我对文件进行了十六进制转储,它显示一个字节发生了变化。我反汇编了目标文件。我还通过调试进行了编译,并获得了源代码行。我使用 diff 获取更改的汇编指令。

来源是这一行

        logErr
        << xmlutils.GetErrormessage() << endl;

以下是显示更改后的程序集的差异输出

     23be:  89 04 24                mov    %eax,(%esp)
     23c1:  e8 fc ff ff ff          call   23c2 <_ZN12RerouteAdapt11WritetofileERKSs+0x64>
     23c6:  e8 fc ff ff ff          call   23c7 <_ZN12RerouteAdapt11WritetofileERKSs+0x69>
-    23cb:  c7 44 24 04 79 01 00    movl   $0x179,0x4(%esp)
+    23cb:  c7 44 24 04 84 01 00    movl   $0x184,0x4(%esp)
     23d2:  00 
     23d3:  89 04 24                mov    %eax,(%esp)
     23d6:  e8 fc ff ff ff          call   23d7 <_ZN12RerouteAdapt11WritetofileERKSs+0x79>

标题的顺序没有因重新格式化而改变。

我知道一些 C/C++,但对汇编知之甚少。我想知道是否有一个简单的解释来解释为什么目标文件会改变。我认为 C++ 编译器(RHel 7 上的 GCC 4.8.2)对格式和空格无动于衷。除此之外,在装配中没有任何区别。

@H_197_0@解决方法

托马斯和蒂姆是对的。更改的值对应于格式化前后的行号。我认为“logErr”只是一个流。原来它是一个使用 __LINE__ 宏的宏。所以行号在程序集中是硬编码的。

#define logErr theTracer().SetFuncName(__func__); theTracer().SetFile(__FILE__); theTracer().SetLine(__LINE__); theTracer().SetError(); theTracer()

感谢您的帮助。

大佬总结

以上是大佬教程为你收集整理的格式化 C++ 代码时汇编器和十六进制转储发生变化全部内容,希望文章能够帮你解决格式化 C++ 代码时汇编器和十六进制转储发生变化所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。