> This is a plea for some advice on coding style from any of the experts
> on the list. I have written some I2C drivers for use under Windows
> for a project, and whilst they are perfectly functional I feel that my
> coding style could definately be improved. Now, a function should
> preferably have one entry and one exit. However my code looks
> something like the function below. Here I am calling several
> functions that return a boolean to indicate success or failure, and I
> want to exit the calling function if a failure is returned.
>
>
> bool _stdcall X9241Write(unsigned char address, unsigned char
> instruction) { /* Function: X9241Write Arguments:
> address = slave address of device, instruction = instruction byte to
> send to pot Return: True if success, false if fail.
> Description: Generic write command for instructions that required
> no additional data. */
>
> unsigned char fullAddr;
>
> fullAddr = (unsigned char)(X9241_ADDR | (address & 0x0F));
>
> if(!I2CStart())
> return false;
>
> // send slave address
> if(!I2CTransmit(fullAddr))
> return false;
>
> if(!I2CGetAck())
> return false;
>
> // send the MSB
> if(!I2CTransmit(instruction))
> return false;
>
> if(!I2CGetAck())
> return false;
>
> if(!I2CStop())
> return false;
>
> return true;
> }
>
> Now I could nest all the if() statements, but to my mind this would
> become far more confusing than the above, especially with some of the
> longer functions. Or perhaps set a local variable and check it before
> calling each sub function i.e.
>
> bool success;
>
> success = I2CStart();
>
> if(success)
> success = I2CTransmit(fullAddr);
> if(success)
> success = I2CGetAck();
>
> etc, etc...
>
> This would work and I could use one return at the end, but to my mind
> a failure at the top of the function causes unnecessary overhead in in
> checking the success variable multiple times to reach the end of the
> function. I could use a goto and a label at the end of the function,
> but that seems infinitely worse than multiple returns.
>
> Any other suggestions?
>
> Regards
>
> Mike
>
> --
>
http://www.piclist.com hint: To leave the PICList
>
RemoveMEpiclist-unsubscribe-request
TakeThisOuTmitvma.mit.edu
>