C 不同尾数分支中的代码覆盖率

C 不同尾数分支中的代码覆盖率,c,code-coverage,endianness,C,Code Coverage,Endianness,假设您有如下代码: if (endianness == ENDIAN_LITTLE) { // Do little-endian code here } else { // Do big-endian code here } 关于如何在同一个系统(bit或little-endian)上通过一些单元测试覆盖两个分支,是否有一些好的模式 警告:这可能是未定义的行为(我必须检查我现在懒得做的标准),因为它严重依赖于a)长4字节和b)指针强制转换期间发生的情况。但是,如果编译器没有选择完全优化

假设您有如下代码:

if (endianness == ENDIAN_LITTLE)
{
  // Do little-endian code here
}
else
{
  // Do big-endian code here
}
关于如何在同一个系统(bit或little-endian)上通过一些单元测试覆盖两个分支,是否有一些好的模式


警告:这可能是未定义的行为(我必须检查我现在懒得做的标准),因为它严重依赖于a)长4字节和b)指针强制转换期间发生的情况。但是,如果编译器没有选择完全优化UD,这将实现您期望的功能。如果它能工作,您就可以了,如果它不能工作,可能仍然是由于编译器的行为。

我尝试在一个模块中处理所有的endianness,并使其余代码不知道存在这样的事情。但我的应用程序适合于这一点。如果你已经有一个大型应用程序,上面已经散布了这种代码,那么我现在还没有答案。在读取文件或网络时,只需使用宏作为endianess。那么你就不必在剩下的代码中给出一个猴子。因此,你认为你所质疑的问题并不存在
long some_number;
memcpy(&some_number, "\x01\x23\x45\x67", 4);
check(some_number, 0x1234567, ENDIAN_BIG);
memcpy(&some_number, "\x67\x45\x23\x01", 4);
check(some_number, 0x1234567, ENDIAN_LITTLE);