⚠️

【ESP32】MFRC522でordered comparison of pointer with integer zeroエラーの対処法

2025/01/15に公開

概要

ESP32でRFID-RC522モジュールを用いてRFIDタグを読み取る際にMFRC522ライブラリを使用すると思いますが、以下のようなエラーがでる時があります。(この記事を書いている時点の最新バージョンは1.4.11)ordered comparison of pointer with integer zero...というエラーが出ることがあります。

In member function 'MFRC522::StatusCode MFRC522Extended::TCL_Transceive(...)':
.../MFRC522Extended.cpp:824:34: error: ordered comparison of pointer with integer zero ('byte*' {aka 'unsigned char*'} and 'int')
    if (backData && (backLen > 0)) {
                         ~~~~~~~^~
.../MFRC522Extended.cpp:847:42: error: ordered comparison of pointer with integer zero ('byte*' {aka 'unsigned char*'} and 'int')
    if (backData && (backLen > 0)) {
                         ~~~~~~~^~

原因と解決方法を紹介します。

解決方法

とりあえず解決方法を知りたい方​のが多いと思うのでこちらから記載しておきます。
解決方法はエラーが示すファイルの行に(今回であればMFRC522Extended.cppの824と847行目)対象のコードが書かれているのでそこを以下のように修正します。

if (backData && backLen && (*backLen > 0)) {
    ...
}

原因

原因はポインタ型の変数を整数と比較してしまっているためです。
backDataはポインタ型(byte*)でbackLenもポインタ型(byte*) なのに、(backLen > 0) という形で整数リテラル0との大小比較が行われています。
そこで実際に比較したいポインタが指す先の値(*backLen)と比較することで解消します。

Discussion