GCC disagrees, without the l,
gcc -Wall -Zomf -DOS2EMX_PLAIN_CHAR -c -O2 wintree.c -o wintree.obj
wintree.c: In function 'TraverseWindows':
wintree.c:150:26: warning: format '%X' expects argument of type 'unsigned int',
but argument 4 has type 'HWND' {aka 'long unsigned int'} [-Wformat=]
150 | sprintf(szLine,"%s%X...%s...%s",szLeader, hwndNext, szTitle, szClass);
| ~^ ~~~~~~~~
| | |
| unsigned int HWND {aka long unsigned int}
| %lX
The warning goes away with %lX.