当使用 uin64_t 与 -m32 和 Unity 测试框架混合使用时,GCC -Wall 显示 'unused parameter' 警告

GCC -Wall displays 'unused parameter' warning when using uin64_t mixed with -m32 and Unity testing framework

我正在为目标平台为 32 位机器的软件实现一些单元测试(使用 Unity,在我的 Linux 64 位中)。

我添加了标志 -m32 以停止获取 'mixing' 32 位和 64 位指针的警告。问题是现在我收到警告:

warning: unused variable 
warning: unused parameter

我得到这个错误的代码是

static void checker1(uint8_t *addr,
                     uint64_t *data,
                     uint8_t b0,
                     uint8_t b1,
                     uint8_t d)
{
  const uint32_t reg_addr_expec[] = {0};
  const uint64_t reg_data_expec[] = {0xffffffef};

  TEST_ASSERT_EQUAL_HEX(reg_addr_expec[0], addr[0]);
  TEST_ASSERT_EQUAL_HEX64(reg_data_expec[0], data[0]);
  TEST_ASSERT_EQUAL_UINT(1, b0);
  TEST_ASSERT_EQUAL_UINT(0, b1);
  TEST_ASSERT_EQUAL_UINT(0, d);
}

我只有在启用 -m32 时才会收到这些警告。我不知道怎么会这样。有什么想法吗?

编辑

我观察到我只收到这些带有 uint64_t 值或 uint32_t 值但使用 TEST_ASSERT_EQUAL_HEX64 的警告。好像和类型uint64_t有关。 uint64_t-m32不能混合使用gcc的问题(arm-gcc没有这个问题)?

根据 Unity 文档,必须手动启用对 64 位功能的支持,除非 Unity 可以自动检测 64 位配置。

这是我在添加 -m32 标志之前的情况,但现在我已经添加了它,Unity 默认情况下不启用 64 位功能。

问题已通过在 gcc 命令中添加以下行解决:

-DUNITY_SUPPORT_64