Anton Erasmus wrote:
On 15 Jan 2008 at 20:05, Weddington, Eric wrote:
<snip>

I have not seen the eeprom.h file, so my comments might be totally inapropriate.
Wouldn't it be better to use static inline functions in stead of macros ? One 
gets
the same advantages of macros, but without many of the dangers of macros.

i.e. In stead of having a macro

#define foo(x)  /* Code here */

have an inline static function in the header file:

static inline void foo(int x)
{
  /* Code here */
}

Because the function is static, no code is generated if it is not used.

In general, I agree with you - static inline functions are often preferable to macros, and are underused by many people. They are type safe, can easily have local variables and multiple statements without horrible "do {} while (0);" constructs, don't need line continuation characters, and so on. However, there are other things you can do with macros, that can't be done with inline functions. I don't know what the new API will look like, but there might be something like this:

static inline void eeStoreByte(uint16_t address, uint8_t data) { ... }
static inline void eeStoreData(uint16_t address, uint8_t *data,
                                        uint16_t count) { ... }
#define eeStoreObject(address, obj) \
        eeStoreData(address, (uint8_t*) &(obj), sizeof(obj))

The eeStoreObject "function" must be written as a macro to get the address-taking and sizeof to work nicely.

Anyway, judging from the predominance of static inline functions (often with the ((always_inline)) attribute), I reckon that Eric will use static inlines where possible!

mvh.,

David


_______________________________________________
AVR-libc-dev mailing list
AVR-libc-dev@nongnu.org
http://lists.nongnu.org/mailman/listinfo/avr-libc-dev

Reply via email to