The variable is created either way. You don't think somehow you used less memory by writing it that way, do you? Like I said, it depends on the compiler, but there are temporary variables generated to hold the results. If you are using a fairly old compiler, or a very basic one, it may be simple and create the variable that otherwise wouldn't be necessary. But in general, that doesn't happen anymore. There are tons of implementation details about whether it does use more memory or not, but unless you're absolutely that starved, there's no reason.
Likely, the problem is your code. Refactor it and make sure it works, and then you can simplify it again.
And no, it won't overflow. Two uint32_t's on the right side will yield a result that is a uint32_t. The cast happens during the assignment of the result to the left hand side. There's no need to use another uint32_t to store the result temporarily.