You will indeed have to check the CCR through inline assembler, there is no obvious way to check for overflow in C.
I suppose you could do like this:
#include <limits.h>
uint16 a;
uint16 b;
uint32 a32 = a;
uint32 b32 = b;
uint32 result = a32 * b32;
if(result > UINT_MAX)
{
/* a*b will give overflow */
}
Though the assembler version will be way more efficient.