我有一些类似于以下实现的用于在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/