In the Bitcoin Core source code there is a function to check if a given transaction is a coinbase or not:
bool IsCoinBase() const
{
return (vin.size() == 1 && vin[0].prevout.IsNull());
}
Does it really need to check if vin.size() is equal to 1? Isn't vin[0].prevout.IsNull() a sufficient condition for a transaction to be a coinbase?
Is there any situation that the later condition is true but we have more than one input?
The only reason I can guess is to avoid run-time error when vin is empty (so there is no vin[0]).