关于C/C++编译的小小疑问
举个简单的例子
int a = 1 + 2;
那么1+2的计算结果是在运行期得出,还是编译时把3赋给a?
这个问题关系到代码的优化,我希望预处理器能自动帮我算出来。
有没有会反编译的牛人帮看看目标文件里面是
add [ a] 0x01 0x02
还是
mov [ a] 0x03
本人汇编不行。知道的回答一下,谢谢。
[解决办法]
常量表达式是在编译时求值的,比如你这句在VC里会被编译为:
movDWORD PTR _a$[ebp], 3
1+2会被处理为立即数3。
但是要注意的是许多编译器限制整型常量表达式的类型不宽于int,所以出现整型溢出是其值未必是你希望的。
可以参考这里:
整型常量表达式编程准则
[解决办法]
int a = 1 + 2;
004117DE mov dword ptr [a],3