小编Map*_*paM的帖子

提示可能的变量值/范围的 C 编译器(GCC 或 Clang)

在下面的代码中,只会进行一次比较,因为编译器知道条件是互斥的,我们将始终bar根据需要输入第二个条件> 32:

int foo(int bar) {
    if (bar <= 64)
        return 1;
    if (bar > 32) {
        printf("Too many elements");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在,想象一下我知道bar的总是高于64。因为系统的输入,配置,或者其他。我怎样才能暗示编译器根本不做比较,就像if (bar <= 64) return编译了一样,除非它实际上没有保存在最终的 ASM 中。

就像是:

int foo(int bar) {
    @precond(bar > 64);
    if (bar > 32) {
        printf("Too many elements");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是我编写 LLVM 通行证的唯一解决方案吗?

c gcc llvm clang

10
推荐指数
1
解决办法
593
查看次数

标签 统计

c ×1

clang ×1

gcc ×1

llvm ×1