我正在处理的项目是用C语言编写的,并使用预处理器宏来处理错误.
宏看起来像:
#define logevent(level, msg) \
do {
int _level = level; \
somefunction(_level, msg); \
someotherfunction(_level, msg); \
if (_level >= ERROR) \
__assume(0); \
} while(0)
Run Code Online (Sandbox Code Playgroud)
假设某个函数确实退出(1),如果level> = ERROR,当我们调用logevent(ERROR,"something")时,我们永远不会将它转到if条件; 其中ERROR是定义的常量.问题是,由于if条件基于_level变量而不是级别常量,MSVC似乎无法优化if条件.需要_level变量来停止对级别表达式的多次评估.
某些其他编译器似乎能够优化if,但我想知道这是否是MSVC编译器的限制或者是否有什么我可以启用以使编译器在条件消失时优化这些?