I think it's probably a good idea to make it very explicit when moving between big and small transaction IDs, hence the including of the word 'big' in variable and function names and the use of a function-like macro (rather than implicit conversion, which C doesn't give me a good way to prevent).
The only way I know of to prevent it is to use a wrapper by-value struct.
... and that's what I get for not finishing the thread before replying.
Anyway, please consider the other point re txid_current() and the user facing xid type.