According to that, there are different versions of printf available and not all of them support 32-bit integers. Unfortunately I don’t know how to tell SDCC which version of printf to use and I don’t know which one it is using by default (you could investigate this yourself). You might need to recompile C:\Program Files (x86)\SDCC\lib\medium\libsdcc.lib to get SDCC to use a version of printf that supports 32-bit integers.
I just figured out that SDCC’s printf does support 32-bit integers by default; to make it work, you just have to add an ‘l’ (lowercase L, for “long”) in front of the format specifier. For example, this code should work: