如何将范围信息传递给C++编译器?

Jos*_*vin 5 c++ optimization range compile-time

是否有任何方法可以向编译器表明您知道特定变量的值必须在代码中的某个特定范围内,以帮助编译器进行优化?我正在编写一个库,可以在编译时知道一些变量的范围,如果它能以某种方式将这些信息传递给编译器,那么编译器就可以使用它进行优化,这将是非常好的.我想为任何能够工作的编译器添加支持,即使它不能用于所有编译器(听起来像某些编译器可以作为扩展的东西,但我没有发现任何).我知道我可以这样写:

if(x < COMPILE_TIME_MIN or x > COMPILE_TIME_MAX)
    return;
// compiler will assume for code below that x is in range COMPILE_TIME_MIN..COMPILE_TIME_MAX
Run Code Online (Sandbox Code Playgroud)

但那是运行时检查.也许有一些技巧让编译器在没有这种检查的情况下对范围做出假设?

Jam*_*lis 6

任何这样的"提示"都是特定于编译器的.

作为一个例子,视觉C++允许你提供这样使用提示__assume固有.

(其他编译器也可能提供此类内在函数,但我不熟悉其他编译器以提供任何进一步的信息.如果您感兴趣,请查阅编译器的文档.)

  • 从我自己的谷歌搜索,gcc 4.5及以上版本也可以使用相同的语法传递这些信息`#define __assume(cond)do {if(!(cond))__ builtin_unreachable(); } while(0)` (3认同)