我有一些类似于以下实现的用于在C中设置GPIO引脚的方法:

void f(int pin) {
    bank[pin/32] = 1 << (pin%32);
}

现在,我知道为函数提供小于0或大于63的值是不确定的行为(bank周围的寄存器被视为垃圾),因此可以将此代码视为等效:
void f(int pin) {
    bank[pin > 31] = 1 << (pin - 32*(pin>31));
}

我对我的体系结构了解不足,无法确定哪种结构将转换为最有效的机器代码,而这只是跨多个平台的许多此类功能示例之一。但是,如果我能以某种方式指示我的编译器假定0
有没有一种方法可以告知编译器在优化过程中可能有益的约束?

最佳答案

您可以将pin设为位域结构:

struct Pin
{
     unsigned int pin : 6; // can hold values up to 64
};

关于c++ - 如何根据输入的约束条件帮助编译器优化程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28007678/

10-12 21:24