Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix format specifier for printing CAN message ID in CanMsg.h. #198

Merged
merged 1 commit into from
Sep 4, 2023

Conversation

haydenroche5
Copy link
Contributor

Reproducible with an empty sketch:

// my_example.ino

void setup()
{
}

void loop()
{
}

Compiled with:

arduino-cli compile --build-property compiler.cpp.extra_flags='-Wno-unused-parameter -Werror' --fqbn arduino:mbed_nano:nano33ble --log-level trace --verbose --warnings all my_example/my_example.ino

Tail of the output:

In file included from /home/hroche/.arduino15/packages/arduino/hardware/mbed_nano/4.0.4/cores/arduino/api/CanMsgRingbuffer.h:17:0,
                 from /home/hroche/.arduino15/packages/arduino/hardware/mbed_nano/4.0.4/cores/arduino/api/CanMsgRingbuffer.cpp:12:
/home/hroche/.arduino15/packages/arduino/hardware/mbed_nano/4.0.4/cores/arduino/api/CanMsg.h: In member function 'virtual size_t arduino::CanMsg::printTo(arduino::Print&) const':
/home/hroche/.arduino15/packages/arduino/hardware/mbed_nano/4.0.4/cores/arduino/api/CanMsg.h:71:71: error: format '%X' expects argument of type 'unsigned int', but argument 4 has type 'uint32_t {aka long unsigned int}' [-Werror=format=]
     len = snprintf(buf, sizeof(buf), "[%08X] (%d) : ", id, data_length);
                                                        ~~             ^
cc1plus: all warnings being treated as errors


Used platform     Version Path                                                             
arduino:mbed_nano 4.0.4   /home/hroche/.arduino15/packages/arduino/hardware/mbed_nano/4.0.4
Error during build: exit status

Regarding the X format specifier: C standard §7.21.6.1: "The unsigned int
argument is converted to ..." On some platforms (e.g. mbed_nano), uint32_t,
which is what's being printed here, is an unsigned long int, so this code causes
a compiler warning. The fix is to use the format specifiers from §7.8.1,
specifically PRIX32.
Copy link
Contributor

@aentinger aentinger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍 That's a good one, thanks for fixing it @haydenroche5 🚀 .

@aentinger aentinger merged commit 68d3e0d into arduino:master Sep 4, 2023
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants