PORTING 检查器会标识那些可能依赖于不同编译器中特定实施细则的代码。PORTING.BSWAP.MACRO 检查器会检测那些在不检查字节顺序的情况下使用自定义字节交换宏的情况。为了让 PORTING.BSWAP.MACRO 检查器将代码标记为字节交换宏,宏定义必须包括移位运算符和要移位的位数,可以是:

如果未采用字节顺序保护宏来保护字节交换宏,Klocwork 会报告该问题。

典型的字节交换宏会假设按照整型布局来移动数据,例如通过交换 MSB 和 LSB。在底层芯片的字节顺序性质可能因时间不同而发生变化的环境中(比如在各构建之间),此类操作可能不安全,尤其是被转换的整型读取自永久存储器或其他硬件环境中时。

在本示例中,宏的定义专用于特定的字节顺序体系结构,但定义本身并未得到保护,并可能被不适当地编译到针对相反体系结构所设计的构建中。

在经修复的示例中,宏定义以适当的字节顺序保护进行了保护,并可以针对相反的体系结构定义相应的替代品。