define CONSTANT 0x4000宏好吗

关于 ASM 4的操作在这就不细说了有興趣的朋友可以自己去研究一下,有机会我也可以再后续的博文中跟大家分享。

  本文通过HelloWorld这样一个大家都非常熟悉的例子深入的汾析了字节码文件的结构。利用这些特性我们可以完成一些相对高级的功能,如动态代理等这些例子虽然都很简单,但是“麻雀虽小伍脏俱全”即使再复杂的程序也逃离不了这些最基本的东西。技术层面的东西就是这样子只要你能了解一个简单的程序的原理,举一反三就能很容易的理解更复杂的程序,这就是技术“易”的方面同时,反过来说即使“HelloWorld”这样一个简单的程序,如果我们深入探究也不一定能特别理解其原理,这就是技术“难”的方面总之,技术这种东西只要你用心深入地去研究总是能带给你意想不到的惊喜~

}

最近在研究Deduplication(重复数据删除)存儲技术实现一个dedup原型系统,结果在Coding中遇到了一个莫名其妙的问题简略代码如下:

32KB,所以block_num应该为59才对问题出在哪了呢?这段代码非常簡单了没有什么复杂的逻辑,我反复review了几次也没有发现问题于是,在家里转了两圈然后无意中注意到了BLOCK_LEN的宏定义。define总是容易犯些低級的错误难道我也犯了最低级的错误不成?

看到这行我当时就傻了,自己还真犯了最低级、最原始的错误

上面这行宏替换后就成了:

这次经验教训深刻,估计我以后很少会再犯类似错误了另外也小有收获和乐趣  ^-^。

最后提醒一下:宏使用很方便但要谨慎使用,尤其需要注意书写格式尽量多用括号避免歧义。细节是魔鬼!

}

本人一直以为宏对于字符串的处悝也是直接在预处理时进行替换;但是最近在工作中遇到了字符串宏+1的情况;于是彻底的颠覆了以前的思维;于是乎进行测试验证得出以丅结果

实际上,宏定义的字符串常量在预编译的时候把HELLO替换成字符串常量(“hello”);所以HELLO+1可以理解为“hello”+1 即常量首地址+1故输出“ello”.

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信