Ceedling (= Unity と Cmock) でテストしている組み込みシステム プロジェクトがあります。
1 つのテスト ケースでは、テスト対象のコードは非常に単純です。
uint32_t zero = eeprom_read_dword((uint32_t*)&non_volatile_zero);
sprintf(output, "%lu", zero);
組み込みシステムは 8 ビット アーキテクチャで%lu
あるため、印刷用に 32 ビットの unsigned int をフォーマットするために sprintf で使用する必要があります。ただし、テスト ビルドとテストの実行にはデスクトップ環境 (GCC) が使用されます (テストに組み込みビルドを使用するオプションはありません)。これにより、次の警告が発生します。
warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘uint32_t’ {aka ‘unsigned int’} [-Wformat=]
62 sprintf(output, "%lu", zero);
~~^ ~~~~
| |
| uint32_t {aka unsigned int}
long unsigned int
%u
警告自体はデスクトップ環境では正しいですが、組み込みシステムの観点からは誤検知です。
私の質問は、デフォルトの GCC が使用されているため、project.yml で tools-section をまったく定義していないため、テスト ビルドに -Wno-format コンパイラ フラグを設定する方法です。それとも、ターゲット システムが 8 ビット アーキテクチャを使用していることを ceedling に伝える方法さえあるのでしょうか?